Merge patch series "Initial Apple M3 Pro, Max and Ultra device trees"

Janne Grunau <j@jannau.net> says:

This series adds device trees for Apple silicon devices with M3 Pro, Max
and Ultra SoCs. The M3 generation has fewer devices than their M1 and M2
predecessors. The only non-laptop device is the M3 Ultra Mac Studio. The
Laptops are the known 14 and 16-inch Macbook Pros now with M3 Pro and
M3 Max SoCs. The M3 Max variant with fewer CPU and GPU cores has
additionally only a 384-bit wide memory bus instead of 512-bit of the
full M3 Max. It has a separate identifier (T6034) and so there are six
laptop device trees.
Another difference to M1 and M2 Pro/Max/Ultra is that the M3 Pro is
distinct SoC design and not a smaller M3 Max. For this reason both M3
Max variants and the M3 Ultra will use "apple,t6030" as compatible
prefix. In the M1 and M2 generations Pro, Max and Ultra SoCs shared
"apple,t6000" / "apple,t6020" as common prefix. There is currently no
known difference but M3 Pro and M3 Max are not as closely related as
previously.

This series adds the same level of hardware as the base M3 (T8122) has
in v7.2-rc1. This includes CPU cores, interrupt controller, power
states, watchdog, serial, pin controller, i2c and the boot framebuffer.
This is intended as base so that support for additional hardware can be
added to all M3 based devices at the same time.

Link: https://patch.msgid.link/20260724-apple-t603x-initial-devices-v3-0-bbeba0420603@jannau.net
Signed-off-by: Sven Peter <sven@kernel.org>
This commit is contained in:
Sven Peter 2026-08-01 20:47:44 +02:00
commit 6e890bf644
25 changed files with 5818 additions and 4 deletions

View File

@ -123,6 +123,14 @@ description: |
- Mac Studio (M2 Ultra, 2023)
- Mac Pro (M2 Ultra, 2023)
Devices based on the "M3 Pro", "M3 Max" and "M3 Ultra" SoCs:
- MacBook Pro (14-inch, M3 Pro, 2023)
- MacBook Pro (14-inch, M3 Max, 2023)
- MacBook Pro (16-inch, M3 Pro, 2023)
- MacBook Pro (16-inch, M3 Max, 2023)
- Mac Studio (M3 Ultra, 2025)
The compatible property should follow this format:
compatible = "apple,<targettype>", "apple,<socid>", "apple,arm-platform";
@ -365,6 +373,35 @@ properties:
- const: apple,t6022
- const: apple,arm-platform
- description: Apple M3 Pro SoC based platforms
items:
- enum:
- apple,j514s # MacBook Pro (14-inch, M3 Pro, 2023)
- apple,j516s # MacBook Pro (16-inch, M3 Pro, 2023)
- const: apple,t6030
- const: apple,arm-platform
- description: Apple M3 Max SoC based platforms
oneOf:
- items:
- enum:
- apple,j514c # MacBook Pro (14-inch, M3 Max, 16 cores, 2023)
- apple,j516c # MacBook Pro (16-inch, M3 Max, 16 cores, 2023)
- const: apple,t6031
- const: apple,arm-platform
- items:
- enum:
- apple,j514m # MacBook Pro (14-inch, M3 Max, 14 cores, 2023)
- apple,j516m # MacBook Pro (16-inch, M3 Max, 14 cores, 2023)
- const: apple,t6034
- const: apple,arm-platform
- description: Apple M3 Ultra SoC based platforms
items:
- const: apple,j575d # Mac Studio (M3 Ultra, 2025)
- const: apple,t6032
- const: apple,arm-platform
additionalProperties: true
...

View File

@ -38,6 +38,8 @@ properties:
- items:
- enum:
- apple,t6020-pmgr
- apple,t6030-pmgr
- apple,t6031-pmgr
- apple,t8122-pmgr
- const: apple,t8103-pmgr
- const: syscon

View File

@ -24,6 +24,8 @@ properties:
- items:
- enum:
- apple,t6020-i2c
- apple,t6030-i2c
- apple,t6031-i2c
- apple,t8122-i2c
- const: apple,t8103-i2c
- items:

View File

@ -44,6 +44,7 @@ properties:
- items:
- enum:
- apple,t6030-aic3
- apple,t6031-aic3
- const: apple,t8122-aic3
- const: apple,t8122-aic3
@ -128,16 +129,17 @@ allOf:
compatible:
contains:
enum:
- apple,t8112-aic
- apple,t8122-aic3
- apple,t6000-aic
- apple,t6020-aic
- apple,t6031-aic3
then:
properties:
'#interrupt-cells':
const: 3
const: 4
else:
properties:
'#interrupt-cells':
const: 4
const: 3
examples:
- |

View File

