Skip to content

arm64: dts: apple: MacBook Air 15-inch M5 (J815) device tree - #1532

Draft
m0d16l14n1 wants to merge 22 commits into
aurora-silicon:integration/aurorafrom
m0d16l14n1:j815/dts
Draft

m0d16l14n1 wants to merge 22 commits into
aurora-silicon:integration/aurorafrom
m0d16l14n1:j815/dts

Conversation

@m0d16l14n1

@m0d16l14n1 m0d16l14n1 commented Nov 11, 2026 •

Copy link
Copy Markdown
Contributor

Draft at 0434a61e4a8fa71b643858ea053c05e79ce3e4b5. Normal merge of preceding09e6fbbc and main673f6184, retaining both histories. This shares J813’s T8142 SoC description and adds the J815 board resources in15 DT/binding files: power/PMP, USB, panel/GPU, AVD/ISP, N1, AOP/I2C, ALS, SMC sensors and SEP/Touch ID. The shared PMP keeps its SRAM supplier and always-on property. J815 sound and AOP audio remain disabled in this parent.

The J813 N1 factory-address targets and ALS node carry @gig3m’s supplied patches. The loader aliases target the proper six-byte address placeholders; experimental Bluetooth options are not enabled. T8142’s GPU binding retains its actual ordered seven memory regions, including the final fw-data; main’s ISP ordering and other family binding updates are retained.

The main integration resolves the J815 EOF conflict by keeping its complete prior board description as a byte-exact prefix and appending main’s complete MCC block. J815 retains main’s MCC enablement. J813’s extraction into the shared file now inherits the exact MCC geometry disabled; main’s RTC/rtc-offset additions are also retained. A later J700-only main update changed none of the reviewed or tested inputs.

Schema validation found a duplicate apple,agx-g17s entry already present in main. Removed only its redundant trailing occurrence from one enum; the allowed set and other conditions are unchanged. Main’s pinctrl GPIO-hog acceptance remains.

Local validation:

  • Six board/layer symbolic three-way property checks pass, retaining PMP, factory aliases and ALS.
  • Eight exact-tree binding documents pass metaschema/reference checks. Five actual T8142 memory-ABI cases pass;560 finite non-target comparisons produce the same results as current main.
  • Three actual SEP KUnit bodies pass in a host Rust extraction on the composed source. This is not a local kernel/DTB or arm64 QEMU build.
  • Independent source review found no concrete regression. Earlier incomplete EOF/source-model candidates and the inherited schema failure are retained in local evidence; no invalid candidate was published.

Current0434a61 Host43378989747/job131732089962 passed the actual tests. DT43378989936/job131732091047 built137 DTBs on both base and head (make rc=0/0), with402/394 warning lines, one new/nine removed. All seven changed bindings, including the repaired AGX schema, and ADT’s19 tests/six baseline comparisons passed without regression. The sole new warning is the retained J815 disp0_piodma alias; no new MCC, RTC, N1, ALS or GPU warning appeared. The overall DT check is failed, not green. No unchanged-source retry or warning filter was applied.

Keep draft: Aura#165 needs affected T8142 loader boot qualification and compatible-loader adoption before coordinated canonical-alias migration and a fresh green DT result. Do not filter the warning or retry unchanged source.

J813 evidence remains attributed to the owner: 6828183980 reports five boots/daily use of the97f feature on2b05915f, firmware26.6.2, with N1/local display and companion changes. It closes the original shared-DT owner check at that composition scope; GPU/SEP were untested there, and Bluetooth LE pairing required opt-in flags. 6837248959 separately reports J81327.0-stub ALS readings with installer-supplied calibration. VD6286 calibration stays in the ALS service-property path, without a CT817 firmware-name.

The later Touch ID/profile work and explicit guard1 diagnostic correction are tracked separately in draft #1732 at98e509f0; its net follow-up remains two files. Ryan’s source review5883010555 is COMMENTED, not formal approval; utility model coverage is a separate aurora-xart PR.

Original J815 report predates these integrations:27.0 stub/Aura Stage2, Plasma panel, GLES3.2/Vulkan with #1413, AVD H.264/HEVC, camera, Wi-Fi/BT, ALS, SMC and Touch ID. #1413 and native Centauri#1530 are landed source prerequisites. No boot of this complete new tree, loader/default change, audio playback or physical rollout qualification was performed here.

Original bring-up: @m0d16l14n1, assisted by Claude Opus5.5. Owner follow-ups: @gig3m, assisted by Claude Fable5.2. Integration/schema review assisted by Codex.

J704 and J815 describe their boards on top of the T8142 inventory in
t8142.dtsi, but J813 still defines its own root, CPUs, timer, AIC and
UARTs, and its fragments define the pmgr and DART nodes that the
inventory also has. A board that includes t8142.dtsi therefore cannot
use the J813 fragments: the labels are defined twice. That blocks the
J815, which shares most of them.

Include t8142.dtsi in J813 and enable what it uses, as J815 does. Turn
the fragments' pmgr, AOP, AVD, DCP, display, PCIe, PMP and MTP DART
definitions into references that keep J813's values. Enable the two USB
DARTs, which the inventory disables at the same paths.

The flattened J813 tree is unchanged apart from explicit
status = "okay", interrupt-parent now inherited from the root, and the
inventory's extra USB DART labels: compared with dtc -I dts -O dts -s
before and after, with phandle numbers removed.

