arm: dts: apple: Add Apple M1 Pro/Max/Ultra device trees

Device trees for the 14" and 16" MacBook Pro and the Mac Studio.
Taken from the asahi branch of the Asahi Linux github reporsitory.

Signed-off-by: Mark Kettenis <kettenis@openbsd.org>
This commit is contained in:
Mark Kettenis 2022-03-01 21:26:48 +01:00
parent 00342236e1
commit 56d14d1170
19 changed files with 6622 additions and 0 deletions

View file

@ -33,6 +33,12 @@ dtb-$(CONFIG_TARGET_A3Y17LTE) += exynos78x0-axy17lte.dtb
dtb-$(CONFIG_TARGET_A7Y17LTE) += exynos78x0-axy17lte.dtb
dtb-$(CONFIG_ARCH_APPLE) += \
t6000-j314s.dtb \
t6000-j316s.dtb \
t6001-j314c.dtb \
t6001-j316c.dtb \
t6001-j375c.dtb \
t6002-j375d.dtb \
t8103-j274.dtb \
t8103-j293.dtb \
t8103-j313.dtb \

View file

@ -0,0 +1,19 @@
// SPDX-License-Identifier: GPL-2.0+ OR MIT
/*
* C preprocessor macros for t600x multi die support.
*/
#ifndef __DTS_APPLE_MULTI_DIE_CPP_H
#define __DTS_APPLE_MULTI_DIE_CPP_H
/* copied include/linux/stringify.h */
#define __stringify_1(x...) #x
#define __stringify(x...) __stringify_1(x)
#define __concat_1(x, y...) x ## y
#define __concat(x, y...) __concat_1(x, y)
#define DIE_NODE(a) __concat(a, DIE)
#define DIE_LABEL(a) __stringify(__concat(a, DIE))
#endif /* !__LINUX_STRINGIFY_H */

View file

@ -0,0 +1,22 @@
// SPDX-License-Identifier: GPL-2.0+ OR MIT
/*
* MacBook Pro (14-inch, M1 Pro, 2021)
*
* target-type: J314s
*
* Copyright The Asahi Linux Contributors
*/
/dts-v1/;
#include "t6000.dtsi"
#include "t600x-j314-j316.dtsi"
/ {
compatible = "apple,j314s", "apple,t6000", "apple,arm-platform";
model = "Apple MacBook Pro (14-inch, M1 Pro, 2021)";
};
&wifi0 {
brcm,board-type = "apple,maldives";
};

View file

@ -0,0 +1,22 @@
// SPDX-License-Identifier: GPL-2.0+ OR MIT
/*
* MacBook Pro (16-inch, M1 Pro, 2021)
*
* target-type: J316s
*
* Copyright The Asahi Linux Contributors
*/
/dts-v1/;
#include "t6000.dtsi"
#include "t600x-j314-j316.dtsi"
/ {
compatible = "apple,j316s", "apple,t6000", "apple,arm-platform";
model = "Apple MacBook Pro (16-inch, M1 Pro, 2021)";
};
&wifi0 {
brcm,board-type = "apple,madagascar";
};

18
arch/arm/dts/t6000.dtsi Normal file
View file

@ -0,0 +1,18 @@
// SPDX-License-Identifier: GPL-2.0+ OR MIT
/*
* Apple T6000 "M1 Pro" SoC
*
* Other names: H13J, "Jade Chop"
*
* Copyright The Asahi Linux Contributors
*/
/* This chip is just a cut down version of t6001, so include it and disable the missing parts */
#include "t6001.dtsi"
/ {
compatible = "apple,t6000", "apple,arm-platform";
};
/delete-node/ &pmgr_south;

View file

@ -0,0 +1,22 @@
// SPDX-License-Identifier: GPL-2.0+ OR MIT
/*
* MacBook Pro (14-inch, M1 Max, 2021)
*
* target-type: J314c
*
* Copyright The Asahi Linux Contributors
*/
/dts-v1/;
#include "t6001.dtsi"
#include "t600x-j314-j316.dtsi"
/ {
compatible = "apple,j314c", "apple,t6001", "apple,arm-platform";
model = "Apple MacBook Pro (14-inch, M1 Max, 2021)";
};
&wifi0 {
brcm,board-type = "apple,maldives";
};

View file

@ -0,0 +1,22 @@
// SPDX-License-Identifier: GPL-2.0+ OR MIT
/*
* MacBook Pro (16-inch, M1 Max, 2021)
*
* target-type: J316c
*
* Copyright The Asahi Linux Contributors
*/
/dts-v1/;
#include "t6001.dtsi"
#include "t600x-j314-j316.dtsi"
/ {
compatible = "apple,j316c", "apple,t6001", "apple,arm-platform";
model = "Apple MacBook Pro (16-inch, M1 Max, 2021)";
};
&wifi0 {
brcm,board-type = "apple,madagascar";
};

View file

@ -0,0 +1,272 @@
// SPDX-License-Identifier: GPL-2.0+ OR MIT
/*
* Mac Studio (M1 Max, 2022)
*
* target-type: J375c
*
* Copyright The Asahi Linux Contributors
*/
/dts-v1/;
#include "t6001.dtsi"
/ {
compatible = "apple,j375c", "apple,t6001", "apple,arm-platform";
model = "Apple Mac Studio (M1 Max, 2022)";
aliases {
serial0 = &serial0;
wifi0 = &wifi0;
};
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";
};
};
memory@10000000000 {
device_type = "memory";
reg = <0x100 0 0x2 0>; /* To be filled by loader */
};
};
&serial0 {
status = "okay";
};
/* USB Type C */
&i2c0 {
hpm0: usb-pd@38 {
compatible = "apple,cd321x";
reg = <0x38>;
interrupt-parent = <&pinctrl_ap>;
interrupts = <174 IRQ_TYPE_LEVEL_LOW>;
interrupt-names = "irq";
typec0: connector {
compatible = "usb-c-connector";
label = "USB-C Back Left";
power-role = "dual";
data-role = "dual";
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
typec0_con_hs: endpoint {
remote-endpoint = <&typec0_usb_hs>;
};
};
};
};
};
hpm1: usb-pd@3f {
compatible = "apple,cd321x";
reg = <0x3f>;
interrupt-parent = <&pinctrl_ap>;
interrupts = <174 IRQ_TYPE_LEVEL_LOW>;
interrupt-names = "irq";
typec1: connector {
compatible = "usb-c-connector";
label = "USB-C Back Left Middle";
power-role = "dual";
data-role = "dual";
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
typec1_con_hs: endpoint {
remote-endpoint = <&typec1_usb_hs>;
};
};
};
};
};
hpm2: usb-pd@3b {
compatible = "apple,cd321x";
reg = <0x3b>;
interrupt-parent = <&pinctrl_ap>;
interrupts = <174 IRQ_TYPE_LEVEL_LOW>;
interrupt-names = "irq";
typec2: connector {
compatible = "usb-c-connector";
label = "USB-C Back Right Middle";
power-role = "dual";
data-role = "dual";
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
typec2_con_hs: endpoint {
remote-endpoint = <&typec2_usb_hs>;
};
};
};
};
};
hpm3: usb-pd@3c {
compatible = "apple,cd321x";
reg = <0x3c>;
interrupt-parent = <&pinctrl_ap>;
interrupts = <174 IRQ_TYPE_LEVEL_LOW>;
interrupt-names = "irq";
typec3: connector {
compatible = "usb-c-connector";
label = "USB-C Back Right";
power-role = "dual";
data-role = "dual";
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
typec3_con_hs: endpoint {
remote-endpoint = <&typec3_usb_hs>;
};
};
};
};
};
};
/* Audio */
&i2c1 {
status = "okay";
speaker: codec@38 {
compatible = "ti,sn012776", "ti,tas2764";
reg = <0x38>;
shutdown-gpios = <&pinctrl_ap 178 GPIO_ACTIVE_HIGH>;
#sound-dai-cells = <0>;
};
};
/* PCIe devices */
&port00 {
/* WLAN */
bus-range = <1 1>;
pwren-gpios = <&smc_gpio 13 GPIO_ACTIVE_HIGH>;
wifi0: wifi@0,0 {
compatible = "pci14e4,4433";
reg = <0x10000 0x0 0x0 0x0 0x0>;
/* To be filled by the loader */
local-mac-address = [00 10 18 00 00 10];
apple,antenna-sku = "XX";
};
};
&port01 {
/* SD card reader */
bus-range = <2 2>;
pwren-gpios = <&smc_gpio 26 GPIO_ACTIVE_HIGH>;
sdhci0: mmc@0,0 {
compatible = "pci17a0,9755";
reg = <0x20000 0x0 0x0 0x0 0x0>;
cd-inverted;
wp-inverted;
};
};
&port02 {
/* 10 Gbit Ethernet */
bus-range = <3 3>;
ethernet0: ethernet@0,0 {
reg = <0x30000 0x0 0x0 0x0 0x0>;
/* To be filled by the loader */
local-mac-address = [00 10 18 00 00 00];
};
};
&port03 {
/* USB xHCI */
bus-range = <4 4>;
pwren-gpios = <&smc_gpio 20 GPIO_ACTIVE_HIGH>;
};
&wifi0 {
brcm,board-type = "apple,okinawa";
};
/* USB controllers */
&dwc3_0 {
port {
typec0_usb_hs: endpoint {
remote-endpoint = <&typec0_con_hs>;
};
};
};
&dwc3_1 {
port {
typec1_usb_hs: endpoint {
remote-endpoint = <&typec1_con_hs>;
};
};
};
&dwc3_2 {
port {
typec2_usb_hs: endpoint {
remote-endpoint = <&typec2_con_hs>;
};
};
};
&dwc3_3 {
port {
typec3_usb_hs: endpoint {
remote-endpoint = <&typec3_con_hs>;
};
};
};
/ {
sound {
compatible = "apple,j375-macaudio", "apple,macaudio";
model = "Mac Studio J375 integrated audio";
/*
* DANGER ZONE: You can blow your speakers!
*
* The drivers are not ready, and unless you are careful
* to attenuate the audio stream, you run the risk of
* blowing your speakers.
*/
status = "disabled";
dai-link@0 {
link-name = "Speaker";
mclk-fs = <64>;
cpu {
sound-dai = <&mca 0>;
};
codec {
sound-dai = <&speaker>;
};
};
};
};