@ -45,6 +45,8 @@ properties:
- items:
- enum:
- apple,t6020-pmgr-pwrstate
- apple,t6030-pmgr-pwrstate
- apple,t6031-pmgr-pwrstate
- apple,t8122-pmgr-pwrstate
- const: apple,t8103-pmgr-pwrstate

View File

@ -21,6 +21,8 @@ properties:
- apple,t8122-fpwm
- apple,t6000-fpwm
- apple,t6020-fpwm
- apple,t6030-fpwm
- apple,t6031-fpwm
- const: apple,s5l-fpwm
reg:

View File

@ -87,6 +87,13 @@ 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
dtb-$(CONFIG_ARCH_APPLE) += t6034-j514m.dtb
dtb-$(CONFIG_ARCH_APPLE) += t6034-j516m.dtb
dtb-$(CONFIG_ARCH_APPLE) += t8112-j413.dtb
dtb-$(CONFIG_ARCH_APPLE) += t8112-j415.dtb
dtb-$(CONFIG_ARCH_APPLE) += t8112-j473.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"

View File

@ -0,0 +1,297 @@
// SPDX-License-Identifier: GPL-2.0+ OR MIT
/*
* Nodes common for T6031, T6032 and T6034 family SoCs (M3 Max/Ultra)
*
* Other names: H15J, H15S, "Palma"
*
* Copyright The Asahi Linux Contributors
*/
/ {
#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>;
};
};
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>;
};
};
cluster2 {
core0 {
cpu = <&cpu_p10>;
};
core1 {
cpu = <&cpu_p11>;
};
core2 {
cpu = <&cpu_p12>;
};
core3 {
cpu = <&cpu_p13>;
};
core4 {
cpu = <&cpu_p14>;
};
core5 {
cpu = <&cpu_p15>;
};
};
};
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_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>;
};
cpu_p10: cpu@10200 {
compatible = "apple,everest";
device_type = "cpu";
reg = <0x0 0x10200>;
enable-method = "spin-table";
cpu-release-addr = <0 0>; /* To be filled by loader */
next-level-cache = <&l2_cache_2>;
i-cache-size = <0x30000>;
d-cache-size = <0x20000>;
};
cpu_p11: cpu@10201 {
compatible = "apple,everest";
device_type = "cpu";
reg = <0x0 0x10201>;
enable-method = "spin-table";
cpu-release-addr = <0 0>; /* To be filled by loader */
next-level-cache = <&l2_cache_2>;
i-cache-size = <0x30000>;
d-cache-size = <0x20000>;
};
cpu_p12: cpu@10202 {
compatible = "apple,everest";
device_type = "cpu";
reg = <0x0 0x10202>;
enable-method = "spin-table";
cpu-release-addr = <0 0>; /* To be filled by loader */
next-level-cache = <&l2_cache_2>;
i-cache-size = <0x30000>;
d-cache-size = <0x20000>;
};
cpu_p13: cpu@10203 {
compatible = "apple,everest";
device_type = "cpu";
reg = <0x0 0x10203>;
enable-method = "spin-table";
cpu-release-addr = <0 0>; /* To be filled by loader */
next-level-cache = <&l2_cache_2>;
i-cache-size = <0x30000>;
d-cache-size = <0x20000>;
};
cpu_p14: cpu@10204 {
compatible = "apple,everest";
device_type = "cpu";
reg = <0x0 0x10204>;
enable-method = "spin-table";
cpu-release-addr = <0 0>; /* To be filled by loader */
next-level-cache = <&l2_cache_2>;
i-cache-size = <0x30000>;
d-cache-size = <0x20000>;
};
cpu_p15: cpu@10205 {
compatible = "apple,everest";
device_type = "cpu";
reg = <0x0 0x10205>;
enable-method = "spin-table";
cpu-release-addr = <0 0>; /* To be filled by loader */
next-level-cache = <&l2_cache_2>;
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>;
};
l2_cache_2: l2-cache-2 {
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 0 AIC_TMR_GUEST_PHYS IRQ_TYPE_LEVEL_HIGH>,
<AIC_FIQ 0 AIC_TMR_GUEST_VIRT IRQ_TYPE_LEVEL_HIGH>,
<AIC_FIQ 0 AIC_TMR_HV_PHYS IRQ_TYPE_LEVEL_HIGH>,
<AIC_FIQ 0 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;
};
};

View File

