Skip to content

soc: apple: aop: Add the T8132 (M4 MacBook Air) AOP - #819

Merged
erykwieliczko merged 2 commits into
aurora-silicon:integration/aurorafrom
erikwb:j713/aop-t8132
Nov 4, 2026
Merged

erykwieliczko merged 2 commits into
aurora-silicon:integration/aurorafrom
erikwb:j713/aop-t8132

Conversation

@erikwb

@erikwb erikwb commented Nov 1, 2026 •

Copy link
Copy Markdown
Contributor

The T8132 AOP (J713, MacBook Air 13" M4). It takes the T6040 configuration, and the bootloader hands it over the T6040 way. This supersedes the AOP half of #434. The J713 audio that runs on it is in #820.

  • dt-bindings: apple,t8132-aop on apple,t6041-aop.yaml. On T8132 the bootloader also programs the AOP DART's DAPF and reserves its windows. The firmware reaches those windows through its DART at their physical addresses, so they come in memory-region along with the firmware segments: up to 18 regions on T8132. T6041 stays at 4.
  • soc: apple: aop: a match entry, HW_CFG_T8132 = HW_CFG_T6040.

The #434 review

  • Loader ownership. Following the review, there's no ADT reader, DAPF write or raw iommu_map in the kernel, so the probe error paths that left DAPF writes and mappings behind are gone with them. The IOMMU core maps the reserved regions, and check_fw_regions() verifies them as on T6040.
  • The handoff:
  • Control DTB: m1n1's bundled tree takes the AOP node from the J713 DTB in the audio PR. That path, and the per-kernel DTB through u-boot#13, both worked in Omarchy's packaged layout (m1n1#47).

Testing

On a J713, with the audio PR on top, on integration/aurora 41c4055. The boot chain has the m1n1#47 and u-boot#13 handoff.

  • Startup: the AOP's memory-region lists 17 regions (__ETEXT, __OS_LOG and the 15 windows), and RTKit: Initializing (protocol version 12). No DART faults, and the kernel stays untainted. The microphones, jack and speakers all run on it, and a full snd-soc-aop reload brings them back.

  • Start failure and rebind:

    • Unbinding apple_aop times out waiting for the endpoints to acknowledge their shutdown (5 s, mask 0xfff).
    • On the rebind, RTKit endpoint discovery fails (−62).
    • The failure path then halts the AOP again, keeps its buffers until reboot, and fails the probe cleanly: no oops, untainted.

    So on J713 the AOP core can't be rebound without a reboot, but its failure path is safe. T6040 takes the same path. I haven't seen how a J616s behaves there.

Checks:

  • checkpatch --strict is clean on both commits.
  • These two commits build on their own, drivers/soc/apple with W=1. aop.o also builds in the universal WERROR build (defconfig + asahi.config).
  • dt_binding_check is clean for apple,t6041-aop.yaml.

@erykwieliczko

erykwieliczko commented Nov 3, 2026 •

Copy link
Copy Markdown
Member

Rebased: commit message only (not pushed yet)

#819 still merges cleanly. But since 28174f88b ("soc: apple: aop: Write the T6040 firmware's own nCal boot argument"), the T6040 configuration writes nCal 1, and HW_CFG_T8132 = HW_CFG_T6040 inherits it. The message of soc: apple: aop: Add T8132 still said nCal 0.

I reworded it to nCal 1, with a pointer to 28174f8, and added my sign-off with an [eryk: …] note. The code is unchanged, and Erik stays the author.

Testing:

I haven't pushed it. If you're fine with it, I'd force-push it to j713/aop-t8132 together with the #820 rebase.


🤖 Written by Claude Opus 5.5 (in Claude Code) for Eryk; the rebase, fixes and tests above were done the same way.

erikwb and others added 2 commits November 4, 2026 06:30
The T8132 (M4) AOP runs the same firmware transport as the T6041 one, and
its bootloader hands it over the same way. It also programs the AOP DART's
address filter (DAPF) and reserves the filter's windows, which the firmware
reaches through its DART at their physical addresses. The windows come in
memory-region with the firmware segments, up to 16 of them.

Signed-off-by: Erik Bourget <erik@ebourget.net>
The T8132 (M4) AOP takes the T6040 boot arguments (EC0p 0x100_0000_0000,
nCal 1, alig 64, AOPt 0): iBoot leaves the boot-argument table at its
defaults in the AOP SRAM and the AOP halted, and the ADT gives __ETEXT the
DART address 0x100_0000_0000. The bootloader programs the AOP DART's DAPF
and reserves the firmware segments and the DAPF windows, so the T6040
configuration applies unchanged, including the firmware's own nCal of 1
that the T6040 writes since 28174f8 ("soc: apple: aop: Write the T6040
firmware's own nCal boot argument").

Tested on J713 (MacBook Air 13" M4) with m1n1 handing the AOP over (its
memory-region holds __ETEXT, __OS_LOG and the 15 DAPF windows): the AOP
starts, and the microphones capture (3 channels, 48 kHz) through
aop_audio.

Signed-off-by: Erik Bourget <erik@ebourget.net>
[eryk: rebased onto integration/aurora 21f7ffc; the T8132 config now
 inherits nCal 1 from the T6040 one (28174f8), so the message says so]
Signed-off-by: Eryk Wieliczko <eryk@wieliczko.ninja>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@erykwieliczko
erykwieliczko merged commit 55d08cc into aurora-silicon:integration/aurora Nov 4, 2026
@erykwieliczko

Copy link
Copy Markdown
Member

Merged. This comment is from Claude, working for Eryk, not from Eryk himself.

Rebased onto integration/aurora 565c8025e715 and force-pushed first, as Erik agreed. No code changes: only the commit message of soc: apple: aop: Add T8132 changed. It now says nCal 1, which the T8132 config inherits from the T6040 one since 28174f88b, with an [eryk: …] note.


🤖 Written by Claude Opus 5.5 (in Claude Code) for Eryk.

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.

2 participants