On Wed Sep 23 23:10:33 2026 +0200, Linus Walleij wrote:
> mali_c55_pipeline_ready() waits for every video queue to enter its
> start_streaming callback, regardless of whether its media link is enabled.
> 
> When libcamera uses the TPG, it disables the statistics and parameters
> links and queues only image buffers. Although STREAMON succeeds on the
> metadata nodes, videobuf2 never invokes their callbacks without queued
> buffers. The ISP and TPG are therefore never enabled and capture hangs.
> 
> An unused full-resolution or downscaled output can similarly prevent the
> pipeline from starting.
> 
> Only require queues connected through enabled media links to have started.
> 
> Use media_pad_remote_pad_first() to check the video node pads, retaining
> the capability check before accessing the optional downscale device.
> 
> The shared readiness check also keeps stream-off consistent: the first
> active queue to stop disables the ISP.
> 
> Fixes: d5f281f3dd29 ("media: mali-c55: Add Mali-C55 ISP driver")
> Cc: [email protected]
> Assisted-by: LLM
> Signed-off-by: Linus Walleij <[email protected]>
> Reviewed-by: Jacopo Mondi <[email protected]>
> Signed-off-by: Jacopo Mondi <[email protected]>
> Signed-off-by: Hans Verkuil <[email protected]>

Patch committed.

Thanks,
Hans Verkuil

 drivers/media/platform/arm/mali-c55/mali-c55-core.c | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

---

diff --git a/drivers/media/platform/arm/mali-c55/mali-c55-core.c 
b/drivers/media/platform/arm/mali-c55/mali-c55-core.c
index 5a061ec5ec5c..241a625f7284 100644
--- a/drivers/media/platform/arm/mali-c55/mali-c55-core.c
+++ b/drivers/media/platform/arm/mali-c55/mali-c55-core.c
@@ -510,11 +510,16 @@ bool mali_c55_pipeline_ready(struct mali_c55 *mali_c55)
        struct mali_c55_params *params = &mali_c55->params;
        struct mali_c55_stats *stats = &mali_c55->stats;
 
-       return vb2_start_streaming_called(&fr->queue) &&
+       /* Only wait for queues connected through enabled media links. */
+       return (!media_pad_remote_pad_first(&fr->pad) ||
+               vb2_start_streaming_called(&fr->queue)) &&
               (!(mali_c55->capabilities & MALI_C55_GPS_DS_PIPE_FITTED) ||
+               !media_pad_remote_pad_first(&ds->pad) ||
                vb2_start_streaming_called(&ds->queue)) &&
-              vb2_start_streaming_called(&params->queue) &&
-              vb2_start_streaming_called(&stats->queue);
+              (!media_pad_remote_pad_first(&params->pad) ||
+               vb2_start_streaming_called(&params->queue)) &&
+              (!media_pad_remote_pad_first(&stats->pad) ||
+               vb2_start_streaming_called(&stats->queue));
 }
 
 static int mali_c55_check_hwcfg(struct mali_c55 *mali_c55)
_______________________________________________
linuxtv-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to