@ -0,0 +1,197 @@
// SPDX-License-Identifier: GPL-2.0+ OR MIT
/*
* Devices used on die 0 on the Apple T6032 "M3 Ultra" SoC and present on
* Apple T6030 ("M3 Pro") and T6031 / T6034 ("M3 Max").
*
* Copyright The Asahi Linux Contributors
*/
aic: interrupt-controller@292400000 {
compatible = "apple,t6031-aic3", "apple,t8122-aic3";
#interrupt-cells = <4>;
interrupt-controller;
reg = <0x00000002 0x92400000 0x00000000 0x1cc000>,
<0x00000002 0x92440000 0x00000000 0x4000>;
reg-names = "core", "event";
power-domains = <&ps_aic>;
};
wdt: watchdog@2a02d4000 {
compatible = "apple,t6031-wdt", "apple,t8103-wdt";
reg = <0x2 0xa02d4000 0x0 0x4000>;
clocks = <&clkref>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ 0 718 IRQ_TYPE_LEVEL_HIGH>;
};
pinctrl_smc: pinctrl@2a4820000 {
compatible = "apple,t6031-pinctrl", "apple,t8103-pinctrl";
reg = <0x2 0xa4820000 0x0 0x4000>;
gpio-controller;
#gpio-cells = <2>;
gpio-ranges = <&pinctrl_smc 0 0 30>;
apple,npins = <30>;
interrupt-controller;
#interrupt-cells = <2>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ 0 904 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ 0 905 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ 0 906 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ 0 907 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ 0 908 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ 0 909 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ 0 910 IRQ_TYPE_LEVEL_HIGH>;
};
i2c0: i2c@391010000 {
compatible = "apple,t6031-i2c", "apple,t8103-i2c";
reg = <0x3 0x91010000 0x0 0x4000>;
clocks = <&clkref>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ 0 1326 IRQ_TYPE_LEVEL_HIGH>;
pinctrl-0 = <&i2c0_pins>;
pinctrl-names = "default";
power-domains = <&ps_i2c0>;
#address-cells = <0x1>;
#size-cells = <0x0>;
};
i2c1: i2c@391014000 {
compatible = "apple,t6031-i2c", "apple,t8103-i2c";
reg = <0x3 0x91014000 0x0 0x4000>;
clocks = <&clkref>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ 0 1327 IRQ_TYPE_LEVEL_HIGH>;
pinctrl-0 = <&i2c1_pins>;
pinctrl-names = "default";
power-domains = <&ps_i2c1>;
#address-cells = <0x1>;
#size-cells = <0x0>;
status = "disabled";
};
i2c2: i2c@391018000 {
compatible = "apple,t6031-i2c", "apple,t8103-i2c";
reg = <0x3 0x91018000 0x0 0x4000>;
clocks = <&clkref>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ 0 1328 IRQ_TYPE_LEVEL_HIGH>;
pinctrl-0 = <&i2c2_pins>;
pinctrl-names = "default";
power-domains = <&ps_i2c2>;
#address-cells = <0x1>;
#size-cells = <0x0>;
status = "disabled";
};
i2c3: i2c@39101c000 {
compatible = "apple,t6031-i2c", "apple,t8103-i2c";
reg = <0x3 0x9101c000 0x0 0x4000>;
clocks = <&clkref>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ 0 1329 IRQ_TYPE_LEVEL_HIGH>;
pinctrl-0 = <&i2c3_pins>;
pinctrl-names = "default";
power-domains = <&ps_i2c3>;
#address-cells = <0x1>;
#size-cells = <0x0>;
status = "disabled";
};
i2c4: i2c@391020000 {
compatible = "apple,t6031-i2c", "apple,t8103-i2c";
reg = <0x3 0x91020000 0x0 0x4000>;
clocks = <&clkref>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ 0 1330 IRQ_TYPE_LEVEL_HIGH>;
pinctrl-0 = <&i2c4_pins>;
pinctrl-names = "default";
power-domains = <&ps_i2c4>;
#address-cells = <0x1>;
#size-cells = <0x0>;
status = "disabled";
};
i2c5: i2c@391024000 {
compatible = "apple,t6031-i2c", "apple,t8103-i2c";
reg = <0x3 0x91024000 0x0 0x4000>;
clocks = <&clkref>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ 0 1331 IRQ_TYPE_LEVEL_HIGH>;
pinctrl-0 = <&i2c5_pins>;
pinctrl-names = "default";
power-domains = <&ps_i2c5>;
#address-cells = <0x1>;
#size-cells = <0x0>;
status = "disabled";
};
i2c6: i2c@391028000 {
compatible = "apple,t6031-i2c", "apple,t8103-i2c";
reg = <0x3 0x91028000 0x0 0x4000>;
clocks = <&clkref>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ 0 1332 IRQ_TYPE_LEVEL_HIGH>;
pinctrl-0 = <&i2c6_pins>;
pinctrl-names = "default";
power-domains = <&ps_i2c6>;
#address-cells = <0x1>;
#size-cells = <0x0>;
status = "disabled";
};
i2c7: i2c@39102c000 {
compatible = "apple,t6031-i2c", "apple,t8103-i2c";
reg = <0x3 0x9102c000 0x0 0x4000>;
clocks = <&clkref>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ 0 1333 IRQ_TYPE_LEVEL_HIGH>;
pinctrl-0 = <&i2c7_pins>;
pinctrl-names = "default";
power-domains = <&ps_i2c7>;
#address-cells = <0x1>;
#size-cells = <0x0>;
status = "disabled";
};
i2c8: i2c@391030000 {
compatible = "apple,t6031-i2c", "apple,t8103-i2c";
reg = <0x3 0x91030000 0x0 0x4000>;
clocks = <&clkref>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ 0 1334 IRQ_TYPE_LEVEL_HIGH>;
pinctrl-0 = <&i2c8_pins>;
pinctrl-names = "default";
power-domains = <&ps_i2c8>;
#address-cells = <0x1>;
#size-cells = <0x0>;
status = "disabled";
};
fpwm0: pwm@391040000 {
compatible = "apple,t6031-fpwm", "apple,s5l-fpwm";
reg = <0x3 0x91040000 0x0 0x4000>;
power-domains = <&ps_fpwm0>;
clocks = <&clkref>;
#pwm-cells = <2>;
status = "disabled";
};
serial0: serial@391200000 {
compatible = "apple,s5l-uart";
reg = <0x3 0x91200000 0x0 0x4000>;
reg-io-width = <4>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ 0 1303 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";
};