Not tested on J813 hardware.

Assisted-by: Claude Opus 5.5
Signed-off-by: Nick <nekreshen@yandex.ru>
J815 has J813's PMGR power domains, PMP, QSPI and FPWM. Include
t8142-j813-peripherals.dtsi, which J813 now builds on t8142.dtsi, in
place of the board's own PMGR and MTP DART enables. The PMP takes the
J815 board-id from the ADT (0x26).

Tested on J815 (MacBook Air 15-inch, M5) with the equivalent node set
in a J815 tree that included the whole J813 board.

Assisted-by: Claude Opus 5.5
Signed-off-by: Nick <nekreshen@yandex.ru>
The J815 ADT describes both Type-C ports like J813's: ATC PHYs, DWC3
controllers, DARTs and the CD3218B controllers on the same buses.
Include t8142-j813-usb.dtsi.

Tested on J815 (MacBook Air 15-inch, M5) with the equivalent node set in
a J815 tree that included the whole J813 board. A SuperSpeed Plus hub
and the USB 2/3 devices behind it enumerate, and USB-C headphones play
audio.

Assisted-by: Claude Opus 5.5
Signed-off-by: Nick <nekreshen@yandex.ru>
Include t8142-j813-display.dtsi and describe the J815 panel: 15.3-inch,
2880x1864 (2880x1800 below the notch), 326 x 211 mm.

Tested on J815 (MacBook Air 15-inch, M5) with the equivalent node set in
a J815 tree that included the whole J813 board. With the macOS 27.0 DCP
firmware this needs the FW27 display support in Linux aurora-silicon#1413; the console
and a KWin session run on the panel.

Assisted-by: Claude Opus 5.5
Signed-off-by: Nick <nekreshen@yandex.ru>
The J815 GPU is J813's. Include t8142-j813-gpu.dtsi.

Tested on J815 (MacBook Air 15-inch, M5) with the equivalent node set in
a J815 tree that included the whole J813 board. With the macOS 27.0
firmware this needs Linux aurora-silicon#1413; the GPU driver initializes and KWin
renders through Mesa.

Assisted-by: Claude Opus 5.5
Signed-off-by: Nick <nekreshen@yandex.ru>
Include t8142-j813-avd.dtsi: J815 has J813's AVD, DART and power domain.

Tested on J815 (MacBook Air 15-inch, M5) with the equivalent node set in
a J815 tree that included the whole J813 board. With avd-fw-v5-t2 the
decoder probes and decodes through v4l2-request/VA-API: H.264 High 1080p
and HEVC Main 720p in mpv (vaapi-copy, one AVD interrupt per frame, no
kernel errors).

Assisted-by: Claude Opus 5.5
Signed-off-by: Nick <nekreshen@yandex.ru>
Include t8142-j813-isp.dtsi. The J815 ADT gives the ISP sensor-type 0x72
(J813: 0x71).

Tested on J815 (MacBook Air 15-inch, M5) with the equivalent node set in
a J815 tree that included the whole J813 board. The ISP firmware boots
and the camera streams.

Assisted-by: Claude Opus 5.5
Signed-off-by: Nick <nekreshen@yandex.ru>
Include t8142-j813-n1.dtsi for the N1 on apcie port 0. Describe the N1's
three PCI functions and alias wifi0 and bluetooth0 to them, so the
loader can fill in the factory MAC and BD addresses, as on T6050.

Tested on J815 (MacBook Air 15-inch, M5) with the equivalent node set in
a J815 tree that included the whole J813 board. Wi-Fi connects to WPA2
networks, and Bluetooth LE devices pair and reconnect. Both use the
factory addresses.

Assisted-by: Claude Opus 5.5
Signed-off-by: Nick <nekreshen@yandex.ru>
Include t8142-j813-audio.dtsi for the AOP, the AP and NUB pin
controllers, the ADMACs and the I2C buses with the headphone jack codec
and speaker amplifiers. J815 has six speaker amplifiers where J813 has
four, so keep J813's sound card and the AOP audio service disabled.
The J815 speaker layout is a separate change.

Tested on J815 (MacBook Air 15-inch, M5) with the equivalent node set in
a J815 tree that included the whole J813 board, with audio enabled. The
AOP boots and its services come up. This exact variant, with audio
disabled, has been compile-tested only.

Assisted-by: Claude Opus 5.5
Signed-off-by: Nick <nekreshen@yandex.ru>
The J815's AOP "als" service is an ST VD6286, as on the M4 Pro, not
T8140's CT817. Give the service device its compatible so aop_als binds
and sends the per-device calibration.

Tested on J815 (MacBook Air 15-inch, M5) with the equivalent node set in
a J815 tree that included the whole J813 board. The sensor reports lux
and colour temperature.

Assisted-by: Claude Opus 5.5
Signed-off-by: Nick <nekreshen@yandex.ru>
The discovered SMC temperatures carry no power rails and no SoC die
zone. Add the total system, AC input and 3.8 V rail power, the AC and
battery voltages and the AC current, and J704's T8142 die key list for
the SoC die thermal zone.

Tested on J815 (MacBook Air 15-inch, M5) with the equivalent node set
in a J815 tree that included the whole J813 board.