2009
arch/arm/dts/t6001-pmgr.dtsi Normal file

File diff suppressed because it is too large Load diff

71
arch/arm/dts/t6001.dtsi Normal file
View file

@ -0,0 +1,71 @@
// SPDX-License-Identifier: GPL-2.0+ OR MIT
/*
* Apple T6001 "M1 Max" SoC
*
* Other names: H13J, "Jade"
*
* 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/spmi/spmi.h>
#include "multi-die-cpp.h"
#include "t600x-common.dtsi"
/ {
compatible = "apple,t6001", "apple,arm-platform";
soc {
compatible = "simple-bus";
#address-cells = <2>;
#size-cells = <2>;
ranges;
nonposted-mmio;
// filled via templated includes at the end of the file
};
};
#define DIE
#define DIE_NO 0
&{/soc} {
#include "t600x-die0.dtsi"
#include "t600x-dieX.dtsi"
#include "t600x-nvme.dtsi"
};
#include "t600x-gpio-pins.dtsi"
#include "t600x-pmgr.dtsi"
#undef DIE
#undef DIE_NO
&cpufreq_hw {
reg = <0x2 0x10e20000 0 0x1000>,
<0x2 0x11e20000 0 0x1000>,
<0x2 0x12e20000 0 0x1000>;
reg-names = "cluster0", "cluster1", "cluster2";
};
&aic {
affinities {
e-core-pmu-affinity {
apple,fiq-index = <AIC_CPU_PMU_E>;
cpus = <&cpu_e00 &cpu_e01>;
};
p-core-pmu-affinity {
apple,fiq-index = <AIC_CPU_PMU_P>;
cpus = <&cpu_p00 &cpu_p01 &cpu_p02 &cpu_p03
&cpu_p10 &cpu_p11 &cpu_p12 &cpu_p13>;
};
};
};

View file

@ -0,0 +1,364 @@
// SPDX-License-Identifier: GPL-2.0+ OR MIT
/*
* Mac Studio (M1 Ultra, 2022)
*
* target-type: J375d
*
* Copyright The Asahi Linux Contributors
*/
/dts-v1/;
#include "t6002.dtsi"
/ {
compatible = "apple,j375d", "apple,t6002", "apple,arm-platform";
model = "Apple Mac Studio (M1 Ultra, 2022)";
aliases {
serial0 = &serial0;
wifi0 = &wifi0;
};
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";
};
};
memory@10000000000 {
device_type = "memory";
reg = <0x100 0 0x2 0>; /* To be filled by loader */
};
};
&serial0 {
status = "okay";
};
/* USB Type C */
&i2c0 {
hpm0: usb-pd@38 {
compatible = "apple,cd321x";
reg = <0x38>;
interrupt-parent = <&pinctrl_ap>;
interrupts = <174 IRQ_TYPE_LEVEL_LOW>;
interrupt-names = "irq";
typec0: connector {
compatible = "usb-c-connector";
label = "USB-C Back Left";
power-role = "dual";
data-role = "dual";
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
typec0_con_hs: endpoint {
remote-endpoint = <&typec0_usb_hs>;
};
};
};
};
};
hpm1: usb-pd@3f {
compatible = "apple,cd321x";
reg = <0x3f>;
interrupt-parent = <&pinctrl_ap>;
interrupts = <174 IRQ_TYPE_LEVEL_LOW>;
interrupt-names = "irq";
typec1: connector {
compatible = "usb-c-connector";
label = "USB-C Back Left Middle";
power-role = "dual";
data-role = "dual";
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
typec1_con_hs: endpoint {
remote-endpoint = <&typec1_usb_hs>;
};
};
};
};
};
hpm2: usb-pd@3b {
compatible = "apple,cd321x";
reg = <0x3b>;
interrupt-parent = <&pinctrl_ap>;
interrupts = <174 IRQ_TYPE_LEVEL_LOW>;
interrupt-names = "irq";
typec2: connector {
compatible = "usb-c-connector";
label = "USB-C Back Right Middle";
power-role = "dual";
data-role = "dual";
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
typec2_con_hs: endpoint {
remote-endpoint = <&typec2_usb_hs>;
};
};
};
};
};
hpm3: usb-pd@3c {
compatible = "apple,cd321x";
reg = <0x3c>;
interrupt-parent = <&pinctrl_ap>;
interrupts = <174 IRQ_TYPE_LEVEL_LOW>;
interrupt-names = "irq";
typec3: connector {
compatible = "usb-c-connector";
label = "USB-C Back Right";
power-role = "dual";
data-role = "dual";
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
typec3_con_hs: endpoint {
remote-endpoint = <&typec3_usb_hs>;
};
};
};
};
};
/* front-right */
hpm4: usb-pd@39 {
compatible = "apple,cd321x";
reg = <0x39>;
interrupt-parent = <&pinctrl_ap>;
interrupts = <174 IRQ_TYPE_LEVEL_LOW>;
interrupt-names = "irq";
typec4: connector {
compatible = "usb-c-connector";
label = "USB-C Front Right";
power-role = "dual";
data-role = "dual";
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
typec4_con_hs: endpoint {
remote-endpoint = <&typec4_usb_hs>;
};
};
};
};
};
/* front-left */
hpm5: usb-pd@3a {
compatible = "apple,cd321x";
reg = <0x3a>;
interrupt-parent = <&pinctrl_ap>;
interrupts = <174 IRQ_TYPE_LEVEL_LOW>;
interrupt-names = "irq";
typec5: connector {
compatible = "usb-c-connector";
label = "USB-C Front Left";
power-role = "dual";
data-role = "dual";
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
typec5_con_hs: endpoint {
remote-endpoint = <&typec5_usb_hs>;
};
};
};
};
};
};
/* Audio */
&i2c1 {
status = "okay";
speaker: codec@38 {
compatible = "ti,sn012776", "ti,tas2764";
reg = <0x38>;
shutdown-gpios = <&pinctrl_ap 178 GPIO_ACTIVE_HIGH>;
#sound-dai-cells = <0>;
};
};
/* PCIe devices */
&port00 {
/* WLAN */
bus-range = <1 1>;
pwren-gpios = <&smc_gpio 13 GPIO_ACTIVE_HIGH>;
wifi0: wifi@0,0 {
compatible = "pci14e4,4433";
reg = <0x10000 0x0 0x0 0x0 0x0>;
/* To be filled by the loader */
local-mac-address = [00 10 18 00 00 10];
apple,antenna-sku = "XX";
};
};
&port01 {
/* SD card reader */
bus-range = <2 2>;
pwren-gpios = <&smc_gpio 26 GPIO_ACTIVE_HIGH>;
sdhci0: mmc@0,0 {
compatible = "pci17a0,9755";
reg = <0x20000 0x0 0x0 0x0 0x0>;
cd-inverted;
wp-inverted;
};
};
&port02 {
/* 10 Gbit Ethernet */
bus-range = <3 3>;
ethernet0: ethernet@0,0 {
reg = <0x30000 0x0 0x0 0x0 0x0>;
/* To be filled by the loader */
local-mac-address = [00 10 18 00 00 00];
};
};
&port03 {
/* USB xHCI */
bus-range = <4 4>;
pwren-gpios = <&smc_gpio 20 GPIO_ACTIVE_HIGH>;
};
&wifi0 {
brcm,board-type = "apple,okinawa";
};
/* USB controllers */
&dwc3_0 {
port {
typec0_usb_hs: endpoint {
remote-endpoint = <&typec0_con_hs>;
};
};
};
&dwc3_1 {
port {
typec1_usb_hs: endpoint {
remote-endpoint = <&typec1_con_hs>;
};
};
};
&dwc3_2 {
port {
typec2_usb_hs: endpoint {
remote-endpoint = <&typec2_con_hs>;
};
};
};
&dwc3_3 {
port {
typec3_usb_hs: endpoint {
remote-endpoint = <&typec3_con_hs>;
};
};
};
&dwc3_0_die1 {
port {
typec4_usb_hs: endpoint {
remote-endpoint = <&typec4_con_hs>;
};
};
};
&dwc3_1_die1 {
port {
typec5_usb_hs: endpoint {
remote-endpoint = <&typec5_con_hs>;
};
};
};
/* delete unused USB nodes on die 1 */
/delete-node/ &dwc3_2_dart_0_die1;
/delete-node/ &dwc3_2_dart_1_die1;
/delete-node/ &dwc3_2_die1;
/delete-node/ &dwc3_3_dart_0_die1;
/delete-node/ &dwc3_3_dart_1_die1;
/delete-node/ &dwc3_3_die1;
/* delete unused always-on power-domains on die 1 */
/delete-node/ &ps_atc2_usb_aon_die1;
/delete-node/ &ps_atc2_usb_die1;
/delete-node/ &ps_atc3_usb_aon_die1;
/delete-node/ &ps_atc3_usb_die1;
/delete-node/ &ps_disp0_cpu0_die1;
/delete-node/ &ps_disp0_fe_die1;
/ {
sound {
compatible = "apple,j375-macaudio", "apple,macaudio";
model = "Mac Studio J375 integrated audio";
/*
* DANGER ZONE: You can blow your speakers!
*
* The drivers are not ready, and unless you are careful
* to attenuate the audio stream, you run the risk of
* blowing your speakers.
*/
status = "disabled";
dai-link@0 {
link-name = "Speaker";
mclk-fs = <64>;
cpu {
sound-dai = <&mca 0>;
};
codec {
sound-dai = <&speaker>;
};
};
};
};

