Skip to content

Merge aurora-wip 210c8f6e into integration/aurora (J873g NVMe, 10GbE, power off, USB2, audio) - #1797

Open
sithglan wants to merge 81 commits into
aurora-silicon:integration/aurorafrom
sithglan:thomas/j873-wip-train
Open

sithglan wants to merge 81 commits into
aurora-silicon:integration/aurorafrom
sithglan:thomas/j873-wip-train

Conversation

@sithglan

@sithglan sithglan commented Nov 13, 2026 •

Copy link
Copy Markdown
Contributor

This merges aurora-wip 210c8f6 into integration/aurora fdef45b. It's the reverse of #1210, and a normal merge commit: no rebase, no history rewrite. integration/aurora has had no aurora-wip merge since #1197 (J873g platform), so the Mac mini M6 (J873g) has no internal SSD, 10GbE, power-off or USB on integration. The J873g HDMI, CPU performance and USB3 PRs stack on this one.

Included from aurora-wip (55 commits)

PR Author What
#1197 Acelogic (commits by sithglan) J873g: ANS2 NVMe (T8152 secure register layout, SART4, ANS post-office mailbox), 10GbE on apcie port 2, SMC power off/restart, watchdog, SPMI, audio DT, T8152 ADMAC, DART apple,retain-translation
#1205 Acelogic J873g: USB 2 hosts as T8152 DWC3
#1048 Acelogic J813 audio initialization (see below)
#1039 RyanTheTide arm64: dts: apple: t604x-j614-j616: boot NOR flash supply
#1410 joshuaswarren t8152-aop-audio: T6050 match (superseded, see below)

Conflicts (15 files) and how they were resolved

  • sart: both sides added the same SART4 layout: T6050 on integration, T8152 on aurora-wip. git also auto-merged a second sart_ops_v4. I kept integration's generalised SART3 ops (paddr_reg/size_reg) and matched both compatibles. The binding describes SART4 as seen on T6050 and T8152.
  • mailbox: integration's polled and rx_poll_only providers stay. aurora-wip's J873 ANS post-office mailbox (rx_poll_required, j873_window) is added next to them, and its probe block goes before the polled one.
  • nvme: integration's reset_optional replaces aurora-wip's optional_reset. Both the T6050 and T8152 tables are kept. The binding exempts both from requiring resets and power domains.
  • pcie: power-domain attach and the T8152 MRRS limit are both kept.
  • admac: the T6050 display ADMAC and the T8152 layout are both kept. The T8152 descriptor id goes into the flags word, and the resume path is integration's.
  • Audio files (aop.rs, macaudio.c, t8152_aop_audio.rs, tas2764.[ch], sound Kconfig): these take integration's versions, which already carry the T8152/J873 commits and extend them for T8142 and T6050.
  • Bindings: each lists both sides' compatibles. In apple,mailbox.yaml, interrupts are required unless the mailbox is polled: integration's secure-rtbuddy-proxy, or aurora-wip's T8152 ANS mailbox, which describes none.

Testing

  • Build: Image, modules and the J873g DTB, LLVM 22, CONFIG_KVM=y and CONFIG_ARM64_CTXR_EXECMEM=y.
  • scripts/dtc/apple-dt-check.sh against integration/aurora fdef45b: 0 new CHECK_DTBS warnings (8 fewer), every changed binding passes dt_binding_check.
  • Host tests: tools/asahi/run-host-tests.py: 302/302.
  • M6 hardware (macOS 27.2 stub, padded Mach-O Stage 1, Linux at EL2): booted through aura's kboot (CTXR window). Together with the J873g PRs stacked on this one, it is now the M6's default kernel, booting by itself from the ESP.
    • All 12 CPUs, root on the internal NVMe, 10GbE, Wi-Fi and Bluetooth.
    • Both USB2 hosts (keyboard and mouse), the AOP audio card, and power off/restart.

cc @RyanTheTide @Acelogic @DjDeveloperr @LiamRay10

sithglan and others added 30 commits November 6, 2026 11:23
The T8152 (M6) Always-On Processor differs from the T8140 one: its setup
port is not reachable from the AP, so it has one mailbox, and its audio
service uses six serializer power domains and the jack, speaker and
speaker-sense ADMAC channels.

Signed-off-by: Thomas Glanzmann <thomas@glanzmann.de>
Add the Mac mini M6 (J873) sound card.

