The rocket driver keeps a single shared DRM device on a driverless "rknn" platform device: the first core to probe initializes it, the last one to go away tears it down. This series fixes two independent bugs in that lifecycle. Both were flagged by the Sashiko AI review on my clks patch; I verified each by hand against the code and then on hardware before writing the fixes.
Patch 1 releases the devres of the shared device on teardown. Today every fini/re-init cycle leaks the previous rocket_device and pins its accel minor - observable as /dev/accel/accel0 coming back as accel1, then accel2, on unbind/rebind cycles of all cores. Patch 2 makes the per-core slot bookkeeping stable across unbind and rebind in any order. Today unbinding a lower-numbered core makes higher-numbered ones unfindable (their runtime PM callbacks start returning -ENODEV), a later unbind of such a core is silently skipped, and a subsequent bind overwrites a slot whose IRQ handler and DRM scheduler are still live. Verified on RK3588 (Orange Pi 5 Plus, all three cores): the unbind/rebind matrix keeps /dev/accel/accel0 stable and every core findable; single-core operation works from the highest slot alone (confirmed via the per-core IRQ counters moving to that core); the forced-init-failure path releases its slot cleanly; and MobileNetV1 inference via the Teflon TFLite delegate stays bit-identical to the stock driver throughout. The series applies on top of Guangshuo Li's pending fix, on which patch 1 depends textually (reviewed on-list): https://lore.kernel.org/dri-devel/[email protected]/ v2: - patch 2: clear the slot's .dev when rocket_core_init() fails - with .dev as the liveness marker a failed init left a half-initialised core visible to lookups and made rocket_job_open()'s live-slot walk overflow its allocation by one entry (Jiaxing Hu); make the never-initialised slot skip in sched_to_core() explicit; document the synchronous-probe assumption - patch 1: unchanged v1: https://lore.kernel.org/dri-devel/[email protected]/ Igor Paunovic (2): accel/rocket: release the shared device's devres on teardown accel/rocket: keep core slots stable across unbind and rebind drivers/accel/rocket/rocket_device.c | 2 ++ drivers/accel/rocket/rocket_device.h | 3 +++ drivers/accel/rocket/rocket_drv.c | 41 ++++++++++++++++++++++++++++++++---- drivers/accel/rocket/rocket_job.c | 13 +++++++------ 4 files changed, 53 insertions(+), 10 deletions(-) -- 2.53.0