262
arch/arm/dts/t6002.dtsi Normal file
View file

@ -0,0 +1,262 @@
// SPDX-License-Identifier: GPL-2.0+ OR MIT
/*
* Apple T6002 "M1 Ultra" SoC
*
* Other names: H13J, "Jade 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/spmi/spmi.h>
#include "multi-die-cpp.h"
#include "t600x-common.dtsi"
/ {
compatible = "apple,t6002", "apple,arm-platform";
#address-cells = <2>;
#size-cells = <2>;
cpus {
cpu-map {
cluster3 {
core0 {
cpu = <&cpu_e10>;
};
core1 {
cpu = <&cpu_e11>;
};
};
cluster4 {
core0 {
cpu = <&cpu_p20>;
};
core1 {
cpu = <&cpu_p21>;
};
core2 {
cpu = <&cpu_p22>;
};
core3 {
cpu = <&cpu_p23>;
};
};
cluster5 {
core0 {
cpu = <&cpu_p30>;
};
core1 {
cpu = <&cpu_p31>;
};
core2 {
cpu = <&cpu_p32>;
};
core3 {
cpu = <&cpu_p33>;
};
};
};
cpu_e10: cpu@800 {
compatible = "apple,icestorm";
device_type = "cpu";
reg = <0x0 0x800>;
enable-method = "spin-table";
cpu-release-addr = <0 0>; /* To be filled by loader */
operating-points-v2 = <&icestorm_opp>;
capacity-dmips-mhz = <714>;
apple,freq-domain = <&cpufreq_hw 3>;
};
cpu_e11: cpu@801 {
compatible = "apple,icestorm";
device_type = "cpu";
reg = <0x0 0x801>;
enable-method = "spin-table";
cpu-release-addr = <0 0>; /* To be filled by loader */
operating-points-v2 = <&icestorm_opp>;
capacity-dmips-mhz = <714>;
apple,freq-domain = <&cpufreq_hw 3>;
};
cpu_p20: cpu@10900 {
compatible = "apple,firestorm";
device_type = "cpu";
reg = <0x0 0x10900>;
enable-method = "spin-table";
cpu-release-addr = <0 0>; /* To be filled by loader */
operating-points-v2 = <&firestorm_opp>;
capacity-dmips-mhz = <1024>;
apple,freq-domain = <&cpufreq_hw 4>;
};
cpu_p21: cpu@10901 {
compatible = "apple,firestorm";
device_type = "cpu";
reg = <0x0 0x10901>;
enable-method = "spin-table";
cpu-release-addr = <0 0>; /* To be filled by loader */
operating-points-v2 = <&firestorm_opp>;
capacity-dmips-mhz = <1024>;
apple,freq-domain = <&cpufreq_hw 4>;
};
cpu_p22: cpu@10902 {
compatible = "apple,firestorm";
device_type = "cpu";
reg = <0x0 0x10902>;
enable-method = "spin-table";
cpu-release-addr = <0 0>; /* To be filled by loader */
operating-points-v2 = <&firestorm_opp>;
capacity-dmips-mhz = <1024>;
apple,freq-domain = <&cpufreq_hw 4>;
};
cpu_p23: cpu@10903 {
compatible = "apple,firestorm";
device_type = "cpu";
reg = <0x0 0x10903>;
enable-method = "spin-table";
cpu-release-addr = <0 0>; /* To be filled by loader */
operating-points-v2 = <&firestorm_opp>;
capacity-dmips-mhz = <1024>;
apple,freq-domain = <&cpufreq_hw 4>;
};
cpu_p30: cpu@10a00 {
compatible = "apple,firestorm";
device_type = "cpu";
reg = <0x0 0x10a00>;
enable-method = "spin-table";
cpu-release-addr = <0 0>; /* To be filled by loader */
operating-points-v2 = <&firestorm_opp>;
capacity-dmips-mhz = <1024>;
apple,freq-domain = <&cpufreq_hw 5>;
};
cpu_p31: cpu@10a01 {
compatible = "apple,firestorm";
device_type = "cpu";
reg = <0x0 0x10a01>;
enable-method = "spin-table";
cpu-release-addr = <0 0>; /* To be filled by loader */
operating-points-v2 = <&firestorm_opp>;
capacity-dmips-mhz = <1024>;
apple,freq-domain = <&cpufreq_hw 5>;
};
cpu_p32: cpu@10a02 {
compatible = "apple,firestorm";
device_type = "cpu";
reg = <0x0 0x10a02>;
enable-method = "spin-table";
cpu-release-addr = <0 0>; /* To be filled by loader */
operating-points-v2 = <&firestorm_opp>;
capacity-dmips-mhz = <1024>;
apple,freq-domain = <&cpufreq_hw 5>;
};
cpu_p33: cpu@10a03 {
compatible = "apple,firestorm";
device_type = "cpu";
reg = <0x0 0x10a03>;
enable-method = "spin-table";
cpu-release-addr = <0 0>; /* To be filled by loader */
operating-points-v2 = <&firestorm_opp>;
capacity-dmips-mhz = <1024>;
apple,freq-domain = <&cpufreq_hw 5>;
};
};
soc {
compatible = "simple-bus";
#address-cells = <2>;
#size-cells = <2>;
ranges;
nonposted-mmio;
die0 {
compatible = "simple-bus";
#address-cells = <2>;
#size-cells = <2>;
ranges;
nonposted-mmio;
// filled via templated includes at the end of the file
};
die1 {
compatible = "simple-bus";
#address-cells = <2>;
#size-cells = <2>;
ranges = <0x2 0x0 0x22 0x0 0x4 0x0>,
<0x7 0x0 0x27 0x0 0xf 0x80000000>;
nonposted-mmio;
// filled via templated includes at the end of the file
};
};
};
#define DIE
#define DIE_NO 0
&{/soc/die0} {
#include "t600x-die0.dtsi"
#include "t600x-dieX.dtsi"
};
#include "t600x-pmgr.dtsi"
#include "t600x-gpio-pins.dtsi"
#undef DIE
#undef DIE_NO
#define DIE _die1
#define DIE_NO 1
&{/soc/die1} {
#include "t600x-dieX.dtsi"
#include "t600x-nvme.dtsi"
};
#include "t600x-pmgr.dtsi"
#undef DIE
#undef DIE_NO
&cpufreq_hw {
reg = <0x2 0x10e20000 0 0x1000>,
<0x2 0x11e20000 0 0x1000>,
<0x2 0x12e20000 0 0x1000>,
<0x22 0x10e20000 0 0x1000>,
<0x22 0x11e20000 0 0x1000>,
<0x22 0x12e20000 0 0x1000>;
reg-names = "cluster0", "cluster1", "cluster2",
"cluster3", "cluster4", "cluster5";
};
&aic {
affinities {
e-core-pmu-affinity {
cpus = <&cpu_e00 &cpu_e01
&cpu_e10 &cpu_e11>;
};
p-core-pmu-affinity {
cpus = <&cpu_p00 &cpu_p01 &cpu_p02 &cpu_p03
&cpu_p10 &cpu_p11 &cpu_p12 &cpu_p13
&cpu_p20 &cpu_p21 &cpu_p22 &cpu_p23
&cpu_p30 &cpu_p31 &cpu_p32 &cpu_p33>;
};
};
};

