Public bug reported:

Source package: linux-signed-hwe-7.0
Ubuntu: 24.04.4 LTS
Package: linux-image-7.0.0-31-generic 7.0.0-31.31~24.04.1
Hardware: Dell Precision 5690, BIOS 1.25.0, Meteor Lake IPU6-v4, ov02e10, IVSC 
SPI INTC10D0, swnode INTC10CF-4

Expected: after `systemctl hibernate` / S4 resume, the built-in MIPI
camera works the same as after s2idle (sensor bound, frames from the
IPU6 pipeline).

Actual: session and NVIDIA restore; the camera does not. ov02e10 stays
unbound, ivsc_csi logs `mei-csi probed without device fwnode!`. Loopback
`/dev/video0` may still exist. Only a reboot restores the camera
(stock). s2idle does not do this.

=== Summary ===

Same IPU6-after-S4 class as LP#2150370 (XPS 9320) and
intel/ipu6-drivers#407, on a different platform and with a different
immediate failure than INT343E `-EEXIST`.

On this 5690, IPU6 CSE re-auths after hibernation, then:

```
vsc-tp spi-INTC10D0:00: wakeup firmware failed ret: -110
ov02e10 i2c-OVTI02E1:00: failed to check hwcfg: -517
ivsc_csi intel_vsc-92335fcf-…: mei-csi probed without device fwnode!
```

Two stacked kernel problems:

1. IVSC is power-cycled by S4. `mei_vsc` resume is a no-op (LP#2067364 —
correct for S3/s2idle, where firmware stays up). GPIO wakeup of dead
firmware is `-110`. IPU6 itself re-auths; IVSC does not.

2. A later MEI reset recreates mei-csi. `ipu_bridge_init()` early-
returns because the IPU already has a software-node graph (restored from
the image). The new mei-csi never gets
`set_secondary_fwnode(INTC10CF-N)`. ov02e10 on the USB LJCA i2c adapter
is a new client with no graph → `hwcfg -517`. Immediate I2C probe then
hits `-5` until LJCA has been up ~1s.

We did not hit INT343E `-EEXIST` unless IPU6 is unloaded around S4. Do
not add a pre-hibernate IPU6 unload hook.

=== What we already tried (does not restore the camera) ===

- restart v4l2-relayd
- IVSC SPI unbind/rebind (`vsc-tp` bounce)
- intel_vsc platform unbind/bind (still `-110` then `-ENODEV`)
- unloading IPU6 in a sleep hook (INT343E `-EEXIST`, matches LP#2150370)

=== Workaround (tested) ===

Out-of-tree DKMS overlay `mei-vsc-hibernate/1.9` attached (`mei-vsc-
hibernate-1.9.tar.gz`). GPL-2.0, built against 7.0.0-31-generic. It
overrides in-tree `mei-vsc.ko` and `ipu-bridge.ko` via `updates/`.

- `mei-vsc`: arm IVSC firmware reload in `.freeze` (flag stored in the image); 
`.thaw` clears it (aborted hibernate). Do not `mei_restart` in `restore_early` 
(SPI/LJCA still down → `-108`). `.restore` often does not run on this platform 
device; deferred reload from `.complete`/`.resume` if still pending. Skip 
`mei_restart` if mei-csi is already bound (a later restart tears down a 
recovered CSI).
- `ipu-bridge`: if the IPU graph already exists, reattach `INTC10CF-N` to 
mei-csi **only when that device lacks a fwnode or driver** (the S4 recreation 
case). Then restore `OVTI02E1-N` as the ACPI secondary on the new LJCA i2c 
client and delayed-probe ov02e10 (0.5s, then up to 5×1s) because T+0 I2C is 
`-5`.

v1.8 ran that reattach on every cold boot (isys/psys each call
`ipu_bridge_init` after the graph exists). That raced
`isys_runtime_pm_suspend` (NULL `power_lock` oops, PSYS never bound).
v1.9 is the gate above. Do not ship the ungated early-return.

Userspace belt (optional): a systemd-sleep hook can skip `fw_reload`
once ov02e10 is bound (~12s here; USB LJCA). Opening the camera before
that will time out even though the kernel path is about to succeed.

=== Test process ===

A. Stock (no overlay), camera healthy after a normal boot:

1. Confirm sensor + CSI bound, e.g. ov02e10 and ivsc_csi have drivers in sysfs 
(do not need to open video0).
2. `systemctl hibernate`
3. On resume: same sysfs check. Stock: UNBOUND + the three dmesg lines above. 
Cheese/gst also fail. Reboot recovers.

B. Overlay 1.9:

1. Build/install from the tarball (README inside); reboot so `updates/dkms/` 
modules load.
2. Confirm `modinfo ipu-bridge | grep filename` is 
`…/updates/dkms/ipu-bridge.ko`. Cold boot must **not** log `ipu_bridge: 
deferred reattach` if mei-csi already has a fwnode. PSYS must bind (`psys probe 
minor: 0`). No isys Oops.
3. Camera works (Howdy/Cheese/gst).
4. Hibernate once. Pass: session back; within ~12s ov02e10 bound; dmesg 
contains `ipu_bridge: attached INTC10CF-` / `ov02e10 bound after delay`; camera 
works without a reboot. First I2C `-5` then success is expected.
5. One more cold reboot: still no Oops, PSYS bound (the v1.8 regression check).

Verified 2026-09-05 on this 5690, kernel 7.0.0-31-generic: hibernate
09:21:43, `hibernation exit` 09:22:57, CSI `device_attach -> 1` and
ov02e10 bound 09:23:09, camera usable. Kernel is tainted with NVIDIA
595.84 and existing ipu6-drivers DKMS; overlay is additional unsigned
modules.

=== Suggested upstream ===

- `drivers/misc/mei/platform-vsc.c`: S4-only firmware reload; keep S3 as the 
LP#2067364 no-op.
- `drivers/media/pci/intel/ipu-bridge.c`: when the IPU graph already exists, 
attach `INTC10CF-N` to a mei-csi that has no secondary fwnode; restore sensor 
swnodes on a new LJCA i2c client; do not poke a healthy CSI on cold boot.

The in-flight ipu-bridge idempotent-rebind series (LKML 2026-08)
restores the **IPU** secondary fwnode (INT343E `-EEXIST`). It does not
reload IVSC firmware and does not reattach the **mei-csi** swnode.

Related: LP#2150370, LP#2067364,
https://github.com/intel/ipu6-drivers/issues/407

** Affects: linux-hwe-7.0 (Ubuntu)
     Importance: Undecided
         Status: New


** Tags: noble

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/2166564

Title:
  IPU6/IVSC camera dead after hibernate (S4): mei-csi recreated without
  fwnode; ov02e10 unbound (Precision 5690)

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/linux-hwe-7.0/+bug/2166564/+subscriptions


-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to