Signed-off-by: Thomas Glanzmann <thomas@glanzmann.de>
The J873 (Mac mini M6) AOP runs the same firmware generation as T8140
(EPIC v4, iBoot-loaded, started by the AP), but the T8140 "setup port"
is not reachable from the AP: mailbox 1 of the AOP's mailbox bank and the
ADT aop-exclave-mailbox both bus-error. The firmware boots without it:
RTKit protocol 12, then its "audio" EPIC service. Add apple,t8152-aop
with the T8140 configuration minus the setup port, starting every
advertised endpoint.

Signed-off-by: Thomas Glanzmann <thomas@glanzmann.de>
The Mac mini (M6, J873) speaker runs a 250-BCLK TDM frame, which the
SN012776's ratio auto-detection rejects. Describe the property that fixes
the ratio instead.

Signed-off-by: Thomas Glanzmann <thomas@glanzmann.de>
The J873 (Mac mini M6) AOP runs the speaker frame at 250 BCLKs of 12 MHz.
The SN012776 cannot auto-detect that ratio and mutes with "fault: bad
TDM clock". With TAS2764_CLK_CFG (register 0x60) set to 0x30 and
TDM_CFG0 bit 6 set it accepts the frame and plays. Do that when the new
ti,bclk-ratio property names the ratio; only this one ratio is supported.

Source of the value: the register write was first seen in the macOS
SN012776 driver; it is a single register value, and its effect (no fault,
correct playback) was verified on J873 hardware. No table or code was
taken from macOS.

The field is initialised in probe, so non-OF matches keep auto-detection.

Signed-off-by: Thomas Glanzmann <thomas@glanzmann.de>
The SDOUT1 mux offers the ASP receive channels as a source, but no DAPM
route connected them, so selecting "ASP RX CH1" or "ASP RX CH2" left the
capture path without an input. The J873 and J813 AOP audio services use
it to loop the playback stream back.

Signed-off-by: Thomas Glanzmann <thomas@glanzmann.de>
On T8152 (J873, Mac mini M6) the AOP firmware owns the audio fabric, as
on T8140. Its "audio" EPIC service offers cout/cin (the CS42L84 jack,
base-ns ADMAC TX5/RX5, MCA4) and spkr (the SN012776 speaker, TX1, MCA0).

Each service is an ASoC back-end DAI: startup attaches it, requests pw0
(which raises the audio fabric) and powers the MCA leaves, all of which
are required. pwrd starts the serializer clocks at prepare, before ASoC
unmutes the codecs: the jack codec locks its PLL to the bit clock, and
the speaker amplifier reports "bad TDM clock" whenever it runs without
one. The jack restarts its clocks on every prepare so that a stream
restarted after an underrun begins on a frame boundary; the mono speaker
(one slot per frame) keeps them running. The front-ends are dmaengine
PCMs on the base-ns channels: the jack in stereo, the speaker in mono
(its serializer runs one 32-bit slot; stereo frames play at half pitch).

The firmware's serializer configuration (property 701) is byte-identical
to the one macOS publishes, so the driver leaves it alone.

Signed-off-by: Thomas Glanzmann <thomas@glanzmann.de>
The J873 (Mac mini M6) uses the T8152 AOP audio driver as its CPU
component: the CS42L84 jack on "cout" (DSP_A | IB_NF, one-BCLK sync
pulse) and one SN012776 on "spkr" (I2S, NB_IF: data sampled on the rising
edge, as macOS programs the amp).

Each AOP front-end owns the DMA channel of one serializer, so the speaker
can only be fed from the secondary front-end; the new spk_secondary_only
sets the speaker mux accordingly, and spk_dai_fmt gives the speaker link
its own format.

There is no qualified speaker protection for J873 yet (no verified sense
path, thermal model or power budget), so the speaker fails closed: it is
only enabled with please_blow_up_my_speakers. Opted in, it runs as macOS
runs it: amp gain 15 (ADT speaker-config) and no volume lock (safe_vol 0),
since there is no sense stream for a protection daemon. The jack is not
affected.

Signed-off-by: Thomas Glanzmann <thomas@glanzmann.de>
The T8142 AOP keeps its crash buffer in its own slot of its DART stream
and asks for it on endpoint 1 with that IOVA. A client without
shmem_setup refused the request, so the firmware never got its crash
buffer acknowledged.

APPLE_RTKIT_FIRMWARE_OWNED_CRASHLOG takes such a buffer as the firmware's,
without a CPU mapping, and acknowledges the request unchanged; a later
crash is reported without a log. RtKit::new_with_firmware_crashlog()
selects it at runtime, so a driver can use it for one SoC only.

Signed-off-by: Thomas Glanzmann <thomas@glanzmann.de>
The T8142 AOP (MacBook Air J813) waits for the host on a setup port, as
the T8140 one does: the ADT's aop-exclave-mailbox at 0x3d067c000 (AOP
ASC + 0x4007c000, not behind the arm-io translation). Its EPMAP announces
other service endpoints than T8140's fixed set (0x4, 0x20, 0x23 and 0x32
on J813), so take the endpoints that must get buffers from the EPMAP when
the match data says so.

The firmware places its own crash log buffer in its firmware-mapped DART
slot; accept it as the firmware's, as for G17P.

After the setup boot all AFK endpoints start, and with the audio fabric
left to the firmware (see the J813 device tree) the firmware announces
its "audio" EPIC service.

Signed-off-by: Thomas Glanzmann <thomas@glanzmann.de>
Behind an AOP the serializer feeding a capture channel is the firmware's,
and it stops in the middle of a frame whenever it likes. A capture that
stays open across such stops (the speaker V/I sense, which a protection
daemon reads for as long as it runs) then carries the partial frame
forward: every later frame is off by its words, and the samples of one
amplifier are read as another's. On the MacBook Air J813 one restart in
three slipped by one 16-bit word.

Let a client pass the frame size in bytes as a u32 in
dma_slave_config.peripheral_config. A paused cyclic capture on such a
channel resumes at the next frame boundary of its current period: the
reports completed before the pause are accounted for, the rings are
reset and the rest of the period is submitted from the aligned address,
then whole periods as before. Without a frame size nothing changes.

Signed-off-by: Thomas Glanzmann <thomas@glanzmann.de>
The J813 speaker stream (ADT iop-audio-controller/audio-speaker) differs
from J873's: four SN012776 in 32-bit playback slots 0-3, and their voltage
and current sense back on the same stream's RX side (base-ns RX0) as eight
16-bit slots. Make the speaker and sense shapes per-SoC match data:
J873 keeps one playback channel; T8142 gets four, and an 8-channel S16_LE
"Speaker Sense" front-end.

The sense capture is the speaker serializer's RX, which the firmware
stops anywhere in a frame. Before every `pwrd` of the speaker, restart a
running sense capture at a frame boundary (apple-admac realignment, the
partial frame reads as zeros), so that a protection daemon that keeps it
open attributes each amplifier's voltage and current to the right one.

The sense back-end also attaches the speaker service and requests `pw0 `
at startup: its front-end requests the ADMAC channel next, and the ADMAC
only answers while the firmware holds the audio fabric up. Opening the
sense before any other stream since the AOP started (speakersafetyd at
boot) otherwise faults the bus.

Signed-off-by: Thomas Glanzmann <thomas@glanzmann.de>
MacBook Air 13" M5 (T8142): as on J873 the AOP firmware owns the audio
fabric and the CPU component is the T8152-style AOP audio driver. The
jack is a CS42L84 on "cout", the speakers four SN012776 (one woofer and
one tweeter per side) on "spkr", with their V/I sense on the same stream.
As on the other SN012776 laptops the speaker volume stays locked until a
protection daemon (speakersafetyd) holds it.

Signed-off-by: Thomas Glanzmann <thomas@glanzmann.de>
The MacBook Air J813's three microphones are the AOP's "hpai" service
(ADT iop-audio-controller/audio-hp-mic): the firmware runs the PDM part
and delivers 48 kHz float32 frames of three channels (the ADT's
audio-hp-mic-proxy description: 12 bytes per frame) on leap-s ADMAC RX0.
There is no codec, so it gets a card of its own with one capture PCM,
named like the other AOP microphone cards (AppleJ813HPAI, "MacBook Air
J813 High-Power Audio Interface", driver aop_audio) so that the existing
UCM and DSP configurations for those apply.

As on T8140: open attaches the service and requests pw0 (which raises
the LEAP fabric), powers the LEAP leaves (leap-s ADMAC, RX0, LEAP MCA),
and only then requests the channel, whose registers fault without them.
The trigger starts the DMA and queues pwrd behind it; started earlier,
the LEAP produces into a channel nobody services. Close releases the
channel, then pw0 and the leaves.

The card exists only where the DT gives the LEAP power domains (all
three); J873 is unchanged. The dmaengine substream setup moves into a
helper shared with the ASoC front-ends.

Tested on J813: a tone from the speakers reads -44 to -49 dBFS on all
three channels, 70 dB over the quiet floor, exactly while it plays;
PipeWire picks up the card with asahi-audio's J613 beamformer graph.

Signed-off-by: Thomas Glanzmann <thomas@glanzmann.de>
integration/aurora added the nCal boot argument and word-wise boot-argument
access to AopHwConfig. Both machine configurations keep the firmware's own
boot arguments unchanged, so set ncal to zero and leave word access off.

Signed-off-by: Thomas Glanzmann <thomas@glanzmann.de>
Every boot on the J616s logged "spi-nor spi0.0: supply vcc not found,
using dummy regulator". The M1, M2, M3, J713 and J700 trees describe the
flash's always-on PMU rail as a fixed regulator; the M4 Pro/Max tree
came later and has none. Add the same regulator and point the flash at it.

Signed-off-by: Ryan Murray <81541646+RyanTheTide@users.noreply.github.com>
Assisted-by: LLM
Preserve current RTKit crashlog and GPU handling while retaining the expanded macaudio bindings and adding J813/J873 compatibles. Original audio commits and authorship are preserved.
…ation

Test whether COUT standby supplies the missing cold-boot fabric setup. A muted zero-data jack stream permitted HPAI capture and subsequent capture-only opens on J813; standby without any playback is the next hardware qualification step.

Preserve Thomas Glanzmann’s driver and adapt the T8140 DMA sync-stop pattern from Ryan Murray, also flushing queued HPAI work before DMA teardown. No LPAI buffer binding or codec unmute is performed.
…queue

Describe the T8142 microphone DMA and LEAP power domains and card names in the shared audio binding. Queue sleeping firmware power requests on system_dfl instead of the deprecated system workqueue, as directed by the runtime warning observed during hardware capture tests.
…-initialization-20261106

ASoC: apple: integrate J813 audio with first-open microphone initialization
…616-nor-vcc

arm64: dts: apple: t604x-j614-j616: Describe the boot NOR flash supply
Resolves sound/soc/apple/macaudio.c: aurora-wip added spk_dai_fmt and
spk_secondary_only (J813/J873) where integration added tweeter_hpf_granted
(speaker protection ownership); the struct keeps all three.

Signed-off-by: Ryan Murray <81541646+RyanTheTide@users.noreply.github.com>
Assisted-by: LLM
Signed-off-by: Ryan Murray <81541646+RyanTheTide@users.noreply.github.com>
Assisted-by: LLM
…nc-20261107

Merge integration/aurora into aurora-wip (11-07)
Brings aurora-wip up to integration/aurora 068dfce: pcie-apple endpoint
reset retry (aurora-silicon#1069) and the
tools/aurora-sep PKGBUILD checksum fix
(aurora-silicon#1068).

Signed-off-by: Ryan Murray <81541646+RyanTheTide@users.noreply.github.com>
Assisted-by: LLM
…n/wip-sync-20261107b

aurora-wip <- integration/aurora 068dfce (aurora-silicon#1068, aurora-silicon#1069). Clean merge, W=1 pcie-apple.o 0 warnings on the merged tree, CI host-tests/rust-build/source pass. Merge train (MTR).
Brings aurora-wip up to the tested release branch: CTXR execmem
(aurora-silicon#985, aurora-silicon#1079), KFIX speaker sleep and resume fixes (aurora-silicon#1077, aurora-silicon#1080),
JPEG v2 (aurora-silicon#1072), Jonathan's G17 and USB work (aurora-silicon#1073-aurora-silicon#1076), brcmfmac
flowring count (aurora-silicon#1081), ANE H16 startup restart (aurora-silicon#1066) and the
Touch ID per-prompt match (aurora-silicon#904).

Signed-off-by: Ryan Murray <81541646+RyanTheTide@users.noreply.github.com>
Assisted-by: LLM
Adds the 11-07 evening batch: t8140 disabled SPI3/FPWM0/SPMI nodes
(aurora-silicon#1034), J700 CPU zones (aurora-silicon#1043), J616C fans (aurora-silicon#1092) and the thunderbolt
DP PM workqueue fix (aurora-silicon#1098).

Signed-off-by: Ryan Murray <81541646+RyanTheTide@users.noreply.github.com>
Assisted-by: LLM
…n/wip-sync-20261107c

Gate on the exact head tree 6c684e8 (buildbox): fleet22-config Image+modules+dtbs build rc=0, 0 errors, 0 warnings, 5890 modules (= fleet); run-host-tests 193/193; apple-dcp host selftests 86/86 (fleet baseline 86/86). CI host-tests/source/rust-build green. Brings aurora-wip up to integration/aurora 810b92c.
Brings aurora-wip up to fleet25: DT descriptions (aurora-silicon#1029, aurora-silicon#1030, aurora-silicon#1112),
the J715 board (aurora-silicon#1129), Stockholm NFC (aurora-silicon#1042, aurora-silicon#1136), the AV1 tile check
(aurora-silicon#1100), the M4 Max ANE profile and AVD quirk (aurora-silicon#1088, aurora-silicon#1091), boot-log
fixes (aurora-silicon#1103, aurora-silicon#1104) and the Neo ANE memory floor (aurora-silicon#1137).

Conflicts: macaudio.c and apple,macaudio.yaml, where aurora-wip's J813
and J873 entries and integration's J715 entries were added at the same
spot. Keep all of them.

Signed-off-by: Ryan Murray <81541646+RyanTheTide@users.noreply.github.com>
Assisted-by: LLM
sithglan and others added 25 commits November 7, 2026 23:30
The T8152 (M6) SMC and AOP mailboxes are ASC wrapper v8 instances,
described with two interrupts (send-empty, recv-not-empty) like the
T8140 AOP setup port, but without an IOMMU or DMA window. Add
apple,t8152-ascwrap-v8-mailbox and split the conditions into interrupt
layout and setup-port resources.

Signed-off-by: Thomas Glanzmann <thomas@glanzmann.de>
[Acelogic: adapted for aurora-wip, where the SMC mailbox already has its
own apple,t8152-smc-mailbox compatible with this interrupt layout: the
new compatible is described for the AOP mailbox and joins that interrupt
condition. The T8140 setup-port conditions are unchanged.]
Signed-off-by: Acelogic <miguelc4600@gmail.com>
The T8152 (M6) ADMAC (ADT admac-evolution,t8152) has its own register
layout, so it is not compatible with the earlier ones.

Signed-off-by: Thomas Glanzmann <thomas@glanzmann.de>
Signed-off-by: Acelogic <miguelc4600@gmail.com>
On T8152 iBoot hands dart-sbr over translating for the AOP and the audio
ADMAC without setting the lock bit, and the AOP firmware keeps using the
inherited mappings. Describe the property that tells the OS to inherit
such a DART instead of resetting it, and who owns which root entries.

Signed-off-by: Thomas Glanzmann <thomas@glanzmann.de>
Signed-off-by: Acelogic <miguelc4600@gmail.com>
The T8152 AOP mailbox (ADT aop, iop,ascwrap-v8, mailbox 0 of the bank at
0x310740000) is the same counted FIFO as the SMC mailbox, with the same
send-empty and recv-not-empty interrupts. Match
apple,t8152-ascwrap-v8-mailbox, the compatible of the J873 AOP mailbox
node, to the SMC mailbox layout.

Signed-off-by: Acelogic <miguelc4600@gmail.com>
On T8152 iBoot leaves dart-sbr translating for the AOP and the audio
ADMAC: streams 0, 1 and 42 have live page tables, and the firmware's own
mappings sit in root slot 16 of each. Unlike the DARTs SPTM locks, the
lock bit is not set, so the driver would reset the DART and pull the
tables out from under the AOP firmware.

With apple,retain-translation the DART is treated as locked: the
inherited roots are kept and Linux publishes its mappings into vacant
root slots.

Signed-off-by: Thomas Glanzmann <thomas@glanzmann.de>
Signed-off-by: Acelogic <miguelc4600@gmail.com>
The T8152 ADMAC (ADT admac-evolution,t8152; worked out from the macOS
AudioDMAController-T8152 driver and on hardware) keeps the per-channel
register block and the global start/stop/interrupt registers, but:

- the channel blocks are 0x4000 apart, TX n at 0x40000 + 0x4000 n and RX
  n at 0x80000 + 0x4000 n;
- a channel is put in state 2 (+0x30 bits 3:0) and +0x4 is written
  0x029b0000 before it is started, as macOS does;
- the last descriptor word carries a descriptor id 1..255 in its low
  byte, which macOS never leaves at 0;
- the SRAM size registers carry the channel count in bits 31:24, and the
  AP's carveouts start above the firmware's (base 0x1000, 1 KiB blocks);
- only the word size is set in the bus width register.

The descriptor and report FIFO ports are the legacy ones: the RX
descriptor port answers at 0x14000 + 4n, not at the 0x10040 + 4n the
ADT lists.

Signed-off-by: Thomas Glanzmann <thomas@glanzmann.de>
[Acelogic: adapted for aurora-wip: the descriptor id is set in
admac_write_hw_desc(), which writes every descriptor there, the SRAM
carveout bounds combine with the T8132 split-channel handling, and the
state register is the +0x30 one that aurora-wip programs as
REG_CHAN_BURST on T8132.]
Signed-off-by: Acelogic <miguelc4600@gmail.com>
Describe the J873 (Mac mini M6) audio: the AOP (mailbox 0x310740080,
firmware started by Linux), dart-sbr (shared with the PMP;
apple,retain-translation for the firmware's tables), the base-ns ADMAC,
the AOP audio node with its DMA channels and MCA power leaves, the
I2C1/I2C3 power states and buses with the CS42L84 jack codec and the
SN012776 speaker amp (ti,bclk-ratio = <250>), and the macaudio card.

Signed-off-by: Thomas Glanzmann <thomas@glanzmann.de>
[Acelogic: adapted for aurora-wip: the nodes go into
t8152-j873-audio.dtsi, which t8152-j873g.dts includes. There is no PMP
device tree here, so dart-sbr is described directly (as an
apple,t8152-dart with apple,t8110-dart fallback, like the other J873
DARTs), and the I2C power states join the PMGR node that
t8152-j873-qspi.dtsi already describes. The speaker stays off by
default: the J873 macaudio configuration does not admit it.]
Signed-off-by: Acelogic <miguelc4600@gmail.com>
The J873 SMC has F0Tg (target, flt) and F0md (mode, ui8; lowercase, unlike
the F0Md of other machines). With them macsmc_hwmon exposes fan1_target;
with fan_control=1 the fan follows it (2500 -> 2499 RPM within 3 s). In
automatic mode the SMC keeps the fan at its 1000 RPM minimum even at
93 C under full load, so the OS has to drive it.

Signed-off-by: Thomas Glanzmann <thomas@glanzmann.de>
[Acelogic: adapted for aurora-wip, whose T8152 hwmon leaves fan control
to the firmware: the fan node has no apple,fan-manual-control, so the
keys only add a read-only fan1_target. The target becomes writable only
with the fan_control module parameter (unsafe, off by default); nothing
in the kernel writes F0md or F0Tg by itself.]
Signed-off-by: Acelogic <miguelc4600@gmail.com>
…n/wip-sync-20261108-mtr3

Merge integration/aurora 11943fb into aurora-wip (wip sync 4)
Bring the J873g platform series up to date with aurora-wip.

The only textual conflict is the include block at the end of
t8152-j873g.dts. aurora-wip includes the shared t8152-peripherals.dtsi
there, followed by J873g overrides of some of its nodes; this branch
includes the J873g NVMe, USB, Ethernet and audio fragments. Keep the
aurora-wip block first and include the J873g fragments after it, since
they refine nodes that the shared file defines.

The shared file also describes four DARTs, disabled and under canonical
labels, that the J873g fragments add as nodes of their own at the same
paths:
- dart-usb1 (dwc3_1_dart);
- dart-usb2 (dwc3_2_dart);
- dart-apcie2 (pcie2_dart);
- dart-sbr (sbr_dart).
dtc would merge the two definitions of each and keep status =
"disabled", which would disable the DARTs of USB, the 10GbE port and
audio. So this merge drops the duplicate nodes, enables the shared nodes
by label from the fragments, and adds the properties that the tested
description had and the shared nodes lack. Doing it inside the merge
keeps every commit bootable on the J873g.

- dwc3_1_dart, dwc3_2_dart: each ADT node holds two DART instances
  (reg[0] and reg[1], 0xc000 each). The shared nodes list them as two reg
  windows, but the DART driver drives one instance per node, and the
  binding reads a second window as DAPF or auxiliary registers. So the
  shared nodes keep reg[0] only, and instance 1 stays a node of its own,
  labelled dwc3_1_dart_1 or dwc3_2_dart_1 as in the other Apple SoC
  device trees. Drop the t8152-j873g.dts overrides of the two-window reg,
  and the comment that calls these ports unexposed: usb-drd1 is the
  back-left port and usb-drd2 serves the front ports through the
  on-board hub.
- pcie2_dart: keep the 0xc000 window that port 2 was brought up with,
  the size that pcie0_dart has in t8152-j873-n1.dtsi. The shared node and
  the ADT give 0x20000.
- sbr_dart: add apple,retain-translation.

Compared with the hardware-tested J873g DTB, the only differences are an
explicit status = "okay" on these four DARTs, the phandle numbering, and
the 39 disabled nodes that the shared file adds.

drivers/iommu/apple-dart.c and drivers/nvme/host/apple.c merge cleanly.
On T8152 the NVMe controller has no separate NVMMU window, so the new
runtime lsq_in_nvmmu stays false. The linear SQ control register and
doorbells therefore stay in the "nvme" window, as before.

Signed-off-by: Acelogic <miguelc4600@gmail.com>
The J873g USB 2 host nodes describe the back-left (usb-drd1) and front
(usb-drd2) controllers as plain "snps,dwc3" with both DART instances in
iommus. The generic dwc3 binding allows a single iommu, so these nodes
add two dtbs_check warnings. The Apple dwc3 binding, which does allow
two DARTs, needs resets, a USB role switch and PHY descriptions that
the J873g does not have yet.

Return the J873g USB description to the shared, disabled state that
aurora-wip has, until the M6 USB controllers can be described properly:
- drop t8152-j873-usb.dtsi and its include;
- restore aurora-wip's dwc3_1_dart and dwc3_2_dart overrides.

The USB 2 hosts worked on the M6 with the earlier description (both
xHCI hosts and the front-port hub enumerated), and they will come back
in a follow-up together with the binding work.

Signed-off-by: Acelogic <miguelc4600@gmail.com>
…form

J873g: internal SSD, 10GbE, power and audio on aurora-wip
Restore the J873g USB 2 host description that linux#1197 set aside: the
back-left controller (usb-drd1) and the front ports (usb-drd2, behind the
on-board hub), each behind its two DART instances. aura prepares these
ports before Linux starts (j873_usb_prep()).

This is the description that worked on the M6, where both xHCI hosts
and the front-port hub enumerated. It still describes the controllers
as plain "snps,dwc3" with two iommus, which the generic dwc3 binding
rejects. Before it can merge, the nodes need to move to the Apple dwc3
binding, or the binding needs an M6 USB 2 host variant.

Signed-off-by: Acelogic <miguelc4600@gmail.com>
The T8152 (M6) USB-C controllers are Apple DWC3 DRD controllers like
those on earlier SoCs, each with its own ATC PHY. There is no T8152 USB
power-domain, ATC PHY or Type-C support yet. Instead, the bootloader can
hand a controller over already running: powered, with the USB2 side of
its ATC PHY set up for host mode.

Add a standalone "apple,t8152-dwc3" compatible for such a controller,
following the T8132 exception already in this binding. It is described
by its DWC3 core region, as a host, so dr_mode = "host" is required. The
PHY reset and power domain, and on a Type-C port the USB role switch,
exist on T8152 but are left to the bootloader, so they are optional
there. Every other compatible still requires reg-names, resets,
usb-role-switch and two reg entries.

There is no apple,t8103-dwc3 fallback: the T8152 layout of the Apple
region is not established, and without its ATC PHY the controller cannot
switch roles, so the Apple dwc3 glue must not bind it. When T8152 ATC
PHY and Type-C support lands, full Type-C operation can key on resets
and usb-role-switch being present, so these minimal descriptions stay
valid and the dr_mode rule can be relaxed.

Signed-off-by: Acelogic <miguelc4600@gmail.com>
On T8152 (M6) the Apple dwc3 glue cannot drive the controller yet: it
needs the ATC PHY as reset provider and a Type-C role switch, and T8152
has no driver for either. The bootloader powers the controller, sets up
the USB2 side of its ATC PHY for host mode and selects the host role
before the kernel starts, which leaves only the DWC3 core to the kernel.

Match "apple,t8152-dwc3" in the dwc3 core driver. dwc3_probe() uses no
match data, so the controller probes exactly as a "snps,dwc3" node does,
and dr_mode, maximum-speed and the quirks are read from the node as
before. dwc3-apple does not match this compatible, so only the core
binds it.

This entry is to move to dwc3-apple once that driver supports the T8152
ATC PHY and Type-C role switch, so that the two never match the same
compatible.

Signed-off-by: Acelogic <miguelc4600@gmail.com>
The back-left (usb-drd1) and front (usb-drd2) USB 2 host nodes are
"snps,dwc3" with two iommus, one per DART instance. The generic dwc3
binding allows a single iommu, so dtbs_check rejects both nodes.

Use the T8152 Apple dwc3 compatible instead. It allows both DART
instances and documents the bootloader handover these nodes rely on.
Nothing else changes: the nodes keep their core region, interrupt,
DARTs, host mode, speed limit and SUSPHY quirks, and the same dwc3 core
driver binds them.

Signed-off-by: Acelogic <miguelc4600@gmail.com>
Brings aurora-silicon#1122, aurora-silicon#1123, aurora-silicon#1124 (T8142 DART/MTP/MSI), aurora-silicon#1176 (G17 fw-id fence),
aurora-silicon#1201 (J700 speaker full scale) and the rest of integration since
11943fb into aurora-wip.

Conflicts were in four device-tree binding documents only, where
aurora-wip has the T8152 versions and integration the T8142/T8152/T6050
generalisation:
- apple,admac: keep both the lone apple,t8152-admac and the
  apple,t6050-admac/apple,t8140-admac pair.
- apple,t8152-aop: take integration (it still allows a lone
  apple,t8152-aop, one or two mailboxes).
- apple,t8152-aop-audio: take integration and keep a lone
  apple,t8152-aop-audio compatible.
- apple,dwc3: keep the T8152 host-mode rules, and require resets and
  usb-role-switch on every enabled non-T8152 controller.

Signed-off-by: Ryan Murray <81541646+RyanTheTide@users.noreply.github.com>
Assisted-by: LLM
The integration merge brought in two rules for the required resets and
power domains. aurora-wip had "required unless T8152", and integration
had "forbidden on T6050, else required". Together they required the
properties on T6050 nodes that must not have them, and on T8152 nodes
where they are optional. dt-checks flagged that on every T6050 board and
on J873g. Keep one rule: required unless T6050 or T8152. T6050 still
forbids them.

Signed-off-by: Ryan Murray <81541646+RyanTheTide@users.noreply.github.com>
Assisted-by: LLM
Brings aurora-silicon#1211, the G17 QoS KUnit test fix.

Signed-off-by: Ryan Murray <81541646+RyanTheTide@users.noreply.github.com>
Assisted-by: LLM
Brings aurora-silicon#1215, the ADT coverage fix for boards that are new to the base.

Signed-off-by: Ryan Murray <81541646+RyanTheTide@users.noreply.github.com>
Assisted-by: LLM
Brings aurora-silicon#1194, which makes Touch ID wait for the first password after boot (kernel side).

Signed-off-by: Ryan Murray <81541646+RyanTheTide@users.noreply.github.com>
Assisted-by: LLM
…n/wip-sync-20261108b-mtr3

Merge train: sync aurora-wip with integration/aurora 6fee375
…silicon#1410)

The binding and the J714c device tree name the AOP audio service
"apple,t6050-aop-audio", but the driver matched only t8142 and t8152, so
that node never bound.

Add a T6050 hardware config. The J714c ADT audio-speaker stream header
(DeviceTree.j714cap) has the same layout as J813's with six amplifiers in
place of four: 6 speaker slots and 12 sense words (V, I per amplifier), at
16 bits, on slots vsense 0,4,..20 / isense 2,6,..22. J813's header has 4
slots, 8 sense words and vsense 0..12 / isense 2..14. HW_CFG_T8152 (one
amplifier, two sense words) would expose the wrong channel counts, so it is
not reused.

The sense width and the sense realignment are taken from J813's config by
analogy; they are not tested on a J714c.

Tested: builds as a module with Rust enabled (clang 19, arm64 defconfig plus
CONFIG_RUST, CONFIG_SND_SOC_APPLE_T8152_AOP_AUDIO=m); the object carries the
apple,t6050-aop-audio match string. Not tested: no J714c boot, no sound.
aurora-wip carries the J873g (Mac mini M6) hardware that integration lacks:
aurora-silicon#1197 (ANS2 NVMe, 10GbE on apcie port 2, SMC power off/restart, watchdog,
SPMI, USB2 hosts, audio DT) and the T8152 ADMAC layout.

Resolutions:
- sart: both sides added the same SART4 layout (T6050 on integration, T8152
  on aurora-wip); keep integration's sart_ops_v4 and match both.
- mailbox: keep integration's polled/rx_poll_only providers and add the
  J873 ANS post-office mailbox (rx_poll_required, j873_window) next to them.
- nvme: integration's reset_optional replaces aurora-wip's optional_reset;
  keep the T6050 and T8152 tables.
- pcie: keep power-domain attach and the T8152 MRRS limit.
- admac: keep the T6050 display ADMAC and add the T8152 layout; the
  descriptor id goes into the flags word; the resume path is integration's.
- aop.rs, macaudio.c, t8152_aop_audio.rs, tas2764.[ch], sound Kconfig:
  integration's versions, which already carry the T8152/J873 commits and
  extend them (T8142, T6050). Dropped from aurora-wip with them: aurora-silicon#1410
  (integration matches T6050 itself) and the system_dfl workqueue switch
  of ad4910c.
- bindings: list both sides' compatibles. In apple,mailbox.yaml interrupts
  are required unless the mailbox is polled: integration's
  secure-rtbuddy-proxy or aurora-wip's T8152 ANS mailbox, which describes
  none.

Signed-off-by: Thomas Glanzmann <thomas@glanzmann.de>
@sithglan
sithglan force-pushed the thomas/j873-wip-train branch from c7a5c39 to a761a62 Compare November 13, 2026 10:42
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.

4 participants