View file

@ -0,0 +1,323 @@
// SPDX-License-Identifier: GPL-2.0+ OR MIT
/*
* Common Apple T6000 / T6001 / T6002 "M1 Pro/Max/Ultra" SoC
*
* Other names: H13J, "Jade Chop", "Jade", "Jade 2C"
*
* 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>;
};
};
cluster1 {
core0 {
cpu = <&cpu_p00>;
};
core1 {
cpu = <&cpu_p01>;
};
core2 {
cpu = <&cpu_p02>;
};
core3 {
cpu = <&cpu_p03>;
};
};
cluster2 {
core0 {
cpu = <&cpu_p10>;
};
core1 {
cpu = <&cpu_p11>;
};
core2 {
cpu = <&cpu_p12>;
};
core3 {
cpu = <&cpu_p13>;
};
};
};
cpu_e00: cpu@0 {
compatible = "apple,icestorm";
device_type = "cpu";
reg = <0x0 0x0>;
enable-method = "spin-table";
cpu-release-addr = <0 0>; /* To be filled by loader */
operating-points-v2 = <&icestorm_opp>;
capacity-dmips-mhz = <714>;
apple,freq-domain = <&cpufreq_hw 0>;
};
cpu_e01: cpu@1 {
compatible = "apple,icestorm";
device_type = "cpu";
reg = <0x0 0x1>;
enable-method = "spin-table";
cpu-release-addr = <0 0>; /* To be filled by loader */
operating-points-v2 = <&icestorm_opp>;
capacity-dmips-mhz = <714>;
apple,freq-domain = <&cpufreq_hw 0>;
};
cpu_p00: cpu@10100 {
compatible = "apple,firestorm";
device_type = "cpu";
reg = <0x0 0x10100>;
enable-method = "spin-table";
cpu-release-addr = <0 0>; /* To be filled by loader */
operating-points-v2 = <&firestorm_opp>;
capacity-dmips-mhz = <1024>;
apple,freq-domain = <&cpufreq_hw 1>;
};
cpu_p01: cpu@10101 {
compatible = "apple,firestorm";
device_type = "cpu";
reg = <0x0 0x10101>;
enable-method = "spin-table";
cpu-release-addr = <0 0>; /* To be filled by loader */
operating-points-v2 = <&firestorm_opp>;
capacity-dmips-mhz = <1024>;
apple,freq-domain = <&cpufreq_hw 1>;
};
cpu_p02: cpu@10102 {
compatible = "apple,firestorm";
device_type = "cpu";
reg = <0x0 0x10102>;
enable-method = "spin-table";
cpu-release-addr = <0 0>; /* To be filled by loader */
operating-points-v2 = <&firestorm_opp>;
capacity-dmips-mhz = <1024>;
apple,freq-domain = <&cpufreq_hw 1>;
};
cpu_p03: cpu@10103 {
compatible = "apple,firestorm";
device_type = "cpu";
reg = <0x0 0x10103>;
enable-method = "spin-table";
cpu-release-addr = <0 0>; /* To be filled by loader */
operating-points-v2 = <&firestorm_opp>;
capacity-dmips-mhz = <1024>;
apple,freq-domain = <&cpufreq_hw 1>;
};
cpu_p10: cpu@10200 {
compatible = "apple,firestorm";
device_type = "cpu";
reg = <0x0 0x10200>;
enable-method = "spin-table";
cpu-release-addr = <0 0>; /* To be filled by loader */
operating-points-v2 = <&firestorm_opp>;
capacity-dmips-mhz = <1024>;
apple,freq-domain = <&cpufreq_hw 2>;
};
cpu_p11: cpu@10201 {
compatible = "apple,firestorm";
device_type = "cpu";
reg = <0x0 0x10201>;
enable-method = "spin-table";
cpu-release-addr = <0 0>; /* To be filled by loader */
operating-points-v2 = <&firestorm_opp>;
capacity-dmips-mhz = <1024>;
apple,freq-domain = <&cpufreq_hw 2>;
};
cpu_p12: cpu@10202 {
compatible = "apple,firestorm";
device_type = "cpu";
reg = <0x0 0x10202>;
enable-method = "spin-table";
cpu-release-addr = <0 0>; /* To be filled by loader */
operating-points-v2 = <&firestorm_opp>;
capacity-dmips-mhz = <1024>;
apple,freq-domain = <&cpufreq_hw 2>;
};
cpu_p13: cpu@10203 {
compatible = "apple,firestorm";
device_type = "cpu";
reg = <0x0 0x10203>;
enable-method = "spin-table";
cpu-release-addr = <0 0>; /* To be filled by loader */
operating-points-v2 = <&firestorm_opp>;
capacity-dmips-mhz = <1024>;
apple,freq-domain = <&cpufreq_hw 2>;
};
};
icestorm_opp: opp-table-0 {
compatible = "operating-points-v2";
opp-shared;
opp01 {
opp-hz = /bits/ 64 <600000000>;
opp-level = <1>;
clock-latency-ns = <7500>;
};
opp02 {
opp-hz = /bits/ 64 <972000000>;
opp-level = <2>;
clock-latency-ns = <23000>;
};
opp03 {
opp-hz = /bits/ 64 <1332000000>;
opp-level = <3>;
clock-latency-ns = <29000>;
};
opp04 {
opp-hz = /bits/ 64 <1704000000>;
opp-level = <4>;
clock-latency-ns = <40000>;
};
opp05 {
opp-hz = /bits/ 64 <2064000000>;
opp-level = <5>;
clock-latency-ns = <50000>;
};
};
firestorm_opp: opp-table-1 {
compatible = "operating-points-v2";
opp-shared;
opp01 {
opp-hz = /bits/ 64 <600000000>;
opp-level = <1>;
clock-latency-ns = <8000>;
};
opp02 {
opp-hz = /bits/ 64 <828000000>;
opp-level = <2>;
clock-latency-ns = <18000>;
};
opp03 {
opp-hz = /bits/ 64 <1056000000>;
opp-level = <3>;
clock-latency-ns = <19000>;
};
opp04 {
opp-hz = /bits/ 64 <1296000000>;
opp-level = <4>;
clock-latency-ns = <23000>;
};
opp05 {
opp-hz = /bits/ 64 <1524000000>;
opp-level = <5>;
clock-latency-ns = <24000>;
};
opp06 {
opp-hz = /bits/ 64 <1752000000>;
opp-level = <6>;
clock-latency-ns = <28000>;
};
opp07 {
opp-hz = /bits/ 64 <1980000000>;
opp-level = <7>;
clock-latency-ns = <31000>;
};
opp08 {
opp-hz = /bits/ 64 <2208000000>;
opp-level = <8>;
clock-latency-ns = <45000>;
};
opp09 {
opp-hz = /bits/ 64 <2448000000>;
opp-level = <9>;
clock-latency-ns = <49000>;
};
opp10 {
opp-hz = /bits/ 64 <2676000000>;
opp-level = <10>;
clock-latency-ns = <53000>;
};
opp11 {
opp-hz = /bits/ 64 <2904000000>;
opp-level = <11>;
clock-latency-ns = <56000>;
};
opp12 {
opp-hz = /bits/ 64 <3036000000>;
opp-level = <12>;
clock-latency-ns = <56000>;
};
/* Not available until CPU deep sleep is implemented
opp13 {
opp-hz = /bits/ 64 <3132000000>;
opp-level = <13>;
clock-latency-ns = <56000>;
turbo-mode;
};
opp14 {
opp-hz = /bits/ 64 <3168000000>;
opp-level = <14>;
clock-latency-ns = <56000>;
turbo-mode;
};
opp15 {
opp-hz = /bits/ 64 <3228000000>;
opp-level = <15>;
clock-latency-ns = <56000>;
turbo-mode;
};
*/
};
pmu-e {
compatible = "apple,icestorm-pmu";
interrupt-parent = <&aic>;
interrupts = <AIC_FIQ 0 AIC_CPU_PMU_E IRQ_TYPE_LEVEL_HIGH>;
};
pmu-p {
compatible = "apple,firestorm-pmu";
interrupt-parent = <&aic>;
interrupts = <AIC_FIQ 0 AIC_CPU_PMU_P IRQ_TYPE_LEVEL_HIGH>;
};
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";
};
clk_200m: clock-200m {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <200000000>;
clock-output-names = "clk_200m";
};
};

View file