Assisted-by: Claude Opus 5.5
Signed-off-by: Nick <nekreshen@yandex.ru>
From the J815 ADT (macOS 27.0): the SEP is a pre-booted
iop-sep,ascwrap-v6 at 0x30a600000 with its ASC mailbox at +0x8000. Its
t8110 DART uses the BIT(40) input aperture, as on T8132. The Touch ID
sensor is on spi2 (0x3a5108000, 8 MHz, CS0, power domain SPI2 under
SPI_P), with power on NUB GPIO 36 and data-ready on AP GPIO 200. Alias
the SEP so the loader can reserve its firmware and copy the boot
manifests onto the node, and expose the two sensor pins.

The SEP and its DART stay disabled: the SEP driver enables them.

Tested on J815 with the J815 SEP profile: the SEP attaches, the sensor
binds on spi2 and comes up in about 40 ms, and fingerprints enrol and
match (sudo with the finger).

Assisted-by: Claude Opus 5.5
Signed-off-by: Nick <nekreshen@yandex.ru>

@DjDeveloperr DjDeveloperr left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Codex (GPT-6.1 Sol), reviewing on @DjDeveloperr’s behalf.

Keep draft: the J815 results do not close the explicit J813 boot gate for extracting/reworking the shared DT. Brightness/camera/USB3/backlight/decoder are separate outcomes and a source merge cannot blanket-qualify them. CI approval is now unblocked so schema/build results can be evaluated; an owner-approved J813 regression row is still needed for the shared change. No new hardware or media upload is requested here.

Match the existing DT and public driver interfaces: keep the specific fallback chains, T8142-only ALS, eight ISP power domains versus fourteen on T8140, and the two-mailbox/six-region T8142 GPU profile. Preserve the constraints on other SoCs. No DT resource values change.

Validated with dtschema 2026.9 strict document/reference checks and targeted processed-schema positive and negative cases. Full DTB validation and the draft J813 hardware gate remain separate.

Signed-off-by: Diljit Singh <hey@djdev.me>
Carry byte-exact schema files from reviewed aurora-silicon#1423 at 18fa06f so the shared J813/J815 DT can be checked without inventing a second binding implementation.

Original binding updates by Thomas Glanzmann, signed off in commits 9afc945 and bb9ad0e. This is binding metadata only; no driver or speaker-protection adoption or parent edge is added. The M5 merge lane retains ownership of aurora-silicon#1423. Later identical binding changes coalesce in an ordinary merge.

Signed-off-by: Diljit Singh <hey@djdev.me>
Identify the J815 native profile with a T8142-specific compatible while retaining the PCI1900 fallback. The generic driver continues to match the host/PCI ID and obtain firmware data from its root board table; no firmware/platform/protocol values are invented. Keep all three wire27 properties required for the older PCI-only T6050 profile and forbid mixing those properties into the native profile.

Only the J815 endpoint compatible changes. Shared SoC/J813 DT inputs and runtime resources remain unchanged. The J815 board firmware-table prerequisite is aurora-silicon#1530.

Signed-off-by: Diljit Singh <hey@djdev.me>

@DjDeveloperr DjDeveloperr left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Codex (GPT-6.1 Sol), reviewing on @DjDeveloperr’s behalf.

The DT retry actually ran: baseline412 warning lines versus head442, with30 new J815 warnings. Both DT builds returned0, and ADT coverage passed its19 tests and six board comparisons. This was a real schema/profile failure, not the earlier apt setup problem.