View File

@ -0,0 +1,107 @@
// SPDX-License-Identifier: GPL-2.0+ OR MIT
/*
* Nodes present on both dies of T6032 (M3 Ultra) and present on T6031 / T6034
* (M3 Max).
*
* Copyright The Asahi Linux Contributors
*/
DIE_NODE(pmgr): power-management@292280000 {
compatible = "apple,t6031-pmgr", "apple,t8103-pmgr", "syscon", "simple-mfd";
#address-cells = <1>;
#size-cells = <1>;
reg = <0x2 0x92280000 0 0xc000>;
};
DIE_NODE(pmgr1): power-management@292800000 {
compatible = "apple,t6031-pmgr", "apple,t8103-pmgr", "syscon", "simple-mfd";
#address-cells = <1>;
#size-cells = <1>;
reg = <0x2 0x92800000 0 0x4000>;
};
DIE_NODE(pinctrl_nub): pinctrl@2a01f0000 {
compatible = "apple,t6031-pinctrl", "apple,t8103-pinctrl";
reg = <0x2 0xa01f0000 0x0 0x4000>;
power-domains = <&DIE_NODE(ps_nub_gpio)>;
gpio-controller;
#gpio-cells = <2>;
gpio-ranges = <&DIE_NODE(pinctrl_nub) 0 0 59>;
apple,npins = <59>;
interrupt-controller;
#interrupt-cells = <2>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ DIE_NO 710 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ DIE_NO 711 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ DIE_NO 712 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ DIE_NO 713 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ DIE_NO 714 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ DIE_NO 715 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ DIE_NO 716 IRQ_TYPE_LEVEL_HIGH>;
};
DIE_NODE(pmgr_mini): power-management@2a0280000 {
compatible = "apple,t6031-pmgr", "apple,t8103-pmgr", "syscon", "simple-mfd";
#address-cells = <1>;
#size-cells = <1>;
reg = <0x2 0xa0280000 0 0x4000>;
};
DIE_NODE(pinctrl_aop): pinctrl@2a8824000 {
compatible = "apple,t6031-pinctrl", "apple,t8103-pinctrl";
reg = <0x2 0xa8824000 0x0 0x4000>;
gpio-controller;
#gpio-cells = <2>;
gpio-ranges = <&DIE_NODE(pinctrl_aop) 0 0 102>;
apple,npins = <102>;
interrupt-controller;
#interrupt-cells = <2>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ DIE_NO 595 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ DIE_NO 596 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ DIE_NO 597 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ DIE_NO 598 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ DIE_NO 599 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ DIE_NO 600 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ DIE_NO 601 IRQ_TYPE_LEVEL_HIGH>;
};
DIE_NODE(pinctrl_ap): pinctrl@2b3000000 {
compatible = "apple,t6031-pinctrl", "apple,t8103-pinctrl";
reg = <0x2 0xb3000000 0x0 0x4000>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ DIE_NO 458 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ DIE_NO 459 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ DIE_NO 460 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ DIE_NO 461 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ DIE_NO 462 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ DIE_NO 463 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ DIE_NO 464 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&clkref>;
power-domains = <&DIE_NODE(ps_gpio)>;
gpio-controller;
#gpio-cells = <2>;
gpio-ranges = <&DIE_NODE(pinctrl_ap) 0 0 200>;
apple,npins = <200>;
interrupt-controller;
#interrupt-cells = <2>;
};
DIE_NODE(pmgr_gfx): power-management@408e80000 {
compatible = "apple,t6031-pmgr", "apple,t8103-pmgr", "syscon", "simple-mfd";
#address-cells = <1>;
#size-cells = <1>;
reg = <0x4 0x8e80000 0 0x4000>;
};

View File

@ -0,0 +1,53 @@
// SPDX-License-Identifier: GPL-2.0+ OR MIT
/*
* GPIO pin mappings for Apple T6031/T6032/T6034 SoCs.
*
* Copyright The Asahi Linux Contributors
*/
&pinctrl_ap {
i2c0_pins: i2c0-pins {
pinmux = <APPLE_PINMUX(56, 1)>,
<APPLE_PINMUX(57, 1)>;
};
i2c1_pins: i2c1-pins {
pinmux = <APPLE_PINMUX(58, 1)>,
<APPLE_PINMUX(59, 1)>;
};
i2c2_pins: i2c2-pins {
pinmux = <APPLE_PINMUX(60, 1)>,
<APPLE_PINMUX(61, 1)>;
};
i2c3_pins: i2c3-pins {
pinmux = <APPLE_PINMUX(62, 1)>,
<APPLE_PINMUX(63, 1)>;
};
i2c4_pins: i2c4-pins {
pinmux = <APPLE_PINMUX(64, 1)>,
<APPLE_PINMUX(65, 1)>;
};
i2c5_pins: i2c5-pins {
pinmux = <APPLE_PINMUX(66, 1)>,
<APPLE_PINMUX(67, 1)>;
};
i2c6_pins: i2c6-pins {
pinmux = <APPLE_PINMUX(68, 1)>,
<APPLE_PINMUX(69, 1)>;
};
i2c7_pins: i2c7-pins {
pinmux = <APPLE_PINMUX(70, 1)>,
<APPLE_PINMUX(71, 1)>;
};
i2c8_pins: i2c8-pins {
pinmux = <APPLE_PINMUX(72, 1)>,
<APPLE_PINMUX(73, 1)>;
};
};

View File

@ -0,0 +1,18 @@
// SPDX-License-Identifier: GPL-2.0+ OR MIT
/*
* MacBook Pro (14-inch, M3 Max, 16 CPU cores, Nov 2023)
*
* target-type: J514c
*
* Copyright The Asahi Linux Contributors
*/
/dts-v1/;
#include "t6031.dtsi"
#include "t603x-j514-j516.dtsi"
/ {
compatible = "apple,j514c", "apple,t6031", "apple,arm-platform";
model = "Apple MacBook Pro (14-inch, M3 Max, 16 CPU cores, Nov 2023)";
};

View File

@ -0,0 +1,18 @@
// SPDX-License-Identifier: GPL-2.0+ OR MIT
/*
* MacBook Pro (16-inch, M3 Max, 16 CPU cores, Nov 2023)
*
* target-type: J516c
*
* Copyright The Asahi Linux Contributors
*/
/dts-v1/;
#include "t6031.dtsi"
#include "t603x-j514-j516.dtsi"
/ {
compatible = "apple,j516c", "apple,t6031", "apple,arm-platform";
model = "Apple MacBook Pro (16-inch, M3 Max, 16 CPU cores, Nov 2023)";
};

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,48 @@
// SPDX-License-Identifier: GPL-2.0+ OR MIT
/*
* Apple T6031 "M3 Max" SoC
*
* 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>
#include "multi-die-cpp.h"
#include "t6031-base.dtsi"
/ {
compatible = "apple,t6031", "apple,arm-platform";
#address-cells = <2>;
#size-cells = <2>;
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>;
// filled via templated includes at the end of the file
};
};
#define DIE
#define DIE_NO 0
&soc {
#include "t6031-die0.dtsi"
#include "t6031-dieX.dtsi"
};
#include "t6031-gpio-pins.dtsi"
#include "t6031-pmgr.dtsi"
#undef DIE
#undef DIE_NO

View File

@ -0,0 +1,46 @@
// SPDX-License-Identifier: GPL-2.0+ OR MIT
/*
* Apple Mac Studio (M3 Ultra, 2025)
*
* target-type: J575d
*
* Copyright The Asahi Linux Contributors
*/
/dts-v1/;
#include "t6032.dtsi"
/ {
compatible = "apple,j575d", "apple,t6032", "apple,arm-platform";
model = "Apple Mac Studio (M3 Ultra, 2025)";
aliases {
serial0 = &serial0;
};
chosen {
#address-cells = <2>;
#size-cells = <2>;
ranges;
stdout-path = "serial0";
framebuffer0: framebuffer@0 {
compatible = "apple,simple-framebuffer", "simple-framebuffer";
reg = <0 0 0 0>; /* To be filled by loader */
/* Format properties will be added by loader */
status = "disabled";
power-domains = <&ps_dispext0_cpu>;
};
};
memory@10000000000 {
device_type = "memory";
reg = <0x100 0 0x2 0>; /* To be filled by loader */
};
};
&serial0 {
status = "okay";
};

View File