@ -0,0 +1,515 @@
// SPDX-License-Identifier: GPL-2.0+ OR MIT
/*
* Devices used on die 0 on the Apple T6002 "M1 Ultra" SoC and present on
* Apple T6000 / T6001 "M1 Pro" / "M1 Max".
*
* Copyright The Asahi Linux Contributors
*/
cpufreq_hw: cpufreq@210e20000 {
compatible = "apple,t6000-soc-cpufreq", "apple,soc-cpufreq";
#freq-domain-cells = <1>;
};
aic: interrupt-controller@28e100000 {
compatible = "apple,t6000-aic", "apple,aic2";
#interrupt-cells = <4>;
interrupt-controller;
reg = <0x2 0x8e100000 0x0 0xc000>,
<0x2 0x8e10c000 0x0 0x4>;
reg-names = "core", "event";
power-domains = <&ps_aic>;
};
smc_mbox: mbox@290408000 {
compatible = "apple,t6000-asc-mailbox", "apple,asc-mailbox-v4";
reg = <0x2 0x90408000 0x0 0x4000>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ 0 754 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ 0 755 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ 0 756 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ 0 757 IRQ_TYPE_LEVEL_HIGH>;
interrupt-names = "send-empty", "send-not-empty",
"recv-empty", "recv-not-empty";
#mbox-cells = <0>;
};
smc: smc@290400000 {
compatible = "apple,t6000-smc", "apple,smc";
reg = <0x2 0x90400000 0x0 0x4000>,
<0x2 0x91e00000 0x0 0x100000>;
reg-names = "smc", "sram";
mboxes = <&smc_mbox>;
smc_gpio: gpio {
gpio-controller;
#gpio-cells = <2>;
};
smc_rtc: rtc {
nvmem-cells = <&rtc_offset>;
nvmem-cell-names = "rtc_offset";
};
smc_reboot: reboot {
nvmem-cells = <&shutdown_flag>, <&boot_stage>,
<&boot_error_count>, <&panic_count>, <&pm_setting>;
nvmem-cell-names = "shutdown_flag", "boot_stage",
"boot_error_count", "panic_count", "pm_setting";
};
};
pinctrl_smc: pinctrl@290820000 {
compatible = "apple,t6000-pinctrl", "apple,pinctrl";
reg = <0x2 0x90820000 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 743 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ 0 744 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ 0 745 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ 0 746 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ 0 747 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ 0 748 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ 0 749 IRQ_TYPE_LEVEL_HIGH>;
};
wdt: watchdog@2922b0000 {
compatible = "apple,t6000-wdt", "apple,wdt";
reg = <0x2 0x922b0000 0x0 0x4000>;
clocks = <&clkref>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ 0 631 IRQ_TYPE_LEVEL_HIGH>;
};
nub_spmi0: spmi@2920a1300 {
compatible = "apple,t6000-spmi", "apple,spmi";
reg = <0x2 0x920a1300 0x0 0x100>;
#address-cells = <2>;
#size-cells = <0>;
pmu1: pmu@f {
compatible = "apple,maverick-pmu", "apple,spmi-pmu";
reg = <0xf SPMI_USID>;
#address-cells = <1>;
#size-cells = <1>;
rtc_nvmem@1400 {
compatible = "apple,spmi-pmu-nvmem";
reg = <0x1400 0x20>;
#address-cells = <1>;
#size-cells = <1>;
pm_setting: pm-setting@5 {
reg = <0x5 0x1>;
};
rtc_offset: rtc-offset@11 {
reg = <0x11 0x6>;
};
};
legacy_nvmem@6000 {
compatible = "apple,spmi-pmu-nvmem";
reg = <0x6000 0x20>;
#address-cells = <1>;
#size-cells = <1>;
boot_stage: boot-stage@1 {
reg = <0x1 0x1>;
};
boot_error_count: boot-error-count@2 {
reg = <0x2 0x1>;
bits = <0 4>;
};
panic_count: panic-count@2 {
reg = <0x2 0x1>;
bits = <4 4>;
};
boot_error_stage: boot-error-stage@3 {
reg = <0x3 0x1>;
};
shutdown_flag: shutdown-flag@f {
reg = <0xf 0x1>;
bits = <3 1>;
};
};
scrpad_nvmem@8000 {
compatible = "apple,spmi-pmu-nvmem";
reg = <0x8000 0x1000>;
#address-cells = <1>;
#size-cells = <1>;
fault_shadow: fault-shadow@67b {
reg = <0x67b 0x10>;
};
socd: socd@b00 {
reg = <0xb00 0x400>;
};
};
};
};
i2c0: i2c@39b040000 {
compatible = "apple,t6000-i2c", "apple,i2c";
reg = <0x3 0x9b040000 0x0 0x4000>;
clocks = <&clkref>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ 0 1119 IRQ_TYPE_LEVEL_HIGH>;
pinctrl-0 = <&i2c0_pins>;
pinctrl-names = "default";
power-domains = <&ps_i2c0>;
#address-cells = <0x1>;
#size-cells = <0x0>;
};
i2c1: i2c@39b044000 {
compatible = "apple,t6000-i2c", "apple,i2c";
reg = <0x3 0x9b044000 0x0 0x4000>;
clocks = <&clkref>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ 0 1120 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@39b048000 {
compatible = "apple,t6000-i2c", "apple,i2c";
reg = <0x3 0x9b048000 0x0 0x4000>;
clocks = <&clkref>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ 0 1121 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@39b04c000 {
compatible = "apple,t6000-i2c", "apple,i2c";
reg = <0x3 0x9b04c000 0x0 0x4000>;
clocks = <&clkref>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ 0 1122 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@39b050000 {
compatible = "apple,t6000-i2c", "apple,i2c";
reg = <0x3 0x9b050000 0x0 0x4000>;
clocks = <&clkref>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ 0 1123 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@39b054000 {
compatible = "apple,t6000-i2c", "apple,i2c";
reg = <0x3 0x9b054000 0x0 0x4000>;
clocks = <&clkref>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ 0 1124 IRQ_TYPE_LEVEL_HIGH>;
pinctrl-0 = <&i2c5_pins>;
pinctrl-names = "default";
power-domains = <&ps_i2c5>;
#address-cells = <0x1>;
#size-cells = <0x0>;
status = "disabled";
};
spi1: spi@39b104000 {
compatible = "apple,t6000-spi", "apple,spi";
reg = <0x3 0x9b104000 0x0 0x4000>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ 0 1107 IRQ_TYPE_LEVEL_HIGH>;
#address-cells = <1>;
#size-cells = <0>;
clocks = <&clk_200m>;
pinctrl-0 = <&spi1_pins>;
pinctrl-names = "default";
power-domains = <&ps_spi1>;
status = "disabled";
};
spi3: spi@39b10c000 {
compatible = "apple,t6000-spi", "apple,spi";
reg = <0x3 0x9b10c000 0x0 0x4000>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ 0 1109 IRQ_TYPE_LEVEL_HIGH>;
#address-cells = <1>;
#size-cells = <0>;
clocks = <&clkref>;
pinctrl-0 = <&spi3_pins>;
pinctrl-names = "default";
power-domains = <&ps_spi3>;
status = "disabled";
};
serial0: serial@39b200000 {
compatible = "apple,s5l-uart";
reg = <0x3 0x9b200000 0x0 0x1000>;
reg-io-width = <4>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ 0 1097 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";
};
pcie0_dart_0: dart@581008000 {
compatible = "apple,t6000-dart";
reg = <0x5 0x81008000 0x0 0x4000>;
#iommu-cells = <1>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ 0 1271 IRQ_TYPE_LEVEL_HIGH>;
power-domains = <&ps_apcie_gp_sys>;
};
pcie0_dart_1: dart@582008000 {
compatible = "apple,t6000-dart";
reg = <0x5 0x82008000 0x0 0x4000>;
#iommu-cells = <1>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ 0 1274 IRQ_TYPE_LEVEL_HIGH>;
power-domains = <&ps_apcie_gp_sys>;
};
pcie0_dart_2: dart@583008000 {
compatible = "apple,t6000-dart";
reg = <0x5 0x83008000 0x0 0x4000>;
#iommu-cells = <1>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ 0 1277 IRQ_TYPE_LEVEL_HIGH>;
power-domains = <&ps_apcie_gp_sys>;
};
pcie0_dart_3: dart@584008000 {
compatible = "apple,t6000-dart";
reg = <0x5 0x84008000 0x0 0x4000>;
#iommu-cells = <1>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ 0 1280 IRQ_TYPE_LEVEL_HIGH>;
power-domains = <&ps_apcie_gp_sys>;
};
pcie0: pcie@590000000 {
compatible = "apple,t6000-pcie", "apple,pcie";
device_type = "pci";
reg = <0x5 0x90000000 0x0 0x1000000>,
<0x5 0x80000000 0x0 0x100000>,
<0x5 0x81000000 0x0 0x4000>,
<0x5 0x82000000 0x0 0x4000>,
<0x5 0x83000000 0x0 0x4000>,
<0x5 0x84000000 0x0 0x4000>;
reg-names = "config", "rc", "port0", "port1", "port2", "port3";
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ 0 1270 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ 0 1273 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ 0 1276 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ 0 1279 IRQ_TYPE_LEVEL_HIGH>;
msi-controller;
msi-parent = <&pcie0>;
msi-ranges = <&aic AIC_IRQ 0 1581 IRQ_TYPE_EDGE_RISING 32>;
iommu-map = <0x100 &pcie0_dart_0 1 1>,
<0x200 &pcie0_dart_1 1 1>,
<0x300 &pcie0_dart_2 1 1>,
<0x400 &pcie0_dart_3 1 1>;
iommu-map-mask = <0xff00>;
bus-range = <0 4>;
#address-cells = <3>;
#size-cells = <2>;
ranges = <0x43000000 0x5 0xa0000000 0x5 0xa0000000 0x0 0x20000000>,
<0x02000000 0x0 0xc0000000 0x5 0xc0000000 0x0 0x40000000>;
power-domains = <&ps_apcie_gp_sys>;
pinctrl-0 = <&pcie_pins>;
pinctrl-names = "default";
port00: pci@0,0 {
device_type = "pci";
reg = <0x0 0x0 0x0 0x0 0x0>;
reset-gpios = <&pinctrl_ap 4 GPIO_ACTIVE_LOW>;
#address-cells = <3>;
#size-cells = <2>;
ranges;
interrupt-controller;
#interrupt-cells = <1>;
interrupt-map-mask = <0 0 0 7>;
interrupt-map = <0 0 0 1 &port00 0 0 0 0>,
<0 0 0 2 &port00 0 0 0 1>,
<0 0 0 3 &port00 0 0 0 2>,
<0 0 0 4 &port00 0 0 0 3>;
};
port01: pci@1,0 {
device_type = "pci";
reg = <0x800 0x0 0x0 0x0 0x0>;
reset-gpios = <&pinctrl_ap 5 GPIO_ACTIVE_LOW>;
#address-cells = <3>;
#size-cells = <2>;
ranges;
interrupt-controller;
#interrupt-cells = <1>;
interrupt-map-mask = <0 0 0 7>;
interrupt-map = <0 0 0 1 &port01 0 0 0 0>,
<0 0 0 2 &port01 0 0 0 1>,
<0 0 0 3 &port01 0 0 0 2>,
<0 0 0 4 &port01 0 0 0 3>;
};
port02: pci@2,0 {
device_type = "pci";
reg = <0x1000 0x0 0x0 0x0 0x0>;
reset-gpios = <&pinctrl_ap 6 GPIO_ACTIVE_LOW>;
#address-cells = <3>;
#size-cells = <2>;
ranges;
interrupt-controller;
#interrupt-cells = <1>;
interrupt-map-mask = <0 0 0 7>;
interrupt-map = <0 0 0 1 &port02 0 0 0 0>,
<0 0 0 2 &port02 0 0 0 1>,
<0 0 0 3 &port02 0 0 0 2>,
<0 0 0 4 &port02 0 0 0 3>;
};
port03: pci@3,0 {
device_type = "pci";
reg = <0x1800 0x0 0x0 0x0 0x0>;
reset-gpios = <&pinctrl_ap 7 GPIO_ACTIVE_LOW>;
#address-cells = <3>;
#size-cells = <2>;
ranges;
interrupt-controller;
#interrupt-cells = <1>;
interrupt-map-mask = <0 0 0 7>;
interrupt-map = <0 0 0 1 &port03 0 0 0 0>,
<0 0 0 2 &port03 0 0 0 1>,
<0 0 0 3 &port03 0 0 0 2>,
<0 0 0 4 &port03 0 0 0 3>;
};
};
dart_sio_0: iommu@39b004000 {
compatible = "apple,t6000-dart", "apple,dart";
reg = <0x3 0x9b004000 0x0 0x4000>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ 0 1130 IRQ_TYPE_LEVEL_HIGH>;
#iommu-cells = <1>;
power-domains = <&ps_sio_cpu>;
};
dart_sio_1: iommu@39b008000 {
compatible = "apple,t6000-dart", "apple,dart";
reg = <0x3 0x9b008000 0x0 0x8000>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ 0 1130 IRQ_TYPE_LEVEL_HIGH>;
#iommu-cells = <1>;
power-domains = <&ps_sio_cpu>;
};
nco_clkref: clock-ref {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <1068000000>;
clock-output-names = "nco_ref";
};
nco: nco@28e03c000 {
compatible = "apple,t6000-nco", "apple,nco";
reg = <0x2 0x8e03c000 0x0 0x14000>;
clocks = <&nco_clkref>;
#clock-cells = <1>;
};
admac: dma-controller@39b400000 {
compatible = "apple,t6000-admac", "apple,admac";
reg = <0x3 0x9b400000 0x0 0x34000>;
dma-channels = <16>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ 0 1118 IRQ_TYPE_LEVEL_HIGH>;
#dma-cells = <1>;
iommus = <&dart_sio_0 2>, <&dart_sio_1 2>;
power-domains = <&ps_sio_adma>;
apple,internal-irq-destination = <1>;
};
mca: mca@9b600000 {
compatible = "apple,t6000-mca", "apple,mca";
reg = <0x3 0x9b600000 0x0 0x10000>,
<0x3 0x9b500000 0x0 0x20000>;
reg-names = "clusters", "switch";
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ 1112 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ 1113 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ 1114 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ 1115 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&nco 0>, <&nco 1>, <&nco 2>, <&nco 3>;
power-domains = <&ps_audio_p>, <&ps_mca0>, <&ps_mca1>,
<&ps_mca2>, <&ps_mca3>;
dmas = <&admac 0>, <&admac 1>, <&admac 2>, <&admac 3>,
<&admac 4>, <&admac 5>, <&admac 6>, <&admac 7>,
<&admac 8>, <&admac 9>, <&admac 10>, <&admac 11>,
<&admac 12>, <&admac 13>, <&admac 14>, <&admac 15>;
dma-names = "tx0a", "rx0a", "tx0b", "rx0b",
"tx1a", "rx1a", "tx1b", "rx1b",
"tx2a", "rx2a", "tx2b", "rx2b",
"tx3a", "rx3a", "tx3b", "rx3b";
#sound-dai-cells = <1>;
apple,nclusters = <4>;
};

View file

@ -0,0 +1,227 @@
// SPDX-License-Identifier: GPL-2.0+ OR MIT
/*
* Devices used on both dies on the Apple T6002 "M1 Ultra" and present on
* Apple T6000/T6001 "M1 Pro/Max".
*
* Copyright The Asahi Linux Contributors
*/
DIE_NODE(pmgr): power-management@28e080000 {
compatible = "apple,t6000-pmgr", "apple,pmgr", "syscon", "simple-mfd";
#address-cells = <1>;
#size-cells = <1>;
reg = <0x2 0x8e080000 0 0x4000>;
};
DIE_NODE(pmgr_east): power-management@28e580000 {
compatible = "apple,t6000-pmgr", "apple,pmgr", "syscon", "simple-mfd";
#address-cells = <1>;
#size-cells = <1>;
reg = <0x2 0x8e580000 0 0xc000>;
};
DIE_NODE(pmgr_south): power-management@28e680000 {
compatible = "apple,t6000-pmgr", "apple,pmgr", "syscon", "simple-mfd";
#address-cells = <1>;
#size-cells = <1>;
reg = <0x2 0x8e680000 0 0xc000>;
};
DIE_NODE(pinctrl_nub): pinctrl@2921f0000 {
compatible = "apple,t6000-pinctrl", "apple,pinctrl";
reg = <0x2 0x921f0000 0x0 0x4000>;
power-domains = <&DIE_NODE(ps_nub_gpio)>;
gpio-controller;
#gpio-cells = <2>;
gpio-ranges = <&DIE_NODE(pinctrl_nub) 0 0 16>;
apple,npins = <16>;
interrupt-controller;
#interrupt-cells = <2>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ DIE_NO 623 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ DIE_NO 624 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ DIE_NO 625 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ DIE_NO 626 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ DIE_NO 627 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ DIE_NO 628 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ DIE_NO 629 IRQ_TYPE_LEVEL_HIGH>;
};
DIE_NODE(pmgr_mini): power-management@292280000 {
compatible = "apple,t6000-pmgr", "apple,pmgr", "syscon", "simple-mfd";
#address-cells = <1>;
#size-cells = <1>;
reg = <0x2 0x92280000 0 0x4000>;
};
DIE_NODE(pinctrl_aop): pinctrl@293820000 {
compatible = "apple,t6000-pinctrl", "apple,pinctrl";
reg = <0x2 0x93820000 0x0 0x4000>;
gpio-controller;
#gpio-cells = <2>;
gpio-ranges = <&DIE_NODE(pinctrl_aop) 0 0 63>;
apple,npins = <63>;
interrupt-controller;
#interrupt-cells = <2>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ DIE_NO 567 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ DIE_NO 568 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ DIE_NO 569 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ DIE_NO 570 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ DIE_NO 571 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ DIE_NO 572 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ DIE_NO 573 IRQ_TYPE_LEVEL_HIGH>;
};
DIE_NODE(pinctrl_ap): pinctrl@39b028000 {
compatible = "apple,t6000-pinctrl", "apple,pinctrl";
reg = <0x3 0x9b028000 0x0 0x4000>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ DIE_NO 427 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ DIE_NO 428 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ DIE_NO 429 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ DIE_NO 430 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ DIE_NO 431 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ DIE_NO 432 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ DIE_NO 433 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 255>;
apple,npins = <255>;
interrupt-controller;
#interrupt-cells = <2>;
};
DIE_NODE(dwc3_0_dart_0): iommu@702f00000 {
compatible = "apple,t6000-dart";
reg = <0x7 0x02f00000 0x0 0x4000>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ DIE_NO 1194 IRQ_TYPE_LEVEL_HIGH>;
power-domains = <&DIE_NODE(ps_atc0_usb)>;
#iommu-cells = <1>;
};
DIE_NODE(dwc3_0_dart_1): iommu@702f80000 {
compatible = "apple,t6000-dart";
reg = <0x7 0x02f80000 0x0 0x4000>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ DIE_NO 1194 IRQ_TYPE_LEVEL_HIGH>;
power-domains = <&DIE_NODE(ps_atc0_usb)>;
#iommu-cells = <1>;
};
DIE_NODE(dwc3_0): usb@702280000 {
compatible = "apple,t6000-dwc3", "apple,dwc3", "snps,dwc3";
reg = <0x7 0x02280000 0x0 0x100000>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ DIE_NO 1190 IRQ_TYPE_LEVEL_HIGH>;
/* dr_mode = "otg"; */
usb-role-switch;
role-switch-default-mode = "host";
iommus = <&DIE_NODE(dwc3_0_dart_0) 0>,
<&DIE_NODE(dwc3_0_dart_1) 1>;
power-domains = <&DIE_NODE(ps_atc0_usb)>;
};
DIE_NODE(dwc3_1_dart_0): iommu@b02f00000 {
compatible = "apple,t6000-dart";
reg = <0xb 0x02f00000 0x0 0x4000>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ DIE_NO 1211 IRQ_TYPE_LEVEL_HIGH>;
power-domains = <&DIE_NODE(ps_atc1_usb)>;
#iommu-cells = <1>;
};
DIE_NODE(dwc3_1_dart_1): iommu@b02f80000 {
compatible = "apple,t6000-dart";
reg = <0xb 0x02f80000 0x0 0x4000>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ DIE_NO 1211 IRQ_TYPE_LEVEL_HIGH>;
power-domains = <&DIE_NODE(ps_atc1_usb)>;
#iommu-cells = <1>;
};
DIE_NODE(dwc3_1): usb@b02280000 {
compatible = "apple,t6000-dwc3", "apple,dwc3", "snps,dwc3";
reg = <0xb 0x02280000 0x0 0x100000>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ DIE_NO 1207 IRQ_TYPE_LEVEL_HIGH>;
/* dr_mode = "otg"; */
usb-role-switch;
role-switch-default-mode = "host";
iommus = <&DIE_NODE(dwc3_1_dart_0) 0>,
<&DIE_NODE(dwc3_1_dart_1) 1>;
power-domains = <&DIE_NODE(ps_atc1_usb)>;
};
DIE_NODE(dwc3_2_dart_0): iommu@f02f00000 {
compatible = "apple,t6000-dart";
reg = <0xf 0x02f00000 0x0 0x4000>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ DIE_NO 1228 IRQ_TYPE_LEVEL_HIGH>;
power-domains = <&DIE_NODE(ps_atc2_usb)>;
#iommu-cells = <1>;
};
DIE_NODE(dwc3_2_dart_1): iommu@f02f80000 {
compatible = "apple,t6000-dart";
reg = <0xf 0x02f80000 0x0 0x4000>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ DIE_NO 1228 IRQ_TYPE_LEVEL_HIGH>;
power-domains = <&DIE_NODE(ps_atc2_usb)>;
#iommu-cells = <1>;
};
DIE_NODE(dwc3_2): usb@f02280000 {
compatible = "apple,t6000-dwc3", "apple,dwc3", "snps,dwc3";
reg = <0xf 0x02280000 0x0 0x100000>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ DIE_NO 1224 IRQ_TYPE_LEVEL_HIGH>;
/* dr_mode = "otg"; */
usb-role-switch;
role-switch-default-mode = "host";
iommus = <&DIE_NODE(dwc3_2_dart_0) 0>,
<&DIE_NODE(dwc3_2_dart_1) 1>;
power-domains = <&DIE_NODE(ps_atc2_usb)>;
};
DIE_NODE(dwc3_3_dart_0): iommu@1302f00000 {
compatible = "apple,t6000-dart";
reg = <0x13 0x02f00000 0x0 0x4000>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ DIE_NO 1245 IRQ_TYPE_LEVEL_HIGH>;
power-domains = <&DIE_NODE(ps_atc3_usb)>;
#iommu-cells = <1>;
};
DIE_NODE(dwc3_3_dart_1): iommu@1302f80000 {
compatible = "apple,t6000-dart";
reg = <0x13 0x02f80000 0x0 0x4000>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ DIE_NO 1245 IRQ_TYPE_LEVEL_HIGH>;
power-domains = <&DIE_NODE(ps_atc3_usb)>;
#iommu-cells = <1>;
};
DIE_NODE(dwc3_3): usb@1302280000 {
compatible = "apple,t6000-dwc3", "apple,dwc3", "snps,dwc3";
reg = <0x13 0x02280000 0x0 0x100000>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ DIE_NO 1241 IRQ_TYPE_LEVEL_HIGH>;
/* dr_mode = "otg"; */
usb-role-switch;
role-switch-default-mode = "host";
iommus = <&DIE_NODE(dwc3_3_dart_0) 0>,
<&DIE_NODE(dwc3_3_dart_1) 1>;
power-domains = <&DIE_NODE(ps_atc3_usb)>;
};

View file

@ -0,0 +1,59 @@
// SPDX-License-Identifier: GPL-2.0+ OR MIT
/*
* GPIO pin mappings for Apple T600x SoCs.
*
* Copyright The Asahi Linux Contributors
*/
&pinctrl_ap {
i2c0_pins: i2c0-pins {
pinmux = <APPLE_PINMUX(92, 1)>,
<APPLE_PINMUX(93, 1)>;
};
i2c1_pins: i2c1-pins {
pinmux = <APPLE_PINMUX(94, 1)>,
<APPLE_PINMUX(95, 1)>;
};
i2c2_pins: i2c2-pins {
pinmux = <APPLE_PINMUX(96, 1)>,
<APPLE_PINMUX(97, 1)>;
};
i2c3_pins: i2c3-pins {
pinmux = <APPLE_PINMUX(98, 1)>,
<APPLE_PINMUX(99, 1)>;
};
i2c4_pins: i2c4-pins {
pinmux = <APPLE_PINMUX(8, 1)>,
<APPLE_PINMUX(9, 1)>;
};
i2c5_pins: i2c5-pins {
pinmux = <APPLE_PINMUX(100, 1)>,
<APPLE_PINMUX(101, 1)>;
};
spi1_pins: spi1-pins {
pinmux = <APPLE_PINMUX(10, 1)>,
<APPLE_PINMUX(11, 1)>,
<APPLE_PINMUX(32, 1)>,
<APPLE_PINMUX(33, 1)>;
};
spi3_pins: spi3-pins {
pinmux = <APPLE_PINMUX(52, 1)>,
<APPLE_PINMUX(53, 1)>,
<APPLE_PINMUX(54, 1)>,
<APPLE_PINMUX(55, 1)>;
};
pcie_pins: pcie-pins {
pinmux = <APPLE_PINMUX(0, 1)>,
<APPLE_PINMUX(1, 1)>,
<APPLE_PINMUX(2, 1)>,
<APPLE_PINMUX(3, 1)>;
};
};

View file

@ -0,0 +1,334 @@
// SPDX-License-Identifier: GPL-2.0+ OR MIT
/*
* MacBook Pro (14/16-inch, 2021)
*
* This file contains the parts common to J314 and J316 devices with both t6000 and t6001.
*
* target-type: J314s / J314c / J316s / J316c
*
* Copyright The Asahi Linux Contributors
*/
/ {
aliases {
serial0 = &serial0;
wifi0 = &wifi0;
};
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 */
backlight = <&backlight>;
status = "disabled";
};
};
memory@10000000000 {
device_type = "memory";
reg = <0x100 0 0x2 0>; /* To be filled by loader */
};
};
&serial0 {
status = "okay";
};
/* USB Type C */
&i2c0 {
hpm0: usb-pd@38 {
compatible = "apple,cd321x";
reg = <0x38>;
interrupt-parent = <&pinctrl_ap>;
interrupts = <174 IRQ_TYPE_LEVEL_LOW>;
interrupt-names = "irq";
typec0: connector {
compatible = "usb-c-connector";
label = "USB-C Left Rear";
power-role = "dual";
data-role = "dual";
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
typec0_con_hs: endpoint {
remote-endpoint = <&typec0_usb_hs>;
};
};
};
};
};
hpm1: usb-pd@3f {
compatible = "apple,cd321x";
reg = <0x3f>;
interrupt-parent = <&pinctrl_ap>;
interrupts = <174 IRQ_TYPE_LEVEL_LOW>;
interrupt-names = "irq";
typec1: connector {
compatible = "usb-c-connector";
label = "USB-C Left Front";
power-role = "dual";
data-role = "dual";
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
typec1_con_hs: endpoint {
remote-endpoint = <&typec1_usb_hs>;
};
};
};
};
};
hpm2: usb-pd@3b {
compatible = "apple,cd321x";
reg = <0x3b>;
interrupt-parent = <&pinctrl_ap>;
interrupts = <174 IRQ_TYPE_LEVEL_LOW>;
interrupt-names = "irq";
typec2: connector {
compatible = "usb-c-connector";
label = "USB-C Right";
power-role = "dual";
data-role = "dual";
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
typec2_con_hs: endpoint {
remote-endpoint = <&typec2_usb_hs>;
};
};
};
};
};
/* MagSafe port */
hpm5: usb-pd@3a {
compatible = "apple,cd321x";
reg = <0x3a>;
interrupt-parent = <&pinctrl_ap>;
interrupts = <174 IRQ_TYPE_LEVEL_LOW>;
interrupt-names = "irq";
};
};
&i2c1 {
status = "okay";
speaker_left_tweet: codec@3a {
compatible = "ti,sn012776", "ti,tas2764";
reg = <0x3a>;
shutdown-gpios = <&pinctrl_ap 178 GPIO_ACTIVE_HIGH>;
#sound-dai-cells = <0>;
sound-name-prefix = "Left Tweeter";
};
speaker_left_woof1: codec@38 {
compatible = "ti,sn012776", "ti,tas2764";
reg = <0x38>;
shutdown-gpios = <&pinctrl_ap 178 GPIO_ACTIVE_HIGH>;
#sound-dai-cells = <0>;
sound-name-prefix = "Left Woofer 1";
};
speaker_left_woof2: codec@39 {
compatible = "ti,sn012776", "ti,tas2764";
reg = <0x39>;
shutdown-gpios = <&pinctrl_ap 178 GPIO_ACTIVE_HIGH>;
#sound-dai-cells = <0>;
sound-name-prefix = "Left Woofer 2";
};
};
&i2c3 {
status = "okay";
speaker_right_tweet: codec@3d {
compatible = "ti,sn012776", "ti,tas2764";
reg = <0x3d>;
shutdown-gpios = <&pinctrl_ap 178 GPIO_ACTIVE_HIGH>;
#sound-dai-cells = <0>;
sound-name-prefix = "Right Tweeter";
};
speaker_right_woof1: codec@3b {
compatible = "ti,sn012776", "ti,tas2764";
reg = <0x3b>;
shutdown-gpios = <&pinctrl_ap 178 GPIO_ACTIVE_HIGH>;
#sound-dai-cells = <0>;
sound-name-prefix = "Right Woofer 1";
};
speaker_right_woof2: codec@3c {
compatible = "ti,sn012776", "ti,tas2764";
reg = <0x3c>;
shutdown-gpios = <&pinctrl_ap 178 GPIO_ACTIVE_HIGH>;
#sound-dai-cells = <0>;
sound-name-prefix = "Right Woofer 2";
};
};
&spi1 {
status = "disabled";
flash@0 {
compatible = "jedec,spi-nor";
reg = <0x0>;
spi-max-frequency = <25000000>;
#address-cells = <1>;
#size-cells = <1>;
};
};
&spi3 {
status = "okay";
hid-transport@0 {
compatible = "apple,spi-hid-transport";
reg = <0>;
spi-max-frequency = <8000000>;
/*
* cs-setup and cs-hold delays are derived from Apple's ADT
* Mac OS driver meta data secify 45 us for 'cs to clock' and
* 'clock to cs' delays.
*/
spi-cs-setup-delay-ns = <20000>;
spi-cs-hold-delay-ns = <20000>;
spi-cs-inactive-delay-ns = <250000>;
spien-gpios = <&pinctrl_ap 194 0>;
interrupts-extended = <&pinctrl_nub 6 IRQ_TYPE_LEVEL_LOW>;
};
};
/* PCIe devices */
&port00 {
/* WLAN */
bus-range = <1 1>;
pwren-gpios = <&smc_gpio 13 GPIO_ACTIVE_HIGH>;
wifi0: wifi@0,0 {
compatible = "pci14e4,4433";
reg = <0x10000 0x0 0x0 0x0 0x0>;
/* To be filled by the loader */
local-mac-address = [00 10 18 00 00 10];
apple,antenna-sku = "XX";
};
};
&port01 {
/* SD card reader */
bus-range = <2 2>;
pwren-gpios = <&smc_gpio 26 GPIO_ACTIVE_HIGH>;
sdhci0: mmc@0,0 {
compatible = "pci17a0,9755";
reg = <0x20000 0x0 0x0 0x0 0x0>;
cd-inverted;
wp-inverted;
};
};
&pcie0_dart_2 {
status = "disabled";
};
&pcie0_dart_3 {
status = "disabled";
};
/delete-node/ &port02;
/delete-node/ &port03;
/* USB controllers */
&dwc3_0 {
port {
typec0_usb_hs: endpoint {
remote-endpoint = <&typec0_con_hs>;
};
};
};
&dwc3_1 {
port {
typec1_usb_hs: endpoint {
remote-endpoint = <&typec1_con_hs>;
};
};
};
&dwc3_2 {
port {
typec2_usb_hs: endpoint {
remote-endpoint = <&typec2_con_hs>;
};
};
};
/* ATC3 is used for DisplayPort -> HDMI only */
&dwc3_3_dart_0 {
status = "disabled";
};
&dwc3_3_dart_1 {
status = "disabled";
};
&dwc3_3 {
status = "disabled";
};
/ {
backlight: gpio-bl {
compatible = "gpio-backlight";
gpios = <&smc_gpio 19 GPIO_ACTIVE_HIGH>;
default-on;
};
sound {
compatible = "apple,j314-macaudio", "apple,macaudio";
model = "MacBook Pro J314/6 integrated audio";
/*
* DANGER ZONE: You can blow your speakers!
*
* The drivers are not ready, and unless you are careful
* to attenuate the audio stream, you run the risk of
* blowing your speakers.
*/
status = "disabled";
dai-link@0 {
link-name = "Speakers";
mclk-fs = <256>;
cpu {
sound-dai = <&mca 0>, <&mca 1>;
};
codec {
sound-dai = <&speaker_left_woof1>,
<&speaker_right_woof1>,
<&speaker_left_tweet>,
<&speaker_right_tweet>,
<&speaker_left_woof2>,
<&speaker_right_woof2>;
};
};
};
};

