From 1328b63c2af3e61f90b45b8edf4fe4e52bb6e890 Mon Sep 17 00:00:00 2001 From: DjDeveloperr Date: Thu, 12 Nov 2026 06:02:21 -0500 Subject: [PATCH 1/4] arm64: dts: apple: t8112: give the ProRes and SCDC DARTs their power domains The M2 ProRes engine (m2_apr) and its SCDC coprocessor (m2_scdc) name ps_scodec, but their three DARTs (m2_dart_apr_0, m2_dart_apr_1 and m2_dart_scdc) name no power domain. A DART probes as a device of its own, so once these nodes are enabled the probe's first register read lands on an unpowered block, takes an SError and panics the boot in apple_dart_readl, as the T8132 scaler and JPEG DARTs did. The J413 device tree (macOS 27.2.1) gives dart-apr (both of its windows, 0x27d028000 and 0x27d024000) and dart-scdc no clock-gates of their own; their engines, apr and scdc, gate SCODEC. macOS powers these DARTs with their engines, so give each one the engines' domain, as the T602x ProRes and SCDC DARTs have. The nodes stay disabled, so no current boot changes. Fixes: 168d61474073 ("arm64: dts: apple: describe disabled T8112 peripheral resources") Signed-off-by: Diljit Singh --- arch/arm64/boot/dts/apple/t8112-peripherals.dtsi | 3 +++ 1 file changed, 3 insertions(+) diff --git a/arch/arm64/boot/dts/apple/t8112-peripherals.dtsi b/arch/arm64/boot/dts/apple/t8112-peripherals.dtsi index f459773471133..e46bdba8bfec8 100644 --- a/arch/arm64/boot/dts/apple/t8112-peripherals.dtsi +++ b/arch/arm64/boot/dts/apple/t8112-peripherals.dtsi @@ -278,6 +278,7 @@ reg = <0x2 0x7d024000 0x0 0x4000>; interrupt-parent = <&aic>; interrupts = ; + power-domains = <&ps_scodec>; #iommu-cells = <1>; status = "disabled"; }; @@ -287,6 +288,7 @@ reg = <0x2 0x7d028000 0x0 0x4000>; interrupt-parent = <&aic>; interrupts = ; + power-domains = <&ps_scodec>; #iommu-cells = <1>; status = "disabled"; }; @@ -296,6 +298,7 @@ reg = <0x2 0x7d02c000 0x0 0x4000>; interrupt-parent = <&aic>; interrupts = ; + power-domains = <&ps_scodec>; #iommu-cells = <1>; status = "disabled"; }; From 4109497418390a00b0be12fea3bb1691c06bc569 Mon Sep 17 00:00:00 2001 From: DjDeveloperr Date: Thu, 12 Nov 2026 06:03:01 -0500 Subject: [PATCH 2/4] arm64: dts: apple: t602x: give the scaler and external DCP DARTs their power domains Two groups of disabled T602x DARTs name the wrong power domain, or none, for their block. A DART probes as a device of its own, so once one is enabled its first register read needs its block powered, or it takes an SError and panics the boot in apple_dart_readl, as the T8132 scaler and JPEG DARTs did. Scaler DARTs. m2_dart_scaler0 names ps_avd_sys, and the M2 Ultra's die 1 copy, m2_dart_scaler2, names ps_spi3, a die 0 SPI controller. Both copy the M2 device trees (macOS 27.2.1) literally, and those entries are wrong there: dart-scaler0 votes AVD-SYS-DART, the vote of the AVD's DART, and dart-scaler2 votes 0xb6 without the die 1 bit, which is die 0's SPI3. The PMGR table has an MSR0-DART vote, parent MSR0, that no node uses, and the second scaler's DARTs (dart-scaler1, dart-scaler3) vote MSR1-DART. The scaler engines vote MSR0 on their own die, and the M1 Pro/Max/Ultra scaler DARTs at the same address already name ps_msr0 and ps_msr0_die1. Name the engine's domain: ps_msr0 on die 0, ps_msr0_die1 on die 1. External DCP DARTs. The J475c's dispext2/dispext3 and the M2 Ultra's dispext2/3/6/7 piodma and DCP DARTs name no domain, while their DCPs name ps_dispextN_cpu0. These DARTs have no clock-gates in the Apple device tree; their DCPs gate DISPEXTn_CPU0. Give each DART its DCP's domain, as the J414c and J416c copies in t6021-display2.dtsi have. All of these nodes stay disabled, so no current boot changes. Fixes: c91d83866f13 ("arm64: dts: apple: describe disabled T602x peripheral resources") Signed-off-by: Diljit Singh --- arch/arm64/boot/dts/apple/t6020-peripherals.dtsi | 2 +- .../boot/dts/apple/t6021-j475c-peripherals.dtsi | 4 ++++ arch/arm64/boot/dts/apple/t6021-peripherals.dtsi | 2 +- arch/arm64/boot/dts/apple/t6022-peripherals.dtsi | 12 ++++++++++-- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/arch/arm64/boot/dts/apple/t6020-peripherals.dtsi b/arch/arm64/boot/dts/apple/t6020-peripherals.dtsi index 9f0547e65bf03..fc54fa8ff8076 100644 --- a/arch/arm64/boot/dts/apple/t6020-peripherals.dtsi +++ b/arch/arm64/boot/dts/apple/t6020-peripherals.dtsi @@ -618,7 +618,7 @@ reg = <0x4 0xb200000 0x0 0x4000>; interrupt-parent = <&aic>; interrupts = ; - power-domains = <&ps_avd_sys>; + power-domains = <&ps_msr0>; #iommu-cells = <1>; status = "disabled"; }; diff --git a/arch/arm64/boot/dts/apple/t6021-j475c-peripherals.dtsi b/arch/arm64/boot/dts/apple/t6021-j475c-peripherals.dtsi index cd4b961328eeb..cdfeab8e3dab7 100644 --- a/arch/arm64/boot/dts/apple/t6021-j475c-peripherals.dtsi +++ b/arch/arm64/boot/dts/apple/t6021-j475c-peripherals.dtsi @@ -8,6 +8,7 @@ reg = <0x4 0x8d304000 0x0 0x4000>; interrupt-parent = <&aic>; interrupts = ; + power-domains = <&ps_dispext2_cpu0>; #iommu-cells = <1>; status = "disabled"; }; @@ -17,6 +18,7 @@ reg = <0x4 0x8d30c000 0x0 0x4000>; interrupt-parent = <&aic>; interrupts = ; + power-domains = <&ps_dispext2_cpu0>; #iommu-cells = <1>; status = "disabled"; }; @@ -72,6 +74,7 @@ reg = <0x5 0xd304000 0x0 0x4000>; interrupt-parent = <&aic>; interrupts = ; + power-domains = <&ps_dispext3_cpu0>; #iommu-cells = <1>; status = "disabled"; }; @@ -81,6 +84,7 @@ reg = <0x5 0xd30c000 0x0 0x4000>; interrupt-parent = <&aic>; interrupts = ; + power-domains = <&ps_dispext3_cpu0>; #iommu-cells = <1>; status = "disabled"; }; diff --git a/arch/arm64/boot/dts/apple/t6021-peripherals.dtsi b/arch/arm64/boot/dts/apple/t6021-peripherals.dtsi index 8ea7aff6e313d..034c264c3ee05 100644 --- a/arch/arm64/boot/dts/apple/t6021-peripherals.dtsi +++ b/arch/arm64/boot/dts/apple/t6021-peripherals.dtsi @@ -796,7 +796,7 @@ reg = <0x4 0xb200000 0x0 0x4000>; interrupt-parent = <&aic>; interrupts = ; - power-domains = <&ps_avd_sys>; + power-domains = <&ps_msr0>; #iommu-cells = <1>; status = "disabled"; }; diff --git a/arch/arm64/boot/dts/apple/t6022-peripherals.dtsi b/arch/arm64/boot/dts/apple/t6022-peripherals.dtsi index f3822ce78279d..c4bcd67f4f849 100644 --- a/arch/arm64/boot/dts/apple/t6022-peripherals.dtsi +++ b/arch/arm64/boot/dts/apple/t6022-peripherals.dtsi @@ -1158,7 +1158,7 @@ reg = <0x4 0xb200000 0x0 0x4000>; interrupt-parent = <&aic>; interrupts = ; - power-domains = <&ps_avd_sys>; + power-domains = <&ps_msr0>; #iommu-cells = <1>; status = "disabled"; }; @@ -1237,6 +1237,7 @@ reg = <0x4 0x8d304000 0x0 0x4000>; interrupt-parent = <&aic>; interrupts = ; + power-domains = <&ps_dispext2_cpu0>; #iommu-cells = <1>; status = "disabled"; }; @@ -1246,6 +1247,7 @@ reg = <0x4 0x8d30c000 0x0 0x4000>; interrupt-parent = <&aic>; interrupts = ; + power-domains = <&ps_dispext2_cpu0>; #iommu-cells = <1>; status = "disabled"; }; @@ -1393,6 +1395,7 @@ reg = <0x5 0xd304000 0x0 0x4000>; interrupt-parent = <&aic>; interrupts = ; + power-domains = <&ps_dispext3_cpu0>; #iommu-cells = <1>; status = "disabled"; }; @@ -1402,6 +1405,7 @@ reg = <0x5 0xd30c000 0x0 0x4000>; interrupt-parent = <&aic>; interrupts = ; + power-domains = <&ps_dispext3_cpu0>; #iommu-cells = <1>; status = "disabled"; }; @@ -1977,7 +1981,7 @@ reg = <0x4 0xb200000 0x0 0x4000>; interrupt-parent = <&aic>; interrupts = ; - power-domains = <&ps_spi3>; + power-domains = <&ps_msr0_die1>; #iommu-cells = <1>; status = "disabled"; }; @@ -2056,6 +2060,7 @@ reg = <0x4 0x8d304000 0x0 0x4000>; interrupt-parent = <&aic>; interrupts = ; + power-domains = <&ps_dispext2_cpu0_die1>; #iommu-cells = <1>; status = "disabled"; }; @@ -2065,6 +2070,7 @@ reg = <0x4 0x8d30c000 0x0 0x4000>; interrupt-parent = <&aic>; interrupts = ; + power-domains = <&ps_dispext2_cpu0_die1>; #iommu-cells = <1>; status = "disabled"; }; @@ -2212,6 +2218,7 @@ reg = <0x5 0xd304000 0x0 0x4000>; interrupt-parent = <&aic>; interrupts = ; + power-domains = <&ps_dispext3_cpu0_die1>; #iommu-cells = <1>; status = "disabled"; }; @@ -2221,6 +2228,7 @@ reg = <0x5 0xd30c000 0x0 0x4000>; interrupt-parent = <&aic>; interrupts = ; + power-domains = <&ps_dispext3_cpu0_die1>; #iommu-cells = <1>; status = "disabled"; }; From fbea73120c4c767b57f32d73d049338670c83535 Mon Sep 17 00:00:00 2001 From: DjDeveloperr Date: Thu, 12 Nov 2026 06:06:19 -0500 Subject: [PATCH 3/4] arm64: dts: apple: t6050: give the AUSS and RSM DARTs their power domains The T6050 AUSS USB block (usb_auss0) names ps_auss and the RSM block names ps_debug_gated, but their DARTs (auss0_dart, rsm_dart) name no power domain. A DART probes as a device of its own, so once one is enabled its first register read lands on an unpowered block, takes an SError and panics the boot in apple_dart_readl, as the T8132 scaler and JPEG DARTs did. The J714s device tree (macOS 27.2.1) gives dart-auss0 and dart-rsm no clock-gates of their own; their engines vote AUSS_V (parent AUSS) and DEBUG_GATED. macOS powers these DARTs with their engines, so give each one its engine's domain. Both domains are disabled until a board enables the block, and the DART then waits for its domain instead of probing on an unpowered block. The nodes stay disabled on every T6050 board, so no current boot changes. Fixes: 7e0f7c773017 ("arm64: dts: apple: stage disabled T6050 peripheral inventories") Signed-off-by: Diljit Singh --- arch/arm64/boot/dts/apple/t6050-peripherals.dtsi | 2 ++ 1 file changed, 2 insertions(+) diff --git a/arch/arm64/boot/dts/apple/t6050-peripherals.dtsi b/arch/arm64/boot/dts/apple/t6050-peripherals.dtsi index 0f81885d8308d..2c7c473ee4255 100644 --- a/arch/arm64/boot/dts/apple/t6050-peripherals.dtsi +++ b/arch/arm64/boot/dts/apple/t6050-peripherals.dtsi @@ -2438,6 +2438,7 @@ compatible = "apple,t6050-dart", "apple,t8110-dart"; reg = <0x2 0x889a0000 0x0 0xc000>; interrupts = ; + power-domains = <&ps_debug_gated>; #iommu-cells = <1>; status = "disabled"; }; @@ -2487,6 +2488,7 @@ compatible = "apple,t6050-dart", "apple,t8110-dart"; reg = <0x3 0x95d60000 0x0 0xc000>; interrupts = ; + power-domains = <&ps_auss>; #iommu-cells = <1>; status = "disabled"; }; From 9af45395326cab50261d25ee099a50c1deed7e18 Mon Sep 17 00:00:00 2001 From: DjDeveloperr Date: Thu, 12 Nov 2026 06:06:19 -0500 Subject: [PATCH 4/4] arm64: dts: apple: t8142: give the scaler DART its power domain The T8142 scaler (scaler0) names ps_msr and ps_msr_ase_core, but its DART, scaler0_dart, names no power domain. A DART probes as a device of its own, so once the scaler is enabled the DART's first register read lands on an unpowered block, takes an SError and panics the boot in apple_dart_readl, as the T8132 scaler and JPEG DARTs did. The J813 and J704 device trees (macOS 27.2.1) give dart-scaler no clock-gates, which is what the node's comment said. That does not leave the DART without a domain: its engine, scaler0, votes MSR-V, parent MSR, and macOS powers the DART with it. Give the DART the engine's domain, ps_msr, as the T8112, T8132 and T8140 scaler DARTs have. The node stays disabled, so no current boot changes. Fixes: 234da6d0efc5 ("arm64: dts: apple: share T8142 die resources with canonical labels") Signed-off-by: Diljit Singh --- arch/arm64/boot/dts/apple/t8142-peripherals.dtsi | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/arch/arm64/boot/dts/apple/t8142-peripherals.dtsi b/arch/arm64/boot/dts/apple/t8142-peripherals.dtsi index 45c77929417c2..da785b6144905 100644 --- a/arch/arm64/boot/dts/apple/t8142-peripherals.dtsi +++ b/arch/arm64/boot/dts/apple/t8142-peripherals.dtsi @@ -153,8 +153,9 @@ compatible = "apple,t8142-dart", "apple,t8110-dart"; reg = <0x3 0x5260000 0x0 0x20000>; interrupts = ; + /* No DART gate in the ADT: powered with its engine. */ + power-domains = <&ps_msr>; #iommu-cells = <1>; - /* A dedicated scaler-DART gate mapping is not published by this ADT. */ status = "disabled"; };