Repository navigation
J713: Touch ID (SEP profile for the V3 sensor, SoC and board device tree) - #457
Conversation
|
The profile selection is restricted to both There is one shared execution-path change: Please complete the per-kernel DT activation. The new SEP and SEP DART nodes are disabled in Add T8132 and root-key/nonce consistency to the profile contract tests, including refusal of an unqualified T8132 board. The contributor's enrol, match and reboot results are useful J713 evidence. Deployment also needs this Mac's own installer-prepared root key and sealed calibration; the installer currently collects those only for J700. The software gates are queued through an ordinary buildslot. I will update this same comment with the exact build and test results. No hardware test was performed in this review. Merge after the reviewed common train, with an enabled SEP control DTB and U-Boot #15 before #14 for the per-kernel route; the source tree with manifests exceeds the old importer limit. Preserve the existing enrolments for the required Neo and M1 Pro regression checks. Keep the affected calibration-preparation package from overwriting the sealed calibration before those boots. |
|
Updated (b6674505, rebased on 421e314):
Activation: the SEP and SEP DART don't need board enabling.
U-Boot #14 now also removes a stale manifest the control tree doesn't publish. #15 raises the importer's 128 KiB source bound, which the SEP-carrying control tree (136,997 bytes) exceeded on the first attempt. Records: the J713's records are filed as aurora-installer#38. alarm-aurora#26 keeps the sealed calibration from being overwritten; I'm tightening its validation as you asked there. The Neo and M1 Pro regression boots need hardware I don't have. |
The M4's SPI controllers are the T8103 design, as on T8140. Signed-off-by: Erik Bourget <erik@ebourget.net>
The Secure Enclave and its DART, as the ADT describes them: SEP at 0x3aa600000 with its ASC mailbox at +0x8000 (AIC 389-392), DART at 0x3a8c80000 (AIC 399) with the BIT(40) input alias the DART translates. The DART's register window is 0x20000: its stale-exception drain reads per-stream registers past 0x4000. SPI2 at 0x3ad108000 (AIC 1056) carries the Mesa fingerprint sensor. As on T8140 it runs from the 24 MHz reference clock; with a 200 MHz rate the divider for the sensor's 8 MHz gave about 1 MHz and frame reads timed out. The sensor node takes SPI mode 2, as the 0x3356 sensor does on J700. All disabled. The SEP driver enables the SEP and its DART itself; a board with a qualified sensor enables the mailbox and SPI2. Signed-off-by: Erik Bourget <erik@ebourget.net>
The J713 SoC side is J613's: a warm-attach enclave shared with macOS, the variant-5 key store and the BIT(40) DART alias. Its Mesa sensor is J700's generation (0x3356, "V3" in the ADT), not J613's (0x3352): the enclave refuses the R3 session (SESSION_SHARE status 0x16), and its factory calibration is an FSC2 image. So it takes J700's SPI mode 2 and nonce session. Its device tree names its own signed root key. Profile selection becomes a pure function of the root compatible list, so the tests can check that only J713 selects T8132 and that the other boards keep their profiles. J713 on 26.6.2 (25G83) provisions its keybag, enrols, matches, and restores the enrolment after a reboot, with xart_guard 1 and no record refused. Signed-off-by: Erik Bourget <erik@ebourget.net>
Enable the SEP mailbox and the Mesa sensor, which sits on spi2 with power on NUB GPIO 28 and data-ready on AP GPIO 199 (J713 ADT /arm-io/spi2/mesa). The SEP driver enables the SEP and its DART itself. The sensor node names this Mac's calibration and its signed root key. Signed-off-by: Erik Bourget <erik@ebourget.net>
…uchid Merge train: J713 Touch ID (#457) rebased onto integration/aurora
0c342c2
into
aurora-silicon:integration/aurora
Touch ID on the J713 (M4 MacBook Air) through the SEP driver: enrol, match, and restore across reboots.
What the J713 needs
Its SoC side is J613's: a warm-attach enclave shared with macOS, the variant-5 key store, and the BIT(40) DART alias. Its Mesa sensor is J700's generation, though: 0x3356 ("V3" in the ADT), not J613's 0x3352. A J613-style profile attaches and provisions the keybag, but the enclave then refuses the R3 session (
SESSION_SHAREstatus 0x16) on every attempt. The sensor's factory calibration is also an FSC2 image, as on J700. So the J713 profile takes J613's SoC fields and J700's sensor protocol: SPI mode 2, the nonce session, and a signed root key.Patches
apple,t8132-spi. It's the T8103 design, as on T8140.SPI transfer failed: -110).apple,j713is matched; the other T8132 Macs haven't been read. Profile selection becomes a pureselect(), so the KUnit tests can check that a bare T8132, J613 on a T8132, or J713 claimed on a T8122 is refused while J613, J700 and J616s keep their profiles.firmware-namenames the calibration and the signed root key, which the driver now reads from the device tree (cd2cdc5).Boot chain and userspace
Boot chain: the driver refuses to attach without
local-policy-manifestandiboot-manifeston the SEP node, as intended. m1n1 publishes them once its DTB has thesepalias this adds, and U-Boot's J713 importer carries them into the per-kernel tree (arm: apple: carry the J713 SEP boot manifests into the OS tree u-boot#14, which needs nvme: apple: add J700 T8140 ANS ownership and reset #15). The whole route has run on J713: a boot.bin of m1n1 + this series' DTBs + U-Boot ASoC: apple: T8140 (J700) AOP audio and macaudio routing (reworked, 12 patches) #13/j416s: DisplayPort over Thunderbolt (T602X USB4 DP tunnel) #14/nvme: apple: add J700 T8140 ANS ownership and reset #15, booting a per-kernel DTB with no manifests, delivered both, byte-identical to ADT-hash-verified copies, and Touch ID worked.Root key and calibration: these are this Mac's own factory records, resealed the way aurora-installer builds them for the J700:
apple/msrk-j713.bin;apple/mesacal-j713.bin, the FSC2 resealed, since the enclave refuses the bare image here too.The installer collects these only for the J700 today; Collect the Touch ID root key and sealed calibration on J713 (M4 MacBook Air) aurora-installer#38 describes what the J713 needs.
Two-entry
firmware-name: the sensor node names both files, so the Touch ID helper must readfirmware-nameas a string list. The distro helpers do from alarm-aurora 6889700, fedora-aurora 87f9001 and nixos-aurora 37c604a (aurora-touchid-setup). An olderprepare-sep-calibrationrejects the name and skips fprintd, so this should land together with or after packages that carry those commits.Testing
Hardware: J713 on macOS 26.6.2 (25G83), with this series on top of arm64: keep J713 GPU/DCP non-coherent when CLIDR_EL1.LoC == 0 (fixes J713 graphics on 7.3) #429/cpuidle: apple: add T8132 and enable it on J713 (s2idle groundwork) #432/soc: apple: aop: T8132 (M4 MacBook Air) AOP and microphones #434/ASoC: apple: J713 (M4 MacBook Air) headphone jack on the AOP (depends on #434) #437/ASoC: apple: J713 (M4 MacBook Air) speakers on the AOP (depends on #437) #439/J713 (M4 MacBook Air): suspend-to-idle #449/J713: G16 performance governor, and the PMP idle floor it needs #455:
xart_guard1 and no record refused;fprintd-enroll(10 stages);fprintd-verifymatch;aurora-sep.service;pam_fprintd.The root key loaded under its J713 name with no J700 file present.
Checks: checkpatch
--strictis clean on all five patches.dt_binding_checkpasses forapple,spi,apple,sepandapple,mesa-fingerprint. The J713dtbs_checkadds nothing new. The tree builds withAPPLE_SEP=mplusAPPLE_SEP_KUNIT_TESTand no new warnings. rustfmt is clean forprofile.rs, and the series adds no rustfmt findings tosbio.rs.KUnit: arm64 16K under qemu
virt, all SEP suites: 133/133 pass, includingapple_sep_profile7/7 andapple_sep_dart_window2/2.Rebased onto 23827fe (2026-10-30). The base now takes the root-key name from the sensor node's second
firmware-nameentry (cd2cdc5). That replaces the old patch 3, a per-profile root-key name, which is dropped, so the series is four patches. The J713 device tree namesapple/msrk-j713.bininstead. The J713 profile is merged with the base's J616s profile, and the J616s selection now runs throughselect()with a test case. On the new base:--strictand rustfmt are clean;dtbs_checkgives the same 11 diagnostics as the base on all six T8132 DTBs.On J713, a SEP module with the base's device-tree lookup, without the old profile name, plus the new device tree restored the enrolment after a reboot.
fprintd-verifythen matched.