I pushed three ancestry-preserving follow-ups at ec064e9:

  • Narrow T8142 I2C/SPI/pinctrl/setup-mailbox/ALS descriptions, the eight-domain ISP profile versus T8140’s fourteen, and a dedicated two-mailbox/six-region GPU profile. Other profile constraints are retained.
  • Thomas Glanzmann’s byte-exact macaudio/TAS schema prerequisites from #1423 (original commits9afc945d0cdb and bb9ad0e), with attribution. No driver adoption or partial merge-parent edge is implied, and #1423’s branch is untouched.
  • An explicit native T8142 Centauri binding profile with the PCI1900 fallback on J815 only. The generic driver still selects by host/PCI ID and its board table (#1530); no firmware/platform/protocol values were guessed. The older T6050 PCI-only profile retains all three wire27 requirements.

Validation: all eight changed primary schemas pass strict dtschema2026.9 document/reference checks;45 targeted processed-profile controls pass, including reproduced baseline rejections and strict negative cases. The native N1 binding has15 passing positive/negative controls; the exact audio prerequisites have document/profile controls. The final diff changes11 schema files and J815’s endpoint-compatible tuple only: J813/common DTS, drivers, resources, aliases and tests are unchanged. This is not a full new CHECK_DTBS or physical boot result; fresh CI is required.

Keep draft/unmerged. The remaining alias warning is a real producer/consumer contract: current T8142 aura hardcodes disp0_piodma. Draft aura#165 supplies canonical disp0-piodma plus legacy fallback, with production/libfdt regression controls; a J815 alias rename must wait for compatible-loader adoption and qualification. The explicit J813 shared-DT boot gate remains open, and the original J815 report is not an exact-new-head boot. No hardware, playback, loader/default or image action was performed.

Preserve the current shared T8142 CPU topology, OPP power data and
trackpad actuator, along with the J813 firmware clock providers.
Reconcile T8142 binding profiles with the current T6050 sensor services
and preserve the T8140 ISP firmware memory and sensor power domains.

@DjDeveloperr DjDeveloperr left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Codex (GPT-6.1 Sol), reviewing on @DjDeveloperr’s behalf.

Resolved the current-main conflicts in b180163 with a normal integration merge. The resolution preserves the firmware-27 DCP provider clocks, shared CPU/OPP/actuator data, T6050 mailbox/ALS/LAS profiles, and main’s ISP heap/text/data memory ABI and 14–16 power-domain profile, alongside T8142’s distinct eight-domain profile. Review caught and corrected an initial candidate that dropped the optional ISP text/data regions before publication.

All 11 schema documents, 65 targeted ABI controls, 15 full Centauri controls and 10 audio controls pass. The symbolic J813 source comparison preserves 307 nodes and 1,377 explicit properties, with redundant interrupt-parent entries inherited identically. This does not establish compiled-DTB or physical boot equivalence.

Keep draft: fresh integrated-head host/DT CI and the author-required J813 shared-extraction boot remain gates. The existing display alias remains intact; aura#165 must be qualified/adopted before migration. The earlier EC DT log is unavailable (server errors), so I am not claiming a verified remaining-warning count.

Match the existing J813/J815 fw-data crash-log region and its ordered
seven-region tuple. Preserve the six-region maximum for other GPUs.

@DjDeveloperr DjDeveloperr left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Codex (GPT-6.1 Sol), reviewing on @DjDeveloperr’s behalf.

Corrected the T8142 GPU binding in 9122abe. My earlier strict profile omitted the existing seventh fw-data crash-log region. The actual current J813/J815 tuple reproduces the old failure; the corrected ordered tuple passes 32 controls, with 768 comparisons confirming unchanged acceptance across 16 non-T8142 compatible profiles and strict meta/reference validation passing. Other profiles retain max six regions. No DT/GPU driver/firmware resource value changed.

Concrete compiled evidence comes from #1534’s ea5ab50 run: tools installed, base/head make succeeded with 137 DTBs, base400/head395 warning lines, five new warnings (four GPU cardinality, one J815 underscore alias), ten removed; binding docs and ADT coverage passed. Fresh CI must confirm the new schema result.

The legacy alias remains intentionally unchanged pending aura165 hardware qualification and compatible-loader adoption. Keep draft and the J813 boot gate; no warning filter, premature alias rename or new hardware action.

@DjDeveloperr DjDeveloperr left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Codex (GPT-6.1 Sol), reviewing on @DjDeveloperr’s behalf.

Current-head CI has now executed: Host run 43107102188 passed its actual tests. DT run 43107102060 built all 137 DTBs successfully on both base and head; warnings fell from 400 to 391 (10 removed, one new). The corrected seven-region T8142 GPU schema passed binding validation, and all four earlier GPU warnings are gone.

The sole new warning is t8142-j815.dtb aliases/disp0_piodma, which violates the standard alias-name regex. Keep the loader compatibility gate intact: a canonical alias migration must wait for the affected-hardware boot/adoption qualification of aura#165; do not rename the alias or filter this warning merely to turn CI green. ADT coverage passed. This remains draft; the existing physical/loader qualification requirements are unchanged.

Keep main's complete ISP binding, preserving the T8140/Neo sensor-domain
order and T8142 eight-domain case. All added and removed feature lines
in the remaining 15 DT and binding files match the preceding parent.

The complete bindings directory matches the validated aurora-silicon#1534 integration:
eight binding documents and 32 candidate/32 main GPU schema controls.
No repeated schema test or new compiled-DTB/hardware result is claimed.
J815 audio stays disabled here. Keep the underscore loader alias until
compatible-loader qualification/adoption; no warning filtering.

Preserve published ancestry and require fresh current-head Host/DT CI.
The required J813 shared-DT boot and existing loader/rollout gates remain.
No boot, audio playback, image build or protection-policy change.

Assisted-by: LLM

@DjDeveloperr DjDeveloperr left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Resolved the current-main conflict as normal merge 97f1472, parents 9122abe/main68830200; no history rewrite. The ISP binding uses main's full version, preserving the Neo sensor-domain order and T8142 eight-domain case, so that already-landed binding disappears from the residual. All added/removed feature lines in the remaining 15 DT/binding files match the preceding head.

The complete bindings directory is identical to the validated #1534 c83c100 tree: eight document metaschema/reference checks and 32 candidate/32 main GPU controls pass on those identical inputs. No repeated schema test, new DTB compile or hardware boot is claimed. The parent still disables J815 sound/AOP audio, and the underscore loader alias is retained without warning filtering. #1534's separate audio DT feature remains unchanged; no duplicate source/audio build or child branch update is needed for this source-preserving parent integration.

Keep draft for fresh Host/DT CI, Aura #165 affected-loader boot and compatible-loader adoption before alias migration, and the author-required J813 shared-DT boot. The original J815 hardware report retains its pre-integration scope; no new machine or hardware action is requested.

@gig3m

gig3m commented Nov 12, 2026

Copy link
Copy Markdown

A J813 owner's check for the first commit, which the description asks for.

A J813 (MacBook Air 13-inch M5, Mac17,3, 26.6.2 firmware) has booted this PR at 97f1472, carried on 2b05915, since 2026-11-11. The Stage 2 device tree is built from the same tree (aura 1.0.0b10). Five boots so far and daily use: internal display, NVMe, keyboard and trackpad, USB, speakers and microphones, Wi-Fi (with #1530), RTC (with #1538) and s2idle (with #1527) all work. I noticed no regression against the earlier build of the same base without this PR.

Limits: this is the 26.6.2 firmware, so the GPU is not in use here, and the tree also carries the J813 block below and a local display format patch.

One gap for J813: it needs the same N1 nodes this PR gives t8142-j815.dts. Without them the loader has nowhere to put the factory addresses: Bluetooth: hci0: No factory local-bd-address from the loader, bluetoothd ignores the controller, and Wi-Fi comes up on a non-factory MAC. With the block below added to t8142-j813.dts (same PCI IDs as J815: 106b:1900, 106b:1902, 106b:1903), hci0 logs Native startup accepted; factory address in use and Wi-Fi uses its factory MAC. With btcentauri loaded with enable_acl=1 arm_auxiliary_rings=1, a Bluetooth LE mouse then pairs and works; with the defaults it does not pair. The block could equally go in the shared t8142-j813-j815.dtsi. I left out the sep alias; SEP is untested here.

diff --git c/arch/arm64/boot/dts/apple/t8142-j813.dts w/arch/arm64/boot/dts/apple/t8142-j813.dts
index 020cd3d6fe28..5b0c6299ae5b 100644
--- c/arch/arm64/boot/dts/apple/t8142-j813.dts
+++ w/arch/arm64/boot/dts/apple/t8142-j813.dts
@@ -121,6 +121,49 @@ &dockchannel {
 #include "t8142-j813-n1.dtsi"
 #include "t8142-j813-audio.dtsi"
 
+/*
+ * N1 functions behind apcie port 0 (0000:00:00.0 -> 01:00.{0,1,2}), so the
+ * loader has somewhere to put the factory addresses: it copies ADT /chosen
+ * mac-address-wifi0 and mac-address-bluetooth0 into the wifi0/bluetooth0
+ * alias targets. Same nodes as t8142-j815.dts (same N1, same PCI IDs).
+ */
+/ {
+	aliases {
+		wifi0 = &n1_alpha;
+		bluetooth0 = &n1_beta;
+	};
+};
+
+&pcie0 {
+	n1_port: pci@0,0 {
+		device_type = "pci";
+		reg = <0x0 0x0 0x0 0x0 0x0>;
+		bus-range = <1 1>;
+		#address-cells = <3>;
+		#size-cells = <2>;
+		ranges;
+
+		n1_control: control@0,0 {
+			compatible = "apple,t8142-centauri-control", "pci106b,1900";
+			reg = <0x10000 0x0 0x0 0x0 0x0>;
+		};
+
+		n1_alpha: wifi@0,1 {
+			compatible = "pci106b,1902";
+			reg = <0x10100 0x0 0x0 0x0 0x0>;
+			/* Filled by the loader */
+			local-mac-address = [00 00 00 00 00 00];
+		};
+
+		n1_beta: bluetooth@0,2 {
+			compatible = "pci106b,1903";
+			reg = <0x10200 0x0 0x0 0x0 0x0>;
+			/* Filled by the loader */
+			local-bd-address = [00 00 00 00 00 00];
+		};
+	};
+};
+
 &mtp_hid {
 	multi-touch {
 		firmware-name = "apple/tpmtfw-j813.bin";

Disclosure: the testing, the patch and the first draft of this text were done with an LLM coding assistant (Claude Code). I ran the hardware side and have read what is posted here.

Add the N1 control/Wi-Fi/Bluetooth PCI functions and wifi0/bluetooth0
aliases already used by J815, so the loader can populate the factory
addresses on J813. Keep the change board-local and omit the untested SEP
alias. Do not change Bluetooth experimental module options.

Based on the patch and owner report by @gig3m in linux#1532 comment
6828183980. The supplied block is carried exactly; its PCI topology
matches J815. Symbolic source checks preserve all307 original nodes and
properties and add only the four PCI nodes/two aliases. This is not a
new compiled-DTB or whole integrated hardware qualification.

The owner reports five boots/daily use of the 97f1472 feature on a
2b05915 composition with this block/local display patch, firmware26.6.2.
GPU and SEP remain untested; Bluetooth pairing required opt-in flags.
The independent Aura165 alias qualification/adoption gate remains.

Assisted-by: LLM

@DjDeveloperr DjDeveloperr left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Accepted @gig3m's6828183980 J813 owner check at its stated scope: five boots/daily use of the97f14725 feature on2b05915f, firmware26.6.2, same-tree Aura1.0.0b10 DT, supplied N1 block/local display-format patch and the named Wi-Fi/RTC/s2idle companions. This closes the first-commit shared-extraction owner-check item. It does not establish isolated newly published-tree, GPU or SEP qualification.

Carried the supplied N1 block exactly in223d7d7, with attribution in the commit, and atomically carried the updated parent into #1534 atdf3087d0. The native control tuple/PCI functions are exact J815 topology. Bounded symbolic parsing preserves all307 original J813 nodes/properties and adds only four PCI nodes and two alias properties resolving to Wi-Fi/Bluetooth address placeholders. J815 source, SEP alias and Bluetooth experimental options are untouched. The owner's BLE pairing result required enable_acl=1/arm_auxiliary_rings=1; default pairing remains unqualified. No new root build, DTB compile, hardware, playback or loader action occurred.

Fresh CI is required on the two published layers. Keep draft: Aura165 affected-loader qualification/adoption is still missing, so disp0_piodma stays unchanged and its warning is not filtered. The J813 result on legacy Aura1.0.0b10 does not qualify that companion alias migration.

Retain the parent's PMGR node layout and aurora-silicon#1527's newly merged ps_pmp
always-on property, including the SRAM supplier. Keep current main's
cpuidle source and its WFI/PSCI handling. All14 other feature line sets
are unchanged; the owner-provided J813 N1 targets stay byte-exact.

Symbolic checks cover PMP address/supplier/always-on and factory aliases
on J813 and J815 in parent and child. This is not a compiled DTB or new
physical boot result. Require fresh CI; keep the Aura165 loader alias
qualification/adoption gate and J815 physical rollout limits.

Assisted-by: LLM

@DjDeveloperr DjDeveloperr left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Integrated current main after #1527 merged, as normal mergee8fb89d9. Its PMP always-on addition conflicted with this stack's PMGR restructuring. The resolution retains the parent layout and copies main's complete ps_pmp properties/comment into it at the proper indentation; the SRAM supplier and always-on flag are preserved. No other text on that conflict file changes from the preceding parent. All14 other feature added/removed line sets remain exact, current cpuidle source is exact main, and the J813 N1 DTS is unchanged.

Symbolic checks for J813/J815 in both stack layers confirm the one PMP node at0x598, its SRAM supplier, always-on and factory aliases. #1534 inherits the same parent as260d5e15 and retains its exact J815 audio net patch. Both refs were published atomically without rewriting history. These are source checks only, with fresh hosted CI required.

The accepted J813 owner-check report already included #1527 in its composition; that gate stays closed at its stated scope. Keep draft for Aura165 affected-loader qualification/adoption and coordinated alias migration; no alias rename/filter or new hardware/loader/playback action occurred.

@gig3m

gig3m commented Nov 12, 2026

Copy link
Copy Markdown

Touch ID works on J813 with the J815 SEP block from this PR, plus one line in the SEP profile.

J813 (Mac17,3, 27.0 stub), this PR at 223d7d7 on 9219565, aura 1.0.0b12, aurora-sep 1-25, xart_guard=1:

  • read-only attach first (xart_writes=0 provision_keybag=0): 12 endpoints, key store open
  • writes on: keybag provisioned, one finger enrolled, matches at the lock screen
  • macOS booted next: its Touch ID still works
  • back in Linux: Touch ID: restored 1 enrolled identity/identities; enrolment survived reboot, matches again
  • 0 guard refusals; the guard list stayed empty

The J813 ADT (27.0) carries the values the T8142 profile comment gives for J815: iop-sep,ascwrap-v6 with sepfw-booted, dart-sep vm-base-0 0x10000004000 / vm-size-0 0xffff0000, Mesa on spi2 at 0x3a5108000, 8 MHz, CS 0, power on NUB GPIO 36, data-ready on AP GPIO 200.

Two changes:

  1. t8142-j813.dts: the J815 SEP and sensor block as it is in this PR, with apple/mesacal-j813.bin and apple/msrk-j813.bin. The compiled sep, mbox, spi2, fingerprint@0 and sep_dart nodes equal J815's, so it could go in t8142-j813-j815.dtsi instead.
  2. profile.rs: accept apple,j813 for the T8142 profile. Without it the module logs no platform profile for this SoC; the SEP stays disabled.
diff --git a/arch/arm64/boot/dts/apple/t8142-j813.dts b/arch/arm64/boot/dts/apple/t8142-j813.dts
index 5b0c6299ae5b..5889b852793a 100644
--- a/arch/arm64/boot/dts/apple/t8142-j813.dts
+++ b/arch/arm64/boot/dts/apple/t8142-j813.dts
@@ -131,6 +131,12 @@ / {
 	aliases {
 		wifi0 = &n1_alpha;
 		bluetooth0 = &n1_beta;
+		/*
+		 * The loader finds the SEP through this alias: it reserves SEPFW
+		 * and copies the boot's local-policy and iBoot manifests onto
+		 * the node.
+		 */
+		sep = &sep;
 	};
 };
 
@@ -171,3 +177,94 @@ multi-touch {
 };
 
 /* Unexposed chassis port instances remain described and disabled. */
+
+/*
+ * Secure Enclave and the Touch ID sensor. All values are from the J813 ADT
+ * (macOS 27.0) and are the same as J815's:
+ *  - sep: iop-sep,ascwrap-v6 at 0x30a600000 (0x88000), sepfw-booted, so
+ *    apple_sep warm-attaches; ASC mailbox at +0x8000, AIC 445-448.
+ *  - dart-sep: t8110 at 0x308b80000, irq 455; vm-base-0 0x10000004000,
+ *    vm-size-0 0xffff0000.
+ *  - spi2 at 0x3a5108000, irq 1241; PMGR device SPI2 at +0x440, parent SPI_P.
+ *  - mesa: "biosensor,mesa", sensor-id 0x3356, 8 MHz, CS0; power
+ *    function-mesa_pwr = NUB GPIO pin 36; data-ready interrupt on AP GPIO
+ *    pin 200.
+ * The SEP and its DART stay disabled here: apple_sep enables them at module
+ * init (drivers/soc/apple/dt.rs).
+ */
+&pmgr {
+	ps_spi2: power-controller@440 {
+		compatible = "apple,t8142-pmgr-pwrstate", "apple,t8103-pmgr-pwrstate";
+		reg = <0x440 4>;
+		#power-domain-cells = <0>;
+		#reset-cells = <0>;
+		power-domains = <&ps_spi_p>;
+		label = "spi2";
+	};
+};
+
+&{/soc} {
+	sep: sep@30a600000 {
+		compatible = "apple,sep";
+		reg = <0x3 0x0a600000 0x0 0x88000>;
+		mboxes = <&sep_mbox>;
+		mbox-names = "mbox";
+		iommus = <&sep_dart 0>;
+		status = "disabled";
+	};
+
+	sep_mbox: mbox@30a608000 {
+		compatible = "apple,t8142-asc-mailbox", "apple,asc-mailbox-v4";
+		reg = <0x3 0x0a608000 0x0 0x4000>;
+		interrupt-parent = <&aic>;
+		interrupts = <AIC_IRQ 445 IRQ_TYPE_LEVEL_HIGH>,
+			     <AIC_IRQ 446 IRQ_TYPE_LEVEL_HIGH>,
+			     <AIC_IRQ 447 IRQ_TYPE_LEVEL_HIGH>,
+			     <AIC_IRQ 448 IRQ_TYPE_LEVEL_HIGH>;
+		interrupt-names = "send-empty", "send-not-empty",
+				  "recv-empty", "recv-not-empty";
+		#mbox-cells = <0>;
+		status = "okay";
+	};
+
+	spi2: spi@3a5108000 {
+		compatible = "apple,t8142-spi", "apple,t8103-spi";
+		reg = <0x3 0xa5108000 0x0 0x4000>;
+		interrupt-parent = <&aic>;
+		interrupts = <AIC_IRQ 1241 IRQ_TYPE_LEVEL_HIGH>;
+		clocks = <&clkref>;
+		power-domains = <&ps_spi2>;
+		#address-cells = <1>;
+		#size-cells = <0>;
+		status = "okay";
+
+		mesa: fingerprint@0 {
+			compatible = "apple,mesa-fingerprint";
+			reg = <0>;
+			spi-max-frequency = <8000000>;
+			spi-cpol;
+			spi-cs-setup-delay-ns = <20>;
+			spi-cs-hold-delay-ns = <20>;
+			enable-gpios = <&pinctrl_nub 36 GPIO_ACTIVE_HIGH>;
+			interrupt-parent = <&pinctrl_ap>;
+			interrupts = <200 IRQ_TYPE_EDGE_RISING>;
+			/* Per-device files, built from the Mac's own factory records. */
+			firmware-name = "apple/mesacal-j813.bin", "apple/msrk-j813.bin";
+			status = "okay";
+		};
+	};
+};
+
+&sep_dart {
+	apple,dma-range = /bits/ 64 <0x10000004000 0xffff0000>;
+	apple,dma-offset = /bits/ 64 <0x0>;
+};
+
+/* Expose the sensor's two pins next to the ones sound uses. */
+&pinctrl_ap {
+	gpio-reserved-ranges = <0 100>, <101 49>, <152 48>, <201 23>;
+};
+
+&pinctrl_nub {
+	gpio-reserved-ranges = <0 18>, <19 17>, <37 3>;
+};
diff --git a/drivers/soc/apple/profile.rs b/drivers/soc/apple/profile.rs
index ac5f573455b9..504fccc20c14 100644
--- a/drivers/soc/apple/profile.rs
+++ b/drivers/soc/apple/profile.rs
@@ -710,8 +710,9 @@ fn select(
     if has(b"apple,t8132") && (has(b"apple,j713") || has(b"apple,j715")) {
         return Ok(&T8132);
     }
-    // Only the J815, whose ADT was read; the J813's sensor bus is unchecked.
-    if has(b"apple,t8142") && has(b"apple,j815") {
+    // The J815 and the J813, whose ADTs were read (macOS 27.0 stub firmware):
+    // the J813's SEP, its DART, spi2 and the Mesa node carry the J815's values.
+    if has(b"apple,t8142") && (has(b"apple,j815") || has(b"apple,j813")) {
         return Ok(&T8142);
     }
     Err(ENODEV)

Not tested: deep sleep (s2idle only here), more than one finger, a lockout. aurora-xart status still prints "no profile for this Mac" on J813; its model list is separate from the driver's.

Assisted-by: Claude Fable 5.2

@gig3m

gig3m commented Nov 12, 2026

Copy link
Copy Markdown

The J815 als node from this PR also works on J813.

J813 (Mac17,3, 27.0 stub), same tree as my Touch ID comment. The J813 ADT has /arm-io/aop/iop-aop-nub/als. With the node below, aop_als binds and iio:device0 (aop-sensors-als) reports: in_illuminance_input from about 2 (covered) to about 1200 in a bright room, in_colortemp_input about 6800. The calibration (apple/aop-als-cal.bin, 193 bytes) was already in the vendor firmware from the installer.

Being identical to J815's, it could go in t8142-j813-j815.dtsi.

diff --git a/arch/arm64/boot/dts/apple/t8142-j813.dts b/arch/arm64/boot/dts/apple/t8142-j813.dts
index 5889b852793a..ef47c181c23a 100644
--- a/arch/arm64/boot/dts/apple/t8142-j813.dts
+++ b/arch/arm64/boot/dts/apple/t8142-j813.dts
@@ -121,6 +121,18 @@ &dockchannel {
 #include "t8142-j813-n1.dtsi"
 #include "t8142-j813-audio.dtsi"
 
+/*
+ * Ambient light sensor, the AOP's "als" service: an ST VD6286, as on J815
+ * (same ADT node, /arm-io/aop/iop-aop-nub/als). aop_als sends it the
+ * per-device calibration (apple/aop-als-cal.bin). No firmware-name: that
+ * names the CT817 setup-port message, which this sensor does not take.
+ */
+&aop {
+	aop_als: als {
+		compatible = "apple,t8142-aop-als", "apple,aop-als";
+	};
+};
+
 /*
  * N1 functions behind apcie port 0 (0000:00:00.0 -> 01:00.{0,1,2}), so the
  * loader has somewhere to put the factory addresses: it copies ADT /chosen

One cosmetic thing: apple_aop still logs no ALS calibration named in the device tree; the sensor stays off at boot, although this sensor needs no firmware-name and works.

Assisted-by: Claude Fable 5.2

@DjDeveloperr DjDeveloperr left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Accepted @gig3m's6837017905 J813 Touch ID report at its stated27.0-stub/223d-on92195659/Aura1.0.0b12/aurora-sep1-25 composition scope, including the additional DT/profile patch. It adds positive attach, single-finger enrol/match, macOS preservation and Linux reboot/persistence evidence. It does not retroactively qualify the unchanged public J813 DT or prove IRQ-only capture, rejection/lockout/multifinger/deep-sleep behavior.

Carried the supplied two-file follow-up separately in DRAFT#1732 at70035185, stacked on this e8fb89d parent. This keeps1532 DT-only. The SEP/mailbox/SPI/DART/GPIO topology was independently reviewed against J815 and the patch applies with exact contexts; board-specific calibration paths/audio pins remain correct. Seven KUnit selector cases were added; local command creation failed EAGAIN, so no local Rust/kernel test pass is claimed and hosted checks are required.

Critical policy scope: existing xart_writes=1/provision_keybag=1/guard-1 defaults are unchanged, but admitting J813 makes it eligible for that writable/provisioning behavior, with inherited guard1. The draft is not read-only by default and needs SEP/XART policy review. aurora-xart model reporting and the T8142/J815 diagnostic label remain separate limitations. No physical/XART/enrolment/provision/loader/default action occurred here; this report does not clear Aura165 alias qualification/adoption.

Carry gig3m's node from linux#1532 comment6837248959 exactly. The J813
27.0 ADT supplies the same VD6286 ALS service as J815. The owner reports
illuminance and color-temperature readings using installer-supplied
per-device calibration on the previously stated composed tree.

Keep calibration loading in aop_als; firmware-name would select the
different CT817 setup-port calibration path. Existing nodes/properties
are preserved and the added ALS node equals J815's. This source check
is not a new DTB build or physical boot. Require fresh CI and retain
the independent Aura165 alias qualification/adoption gate.

Based-on: @gig3m's patch and owner report6837248959
Assisted-by: LLM (Codex)

@DjDeveloperr DjDeveloperr left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Codex, reviewing on @DjDeveloperr’s behalf.

Carried @gig3m’s supplied J813 ALS node exactly in09e6fbbc, from report6837248959. The owner’s27.0-stub/previously stated composition produced illuminance about2–1200 and color temperature about6800; that is accepted at the reported scope, without claiming automatic brightness, sleep coverage or a boot of this newly integrated head.

Source review confirms the compatible pair matches the existing J815 node and binding. The VD6286 path in aop_als loads apple/aop-als-cal.bin as a service property. No firmware-name is needed: the AOP setup-port calibration path is for CT817, and its existing “sensor stays off” message is misleading for this case. No driver/calibration content is changed here.

Bounded symbolic parsing preserves all311 existing J813 nodes and their properties and adds only /soc/aop@390c00000/als, with properties equal to J815. Normal merges78656b43 (#1534) and9053c517 (#1732) carry this parent update while preserving the whole J815 audio DTS and the two-file SEP/profile net delta. Both actual three-way merge trees match the prepared trees; all histories remain intact.

Fresh Host/DT CI is queued; these are source checks, not a local DTB/kernel/hardware pass. Keep the drafts and Aura165 affected-loader qualification/adoption/alias gate. The now-merged Centauri#1530 source prerequisite is recorded; SEP policy/utility gates remain separate.

Preserve the complete prior J815 board description and append main's
complete MCC enablement, including its shared cache definition. Keep
main RTC and binding updates alongside the existing bring-up features.
The shared MCC node is inherited disabled on J813; J815 is enabled as
on main. The old J815 audio graph and SEP two-file feature are preserved.

Metaschema checks caught a pre-existing duplicate agx-g17s enum in main.
Remove its redundant trailing occurrence, preserving the allowed set
and every other condition; retain current main's entry and ordering.

Keep published ancestry and require fresh CI. Existing loader-alias,
review and physical qualification limits remain; no hardware claim.

Assisted-by: LLM (Codex)

Carry intervening main673f6184 J700-only update; every reviewed/tested input is byte-identical, so validation is reused without repeated tests.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants