Repository navigation
Merge aurora-wip batch 1 (to fleet14b, 437edfa1) into integration/aurora - #871
Merged
Merged
Conversation
Every join sends CID05 awake before EA/40. That marks mode 0 applied, so the post-association power worker skips the desired awake submission when userspace disabled station power save. A pre-join SET cannot establish the power policy of the subsequent associated firmware session. Invalidate the cache after pre-join initialization, including successful submission. The existing associated-session worker then submits the desired mode once; later identical requests still coalesce. Preserve the TIM and RF/peer/termination gates and leave failures uncached. Add hardware-free KUnit coverage for reconnects, mode-0 reapplication, TIM-gated sleep, failed submissions and terminal sessions. The transport seam exists only in the RF KUnit build. List the driver directory under the existing J700 maintainer entry. This repairs a host cache boundary. Its effect on firmware coexistence and radio latency still requires paired Bluetooth on/off qualification. Assisted-by: LLM Signed-off-by: Ryan Murray <ryan@aurorasilicon.org>
The J700 radio bootstrap already runs only when the board device tree points the PCIe host's "apple,piodma" property at the engine. On top of that, the enumerate module parameter could turn it off again for diagnosis. Nothing sets it, and a board that should stay root-port-only says so in its device tree by leaving the property out. Drop the parameter so the device tree is the only switch. The bootstrap also logged every step at info level: the arena addresses, each interrupt, the request packet, the raw completion words and the validation, about eight lines of hex on every boot. Keep the single BOOTSTRAP_VALIDATED line and the error paths at their levels and move the step-by-step trace to debug, where dynamic debug can still show it. No change to what the bootstrap does. Assisted-by: LLM Signed-off-by: Ryan Murray <ryan@aurorasilicon.org>
CD321x places the connector in SAFE during port registration, before its workers may run. That request uses the Type-C class handle rather than the driver's mux handle. A transient timeout consequently leaves no held mux series: only state_valid is cleared, and initialization continues. In particular, no timeout start time or forced SAFE revalidation survives that initial failure. Apply the initial SAFE state through the worker's handle and feed a transient timeout into the existing held-mux machinery. Record its backoff and time ceiling while INITIALIZING, without enabling or scheduling the workers. ready() starts the normal fresh read, which reapplies SAFE before the connected state. Retain the existing probe deferral for an unavailable fixed host and the ordinary retry policy for non-transient providers. Exercise failed probe SAFE, delayed ready, success without an IRQ, persistent timeout, and unchanged non-transient and deferred-provider behavior. Also cover the ATC USB2-to-pin-D first handoff: a refused lock must retain the pending PIPE and powered-off SS port until a later mux request succeeds. Log the pre-lock PIPE registers under dynamic debug to distinguish a controller acknowledgment failure from lane setup failures. The first USB3_DP request already propagates its timeout through the runtime held-mux path. This change closes the earlier initialization gap; it does not establish why a particular controller failed to acknowledge. Fixes: ed289aa ("usb: typec: tipd: Keep applying a Type-C state that a busy mux holds up") Assisted-by: LLM Signed-off-by: Ryan Murray <ryan@aurorasilicon.org>
A fixed-hub host can enumerate a dock over USB2 before Type-C has brought up the SuperSpeed lanes. Restoring the SS root port's power already queues a warm reset, but that alone need not restart receiver detection after the partner has abandoned the earlier training attempt. Rebinding the PD port can repeat the same sequence without producing a working SS connection. Let the lane provider consume that queued reset immediately after it has restored the port, while retaining the hub lock and a runtime PM reference to the port. Send one warm reset and, only if it completes with no receiver, restart the link once through Disabled and RxDetect. Reuse the existing bounded reset-status wait and hub rescan; add no delayed recovery loop. Skip connected links, USB2 and non-root hubs, ports with children or owners, administrative disables, power holds and ports without the queued reset. Use this only after successful SS power restoration on a T8140 fixed-hub PHY. A training failure is reported without pretending that the PHY still owns a power hold which power_on() has already released. M1/M2 and ordinary Type-C ports retain their existing path. The late-SS asymmetric peer fix handles devices which had already enumerated on USB2 once the SS hub arrives. Exercise the actual helper on a software HCD: success on the warm reset, success only after receiver-detection restart, persistent absence with no new attempts, an already healthy link, a control error and port ownership. The host PM fixture also checks that retraining runs only after the lanes and PIPE are ready and port power has been restored. Fixes: 70f7c21 ("phy: apple: atc: Route the PIPE from the Type-C mux on a fixed-hub port") Assisted-by: LLM Signed-off-by: Ryan Murray <ryan@aurorasilicon.org>
The late-SuperSpeed peer reconnect guard survives the SS disconnect caused by its own USB2 power cycle. It also survives a Type-C mux teardown and handover, such as a tipd rebind, while the fixed USB2 hub remains attached. Devices which fall back to USB2 during that new handover then cannot get another peer reconnect after SuperSpeed returns. Count explicit SuperSpeed lane handovers when the port-power API acquires a new hold. Repeated calls on an existing hold, administrative disables and USB2 power cycles do not advance the count. Record which handover the USB2 worker serviced, so the guard permits one reconnect after a new handover while remaining latched over its own cycle. Snapshot the count before I/O: completion of an older cycle cannot consume a newer handover. Replace a pending request when a newer SS attachment becomes ready before the USB2 worker consumes it. Acquire the new device references under the existing peer/state locks and release replaced references after dropping the peer mutex. Keep the existing single worker and do not nest peer hub locks or add a retry loop. Cover the real port-power hold count and the production queue/decision helpers for a rebind, an identical pending request, its replacement, an old in-flight completion, self-cycle loop suppression and count wrap. Fixes: 5ec3b2c ("usb: core: Reconnect asymmetric hub peers after a late SuperSpeed connection") Assisted-by: LLM Signed-off-by: Ryan Murray <ryan@aurorasilicon.org>
Keep the post-association cache repair and observation counters. The RX protection-before-duplicate fix and its tests are already in the 7.3 base. Retain the established listen interval: the old 2.4 GHz reduction is not scoped to Bluetooth activity and could increase listen opportunities by a factor of twenty even with Bluetooth off. Document the arithmetic, evidence limits and paired hardware checks without claiming firmware wake readback or an observed PTA repair. Assisted-by: LLM Signed-off-by: Ryan Murray <ryan@aurorasilicon.org>
Describe an ordered list of SoC die temperature keys and the optional firmware thermal pressure key on the SMC hwmon node. Specify the key formats and preserve the temperature child indices used by thermal zones. Assisted-by: LLM Signed-off-by: Ryan Murray <ryan@aurorasilicon.org>
Move the J516s, J516c and J514c die key lists from the hwmon board table into their board device trees, retaining every key and its order. Add the J516s mTPL pressure key and keep the existing qualification of the unconfirmed J516s and assumed J514c sensor lists. Assisted-by: LLM Signed-off-by: Ryan Murray <ryan@aurorasilicon.org>
Use apple,soc-die-keys to append validated die temperature channels after the existing temperature children. Register the hottest-sensor zone and pressure attribute from DT data without a machine-compatible gate. Keep the current validation and failed-read behavior. All three board table entries now have matching DT data, so remove the table and the downstream soc_die_keys and board_keys parameters. Neither parameter is present in the mainline v7.3 driver or its documentation. Keep the documented fan_control override and DT fan support from the preceding fan-control series unchanged. Document the new properties and the requirement to update the DTB with the kernel when replacing the former board fallback. Assisted-by: LLM Signed-off-by: Ryan Murray <ryan@aurorasilicon.org>
The DART nodes otherwise default to their entire hardware address width. That omits the device-visible windows recorded by the T6040 firmware tree, including the reserved prefix of the MTP, SIO and USB windows. Translate the structural vm-base/vm-size facts from the J616s 26.6.2 ADT into the existing apple,dma-range binding for the MTP, USB, SIO, AVE, external display and remaining disabled accelerator/ACIO DARTs. These are aperture limits, not captured page tables or firmware addresses. The Apple DART driver already consumes them when setting domain geometry. Keep PCI DARTs separate: their device-visible PCI bus aperture needs the host bridge alias contract, rather than a direct copy of the DART window. Leave the active AOP, ISP and AVD windows alone: their full ADT aperture crosses aliases rejected by the inherited three-level page-table path. The ANE aperture and MPM stream are covered by the separate ANE series. No device status, stream assignment, power domain or thermal node changes. Assisted-by: LLM Signed-off-by: Ryan Murray <ryan@aurorasilicon.org>
Apply rustfmt to existing files that the per-client engine accounting change touches. Keep the mechanical formatting separate from the accounting and firmware timestamp changes for review. Assisted-by: LLM Signed-off-by: Ryan Murray <ryan@aurorasilicon.org>
Retain a per-file engine ledger in queues and completions, and report vertex, fragment and compute time through the Rust DRM fdinfo callback. Charge successful firmware timestamp intervals once at retirement, before signalling the completion fence. Shared code handles conversion and saturating atomic accumulation across classic and native backends, including the shared T6040/G16S and T8140/G17P execution path. Enable the classic firmware's existing timestamp operations without requiring application timestamp outputs. Native retirement already reads the required cells. Do not misreport independent command timer ticks as GPU execution-clock cycles or infer frequency-weighted utilization. Document the sources, limits and overhead, and register eight host tests of the production accounting code. Evidence: existing public firmware timestamp and retirement interfaces; host arithmetic and concurrency tests. Kernel build and runtime qualification remain pending an authorized build service route. Assisted-by: LLM Signed-off-by: Ryan Murray <ryan@aurorasilicon.org>
Update the extracted G15 queue-credit constructor test for its new ledger argument and multiline signature. Include the production ledger in the fixture and record its source digest with the queue and hardware sources. The control and all six intended runtime mutation failures pass. Assisted-by: LLM Signed-off-by: Ryan Murray <ryan@aurorasilicon.org>
A USB-C dock unplug on T6000 logs "Pipehandler lock not acked." and "Failed to lock pipehandler" after xHCI unregisters. The Apple DWC3 glue intentionally exits host mode before powering off the USB3 PHY, whose power-off callback then parks PIPE. The stopped controller no longer clocks the PIPE lock acknowledgment. Enable the existing park_pipe_unlocked capability for the shared T8103 hardware description selected by M1/M2 PHYs, including T6000 through its device-tree fallback. As on T8122, stopped power-off and reset can park without this best-effort handshake. Live handoffs and host BIST still request the lock, and failed live handoffs retain their ownership. Add KUnit checks that count and refuse lock requests. Stopped ordinary ports must park without requesting one, including pending handoffs and USB3+DP shutdown which must preserve the DP mode. Live parking and host setup must still propagate the refused lock. Removing the capability makes both stopped-path regressions fail. Assisted-by: LLM Signed-off-by: Ryan Murray <ryan@aurorasilicon.org>
phy: apple: atc: Skip stopped PIPE locks on M1/M2
…he-20261031 wifi: mt7932: apply station power policy after association on 7.3
hwmon: macsmc: let the device tree allow manual fan speeds (J616s fans without fan_control)
arm64: dts: apple: t6040: describe non-PCI DART apertures
The USB mux state also brings up the SS PHY for USB2-only devices and cables. A bounded handover retrain which finds no SS receiver is normal there. Keep that ENOTCONN result in the helper's debug trace and reserve the PHY warning for control and reset errors. The return value still describes successful port-power restoration; no reset, retry, ownership or lane configuration behavior changes. Fixes: 8df6578 ("usb: core: Retrain an unconnected SS port after a lane handover") Assisted-by: LLM Signed-off-by: Ryan Murray <ryan@aurorasilicon.org>
Introduce apple,t8140-pcie-bootstrap for the bounded radio PCIe bootstrap. Keep the original compatible for deployed Stage 2 DTBs and permit the old compatible as a fallback in new DTBs. Retain the no-teardown contract. Assisted-by: LLM Signed-off-by: Ryan Murray <ryan@aurorasilicon.org>
Give the bounded PIODMA bootstrap a production name and select it only by reciprocal host/engine DT links. Accept old Stage 2 compatibles and supply the legacy fallback in the J700 DT. Keep only one success info message, after both functions pass host admission. Replace independent ownership flags with ordered state transitions shared by KUnit guard tests. Preserve the attempt limit, pre-child PM/kexec interlocks, pre-publication unwind and irreversible ownership after the first engine write. Drop unused last-IRQ trace storage. Completion and an idle FIFO do not prove DMA teardown. Public history has no qualified engine reset, so retain the arena, failure reset requirement and lifecycle restrictions. Document the history behind each guard and why link reset or bootstrap replay cannot retire it. Assisted-by: LLM Signed-off-by: Ryan Murray <ryan@aurorasilicon.org>
Resolve the MAINTAINERS conflict with the mt7932 entry from #646 by keeping both file patterns.
Clippy's disallowed-methods lint rejects CStr::as_ptr() in kernel code because the kernel's char is unsigned. Use as_char_ptr() for the two new fdinfo strings, as the engine name argument already does. Assisted-by: LLM Signed-off-by: Ryan Murray <ryan@aurorasilicon.org>
drm/asahi: Account per-client GPU engine time in fdinfo
hwmon: macsmc: Move SoC die and pressure key data into DT
Add the M1 Pro and M2 AVE compatibles to the shared encoder binding. Both use the same three register windows, five power domains and paired DART topology. Assisted-by: LLM Signed-off-by: Ryan Murray <ryan@aurorasilicon.org>
Select firmware segment sizes, boot identity, device type, explicit coprocessor offsets and LFS reference sizing from SoC match data. Validate both reserved segments and their loader checksums before binding. The pre-M4 command constants, MCC DSID and firmware builds still need qualification. Refuse encoding and firmware startup with an informational message on these SoCs, even if their TEXT checksum happens to match T8140. Keep the shared wire layouts and the qualified T8140 command path. Exercise exact descriptor sizes and alignment boundaries with an independent KUnit sizing suite. Assisted-by: LLM Signed-off-by: Ryan Murray <ryan@aurorasilicon.org>
Describe the codec, mailbox and coprocessor windows, all five AVE IRQs and both SID 0 DARTs from the ADT facts. Use the existing VENC power domains and preserve the 0x8000 pre-M4 mailbox windows. Leave the encoder and both DARTs disabled pending loader handoff and owner qualification. Do not guess the DMA aperture or add an RTKit endpoint. Assisted-by: LLM Signed-off-by: Ryan Murray <ryan@aurorasilicon.org>
…-20261031 PCI: apple: use a DT-selected T8140 radio PCIe bootstrap
Describe explicit DCS state IDs, inferred interface classes and the distinction between physical peak bandwidth and the published rounded class. Leave unaccepted lower-state rates unspecified and do not describe a PMGR achieved-state register. Assisted-by: LLM Signed-off-by: Ryan Murray <ryan@aurorasilicon.org>
Enable the AVE encoder on the J616s together with its two DARTs and the six VENC power domains it sits in. The loader disables the node again when the firmware is not preloaded or cannot be reserved. Both AVE DARTs get a 4 GiB DMA window above the firmware at 0x100_0000_0000. The ADT gives these DARTs a 0x100_0000_0000 + 0x300_0000_0000 VM range, and macOS keeps every encoder address in 0x100_xxxx_xxxx. A 4K session needs about 180 MiB of encoder buffers before its frame queues, so the 256 MiB the A18 Pro DT uses is not enough. Assisted-by: LLM Signed-off-by: Ryan Murray <ryan@aurorasilicon.org>
media: apple: ave: encode on the M4 Pro and enable it in the J616s DT
The host builder test extracts the driver sources into a userspace harness. Two recent changes stopped it compiling: the firmware CRC table now names AVE_FW_TEXT_CRC_T6040_25G83, which the harness did not copy from ave.h, and the HEVC neighbour buffer is sized with max_t(), which the shim did not provide. Copy the T6040 CRC define when ave.h has it (an older baseline tree does not) and add max_t() to the shim. Assisted-by: LLM Signed-off-by: Ryan Murray <ryan@aurorasilicon.org>
…ecovery A failed session returns its OUTPUT buffers before runtime recovery stops the coprocessor. vb2 can then release the input IOVAs on DQBUF or close, even though the firmware can still read them. Keeping the session scratch allocations alone does not protect these mappings. Wrap the OUTPUT DMA-contig memory operations in a reference-counted mapping. Pin it before publishing each Process command and release the pin after normal delivery or with the quarantined session after reset. Retain imported attachments, their dma-bufs and the device independently of the vb2 context. Let vb2 report queue errors and complete buffers at the existing point, without waiting for Halt or power loss. Reclamation uses the normal DMA API after the existing control-off/reset witness; strict system sleep and the recovery rate limit are unchanged. Also quarantine Start scratch before an uncertain command submission. Exercise the production memory operations and command handoff in the host recovery tests, rejecting mapping release before the stop/reset markers. Cover MMAP, imports, immediate close, failed submission, failed stop, retained power and the recovery limit, and document the Neo LEAD-RUN re-test. Assisted-by: LLM Signed-off-by: Ryan Murray <ryan@aurorasilicon.org>
media: apple: ave: tests: follow the M4 Pro firmware and buffer sizes
Brings the tested integration/aurora work that aurora-wip still lacked: the GPU VM reservation locking (PR 521), the G17 failed-command retirement (PR 556), the shared aurora-sep SELinux type and Arch checksums (PR 584), the bindgen layout-check CI triggers (PR 607) and the display gate comment (PR 613). The rest of integration/aurora since the last sync is already on aurora-wip in its own commits. Conflicts: - drivers/gpu/drm/asahi/mmu.rs: keep aurora-wip's SAFETY comments and take PR 521's exec_lock_vm() in the map_pages and unmap paths. - drivers/gpu/drm/asahi/g17/queue/mod.rs: keep aurora-wip's rustfmt layout of the compute input-source gate and take PR 556's FailureRecord::earliest() check through self.failures.iter_mut(). - Documentation/rust/bindgen-layout-checks.rst and .github/workflows/sep-source.yml: PR 607 is integration/aurora's backport of aurora-wip's own layout-check commits, so keep aurora-wip (which also has the alignment probe from PR 726) and add only the Makefile, rust/ and tools/aurora-bindgen/ path triggers for the rust-build job. - tools/aurora-sep packaging: both sides took Fedora 1-10, so the SELinux change becomes 1-11 after the orphan identity tool; Arch pkgrel 16, with every sum taken from the merged files. - Documentation/gpu/drivers.rst, drivers/gpu/drm/asahi/workqueue.rs, tools/asahi/neo-stability-tests.py and tools/asahi/run-host-tests.py: the integration/aurora commits are already on aurora-wip; keep aurora-wip. Assisted-by: LLM Signed-off-by: Ryan Murray <ryan@aurorasilicon.org>
Split the SMBIOS processor Version lookup into dmi_processor_version() and cover it with KUnit: string numbers, missing and blank strings, structures too short to have the field, other structure types and truncation. The suite is built in (it includes cpuinfo.c's static parser) and only with KUNIT=y, so kernels with KUNIT=m are unchanged. Name every step of the lookup and document where the name comes from. Assisted-by: LLM Signed-off-by: Ryan Murray <ryan@aurorasilicon.org>
…a-lifetime-2 media: apple: ave: retain input DMA mappings through failed-session recovery
avd-av1-tail-tests.py builds avd_av1_set_prob() and friends from avd-av1.c on the host. Since "media: apple: avd: bound AV1 reference indices before using them", those functions call avd_av1_ref_ts(), a u64 helper the extractor did not pick up, so the generated file stopped compiling and run-host-tests went from 158/158 to 148/158. Extract avd_av1_ref_ts() too (the function matcher now accepts a u64 return type) and give the host prelude u64 and U64_MAX. The production controls pass again and all six mutations are still caught. Assisted-by: LLM Signed-off-by: Ryan Murray <ryan@aurorasilicon.org>
tools/asahi: extract the AV1 reference guard in the AV1 tail host test
When the recovery budget runs out, or a reset fails, the decoder is retired: its jobs fail without touching the hardware until the module is reloaded. The frame that triggered it is still finished with an error, so its buffers go back to userspace while the engine that just timed out may still be running, which is the DMA-after-free pattern behind the J616s hangs. Retire through the same first steps as a recovery: disable the interrupt, stop the CM3 and attach the empty IOMMU domain, then leave it attached. A still-running engine can then only fault at the DART. A reset that fails after DMA was blocked keeps it blocked as well. Detach the empty domain at remove so a reload starts from the DMA domain. Assisted-by: LLM Signed-off-by: Ryan Murray <ryan@aurorasilicon.org>
… storm A third recovery within a minute retired the decoder until the module was reloaded. That is too harsh for a desktop: on an M2 the H.264 conformance suite retired it within three seconds, because a few vectors use features the hardware rejects with a VP error, and every later stream failed until a reload. A user with a bad file would lose hardware decode until a reboot. Recoveries are now quiesced (DMA blocked at the DART before the reset) and have held up under forced errors, so the budget only needs to bound their rate. When it runs out, park the decoder (interrupt off, CM3 stopped, DMA blocked) and fail new frames without touching it until the budget window ends. The next frame after that resets it with DMA still blocked, restores the DMA domain and boots the firmware. Only a reset, restore or boot that fails retires the decoder. Assisted-by: LLM Signed-off-by: Ryan Murray <ryan@aurorasilicon.org>
Fifteen Apple silicon device trees had no chassis-type: the M3 and M4 MacBook Air and Pro, MacBook Air (M5), MacBook Neo, the M3 and M4 iMacs, Mac mini (M4), Mac mini (M6) and Mac Studio (M3 Ultra). Every other Mac has it. Without it the bootloader reports an unknown enclosure in the SMBIOS tables, and systemd-hostnamed, GNOME and power management cannot tell a laptop from a desktop. On the MacBook Neo hostnamectl showed no chassis and /sys/class/dmi/id/chassis_type read 2 (Unknown). Add "laptop", "desktop" or "all-in-one" as for the other boards of each kind. Assisted-by: LLM Signed-off-by: Ryan Murray <ryan@aurorasilicon.org>
The video decoder, video encoder, neural engine and camera ISP are run
by their own coprocessor firmware, which can still have DMA in flight
after the host driver gives up on a job: a frame timeout, a reset, a
stream torn down mid-frame. With deferred flushing a freed buffer's
IOVAs keep translating to its pages until the flush queue drains, while
the pages are already back in the allocator, so such a late write
corrupts unrelated memory without any fault. The M4 Pro hard hangs
under AVD stress all followed decoder resets and left no panic and an
empty pstore, which fits this.
Give these clients a strict DMA domain, chosen from the client's device
tree compatible ("apple,<soc>-avd", "-ave", "-ane", "-isp" and
"apple,isp"), so a late write faults at the DART instead. They map
their buffers once per stream or model, so the per-unmap invalidate
stays off the hot path. Per-stream T8140/T8142 DARTs were already
strict through apple_dart_capable().
Assisted-by: LLM
Signed-off-by: Ryan Murray <ryan@aurorasilicon.org>
AOP: make the T6040 accelerometer and gyroscope report
…ueue The first frame watchdog of every boot logged "workqueue: work func avd_watchdog_func enqueued on deprecated workqueue" because it was queued with schedule_delayed_work() and mod_delayed_work(system_wq). The watchdog has no CPU affinity to keep, so queue it on system_dfl_wq. Assisted-by: LLM Signed-off-by: Ryan Murray <ryan@aurorasilicon.org>
AVD: safety and recovery (park DMA on retire, rest instead of retire, strict DART flushing for media/ML engines)
… set
GNOME never turned on variable refresh for a fullscreen game on the
J616s panel. Compositors toggle VRR_ENABLED in a plain page flip, but
the desktop 26.6 path made a VRR_ENABLED change a mode set, so the flip
failed with EINVAL ("Page flip failed: drmModeAtomicCommit: Invalid
argument" in the journal) and VRR stayed off. With ALLOW_MODESET the
toggle works but costs a full link reselect: the firmware shuts the
link down, the backlight is off for about 200 ms and the commit takes
207 ms on the panel (272 ms on an external display).
On the panel, install a VRR timing with adaptive sync on whatever
VRR_ENABLED says, at the mode's minimum rate, as the pipe pair path
already does. VRR_ENABLED then only moves the minimum rate on the live
mode (IOMFBParameter 14, sent ahead of the frame's swap): the mode's
minimum when on, its nominal rate when off, which holds the panel at
that rate. The firmware takes the new minimum without a mode set. The
external processors don't: on an MSI MPG 325CQRXF (48-280 Hz) a live
minimum of 280, 279 or 240 Hz left the idle desktop at 48 Hz, so they
keep applying VRR_ENABLED with a mode set.
On the J616s panel (3456x2234, 24-120 Hz, firmware 26.6.2) a fullscreen
glmark2-wayland under GNOME now flips VRR_ENABLED to 1 and back with no
failed flips and no link reselect. Idle with a static image, the panel
draws 290 mW less with VRR on than off when toggled through a mode set,
and 440 mW less when toggled live, so the live minimum rate takes
effect.
Assisted-by: LLM
Signed-off-by: Ryan Murray <ryan@aurorasilicon.org>
KDE Plasma in HDR on the J616s panel looked washed out, and night light did nothing there under GNOME. GAMMA_LUT on desktop 26.x is composed through the firmware table that A420 returns. On the J616s panel that table does not rise monotonically and the external processors return none (status 2), so the driver logged "unusable firmware gamma table, GAMMA_LUT ignored" and dropped every LUT after accepting it in atomic check. KWin, with its default "prefer efficiency" colour setting, tests and then moves its blending-space to PQ curve into GAMMA_LUT, so the panel got gamma 2.2 code values read as PQ. mutter put night light into the same ignored table. Offer no GAMMA_LUT on desktop 26.x until the table can really be programmed. KWin then applies its curves while rendering, and mutter falls back to the CTM, which the DCP applies: a white field with CTM diag(1, 0.7, 0.4) shows warm on the J616s panel. Assisted-by: LLM Signed-off-by: Ryan Murray <ryan@aurorasilicon.org>
…-20261101 Merge integration/aurora into aurora-wip
…name Apple silicon identity: cpuinfo model name from SMBIOS, chassis-type for every board
…onfig usb: dwc3: apple: select the tunable helper
drm/apple: VRR on the desktop 26.6 panel without a mode set, no GAMMA_LUT on desktop 26.x
A PQ link on the J616s external processors carried no mastering data: HDR_OUTPUT_METADATA only picked the PQ colour mode, so displays got the PQ EOTF but no mastering primaries, luminance, MaxCLL or MaxFALL, and every change of the metadata (a new video) cost a full mode set. The firmware builds the Dynamic Range and Mastering InfoFrame itself from DCPAV selector 0x15 (setHDRStaticMetadata), an AFK standard service command to dcpav-service-epic on endpoint 0x2a. Its payload is a serialized dictionary, Type "CEA-861:Type1" and Data, the 24-byte Type 1 body in the order of struct hdr_metadata_infoframe; the EOTF comes from the colour mode the link runs. Bring up endpoint 0x2a on the external processors and keep the service pinned. Send the connector's Type 1 block once the link carries PQ, after the mode set and whenever it changes, never per frame and never on an SDR link; check the transport, the AFK return code and the DCP status in the reply. A metadata change with the same EOTF and colorspace is no longer a mode set there. Going back to SDR is a mode set, and the link set up again carries no InfoFrame. A host selftest checks the 176-byte message against an independent encoding and the reply checks. Assisted-by: LLM Signed-off-by: Ryan Murray <ryan@aurorasilicon.org>
… blocks per frame A commit that only changed HDR_OUTPUT_METADATA on a desktop 26.x external no longer pulled in its CRTC, so the new block waited for the next commit that touched the CRTC; on a static screen that could be never. Add the CRTC to the commit, just without a mode set. A block the firmware refused was sent again with every frame, and the command waits up to a second for its reply. Remember a refused block like a taken one, so only a new block, mode set or service retries it, and skip the send on a crashed DCP. Assisted-by: LLM Signed-off-by: Ryan Murray <ryan@aurorasilicon.org>
drm/apple: Send HDR10 static metadata to desktop 26.x external displays
Bring integration/aurora up to aurora-wip 437edfa, the source of the 7.3.0-aurora-fleet14b kernel that was promoted on the M1 Pro, M2, Neo and J616s on 2026-11-01. This takes the aurora-wip work since the two branches diverged, including the 2026-11-01 sync of integration/aurora into aurora-wip (#761), up to and including #764. integration/aurora had two changes aurora-wip lacked at this point: the tipd late USB4 router fix (#855) and SEP keybag creation in the shared xART window (#856). aurora-wip carries the same patches as #858 and #860, which come in with a later batch. Two conflicts, both where the two sides added lines next to each other: the KUnit prototype list in tps6598x.h (both kept, in #858's order) and the aurora-sep PKGBUILD checksums (recomputed from the merged files; they match #860's). The merged tree is identical to aurora-wip 437edfa with the #858 and #860 patches applied. Assisted-by: LLM Signed-off-by: Ryan Murray <ryan@aurorasilicon.org>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Batch 1 of 6 bringing integration/aurora up to aurora-wip. It's a merge commit, with no rebase and no rewrite of integration/aurora.
Range
aurora-wip up to 437edfa, the source of
7.3.0-aurora-fleet14b. That includes the 2026-11-01 sync of integration/aurora into aurora-wip (#761) and everything aurora-wip carried before it.Older fleet kernels can't serve as batch boundaries. They predate the #761 sync, so merging any of them would mean redoing that sync's conflict resolution.
aurora-wip first-parent PRs in this range include #764 #763 #762 #747 #761 #758 #745 #754 #753 #752 #748 #739 #744 #725 #729 #722 #727 #726 #736 #719 #716 and the October aurora-wip history behind them (#166 onward).
Conflicts
integration/aurora has two changes that aurora-wip carries as rebased copies:
Both copies come in with batch 6. That gives two conflicts, both from adjacent additions:
drivers/usb/typec/tipd/tps6598x.h: both KUnit prototypes are kept, in usb: typec: tipd: take the USB4 router when it binds after the deferred-probe timeout (aurora-wip) #858's order.tools/aurora-sep/packaging/arch/aurora-sep/PKGBUILD: the checksums are recomputed from the merged files. They are identical to soc: apple: sep: let a second Linux install create its Touch ID keybag on M2 Pro/Max (aurora-wip) #860's.The merged tree (6583c364) is identical to aurora-wip 437edfa with the #858 and #860 patches applied (checked with
git apply --cached).This replaces #866, which went stale when #856 merged.
Hardware evidence
fleet14b (aurora-wip 437edfa, no carries) was promoted on 2026-11-01 on all four machines. The J616s warm boot was eec67924.
Source: aurora-ctl/reports/fleet14-20261101/RESULTS.md, fleet14b sections.
Gates on this merge tree (buildbox, fleet recipe)
🤖 Generated with Claude Code