View file

@ -0,0 +1,42 @@
// SPDX-License-Identifier: GPL-2.0+ OR MIT
/*
* NVMe related devices for Apple T600x SoCs.
*
* Copyright The Asahi Linux Contributors
*/
DIE_NODE(ans_mbox): mbox@38f408000 {
compatible = "apple,t6000-asc-mailbox", "apple,asc-mailbox-v4";
reg = <0x3 0x8f408000 0x0 0x4000>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ DIE_NO 1069 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ DIE_NO 1070 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ DIE_NO 1071 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ DIE_NO 1072 IRQ_TYPE_LEVEL_HIGH>;
interrupt-names = "send-empty", "send-not-empty",
"recv-empty", "recv-not-empty";
power-domains = <&DIE_NODE(ps_ans2)>;
#mbox-cells = <0>;
};
DIE_NODE(sart): sart@393c50000 {
compatible = "apple,t6000-sart", "apple,sart3";
reg = <0x3 0x93c50000 0x0 0x10000>;
power-domains = <&DIE_NODE(ps_ans2)>;
};
DIE_NODE(nvme): nvme@393cc0000 {
compatible = "apple,t6000-nvme-ans2", "apple,nvme-ans2";
reg = <0x3 0x93cc0000 0x0 0x40000>, <0x3 0x8f400000 0x0 0x4000>;
reg-names = "nvme", "ans";
interrupt-parent = <&aic>;
/* The NVME interrupt is always routed to die */
interrupts = <AIC_IRQ 0 1613 IRQ_TYPE_LEVEL_HIGH>;
mboxes = <&DIE_NODE(ans_mbox)>;
apple,sart = <&DIE_NODE(sart)>;
power-domains = <&DIE_NODE(ps_ans2)>,
<&DIE_NODE(ps_apcie_st_sys)>,
<&DIE_NODE(ps_apcie_st1_sys)>;
power-domain-names = "ans", "apcie0", "apcie1";
resets = <&DIE_NODE(ps_ans2)>;
};

2013
arch/arm/dts/t600x-pmgr.dtsi Normal file

File diff suppressed because it is too large Load diff