@ -0,0 +1,416 @@
// SPDX-License-Identifier: GPL-2.0+ OR MIT
/*
* Apple T6032 "M3 Ultra" SoC
*
* Other names: H15J, "Palma 2C"
*
* Copyright The Asahi Linux Contributors
*/
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/interrupt-controller/apple-aic.h>
#include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/pinctrl/apple.h>
#include <dt-bindings/phy/phy.h>
#include <dt-bindings/spmi/spmi.h>
#include "multi-die-cpp.h"
#include "t6031-base.dtsi"
/ {
compatible = "apple,t6032", "apple,arm-platform";
#address-cells = <2>;
#size-cells = <2>;
cpus {
#address-cells = <2>;
#size-cells = <0>;
cpu-map {
cluster3 {
core0 {
cpu = <&cpu_e10>;
};
core1 {
cpu = <&cpu_e11>;
};
core2 {
cpu = <&cpu_e12>;
};
core3 {
cpu = <&cpu_e13>;
};
};
cluster4 {
core0 {
cpu = <&cpu_p20>;
};
core1 {
cpu = <&cpu_p21>;
};
core2 {
cpu = <&cpu_p22>;
};
core3 {
cpu = <&cpu_p23>;
};
core4 {
cpu = <&cpu_p24>;
};
core5 {
cpu = <&cpu_p25>;
};
};
cluster5 {
core0 {
cpu = <&cpu_p30>;
};
core1 {
cpu = <&cpu_p31>;
};
core2 {
cpu = <&cpu_p32>;
};
core3 {
cpu = <&cpu_p33>;
};
core4 {
cpu = <&cpu_p34>;
};
core5 {
cpu = <&cpu_p35>;
};
};
};
cpu_e10: cpu@800 {
compatible = "apple,sawtooth";
device_type = "cpu";
reg = <0x0 0x800>;
enable-method = "spin-table";
cpu-release-addr = <0 0>; /* to be filled by loader */
next-level-cache = <&l2_cache_3>;
i-cache-size = <0x20000>;
d-cache-size = <0x10000>;
};
cpu_e11: cpu@801 {
compatible = "apple,sawtooth";
device_type = "cpu";
reg = <0x0 0x801>;
enable-method = "spin-table";
cpu-release-addr = <0 0>; /* to be filled by loader */
next-level-cache = <&l2_cache_3>;
i-cache-size = <0x20000>;
d-cache-size = <0x10000>;
};
cpu_e12: cpu@802 {
compatible = "apple,sawtooth";
device_type = "cpu";
reg = <0x0 0x802>;
enable-method = "spin-table";
cpu-release-addr = <0 0>; /* to be filled by loader */
next-level-cache = <&l2_cache_3>;
i-cache-size = <0x20000>;
d-cache-size = <0x10000>;
};
cpu_e13: cpu@803 {
compatible = "apple,sawtooth";
device_type = "cpu";
reg = <0x0 0x803>;
enable-method = "spin-table";
cpu-release-addr = <0 0>; /* to be filled by loader */
next-level-cache = <&l2_cache_3>;
i-cache-size = <0x20000>;
d-cache-size = <0x10000>;
};
cpu_p20: cpu@10900 {
compatible = "apple,everest";
device_type = "cpu";
reg = <0x0 0x10900>;
enable-method = "spin-table";
cpu-release-addr = <0 0>; /* To be filled by loader */
next-level-cache = <&l2_cache_4>;
i-cache-size = <0x30000>;
d-cache-size = <0x20000>;
};
cpu_p21: cpu@10901 {
compatible = "apple,everest";
device_type = "cpu";
reg = <0x0 0x10901>;
enable-method = "spin-table";
cpu-release-addr = <0 0>; /* To be filled by loader */
next-level-cache = <&l2_cache_4>;
i-cache-size = <0x30000>;
d-cache-size = <0x20000>;
};
cpu_p22: cpu@10902 {
compatible = "apple,everest";
device_type = "cpu";
reg = <0x0 0x10902>;
enable-method = "spin-table";
cpu-release-addr = <0 0>; /* To be filled by loader */
next-level-cache = <&l2_cache_4>;
i-cache-size = <0x30000>;
d-cache-size = <0x20000>;
};
cpu_p23: cpu@10903 {
compatible = "apple,everest";
device_type = "cpu";
reg = <0x0 0x10903>;
enable-method = "spin-table";
cpu-release-addr = <0 0>; /* To be filled by loader */
next-level-cache = <&l2_cache_4>;
i-cache-size = <0x30000>;
d-cache-size = <0x20000>;
};
cpu_p24: cpu@10904 {
compatible = "apple,everest";
device_type = "cpu";
reg = <0x0 0x10904>;
enable-method = "spin-table";
cpu-release-addr = <0 0>; /* To be filled by loader */
next-level-cache = <&l2_cache_4>;
i-cache-size = <0x30000>;
d-cache-size = <0x20000>;
};
cpu_p25: cpu@10905 {
compatible = "apple,everest";
device_type = "cpu";
reg = <0x0 0x10905>;
enable-method = "spin-table";
cpu-release-addr = <0 0>; /* To be filled by loader */
next-level-cache = <&l2_cache_4>;
i-cache-size = <0x30000>;
d-cache-size = <0x20000>;
};
cpu_p30: cpu@10a00 {
compatible = "apple,everest";
device_type = "cpu";
reg = <0x0 0x10a00>;
enable-method = "spin-table";
cpu-release-addr = <0 0>; /* To be filled by loader */
next-level-cache = <&l2_cache_5>;
i-cache-size = <0x30000>;
d-cache-size = <0x20000>;
};
cpu_p31: cpu@10a01 {
compatible = "apple,everest";
device_type = "cpu";
reg = <0x0 0x10a01>;
enable-method = "spin-table";
cpu-release-addr = <0 0>; /* To be filled by loader */
next-level-cache = <&l2_cache_5>;
i-cache-size = <0x30000>;
d-cache-size = <0x20000>;
};
cpu_p32: cpu@10a02 {
compatible = "apple,everest";
device_type = "cpu";
reg = <0x0 0x10a02>;
enable-method = "spin-table";
cpu-release-addr = <0 0>; /* To be filled by loader */
next-level-cache = <&l2_cache_5>;
i-cache-size = <0x30000>;
d-cache-size = <0x20000>;
};
cpu_p33: cpu@10a03 {
compatible = "apple,everest";
device_type = "cpu";
reg = <0x0 0x10a03>;
enable-method = "spin-table";
cpu-release-addr = <0 0>; /* To be filled by loader */
next-level-cache = <&l2_cache_5>;
i-cache-size = <0x30000>;
d-cache-size = <0x20000>;
};
cpu_p34: cpu@10a04 {
compatible = "apple,everest";
device_type = "cpu";
reg = <0x0 0x10a04>;
enable-method = "spin-table";
cpu-release-addr = <0 0>; /* To be filled by loader */
next-level-cache = <&l2_cache_5>;
i-cache-size = <0x30000>;
d-cache-size = <0x20000>;
};
cpu_p35: cpu@10a05 {
compatible = "apple,everest";
device_type = "cpu";
reg = <0x0 0x10a05>;
enable-method = "spin-table";
cpu-release-addr = <0 0>; /* To be filled by loader */
next-level-cache = <&l2_cache_5>;
i-cache-size = <0x30000>;
d-cache-size = <0x20000>;
};
l2_cache_3: l2-cache-3 {
compatible = "cache";
cache-level = <2>;
cache-unified;
cache-size = <0x400000>;
};
l2_cache_4: l2-cache-4 {
compatible = "cache";
cache-level = <2>;
cache-unified;
cache-size = <0x1000000>;
};
l2_cache_5: l2-cache-5 {
compatible = "cache";
cache-level = <2>;
cache-unified;
cache-size = <0x1000000>;
};
};
die0: soc@200000000 {
compatible = "simple-bus";
#address-cells = <2>;
#size-cells = <2>;
ranges = <0x02 0x00000000 0x02 0x00000000 0x4 0x00000000>,
<0x05 0x80000000 0x05 0x80000000 0x1 0x80000000>,
<0x07 0x00000000 0x07 0x00000000 0xf 0x80000000>,
<0x16 0x80000000 0x16 0x80000000 0x5 0x80000000>;
nonposted-mmio;
/* Required to get >32-bit DMA via DARTs */
dma-ranges = <0 0 0 0 0xffffffff 0xffffc000>;
// filled via templated includes at the end of the file
};
die1: soc@2200000000 {
compatible = "simple-bus";
#address-cells = <2>;
#size-cells = <2>;
ranges = <0x02 0x00000000 0x22 0x00000000 0x4 0x00000000>,
<0x07 0x00000000 0x27 0x00000000 0xf 0x80000000>,
<0x16 0x80000000 0x36 0x80000000 0x5 0x80000000>;
nonposted-mmio;
/* Required to get >32-bit DMA via DARTs */
dma-ranges = <0 0 0 0 0xffffffff 0xffffc000>;
// filled via templated includes at the end of the file
};
};
#define DIE
#define DIE_NO 0
&die0 {
#include "t6031-die0.dtsi"
#include "t6031-dieX.dtsi"
};
#include "t6031-pmgr.dtsi"
#include "t6031-gpio-pins.dtsi"
#undef DIE
#undef DIE_NO
#define DIE _die1
#define DIE_NO 1
&die1 {
#include "t6031-dieX.dtsi"
};
#include "t6031-pmgr.dtsi"
/delete-node/ &ps_pmp_die1;
#undef DIE
#undef DIE_NO
/* delete non-present DISP power-states */
/delete-node/ &ps_disp_cpu;
/delete-node/ &ps_disp_cpu_die1;
/delete-node/ &ps_disp_fe;
/delete-node/ &ps_disp_fe_die1;
/delete-node/ &ps_disp_sys;
/delete-node/ &ps_disp_sys_die1;
/* delete non-present ISP power-states */
/delete-node/ &ps_dprx;
/delete-node/ &ps_dprx_die1;
/delete-node/ &ps_isp_be;
/delete-node/ &ps_isp_be_die1;
/delete-node/ &ps_isp_clr;
/delete-node/ &ps_isp_clr_die1;
/delete-node/ &ps_isp_cpu;
/delete-node/ &ps_isp_cpu_die1;
/delete-node/ &ps_isp_fe;
/delete-node/ &ps_isp_fe_die1;
/delete-node/ &ps_isp_secure;
/delete-node/ &ps_isp_secure_die1;
/delete-node/ &ps_isp_sys;
/delete-node/ &ps_isp_sys_die1;
&ps_afi_d2d_0 {
status = "okay";
};
&ps_afi_d2d_0_die1 {
status = "okay";
};
&ps_afi_d2d_1 {
status = "okay";
};
&ps_afi_d2d_1_die1 {
status = "okay";
};
&ps_afc_d2d_0 {
status = "okay";
};
&ps_afc_d2d_0_die1{
status = "okay";
};
&ps_afc_d2d_1 {
status = "okay";
};
&ps_afc_d2d_1_die1 {
status = "okay";
};
&ps_afr_d2d_0 {
status = "okay";
};
&ps_afr_d2d_0_die1 {
status = "okay";
};
&ps_afr_d2d_1 {
status = "okay";
};
&ps_afr_d2d_1_die1 {
status = "okay";
};

