Skip to content

media: apple: isp: restore J613 camera capture on 14.7 firmware - #134

Closed
garymeyerca wants to merge 2 commits into
omacom:integration/aurorafrom
garymeyerca:garymeyerca/j613-camera-147
Closed

garymeyerca wants to merge 2 commits into
omacom:integration/aurorafrom
garymeyerca:garymeyerca/j613-camera-147

Conversation

@garymeyerca

@garymeyerca garymeyerca commented Oct 16, 2026 •

Copy link
Copy Markdown

On J613 with ISP firmware compatibility 14.7, the T8122 PMU address has an extra trailing zero. Correcting it permits startup, but the temporal-filter=1 value supplied by m1n1 still produces no output frames. This series corrects the address and selects temporal filter 0 only for J613 + 14.7 + filter 1.

This complements #117 and #119. The 26.6.2 fix in #119 skips temporal processing; the tested 14.7 fix retains the existing CNR, MBNR and temporal commands and changes the filter index. Both changes are separate commits for review.

Hardware evidence (2026-10-13):

  • MacBook Air 13-inch M3, J613/T8122, eight active GPU cores; OS firmware 14.7, system firmware 27.0.
  • Original PR95 source 3500d57; kernel 7.1.12-2-20261013.95-sep-ARCH.
  • Local apple-isp module override built with Clang 23.1.1 and GNU ld.bfd; loaded without force options. The override is retained in apple-isp-j613-pr95 1-1.
  • PMU correction alone fixes the probe-time translation fault but yields no frames. Filter 0 delivers frames with the original processing setup.
  • A normal-user ffmpeg run captured 60 frames of 1920x1080 NV12 at approximately 30 fps; repeated streams passed. Saved image statistics show varying nonblank luma/chroma values.
  • The original PR95 boot loaded the override and logged: "using temporal filter 0 on J613 firmware 14.7". /dev/video1 is the physical FaceTime camera; Lens Camera at /dev/video10 is a separate virtual device.

Rebase validation (2026-10-16):

  • Base: integration/aurora ccd21b7.
  • Both patches pass strict checkpatch with --no-signoff and git diff --check.
  • Current-integration ISP sources with this series compile as apple-isp.ko against the retained PR95 headers.
  • The open Camera on the M3 MacBook Air (J613) with 26.6.2 firmware #119 head, 4cf3221, applies cleanly on top; the combined ISP sources also compile against those headers.

Full integration build and hardware validation (2026-10-16):

  • Built and booted kernel 7.1.12-2-20261016.135-validate-ARCH from combined validation commit 3f707474edf90df80a9fd14c3b47b9459706cc0a, containing this series and drm/asahi: retain state 2 as the T8122 thermal fallback #135 on the base above.
  • Full make ARCH=arm64 LLVM=1 -j4 W=1 all passed with Clang/LLD 23.1.1, Rust 1.93.1 and bindgen 0.73.2. Build warnings are retained locally; this is not a warning-free build. The release config retains Rust/Asahi and ISP support, uses a unique local version and Zstd-compressed debug sections, and includes the base's J613 display-gate default.
  • Loaded the in-tree kernel/drivers/media/platform/apple/isp/apple-isp.ko for the new kernel, without the old PR95 module override. Probe logs confirm temporal filter 0 on J613 firmware 14.7.
  • Three independent normal-user ffmpeg streams each delivered 60 measured NV12 1920x1080 frames: 30.01, 30.00 and 29.99 fps. Signal statistics were measured in memory; no camera images were saved.
  • OpenGL/Vulkan readbacks, three compute checks and three rendering runs also passed on this boot. The highest sampled candidate die temperature during the complete basic run was 62.656 C.
  • An initial automatic run during desktop startup was stopped by its 80 C guard after one candidate reached 85.203 C, before camera frames were recorded. The complete run above passed after cooling, with the same guard.

J615, 26.6.2 on this machine, suspend/resume, and browser camera acceptance on the rebased candidate remain untested. A separate 60-fps experiment still delivered about 30 fps and is excluded from this series.

Prepared with Codex assistance from this machine's saved source, build and capture logs. No images, raw firmware, calibration data, raw device trees or full journals are included.

The extra trailing zero places the PMU address outside the PMGR range
on J613. Correcting it resolves the probe-time firmware translation
fault on a J613 running firmware compatibility 14.7.

Hardware tested as a module override on the original PR95 kernel,
7.1.12-2-20261013.95-sep-ARCH. Rebased integration source has separate
hardware qualification pending.

Link: omacom#117
Assisted-by: Codex:GPT-6
On the tested J613, m1n1 supplies temporal-filter=1. The PMU fix permits
startup but this filter yields no output frames. Selecting filter 0
delivers 1920x1080 NV12 at about 30 fps with the existing CNR, MBNR and
temporal processing commands retained.

Limit the workaround to J613, firmware compatibility 14.7, and filter 1.
This complements the 26.6.2 camera work; that firmware's processing
strategy is unchanged.

Hardware tested as a module override on the original PR95 kernel.
Rebased integration source has separate hardware qualification pending.

Link: omacom#117
Assisted-by: Codex:GPT-6
@garymeyerca
garymeyerca marked this pull request as ready for review October 16, 2026 22:39
@scottjones

Copy link
Copy Markdown
Collaborator

Hardware result for this series on 7.2.11: PASS on a MacBook Air 13" M3 (J613), OS firmware 14.7 (14.8.3 stub).

We cherry-picked both commits unchanged onto current integration/aurora (be6381f, which includes #187). The kernel had the M3 GPU runtime enabled (DRM_ASAHI_G15 + DRM_ASAHI_M3_T8122) and booted with Aura stage 2 v0.1.0-6-g5809f60b.

Before, on the same kernel without this series, the first use of the camera timed out (IO: timed out on request, failed to send OPCODE 0x0101/0x0104/0x0021, never received magic number from firmware).

With it:

  • the probe logs using temporal filter 0 on J613 firmware 14.7, with no ISP timeouts and no DART or ISP faults;
  • /dev/video1 (FaceTime HD Camera): six ffmpeg captures of 60 frames each, NV12 1920x1080 at 30 fps, with luma averaging about 130 after the first auto-exposure frame. No images were saved;
  • with isp-ipc.c dynamic debug on, the firmware's shared-surface releases from 282a6e1 (141 of them) caused no Bad length errors, and frames kept flowing;
  • no regressions on that boot: the internal display at 2560x1664@60 under Hyprland, GPU render and compute checks passing with the runtime healthy, and audio and mic working.

One small correction to the description: on this Air, apple,temporal-filter = <1> comes from the kernel device tree (t8122-j613.dts, overriding the <0> in isp-imx558-cfg0.dtsi), not from m1n1. J615 sets the same value, so it may need the same quirk on 14.7, but we haven't tested a J615.

@scottjones

Copy link
Copy Markdown
Collaborator

Thanks for this. It's carried in #199 so it can merge tonight. Both commits are yours, unchanged (author, date and message), rebased onto current integration/aurora (7.2.11) with my Signed-off-by added as carrier. GitHub wouldn't accept a push to this branch, so I'm closing this in favor of #199.

@scottjones scottjones closed this Oct 24, 2026
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