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] 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 { + }; + }; +};