View File

@ -0,0 +1,18 @@
// SPDX-License-Identifier: GPL-2.0+ OR MIT
/*
* MacBook Pro (14-inch, M3 Max, 14 CPU cores, Nov 2023)
*
* target-type: J514m
*
* Copyright The Asahi Linux Contributors
*/
/dts-v1/;
#include "t6034.dtsi"
#include "t603x-j514-j516.dtsi"
/ {
compatible = "apple,j514m", "apple,t6034", "apple,arm-platform";
model = "Apple MacBook Pro (14-inch, M3 Max, 14 CPU cores, Nov 2023)";
};

View File

@ -0,0 +1,18 @@
// SPDX-License-Identifier: GPL-2.0+ OR MIT
/*
* MacBook Pro (16-inch, M3 Max, 14 CPU cores, Nov 2023)
*
* target-type: J516m
*
* Copyright The Asahi Linux Contributors
*/
/dts-v1/;
#include "t6034.dtsi"
#include "t603x-j514-j516.dtsi"
/ {
compatible = "apple,j516m", "apple,t6034", "apple,arm-platform";
model = "Apple MacBook Pro (16-inch, M3 Max, 14 CPU cores, Nov 2023)";
};

View File

@ -0,0 +1,53 @@
// SPDX-License-Identifier: GPL-2.0+ OR MIT
/*
* Apple T6034 "M3 Max" SoC
*
* Copyright The Asahi Linux Contributors
*/
#include "t6031.dtsi"
/ {
compatible = "apple,t6034", "apple,arm-platform";
};
// Disable power-states for memory channels not present on the 14-core variant.
&ps_amcc6 {
status = "disabled";
};
&ps_amcc7 {
status = "disabled";
};
&ps_dcs_24 {
status = "disabled";
};
&ps_dcs_25 {
status = "disabled";
};
&ps_dcs_26 {
status = "disabled";
};
&ps_dcs_27 {
status = "disabled";
};
&ps_dcs_28 {
status = "disabled";
};
&ps_dcs_29 {
status = "disabled";
};
&ps_dcs_30 {
status = "disabled";
};
&ps_dcs_31 {
status = "disabled";
};

