On 03/11/2026 20:36, Adrián Larumbe wrote:
> From: Boris Brezillon <[email protected]>
> 
> If we don't do that, we end up with invalid timestamps in the block
> headers.
> 
> We also need to avoid the warning on the cycle counter reference being
> other than 0 during device reset, because of perfcnt's lingering ref.
> 
> Ideally this would be dealt with by splitting the reset sequence into
> pre and post stages, so that a hypothetical panfrost_perfcnt_pre_reset()
> would release the cycle counter reference. In the absence thereof, we
> just make do.
> 
> Fixes: 7786fd108777 ("drm/panfrost: Expose performance counters through 
> unstable ioctls")
> Signed-off-by: Boris Brezillon <[email protected]>
> Signed-off-by: Adrián Larumbe <[email protected]>
> ---
>  drivers/gpu/drm/panfrost/panfrost_gpu.c     | 6 +++---
>  drivers/gpu/drm/panfrost/panfrost_perfcnt.c | 3 +++
>  2 files changed, 6 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/gpu/drm/panfrost/panfrost_gpu.c 
> b/drivers/gpu/drm/panfrost/panfrost_gpu.c
> index 6081b27829e1..7d66b1b50968 100644
> --- a/drivers/gpu/drm/panfrost/panfrost_gpu.c
> +++ b/drivers/gpu/drm/panfrost/panfrost_gpu.c
> @@ -94,10 +94,10 @@ int panfrost_gpu_soft_reset(struct panfrost_device *pfdev)
>                 GPU_IRQ_CLEAN_CACHES_COMPLETED);
>  
>       /*
> -      * All in-flight jobs should have released their cycle
> -      * counter references upon reset, but let us make sure
> +      * Even though all in-flight jobs should have released their cycle 
> counter
> +      * references upon reset, perfcnt's might still hang about.
>        */
> -     if (drm_WARN_ON(&pfdev->base, 
> atomic_read(&pfdev->cycle_counter.use_count) != 0))
> +     if (atomic_read(&pfdev->cycle_counter.use_count) != 0)
>               atomic_set(&pfdev->cycle_counter.use_count, 0);

There's no point in doing the read - we might as well just
unconditionally do the atomic_set().

With that fixed:

Reviewed-by: Steven Price <[email protected]>

>  
>       return 0;
> diff --git a/drivers/gpu/drm/panfrost/panfrost_perfcnt.c 
> b/drivers/gpu/drm/panfrost/panfrost_perfcnt.c
> index a9def452d5ef..b26da057a1a0 100644
> --- a/drivers/gpu/drm/panfrost/panfrost_perfcnt.c
> +++ b/drivers/gpu/drm/panfrost/panfrost_perfcnt.c
> @@ -17,6 +17,7 @@
>  #include "panfrost_device.h"
>  #include "panfrost_features.h"
>  #include "panfrost_gem.h"
> +#include "panfrost_gpu.h"
>  #include "panfrost_issues.h"
>  #include "panfrost_job.h"
>  #include "panfrost_mmu.h"
> @@ -52,6 +53,7 @@ static void panfrost_perfcnt_hw_disable(struct 
> panfrost_device *pfdev)
>       gpu_write(pfdev, GPU_PRFCNT_TILER_EN, 0);
>  
>       if (perfcnt->owns_as_ref) {
> +             panfrost_cycle_counter_put(pfdev);
>               panfrost_mmu_as_put(pfdev, perfcnt->mapping->mmu);
>               perfcnt->owns_as_ref = false;
>       }
> @@ -84,6 +86,7 @@ static int panfrost_perfcnt_hw_enable(struct 
> panfrost_device *pfdev)
>               return ret;
>  
>       perfcnt->owns_as_ref = true;
> +     panfrost_cycle_counter_get(pfdev);
>  
>       as = ret;
>       cfg = GPU_PERFCNT_CFG_AS(as) |
> 

Reply via email to