mirror of
https://github.com/torvalds/linux.git
synced 2026-10-16 04:39:02 +02:00
Setting the EOS flag talks to the firmware via send_firmware_command(),
which accesses VPU registers. Both the STREAMOFF path
(wave5_vpu_dec_job_abort()) and the V4L2_DEC_CMD_STOP path
(wave5_vpu_dec_stop()) can run while the device is runtime suspended, so
those register accesses hit powered-down hardware and the SoC raises an
asynchronous SError, panicking the kernel:
SError Interrupt on CPU3, code 0x00000000bf000000 -- SError
send_firmware_command+0x2c/0x160 [wave5]
wave5_vpu_dec_set_bitstream_flag+0x6c/0x80 [wave5]
wave5_vpu_dec_update_bitstream_buffer+0x80/0xec [wave5]
wave5_vpu_dec_job_abort+0x44/0xa0 [wave5]
v4l2_m2m_cancel_job+0x110/0x19c [v4l2_mem2mem]
v4l2_m2m_streamoff+0x24/0x140 [v4l2_mem2mem]
Resume the device with pm_runtime_resume_and_get() around the EOS
firmware command and release it with pm_runtime_put_autosuspend(),
matching the runtime PM handling already done in
wave5_vpu_dec_device_run().
Fixes:
|
||
|---|---|---|
| .. | ||
| Kconfig | ||
| Makefile | ||
| wave5-helper.c | ||
| wave5-helper.h | ||
| wave5-hw.c | ||
| wave5-regdefine.h | ||
| wave5-vdi.c | ||
| wave5-vdi.h | ||
| wave5-vpu-dec.c | ||
| wave5-vpu-enc.c | ||
| wave5-vpu.c | ||
| wave5-vpu.h | ||
| wave5-vpuapi.c | ||
| wave5-vpuapi.h | ||
| wave5-vpuconfig.h | ||
| wave5-vpuerror.h | ||
| wave5.h | ||