View File

@ -0,0 +1,66 @@
// SPDX-License-Identifier: GPL-2.0+ OR MIT
/*
* MacBook Pro (14/16-inch, 2023)
*
* This file contains the parts common to J514 and J516 devices with t6030,
* t6031 and t6034.
*
* target-type: J514s / J514m / J514c / J516s / J516m / J516c
*
* Copyright The Asahi Linux Contributors
*/
/*
* These models are essentially identical to the previous generations, other
* than the GPIO indices and using SPMI based USB Type-C port controllers.
*/
#include <dt-bindings/leds/common.h>
/ {
chassis-type = "laptop";
aliases {
serial0 = &serial0;
};
chosen {
#address-cells = <2>;
#size-cells = <2>;
ranges;
stdout-path = "serial0";
framebuffer0: framebuffer@0 {
compatible = "apple,simple-framebuffer", "simple-framebuffer";
reg = <0 0 0 0>; /* To be filled by loader */
/* Format properties will be added by loader */
status = "disabled";
power-domains = <&ps_disp_fe>;
};
};
memory@10000000000 {
device_type = "memory";
reg = <0x100 0 0x2 0>; /* To be filled by loader */
};
led-controller {
compatible = "pwm-leds";
led-0 {
pwms = <&fpwm0 0 40000>;
function = LED_FUNCTION_KBD_BACKLIGHT;
color = <LED_COLOR_ID_WHITE>;
max-brightness = <255>;
default-state = "keep";
};
};
};
&serial0 {
status = "okay";
};
&fpwm0 {
status = "okay";
};