arm64: dts: apple: Initial T6030 (M3 Pro) device trees

Minimal device trees for the M3 Pro based 14-inch and 16-inch MacBook
Pro released in November 2023. The M3 Pro is a distinct SoC design and
not a cut down version of the Max variant like for M1 and M2 Pro.
The M3 Pro has only a single cluster with up to 6 performance cores and
one cluster with 6 efficiency cores.
While it no longer shares a common SoC .dtsi the devices itself are
still similar to the ones with M3 Max. It is still useful to share the
basic device composition in t603x-j514-j516.dtsi. For the M3 Pro based
devices additional overrides for diverging pin and irq numbers are
expected.
The device trees have devices nodes for CPU cores, timer, interrupt
controller, power states, watchdog, serial, pin controller, i2c,
PWM based keyboard LED illumination and the boot framebuffer.

Reviewed-by: Sven Peter <sven@kernel.org>
Signed-off-by: Janne Grunau <j@jannau.net>
Signed-off-by: Sven Peter <sven@kernel.org>
This commit is contained in:
Janne Grunau 2026-07-24 20:16:49 +02:00 committed by Sven Peter
parent 67d9574cf8
commit e81af013db
5 changed files with 2007 additions and 0 deletions

View File

@ -87,6 +87,8 @@ dtb-$(CONFIG_ARCH_APPLE) += t6021-j416c.dtb
dtb-$(CONFIG_ARCH_APPLE) += t6020-j474s.dtb
dtb-$(CONFIG_ARCH_APPLE) += t6021-j475c.dtb
dtb-$(CONFIG_ARCH_APPLE) += t6022-j475d.dtb
dtb-$(CONFIG_ARCH_APPLE) += t6030-j514s.dtb
dtb-$(CONFIG_ARCH_APPLE) += t6030-j516s.dtb
dtb-$(CONFIG_ARCH_APPLE) += t6031-j514c.dtb
dtb-$(CONFIG_ARCH_APPLE) += t6031-j516c.dtb
dtb-$(CONFIG_ARCH_APPLE) += t6032-j575d.dtb

View File

@ -0,0 +1,22 @@
// SPDX-License-Identifier: GPL-2.0+ OR MIT
/*
* MacBook Pro (14-inch, M3 Pro, Nov 2023)
*
* target-type: J514s
*
* Copyright The Asahi Linux Contributors
*/
/dts-v1/;
#include "t6030.dtsi"
#include "t603x-j514-j516.dtsi"
/ {
compatible = "apple,j514s", "apple,t6030", "apple,arm-platform";
model = "Apple MacBook Pro (14-inch, M3 Pro, Nov 2023)";
};
&framebuffer0 {
power-domains = <&ps_disp_cpu>;
};

View File

