From 73f8f630ae9e4f3d183edc43d68887fc2382460b Mon Sep 17 00:00:00 2001 From: Erik Bourget Date: Tue, 3 Nov 2026 20:22:02 -0500 Subject: [PATCH 1/8] arm64: dts: apple: Add J716c (MacBook Pro 16-inch, M5 Max) Add t6050-max.dtsi, the one-die M5 Max: die 0 of the T6050, with six cores in each cluster, 18 in all, and the MTP, so far described for this part only. Add the J716c board on it. Described so far: the CPUs, AIC, NVMe, the SMC, the boot framebuffer, the DockChannel console and the keyboard and trackpad (MTP). The GPU, video decoder and memory cache controllers are not described for the Max yet; the internal PCIe host, USB-C, I2C, the SMC sensors and pinctrl_ap stay disabled until each is brought up on this board. Developed with Claude Code. Signed-off-by: Erik Bourget --- arch/arm64/boot/dts/apple/Makefile | 1 + arch/arm64/boot/dts/apple/t6050-j716c.dts | 159 ++++++++++++++++++++++ arch/arm64/boot/dts/apple/t6050-max.dtsi | 116 ++++++++++++++++ 3 files changed, 276 insertions(+) create mode 100644 arch/arm64/boot/dts/apple/t6050-j716c.dts create mode 100644 arch/arm64/boot/dts/apple/t6050-max.dtsi diff --git a/arch/arm64/boot/dts/apple/Makefile b/arch/arm64/boot/dts/apple/Makefile index e72ac12cf1d8e..f5f75a3922adb 100644 --- a/arch/arm64/boot/dts/apple/Makefile +++ b/arch/arm64/boot/dts/apple/Makefile @@ -97,6 +97,7 @@ dtb-$(CONFIG_ARCH_APPLE) += t6034-j516m.dtb dtb-$(CONFIG_ARCH_APPLE) += t6040-j614s.dtb dtb-$(CONFIG_ARCH_APPLE) += t6040-j616s.dtb dtb-$(CONFIG_ARCH_APPLE) += t6040-j616s-tether.dtb +dtb-$(CONFIG_ARCH_APPLE) += t6050-j716c.dtb dtb-$(CONFIG_ARCH_APPLE) += t6050-j775d.dtb dtb-$(CONFIG_ARCH_APPLE) += t8112-j413.dtb dtb-$(CONFIG_ARCH_APPLE) += t8112-j415.dtb diff --git a/arch/arm64/boot/dts/apple/t6050-j716c.dts b/arch/arm64/boot/dts/apple/t6050-j716c.dts new file mode 100644 index 0000000000000..86297af1c3102 --- /dev/null +++ b/arch/arm64/boot/dts/apple/t6050-j716c.dts @@ -0,0 +1,159 @@ +// SPDX-License-Identifier: GPL-2.0+ OR MIT +/* + * MacBook Pro (16-inch, M5 Max, 2026) + * + * target-type: J716c + * + * The M5 Max is one T6050 die, die 0 (t6050-max.dtsi). This file enables + * and configures what has been brought up on this board; the SoC's other + * ports and buses stay disabled until each is described for it. + * + * Copyright The Asahi Linux Contributors + */ + +/dts-v1/; + +#include "t6050-max.dtsi" + +/ { + compatible = "apple,j716c", "apple,t6050", "apple,arm-platform"; + model = "Apple MacBook Pro (16-inch, M5 Max, 2026)"; + chassis-type = "laptop"; + + aliases { + serial0 = &dockchannel; + }; + + chosen { + #address-cells = <2>; + #size-cells = <2>; + ranges; + /* Normally replaced by the loader */ + bootargs = "maxcpus=1"; + + framebuffer0: framebuffer@0 { + compatible = "apple,simple-framebuffer", "simple-framebuffer"; + reg = <0 0 0 0>; /* To be filled by the loader */ + /* Format properties will be added by the loader */ + status = "disabled"; + }; + }; +}; + +/* The internal PCIe host: none of its ports is described yet */ +&pcie0 { + status = "disabled"; +}; + +/* ATC1, ATC3 and the PD controller buses nub-spmi-a0 and -a2: not yet described for this board */ +&nub_spmi_a0 { + status = "disabled"; +}; + +&nub_spmi_a2 { + status = "disabled"; +}; + +&atc1_phy_mbox { + status = "disabled"; +}; + +&atc1_phy { + status = "disabled"; +}; + +&usb_drd1 { + status = "disabled"; +}; + +&usb_drd1_dart_0 { + status = "disabled"; +}; + +&usb_drd1_dart_1 { + status = "disabled"; +}; + +&atc3_phy_mbox { + status = "disabled"; +}; + +&atc3_phy { + status = "disabled"; +}; + +&usb_drd3 { + status = "disabled"; +}; + +&usb_drd3_dart_0 { + status = "disabled"; +}; + +&usb_drd3_dart_1 { + status = "disabled"; +}; + +&i2c1 { + status = "disabled"; +}; + +&i2c2 { + status = "disabled"; +}; + +/* + * Reading pin 112's register (0x29c0001c0) takes an SError at probe; nothing in + * this file names a pin yet. + */ +&pinctrl_ap { + status = "disabled"; +}; + +/* This board's SMC fan and power keys are not yet checked */ +&smc_hwmon { + status = "disabled"; +}; + +/* + * The console is on the USB debug link, which drains only while a host reads + * it; the machine also boots with nothing attached there. + */ +&dockchannel { + apple,tx-never-wait; + status = "okay"; +}; + +/* The keyboard and trackpad: the HID transport on the MTP's DockChannel FIFO */ +&mtp_dockchannel { + mtp_hid: input@8000 { + compatible = "apple,dockchannel-hid"; + reg = <0x8000 0x1000>, <0xc000 0x1000>, + <0x0 0x1000>, <0x4000 0x1000>; + reg-names = "config", "data", "rmt-config", "rmt-data"; + iommus = <&mtp_dart 0>; + interrupt-parent = <&mtp_dockchannel>; + interrupts = <2 IRQ_TYPE_LEVEL_HIGH>, + <3 IRQ_TYPE_LEVEL_HIGH>; + interrupt-names = "tx", "rx"; + apple,fifo-size = <0x800>; + apple,helper-cpu = <&mtp>; + apple,afe-reset-gpios = <&smc_pcio 2 GPIO_ACTIVE_HIGH>; + + multi-touch { + apple,power-method = <2>; + firmware-name = "apple/tpmtfw-j716c.bin"; + }; + + keyboard { + }; + + stm { + }; + }; +}; + +/* This board's PCIO outputs, the trackpad AFE reset (2) among them */ +&smc_pcio { + apple,output-commands = /bits/ 64 <0x001a000000000000 0x000f000000800000 0x011c000000010000>; +}; diff --git a/arch/arm64/boot/dts/apple/t6050-max.dtsi b/arch/arm64/boot/dts/apple/t6050-max.dtsi new file mode 100644 index 0000000000000..487288170c9ad --- /dev/null +++ b/arch/arm64/boot/dts/apple/t6050-max.dtsi @@ -0,0 +1,116 @@ +// SPDX-License-Identifier: GPL-2.0+ OR MIT +/* + * Apple T6050 "M5 Max" SoC: one die + * + * Die 0 alone: t6050-die0.dtsi and one instance of the per-die template + * (t6050-dieX.dtsi), then the blocks described so far for this part only. + * + * Copyright The Asahi Linux Contributors + */ + +#include +#include +#include +#include +#include + +#include "multi-die-cpp.h" + +#include "t6050-base.dtsi" + +/ { + /* + * Six cores in each cluster. The sixth of each comes after the others, so that the + * first fifteen CPUs are numbered as on a part with five cores in each cluster. + */ + cpus { + T6050_M_CPU(cpu0, 40000, cpufreq_mc0); + T6050_M_CPU(cpu1, 40001, cpufreq_mc0); + T6050_M_CPU(cpu2, 40002, cpufreq_mc0); + T6050_M_CPU(cpu3, 40003, cpufreq_mc0); + T6050_M_CPU(cpu4, 40004, cpufreq_mc0); + T6050_M_CPU(cpu6, 40100, cpufreq_mc1); + T6050_M_CPU(cpu7, 40101, cpufreq_mc1); + T6050_M_CPU(cpu8, 40102, cpufreq_mc1); + T6050_M_CPU(cpu9, 40103, cpufreq_mc1); + T6050_M_CPU(cpu10, 40104, cpufreq_mc1); + T6050_P_CPU(cpu12, 10200, cpufreq_pc); + T6050_P_CPU(cpu13, 10201, cpufreq_pc); + T6050_P_CPU(cpu14, 10202, cpufreq_pc); + T6050_P_CPU(cpu15, 10203, cpufreq_pc); + T6050_P_CPU(cpu16, 10204, cpufreq_pc); + + /* The sixth core of each cluster */ + T6050_M_CPU(cpu5, 40005, cpufreq_mc0); + T6050_M_CPU(cpu11, 40105, cpufreq_mc1); + T6050_P_CPU(cpu17, 10205, cpufreq_pc); + }; +}; + +#define DIE +#define DIE_NO 0 +#define DIE_UNIT_PREFIX +#define DIE_ATC1 atc1 +#define SOC_NODE die0 + +#include "t6050-dieX.dtsi" +#include "t6050-die0.dtsi" + +#undef DIE +#undef DIE_NO +#undef DIE_UNIT_PREFIX +#undef DIE_ATC1 +#undef SOC_NODE + +/* + * The MTP coprocessor (the keyboard and trackpad's), which iBoot leaves running with its + * firmware, behind its DART, and the DockChannel FIFO its HID transport uses; the board adds + * that transport. From the ADT: /arm-io/mtp reg[0] 0x294600000 (the ASC, its v4 mailbox at + * +0x8000; interrupts [677, 676, 679, 678]: 676..679 in send-empty, send-not-empty, recv-empty, + * recv-not-empty order), dart-mtp 0x294800000 (interrupt 659, SID 0, vm-base 0x100_00004000), + * dockchannel-mtp 0x294b14000 for its interrupts (660) and 0x294b28000.. for the FIFOs. + */ +&die0 { + mtp_mbox: mailbox@294608000 { + compatible = "apple,t6050-asc-mailbox", "apple,asc-mailbox-v4"; + reg = <0x2 0x94608000 0x0 0x4000>; + interrupts = , + , + , + ; + interrupt-names = "send-empty", "send-not-empty", + "recv-empty", "recv-not-empty"; + #mbox-cells = <0>; + }; + + mtp_dart: iommu@294800000 { + compatible = "apple,t6050-dart", "apple,t8110-dart"; + reg = <0x2 0x94800000 0x0 0xc000>; + interrupts = ; + #iommu-cells = <1>; + apple,dma-range = <0x100 0x4000 0x0 0xffff0000>; + }; + + mtp: mtp@294600000 { + compatible = "apple,t6050-mtp", "apple,mtp", "apple,rtk-helper-asc4"; + reg = <0x2 0x94600000 0x0 0x4000>, + <0x2 0x94c00000 0x0 0xc4000>; + reg-names = "asc", "sram"; + mboxes = <&mtp_mbox>; + iommus = <&mtp_dart 0>; + #helper-cells = <0>; + }; + + mtp_dockchannel: fifo@294b14000 { + compatible = "apple,t6050-dockchannel", "apple,dockchannel"; + reg = <0x2 0x94b14000 0x0 0x1000>; + reg-names = "irq"; + interrupts = ; + ranges = <0 0x2 0x94b28000 0x10000>; + nonposted-mmio; + #address-cells = <1>; + #size-cells = <1>; + interrupt-controller; + #interrupt-cells = <2>; + }; +}; From 264b181bfe779d2ab85302f814cf7b161e6973c4 Mon Sep 17 00:00:00 2001 From: Erik Bourget Date: Tue, 3 Nov 2026 20:32:07 -0500 Subject: [PATCH 2/8] pinctrl: apple-gpio: Use the uncached regmap on T6050 On J716c, reading pin 112 of the AP pin controller takes an SError. Use the uncached regmap on T6050, as on T8140 and T8132, so that only the pins a board names are ever read. Developed with Claude Code. Signed-off-by: Erik Bourget --- drivers/pinctrl/pinctrl-apple-gpio.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/pinctrl/pinctrl-apple-gpio.c b/drivers/pinctrl/pinctrl-apple-gpio.c index 7679347046a13..d3c482fa4234c 100644 --- a/drivers/pinctrl/pinctrl-apple-gpio.c +++ b/drivers/pinctrl/pinctrl-apple-gpio.c @@ -633,6 +633,7 @@ static int apple_gpio_pinctrl_probe(struct platform_device *pdev) static const struct of_device_id apple_gpio_pinctrl_of_match[] = { { .compatible = "apple,t8140-pinctrl", .data = &apple_gpio_uncached_hw }, { .compatible = "apple,t8132-pinctrl", .data = &apple_gpio_uncached_hw }, + { .compatible = "apple,t6050-pinctrl", .data = &apple_gpio_uncached_hw }, { .compatible = "apple,t8103-pinctrl", }, { .compatible = "apple,pinctrl", }, { } From 301c0e3ca37654c520e3b18f686effaf9880befa Mon Sep 17 00:00:00 2001 From: Erik Bourget Date: Tue, 3 Nov 2026 20:32:07 -0500 Subject: [PATCH 3/8] arm64: dts: apple: j716c: Add the N1 on PCIe port 0 The boot loader trains port 0 (the N1 Wi-Fi/Bluetooth); describe it with its PERST# on pinctrl_ap pin 80. Pin 112 of pinctrl_ap takes an SError when read, so pin 80 is the only one exposed. Developed with Claude Code. Signed-off-by: Erik Bourget --- arch/arm64/boot/dts/apple/t6050-j716c.dts | 74 +++++++++++++++++++++-- 1 file changed, 69 insertions(+), 5 deletions(-) diff --git a/arch/arm64/boot/dts/apple/t6050-j716c.dts b/arch/arm64/boot/dts/apple/t6050-j716c.dts index 86297af1c3102..da061edcb7b2f 100644 --- a/arch/arm64/boot/dts/apple/t6050-j716c.dts +++ b/arch/arm64/boot/dts/apple/t6050-j716c.dts @@ -22,6 +22,9 @@ aliases { serial0 = &dockchannel; + /* kboot fills the N1's factory addresses from /chosen through these */ + wifi0 = &n1_alpha; + bluetooth0 = &n1_beta; }; chosen { @@ -40,9 +43,69 @@ }; }; -/* The internal PCIe host: none of its ports is described yet */ +/* + * PCIe port 0: the N1 (Wi-Fi and Bluetooth), the only GP port this board uses besides the SD + * reader on port 1 (not yet described). The boot loader trains the link after the SMC releases + * the N1's reset and keeps power, clocks, the PHY and PERST; Linux owns the routing, MSI and + * the DART. Disabled with its DART until the boot loader trains it, which also renumbers the + * bus here to the PCI core's order. + */ &pcie0 { - status = "disabled"; + reg = <0x1c 0xb0000000 0x0 0x10000000>, + <0x4 0x14000000 0x0 0x4000>, + <0x4 0x10028000 0x0 0x8000>, + <0x4 0x17010000 0x0 0x4000>, + <0x4 0x10024000 0x0 0x4000>; + reg-names = "config", "rc", "port0", "phy0", "intr2axi0"; + interrupts = ; + interrupt-names = "port0"; + + /* The N1's three functions are on DART streams 1-3 */ + iommu-map = <0x100 &dart_apcie0 1 3>; + bus-range = <0 4>; + + port00: pci@0,0 { + device_type = "pci"; + reg = <0x0 0 0 0 0>; + bus-range = <1 1>; + apple,link-trained-by-bootloader; + /* PERST#, driven only by the root-port reset after the N1's ROM stage */ + reset-gpios = <&pinctrl_ap 80 GPIO_ACTIVE_LOW>; + status = "disabled"; + + #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>; + + /* platform ID (board 0x0e << 16) | chip 0x6050 */ + n1_control: control@0,0 { + compatible = "pci106b,1900"; + reg = <0x10000 0x0 0x0 0x0 0x0>; + firmware-name = "apple/centauri/j716c-ftab.bin"; + apple,centauri-platform-id = <0x000e6050>; + apple,centauri-protocol = <27>; + }; + + n1_alpha: wifi@0,1 { + compatible = "pci106b,1902"; + reg = <0x10100 0x0 0x0 0x0 0x0>; + local-mac-address = [00 00 00 00 00 00]; + }; + + n1_beta: bluetooth@0,2 { + compatible = "pci106b,1903"; + reg = <0x10200 0x0 0x0 0x0 0x0>; + local-bd-address = [00 00 00 00 00 00]; + }; + }; }; /* ATC1, ATC3 and the PD controller buses nub-spmi-a0 and -a2: not yet described for this board */ @@ -103,11 +166,12 @@ }; /* - * Reading pin 112's register (0x29c0001c0) takes an SError at probe; nothing in - * this file names a pin yet. + * Pin 112's register (0x29c0001c0) takes an SError when read, so only the pins a node + * here names are exposed: 80 (PCIe port 0's PERST#, ADT pci-bridge0 function-perst). + * A reserved line cannot be requested, so a node that names a new pin opens it here too. */ &pinctrl_ap { - status = "disabled"; + gpio-reserved-ranges = <0 80>, <81 140>; }; /* This board's SMC fan and power keys are not yet checked */ From aac68821ad72b9a1368fd3738bc58997b6a87c9e Mon Sep 17 00:00:00 2001 From: Joshua Warren <816217+joshuaswarren@users.noreply.github.com> Date: Sat, 7 Nov 2026 03:25:55 -0600 Subject: [PATCH 4/8] arm64: dts: apple: add the J714c (MacBook Pro 14-inch, M5 Max) The 14-inch M5 Max is the same one-die T6050 as the J716c, so the board file reuses t6050-max.dtsi and enables the set the J716c file enables: CPUs, AIC, NVMe, SMC, boot framebuffer, DockChannel console, keyboard and trackpad, and the N1 Wi-Fi/Bluetooth on PCIe port 0. This PR is stacked on the J716c device tree PR (aurora-silicon/linux#945). Three values differ from the J716c file: - the N1 firmware name and platform ID (j714c-ftab.bin, board 0x0a), - the trackpad firmware (tpmtfw-j714c.bin), - the trackpad AFE reset is owned by the MTP firmware (power method 2, apple,firmware-managed-reset), so the board has no smc_pcio reset line. Add the apple,j714c compatible to the binding. Signed-off-by: Joshua Warren <816217+joshuaswarren@users.noreply.github.com> --- .../devicetree/bindings/arm/apple.yaml | 6 + arch/arm64/boot/dts/apple/Makefile | 1 + arch/arm64/boot/dts/apple/t6050-j714c.dts | 223 ++++++++++++++++++ 3 files changed, 230 insertions(+) create mode 100644 arch/arm64/boot/dts/apple/t6050-j714c.dts diff --git a/Documentation/devicetree/bindings/arm/apple.yaml b/Documentation/devicetree/bindings/arm/apple.yaml index f3b2dfbc3ef93..18ece4568bcaf 100644 --- a/Documentation/devicetree/bindings/arm/apple.yaml +++ b/Documentation/devicetree/bindings/arm/apple.yaml @@ -472,6 +472,12 @@ properties: - const: apple,t6041 - const: apple,arm-platform + - description: Apple M5 Max SoC based platforms + items: + - const: apple,j714c # MacBook Pro (14-inch, M5 Max, 2026) + - const: apple,t6050 + - const: apple,arm-platform + - description: Apple M5 Ultra SoC based platforms items: - const: apple,j775d # Mac Studio (M5 Ultra, 2026) diff --git a/arch/arm64/boot/dts/apple/Makefile b/arch/arm64/boot/dts/apple/Makefile index f5f75a3922adb..44344997f49ba 100644 --- a/arch/arm64/boot/dts/apple/Makefile +++ b/arch/arm64/boot/dts/apple/Makefile @@ -97,6 +97,7 @@ dtb-$(CONFIG_ARCH_APPLE) += t6034-j516m.dtb dtb-$(CONFIG_ARCH_APPLE) += t6040-j614s.dtb dtb-$(CONFIG_ARCH_APPLE) += t6040-j616s.dtb dtb-$(CONFIG_ARCH_APPLE) += t6040-j616s-tether.dtb +dtb-$(CONFIG_ARCH_APPLE) += t6050-j714c.dtb dtb-$(CONFIG_ARCH_APPLE) += t6050-j716c.dtb dtb-$(CONFIG_ARCH_APPLE) += t6050-j775d.dtb dtb-$(CONFIG_ARCH_APPLE) += t8112-j413.dtb diff --git a/arch/arm64/boot/dts/apple/t6050-j714c.dts b/arch/arm64/boot/dts/apple/t6050-j714c.dts new file mode 100644 index 0000000000000..d3b0a511fe98d --- /dev/null +++ b/arch/arm64/boot/dts/apple/t6050-j714c.dts @@ -0,0 +1,223 @@ +// SPDX-License-Identifier: GPL-2.0+ OR MIT +/* + * MacBook Pro (14-inch, M5 Max, 2026) + * + * target-type: J714c + * + * The M5 Max is one T6050 die, die 0 (t6050-max.dtsi). This file enables + * and configures what has been brought up on this board, the same set as + * t6050-j716c.dts; the SoC's other ports and buses stay disabled until each + * is described for it. + * + * Copyright The Asahi Linux Contributors + */ + +/dts-v1/; + +#include "t6050-max.dtsi" + +/ { + compatible = "apple,j714c", "apple,t6050", "apple,arm-platform"; + model = "Apple MacBook Pro (14-inch, M5 Max, 2026)"; + chassis-type = "laptop"; + + aliases { + serial0 = &dockchannel; + /* kboot fills the N1's factory addresses from /chosen through these */ + wifi0 = &n1_alpha; + bluetooth0 = &n1_beta; + }; + + chosen { + #address-cells = <2>; + #size-cells = <2>; + ranges; + /* Normally replaced by the loader */ + bootargs = "maxcpus=1"; + + framebuffer0: framebuffer@0 { + compatible = "apple,simple-framebuffer", "simple-framebuffer"; + reg = <0 0 0 0>; /* To be filled by the loader */ + /* Format properties will be added by the loader */ + status = "disabled"; + }; + }; +}; + +/* + * PCIe port 0: the N1 (Wi-Fi and Bluetooth). The registers, interrupt, DART streams + * and PERST# pin are the J716c's: the J714c's ADT has the same port. The boot loader + * trains the link after the SMC releases the N1's reset and keeps power, clocks, the + * PHY and PERST; Linux owns the routing, MSI and the DART. Disabled with its DART + * until the boot loader trains it, which also renumbers the bus here to the PCI + * core's order. + */ +&pcie0 { + reg = <0x1c 0xb0000000 0x0 0x10000000>, + <0x4 0x14000000 0x0 0x4000>, + <0x4 0x10028000 0x0 0x8000>, + <0x4 0x17010000 0x0 0x4000>, + <0x4 0x10024000 0x0 0x4000>; + reg-names = "config", "rc", "port0", "phy0", "intr2axi0"; + interrupts = ; + interrupt-names = "port0"; + + /* The N1's three functions are on DART streams 1-3 */ + iommu-map = <0x100 &dart_apcie0 1 3>; + bus-range = <0 4>; + + port00: pci@0,0 { + device_type = "pci"; + reg = <0x0 0 0 0 0>; + bus-range = <1 1>; + apple,link-trained-by-bootloader; + /* PERST#, driven only by the root-port reset after the N1's ROM stage */ + reset-gpios = <&pinctrl_ap 80 GPIO_ACTIVE_LOW>; + status = "disabled"; + + #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>; + + /* platform ID (board 0x0a << 16) | chip 0x6050 */ + n1_control: control@0,0 { + compatible = "pci106b,1900"; + reg = <0x10000 0x0 0x0 0x0 0x0>; + firmware-name = "apple/centauri/j714c-ftab.bin"; + apple,centauri-platform-id = <0x000a6050>; + apple,centauri-protocol = <27>; + }; + + n1_alpha: wifi@0,1 { + compatible = "pci106b,1902"; + reg = <0x10100 0x0 0x0 0x0 0x0>; + local-mac-address = [00 00 00 00 00 00]; + }; + + n1_beta: bluetooth@0,2 { + compatible = "pci106b,1903"; + reg = <0x10200 0x0 0x0 0x0 0x0>; + local-bd-address = [00 00 00 00 00 00]; + }; + }; +}; + +/* ATC1, ATC3 and the PD controller buses nub-spmi-a0 and -a2: not yet described for this board */ +&nub_spmi_a0 { + status = "disabled"; +}; + +&nub_spmi_a2 { + status = "disabled"; +}; + +&atc1_phy_mbox { + status = "disabled"; +}; + +&atc1_phy { + status = "disabled"; +}; + +&usb_drd1 { + status = "disabled"; +}; + +&usb_drd1_dart_0 { + status = "disabled"; +}; + +&usb_drd1_dart_1 { + status = "disabled"; +}; + +&atc3_phy_mbox { + status = "disabled"; +}; + +&atc3_phy { + status = "disabled"; +}; + +&usb_drd3 { + status = "disabled"; +}; + +&usb_drd3_dart_0 { + status = "disabled"; +}; + +&usb_drd3_dart_1 { + status = "disabled"; +}; + +&i2c1 { + status = "disabled"; +}; + +&i2c2 { + status = "disabled"; +}; + +/* + * Only the pins a node here names are exposed, as on the J716c: pin 112's register + * takes an SError when read. 80 is PCIe port 0's PERST#. + */ +&pinctrl_ap { + gpio-reserved-ranges = <0 80>, <81 140>; +}; + +/* This board's SMC fan and power keys are not yet checked */ +&smc_hwmon { + status = "disabled"; +}; + +/* + * The console is on the USB debug link, which drains only while a host reads + * it; the machine also boots with nothing attached there. + */ +&dockchannel { + apple,tx-never-wait; + status = "okay"; +}; + +/* + * The keyboard and trackpad: the HID transport on the MTP's DockChannel FIFO. + * The J714c's MTP firmware owns the trackpad AFE reset, so there is no reset + * GPIO here, unlike the J716c. + */ +&mtp_dockchannel { + mtp_hid: input@8000 { + compatible = "apple,dockchannel-hid"; + reg = <0x8000 0x1000>, <0xc000 0x1000>, + <0x0 0x1000>, <0x4000 0x1000>; + reg-names = "config", "data", "rmt-config", "rmt-data"; + iommus = <&mtp_dart 0>; + interrupt-parent = <&mtp_dockchannel>; + interrupts = <2 IRQ_TYPE_LEVEL_HIGH>, + <3 IRQ_TYPE_LEVEL_HIGH>; + interrupt-names = "tx", "rx"; + apple,fifo-size = <0x800>; + apple,helper-cpu = <&mtp>; + + multi-touch { + apple,power-method = <2>; + apple,firmware-managed-reset; + firmware-name = "apple/tpmtfw-j714c.bin"; + }; + + keyboard { + }; + + stm { + }; + }; +}; From e5fc16c7a5bacc5dd47ba9a0d4387ed574b243ad Mon Sep 17 00:00:00 2001 From: Ryan Murray <81541646+RyanTheTide@users.noreply.github.com> Date: Sun, 8 Nov 2026 15:36:33 +1100 Subject: [PATCH 5/8] dt-bindings: arm: apple: Add the MacBook Pro (16-inch, M5 Max) t6050-j716c.dts uses "apple,j716c", which the M5 Max entry did not list. List it next to the J714c. Assisted-by: LLM Signed-off-by: Ryan Murray <81541646+RyanTheTide@users.noreply.github.com> --- Documentation/devicetree/bindings/arm/apple.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Documentation/devicetree/bindings/arm/apple.yaml b/Documentation/devicetree/bindings/arm/apple.yaml index 0e4ec99dbb6f8..1b1987b2581d6 100644 --- a/Documentation/devicetree/bindings/arm/apple.yaml +++ b/Documentation/devicetree/bindings/arm/apple.yaml @@ -480,7 +480,9 @@ properties: - description: Apple M5 Max SoC based platforms items: - - const: apple,j714c # MacBook Pro (14-inch, M5 Max, 2026) + - enum: + - apple,j714c # MacBook Pro (14-inch, M5 Max, 2026) + - apple,j716c # MacBook Pro (16-inch, M5 Max, 2026) - const: apple,t6050 - const: apple,arm-platform From 33330524db43136466d173699a8f49bfeb5ce739 Mon Sep 17 00:00:00 2001 From: Ryan Murray <81541646+RyanTheTide@users.noreply.github.com> Date: Sun, 8 Nov 2026 15:36:34 +1100 Subject: [PATCH 6/8] arm64: dts: apple: t6050-j714c, j716c: Drop the default bootargs The boot loader always passes the command line, so "maxcpus=1" never applies on a normal boot and would only hide 17 of the 18 cores when it did, as on the J775D. Assisted-by: LLM Signed-off-by: Ryan Murray <81541646+RyanTheTide@users.noreply.github.com> --- arch/arm64/boot/dts/apple/t6050-j714c.dts | 2 -- arch/arm64/boot/dts/apple/t6050-j716c.dts | 2 -- 2 files changed, 4 deletions(-) diff --git a/arch/arm64/boot/dts/apple/t6050-j714c.dts b/arch/arm64/boot/dts/apple/t6050-j714c.dts index d3b0a511fe98d..0f345ae461fcd 100644 --- a/arch/arm64/boot/dts/apple/t6050-j714c.dts +++ b/arch/arm64/boot/dts/apple/t6050-j714c.dts @@ -32,8 +32,6 @@ #address-cells = <2>; #size-cells = <2>; ranges; - /* Normally replaced by the loader */ - bootargs = "maxcpus=1"; framebuffer0: framebuffer@0 { compatible = "apple,simple-framebuffer", "simple-framebuffer"; diff --git a/arch/arm64/boot/dts/apple/t6050-j716c.dts b/arch/arm64/boot/dts/apple/t6050-j716c.dts index da061edcb7b2f..ba6f14f90440b 100644 --- a/arch/arm64/boot/dts/apple/t6050-j716c.dts +++ b/arch/arm64/boot/dts/apple/t6050-j716c.dts @@ -31,8 +31,6 @@ #address-cells = <2>; #size-cells = <2>; ranges; - /* Normally replaced by the loader */ - bootargs = "maxcpus=1"; framebuffer0: framebuffer@0 { compatible = "apple,simple-framebuffer", "simple-framebuffer"; From 962c176c2d399956baa6b5bfde36f9342d6df0bc Mon Sep 17 00:00:00 2001 From: Ryan Murray <81541646+RyanTheTide@users.noreply.github.com> Date: Sun, 8 Nov 2026 16:02:38 +1100 Subject: [PATCH 7/8] dt-bindings: apple: Add the T6050 DockChannel, MTP and a board without pcIO lines The J716c and J714c trees use the T6050 DockChannel FIFO and MTP, which the shared bindings did not list. T6050's MTP carries no SoC-specific helper compatible, so its node is "apple,t6050-mtp", "apple,mtp", "apple,rtk-helper-asc4"; describe that form next to the existing one. The J714c uses none of the SMC pcIO outputs (its MTP firmware owns the trackpad reset), so its pcIO node has no command list. Let a board leave the list out. Assisted-by: LLM Signed-off-by: Ryan Murray <81541646+RyanTheTide@users.noreply.github.com> --- .../bindings/gpio/apple,smc-pcio-gpio.yaml | 5 +- .../bindings/soc/apple/apple,dockchannel.yaml | 1 + .../soc/apple/apple,rtk-helper-asc4.yaml | 50 +++++++++++-------- 3 files changed, 32 insertions(+), 24 deletions(-) diff --git a/Documentation/devicetree/bindings/gpio/apple,smc-pcio-gpio.yaml b/Documentation/devicetree/bindings/gpio/apple,smc-pcio-gpio.yaml index 94d9672189fc6..58f33eceac5ef 100644 --- a/Documentation/devicetree/bindings/gpio/apple,smc-pcio-gpio.yaml +++ b/Documentation/devicetree/bindings/gpio/apple,smc-pcio-gpio.yaml @@ -29,12 +29,13 @@ properties: minItems: 1 maxItems: 64 uniqueItems: true - description: Unique command templates with low 16 bits clear, in GPIO order + description: + Unique command templates with low 16 bits clear, in GPIO order. A board + that uses none of the outputs leaves the list out. required: - compatible - gpio-controller - '#gpio-cells' - - apple,output-commands additionalProperties: false diff --git a/Documentation/devicetree/bindings/soc/apple/apple,dockchannel.yaml b/Documentation/devicetree/bindings/soc/apple/apple,dockchannel.yaml index 9ee4a45c910d9..630786f68d11f 100644 --- a/Documentation/devicetree/bindings/soc/apple/apple,dockchannel.yaml +++ b/Documentation/devicetree/bindings/soc/apple/apple,dockchannel.yaml @@ -27,6 +27,7 @@ properties: - apple,t6030-dockchannel - apple,t6031-dockchannel - apple,t6041-dockchannel + - apple,t6050-dockchannel - apple,t8112-dockchannel - apple,t8122-dockchannel - apple,t8132-dockchannel diff --git a/Documentation/devicetree/bindings/soc/apple/apple,rtk-helper-asc4.yaml b/Documentation/devicetree/bindings/soc/apple/apple,rtk-helper-asc4.yaml index 7b0d286ee03d7..4f902647be30c 100644 --- a/Documentation/devicetree/bindings/soc/apple/apple,rtk-helper-asc4.yaml +++ b/Documentation/devicetree/bindings/soc/apple/apple,rtk-helper-asc4.yaml @@ -20,28 +20,34 @@ description: properties: compatible: - items: - - enum: - - apple,t6020-mtp - - apple,t6030-mtp - - apple,t6031-mtp - - apple,t6041-mtp - - apple,t8112-mtp - - apple,t8122-mtp - - apple,t8132-mtp - - apple,t8140-mtp - - apple,t8142-mtp - - enum: - - apple,t6020-rtk-helper-asc4 - - apple,t6030-rtk-helper-asc4 - - apple,t6041-rtk-helper-asc4 - - apple,t8112-rtk-helper-asc4 - - apple,t8122-rtk-helper-asc4 - - apple,t8132-rtk-helper-asc4 - - apple,t8140-rtk-helper-asc4 - - apple,t8142-rtk-helper-asc4 - - const: apple,mtp - - const: apple,rtk-helper-asc4 + oneOf: + - items: + - enum: + - apple,t6020-mtp + - apple,t6030-mtp + - apple,t6031-mtp + - apple,t6041-mtp + - apple,t8112-mtp + - apple,t8122-mtp + - apple,t8132-mtp + - apple,t8140-mtp + - apple,t8142-mtp + - enum: + - apple,t6020-rtk-helper-asc4 + - apple,t6030-rtk-helper-asc4 + - apple,t6041-rtk-helper-asc4 + - apple,t8112-rtk-helper-asc4 + - apple,t8122-rtk-helper-asc4 + - apple,t8132-rtk-helper-asc4 + - apple,t8140-rtk-helper-asc4 + - apple,t8142-rtk-helper-asc4 + - const: apple,mtp + - const: apple,rtk-helper-asc4 + - description: T6050, which has no SoC-specific helper compatible + items: + - const: apple,t6050-mtp + - const: apple,mtp + - const: apple,rtk-helper-asc4 reg: minItems: 1 From 921689014ab176945040d8b8cdc6236c15c3427c Mon Sep 17 00:00:00 2001 From: Ryan Murray <81541646+RyanTheTide@users.noreply.github.com> Date: Sun, 8 Nov 2026 16:31:26 +1100 Subject: [PATCH 8/8] arm64: dts: apple: t6050: Give the MTP its SoC helper compatible Every other MTP node lists four compatibles, "apple,-mtp", "apple,-rtk-helper-asc4", "apple,mtp", "apple,rtk-helper-asc4", and the binding describes only that form. Add the T6050 helper compatible instead of a second, three-entry form in the binding, which also changed the messages for the T8122 trees that already fail it. The driver matches "apple,rtk-helper-asc4" only, so nothing binds differently. Assisted-by: LLM Signed-off-by: Ryan Murray <81541646+RyanTheTide@users.noreply.github.com> --- .../soc/apple/apple,rtk-helper-asc4.yaml | 52 +++++++++---------- arch/arm64/boot/dts/apple/t6050-max.dtsi | 3 +- 2 files changed, 26 insertions(+), 29 deletions(-) diff --git a/Documentation/devicetree/bindings/soc/apple/apple,rtk-helper-asc4.yaml b/Documentation/devicetree/bindings/soc/apple/apple,rtk-helper-asc4.yaml index 4f902647be30c..874f667ce3f61 100644 --- a/Documentation/devicetree/bindings/soc/apple/apple,rtk-helper-asc4.yaml +++ b/Documentation/devicetree/bindings/soc/apple/apple,rtk-helper-asc4.yaml @@ -20,34 +20,30 @@ description: properties: compatible: - oneOf: - - items: - - enum: - - apple,t6020-mtp - - apple,t6030-mtp - - apple,t6031-mtp - - apple,t6041-mtp - - apple,t8112-mtp - - apple,t8122-mtp - - apple,t8132-mtp - - apple,t8140-mtp - - apple,t8142-mtp - - enum: - - apple,t6020-rtk-helper-asc4 - - apple,t6030-rtk-helper-asc4 - - apple,t6041-rtk-helper-asc4 - - apple,t8112-rtk-helper-asc4 - - apple,t8122-rtk-helper-asc4 - - apple,t8132-rtk-helper-asc4 - - apple,t8140-rtk-helper-asc4 - - apple,t8142-rtk-helper-asc4 - - const: apple,mtp - - const: apple,rtk-helper-asc4 - - description: T6050, which has no SoC-specific helper compatible - items: - - const: apple,t6050-mtp - - const: apple,mtp - - const: apple,rtk-helper-asc4 + items: + - enum: + - apple,t6020-mtp + - apple,t6030-mtp + - apple,t6031-mtp + - apple,t6041-mtp + - apple,t6050-mtp + - apple,t8112-mtp + - apple,t8122-mtp + - apple,t8132-mtp + - apple,t8140-mtp + - apple,t8142-mtp + - enum: + - apple,t6020-rtk-helper-asc4 + - apple,t6030-rtk-helper-asc4 + - apple,t6041-rtk-helper-asc4 + - apple,t6050-rtk-helper-asc4 + - apple,t8112-rtk-helper-asc4 + - apple,t8122-rtk-helper-asc4 + - apple,t8132-rtk-helper-asc4 + - apple,t8140-rtk-helper-asc4 + - apple,t8142-rtk-helper-asc4 + - const: apple,mtp + - const: apple,rtk-helper-asc4 reg: minItems: 1 diff --git a/arch/arm64/boot/dts/apple/t6050-max.dtsi b/arch/arm64/boot/dts/apple/t6050-max.dtsi index 487288170c9ad..753b7de956832 100644 --- a/arch/arm64/boot/dts/apple/t6050-max.dtsi +++ b/arch/arm64/boot/dts/apple/t6050-max.dtsi @@ -92,7 +92,8 @@ }; mtp: mtp@294600000 { - compatible = "apple,t6050-mtp", "apple,mtp", "apple,rtk-helper-asc4"; + compatible = "apple,t6050-mtp", "apple,t6050-rtk-helper-asc4", "apple,mtp", + "apple,rtk-helper-asc4"; reg = <0x2 0x94600000 0x0 0x4000>, <0x2 0x94c00000 0x0 0xc4000>; reg-names = "asc", "sram";