@ -0,0 +1,22 @@
// SPDX-License-Identifier: GPL-2.0+ OR MIT
/*
* MacBook Pro (16-inch, M3 Pro, Nov 2023)
*
* target-type: J516s
*
* Copyright The Asahi Linux Contributors
*/
/dts-v1/;
#include "t6030.dtsi"
#include "t603x-j514-j516.dtsi"
/ {
compatible = "apple,j516s", "apple,t6030", "apple,arm-platform";
model = "Apple MacBook Pro (16-inch, M3 Pro, Nov 2023)";
};
&framebuffer0 {
power-domains = <&ps_disp_cpu>;
};

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,524 @@
// SPDX-License-Identifier: GPL-2.0+ OR MIT
/*
* Apple T6030 "M3 Pro" SoC
*
* Other names: H15J, "Lobos"
*
* Copyright The Asahi Linux Contributors
*/
#include <dt-bindings/interrupt-controller/apple-aic.h>
#include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/pinctrl/apple.h>
/ {
#address-cells = <2>;
#size-cells = <2>;
cpus {
#address-cells = <2>;
#size-cells = <0>;
cpu-map {
cluster0 {
core0 {
cpu = <&cpu_e00>;
};
core1 {
cpu = <&cpu_e01>;
};
core2 {
cpu = <&cpu_e02>;
};
core3 {
cpu = <&cpu_e03>;
};
core4 {
cpu = <&cpu_e04>;
};
core5 {
cpu = <&cpu_e05>;
};
};
cluster1 {
core0 {
cpu = <&cpu_p00>;
};
core1 {
cpu = <&cpu_p01>;
};
core2 {
cpu = <&cpu_p02>;
};
core3 {
cpu = <&cpu_p03>;
};
core4 {
cpu = <&cpu_p04>;
};
core5 {
cpu = <&cpu_p05>;
};
};
};
cpu_e00: cpu@0 {
compatible = "apple,sawtooth";
device_type = "cpu";
reg = <0x0 0x0>;
enable-method = "spin-table";
cpu-release-addr = <0 0>; /* to be filled by loader */
next-level-cache = <&l2_cache_0>;
i-cache-size = <0x20000>;
d-cache-size = <0x10000>;
};
cpu_e01: cpu@1 {
compatible = "apple,sawtooth";
device_type = "cpu";
reg = <0x0 0x1>;
enable-method = "spin-table";
cpu-release-addr = <0 0>; /* to be filled by loader */
next-level-cache = <&l2_cache_0>;
i-cache-size = <0x20000>;
d-cache-size = <0x10000>;
};
cpu_e02: cpu@2 {
compatible = "apple,sawtooth";
device_type = "cpu";
reg = <0x0 0x2>;
enable-method = "spin-table";
cpu-release-addr = <0 0>; /* to be filled by loader */
next-level-cache = <&l2_cache_0>;
i-cache-size = <0x20000>;
d-cache-size = <0x10000>;
};
cpu_e03: cpu@3 {
compatible = "apple,sawtooth";
device_type = "cpu";
reg = <0x0 0x3>;
enable-method = "spin-table";
cpu-release-addr = <0 0>; /* to be filled by loader */
next-level-cache = <&l2_cache_0>;
i-cache-size = <0x20000>;
d-cache-size = <0x10000>;
};
cpu_e04: cpu@4 {
compatible = "apple,sawtooth";
device_type = "cpu";
reg = <0x0 0x4>;
enable-method = "spin-table";
cpu-release-addr = <0 0>; /* to be filled by loader */
next-level-cache = <&l2_cache_0>;
i-cache-size = <0x20000>;
d-cache-size = <0x10000>;
};
cpu_e05: cpu@5 {
compatible = "apple,sawtooth";
device_type = "cpu";
reg = <0x0 0x5>;
enable-method = "spin-table";
cpu-release-addr = <0 0>; /* to be filled by loader */
next-level-cache = <&l2_cache_0>;
i-cache-size = <0x20000>;
d-cache-size = <0x10000>;
};
cpu_p00: cpu@10100 {
compatible = "apple,everest";
device_type = "cpu";
reg = <0x0 0x10100>;
enable-method = "spin-table";
cpu-release-addr = <0 0>; /* To be filled by loader */
next-level-cache = <&l2_cache_1>;
i-cache-size = <0x30000>;
d-cache-size = <0x20000>;
};
cpu_p01: cpu@10101 {
compatible = "apple,everest";
device_type = "cpu";
reg = <0x0 0x10101>;
enable-method = "spin-table";
cpu-release-addr = <0 0>; /* To be filled by loader */
next-level-cache = <&l2_cache_1>;
i-cache-size = <0x30000>;
d-cache-size = <0x20000>;
};
cpu_p02: cpu@10102 {
compatible = "apple,everest";
device_type = "cpu";
reg = <0x0 0x10102>;
enable-method = "spin-table";
cpu-release-addr = <0 0>; /* To be filled by loader */
next-level-cache = <&l2_cache_1>;
i-cache-size = <0x30000>;
d-cache-size = <0x20000>;
};
cpu_p03: cpu@10103 {
compatible = "apple,everest";
device_type = "cpu";
reg = <0x0 0x10103>;
enable-method = "spin-table";
cpu-release-addr = <0 0>; /* To be filled by loader */
next-level-cache = <&l2_cache_1>;
i-cache-size = <0x30000>;
d-cache-size = <0x20000>;
};
cpu_p04: cpu@10104 {
compatible = "apple,everest";
device_type = "cpu";
reg = <0x0 0x10104>;
enable-method = "spin-table";
cpu-release-addr = <0 0>; /* To be filled by loader */
next-level-cache = <&l2_cache_1>;
i-cache-size = <0x30000>;
d-cache-size = <0x20000>;
};
cpu_p05: cpu@10105 {
compatible = "apple,everest";
device_type = "cpu";
reg = <0x0 0x10105>;
enable-method = "spin-table";
cpu-release-addr = <0 0>; /* To be filled by loader */
next-level-cache = <&l2_cache_1>;
i-cache-size = <0x30000>;
d-cache-size = <0x20000>;
};
l2_cache_0: l2-cache-0 {
compatible = "cache";
cache-level = <2>;
cache-unified;
cache-size = <0x400000>;
};
l2_cache_1: l2-cache-1 {
compatible = "cache";
cache-level = <2>;
cache-unified;
cache-size = <0x1000000>;
};
};
timer {
compatible = "arm,armv8-timer";
interrupt-parent = <&aic>;
interrupt-names = "phys", "virt", "hyp-phys", "hyp-virt";
interrupts = <AIC_FIQ AIC_TMR_GUEST_PHYS IRQ_TYPE_LEVEL_HIGH>,
<AIC_FIQ AIC_TMR_GUEST_VIRT IRQ_TYPE_LEVEL_HIGH>,
<AIC_FIQ AIC_TMR_HV_PHYS IRQ_TYPE_LEVEL_HIGH>,
<AIC_FIQ AIC_TMR_HV_VIRT IRQ_TYPE_LEVEL_HIGH>;
};
clkref: clock-ref {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <24000000>;
clock-output-names = "clkref";
};
reserved-memory {
#address-cells = <2>;
#size-cells = <2>;
ranges;
};
soc: soc {
compatible = "simple-bus";
#address-cells = <2>;
#size-cells = <2>;
ranges;
nonposted-mmio;
/* Required to get >32-bit DMA via DARTs */
dma-ranges = <0 0 0 0 0xffffffff 0xffffc000>;
i2c1: i2c@289014000 {
compatible = "apple,t6030-i2c", "apple,t8103-i2c";
reg = <0x2 0x89014000 0x0 0x4000>;
clocks = <&clkref>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ 890 IRQ_TYPE_LEVEL_HIGH>;
pinctrl-0 = <&i2c1_pins>;
pinctrl-names = "default";
#address-cells = <0x1>;
#size-cells = <0x0>;
power-domains = <&ps_i2c1>;
status = "disabled";
};
i2c2: i2c@289018000 {
compatible = "apple,t6030-i2c", "apple,t8103-i2c";
reg = <0x2 0x89018000 0x0 0x4000>;
clocks = <&clkref>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ 891 IRQ_TYPE_LEVEL_HIGH>;
pinctrl-0 = <&i2c2_pins>;
pinctrl-names = "default";
#address-cells = <0x1>;
#size-cells = <0x0>;
power-domains = <&ps_i2c2>;
status = "disabled";
};
i2c3: i2c@28901c000 {
compatible = "apple,t6030-i2c", "apple,t8103-i2c";
reg = <0x2 0x8901c000 0x0 0x4000>;
clocks = <&clkref>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ 892 IRQ_TYPE_LEVEL_HIGH>;
pinctrl-0 = <&i2c3_pins>;
pinctrl-names = "default";
#address-cells = <0x1>;
#size-cells = <0x0>;
power-domains = <&ps_i2c3>;
status = "disabled";
};
i2c4: i2c@289020000 {
compatible = "apple,t6030-i2c", "apple,t8103-i2c";
reg = <0x2 0x89020000 0x0 0x4000>;
clocks = <&clkref>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ 893 IRQ_TYPE_LEVEL_HIGH>;
pinctrl-0 = <&i2c4_pins>;
pinctrl-names = "default";
#address-cells = <0x1>;
#size-cells = <0x0>;
power-domains = <&ps_i2c4>;
status = "disabled";
};
i2c6: i2c@289028000 {
compatible = "apple,t6030-i2c", "apple,t8103-i2c";
reg = <0x2 0x89028000 0x0 0x4000>;
clocks = <&clkref>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ 895 IRQ_TYPE_LEVEL_HIGH>;
pinctrl-0 = <&i2c6_pins>;
pinctrl-names = "default";
#address-cells = <0x1>;
#size-cells = <0x0>;
power-domains = <&ps_i2c6>;
status = "disabled";
};
i2c8: i2c@289030000 {
compatible = "apple,t6030-i2c", "apple,t8103-i2c";
reg = <0x2 0x89030000 0x0 0x4000>;
clocks = <&clkref>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ 897 IRQ_TYPE_LEVEL_HIGH>;
pinctrl-0 = <&i2c8_pins>;
pinctrl-names = "default";
#address-cells = <0x1>;
#size-cells = <0x0>;
power-domains = <&ps_i2c8>;
status = "disabled";
};
fpwm0: pwm@289040000 {
compatible = "apple,t6030-fpwm", "apple,s5l-fpwm";
reg = <0x2 0x89040000 0x0 0x4000>;
power-domains = <&ps_fpwm0>;
clocks = <&clkref>;
#pwm-cells = <2>;
status = "disabled";
};
serial0: serial@289200000 {
compatible = "apple,s5l-uart";
reg = <0x2 0x89200000 0x0 0x1000>;
reg-io-width = <4>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ 866 IRQ_TYPE_LEVEL_HIGH>;
/*
* TODO: figure out the clocking properly, there may
* be a third selectable clock.
*/
clocks = <&clkref>, <&clkref>;
clock-names = "uart", "clk_uart_baud0";
power-domains = <&ps_uart0>;
status = "disabled";
};
pmgr_gfx: power-management@290e80000 {
compatible = "apple,t6030-pmgr", "apple,t8103-pmgr", "syscon", "simple-mfd";
#address-cells = <1>;
#size-cells = <1>;
reg = <0x2 0x90e80000 0 0x4000>;
/* child nodes are added in t6030-pmgr.dtsi */
};
pinctrl_ap: pinctrl@347100000 {
compatible = "apple,t6030-pinctrl", "apple,t8103-pinctrl";
reg = <0x3 0x47100000 0x0 0x4000>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ 273 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ 274 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ 275 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ 276 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ 277 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ 278 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ 279 IRQ_TYPE_LEVEL_HIGH>;
power-domains = <&ps_gpio>;
gpio-controller;
#gpio-cells = <2>;
gpio-ranges = <&pinctrl_ap 0 0 224>;
apple,npins = <224>;
interrupt-controller;
#interrupt-cells = <2>;
i2c1_pins: i2c1-pins {
pinmux = <APPLE_PINMUX(37, 1)>,
<APPLE_PINMUX(36, 1)>;
};
i2c2_pins: i2c2-pins {
pinmux = <APPLE_PINMUX(43, 1)>,
<APPLE_PINMUX(42, 1)>;
};
i2c3_pins: i2c3-pins {
pinmux = <APPLE_PINMUX(41, 1)>,
<APPLE_PINMUX(40, 1)>;
};
i2c4_pins: i2c4-pins {
pinmux = <APPLE_PINMUX(39, 1)>,
<APPLE_PINMUX(38, 1)>;
};
i2c6_pins: i2c6-pins {
pinmux = <APPLE_PINMUX(47, 1)>,
<APPLE_PINMUX(46, 1)>;
};
i2c8_pins: i2c8-pins {
pinmux = <APPLE_PINMUX(51, 1)>,
<APPLE_PINMUX(50, 1)>;
};
};
pmgr: power-management@350700000 {
compatible = "apple,t6030-pmgr", "apple,t8103-pmgr", "syscon", "simple-mfd";
#address-cells = <1>;
#size-cells = <1>;
reg = <0x3 0x50700000 0 0x14000>;
/* child nodes are added in t6030-pmgr.dtsi */
};
aic: interrupt-controller@351000000 {
compatible = "apple,t6030-aic3", "apple,t8122-aic3";
#interrupt-cells = <3>;
interrupt-controller;
reg = <0x3 0x51000000 0x0 0x184000>,
<0x3 0x51040000 0x0 0x4000>;
reg-names = "core", "event";
power-domains = <&ps_aic>;
};
pinctrl_nub: pinctrl@3641f0000 {
compatible = "apple,t6030-pinctrl", "apple,t8103-pinctrl";
reg = <0x3 0x641f0000 0x0 0x4000>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ 472 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ 473 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ 474 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ 475 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ 476 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ 477 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ 478 IRQ_TYPE_LEVEL_HIGH>;
gpio-controller;
#gpio-cells = <2>;
gpio-ranges = <&pinctrl_nub 0 0 37>;
apple,npins = <37>;
interrupt-controller;
#interrupt-cells = <2>;
};
pmgr_mini: power-management@364280000 {
compatible = "apple,t6030-pmgr", "apple,t8103-pmgr", "syscon", "simple-mfd";
#address-cells = <1>;
#size-cells = <1>;
reg = <0x3 0x64280000 0 0x4000>;
/* child nodes are added in t6030-pmgr.dtsi */
};
wdt: watchdog@3642b0000 {
compatible = "apple,t6030-wdt", "apple,t8103-wdt";
reg = <0x3 0x642b0000 0x0 0x4000>;
clocks = <&clkref>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ 480 IRQ_TYPE_LEVEL_HIGH>;
};
pinctrl_smc: pinctrl@36c820000 {
compatible = "apple,t6030-pinctrl", "apple,t8103-pinctrl";
reg = <0x3 0x6c820000 0x0 0x4000>;
gpio-controller;
#gpio-cells = <2>;
gpio-ranges = <&pinctrl_smc 0 0 18>;
apple,npins = <18>;
interrupt-controller;
#interrupt-cells = <2>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ 545 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ 546 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ 547 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ 548 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ 549 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ 550 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ 551 IRQ_TYPE_LEVEL_HIGH>;
};
pinctrl_aop: pinctrl@374824000 {
compatible = "apple,t6030-pinctrl", "apple,t8103-pinctrl";
reg = <0x3 0x74824000 0x0 0x4000>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ 394 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ 395 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ 396 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ 397 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ 398 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ 399 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ 400 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&clkref>;
gpio-controller;
#gpio-cells = <2>;
gpio-ranges = <&pinctrl_aop 0 0 54>;
apple,npins = <54>;
interrupt-controller;
#interrupt-cells = <2>;
};
};
};
#include "t6030-pmgr.dtsi"