On 11/6/2026 1:59 AM, Rob Clark wrote:
> The snapshot code will need more control, setting additional bitfields.
> Rather than add a list of additional args, add a helper to acquire the
> aperture which directly takes a reg value.
> 
> Tested-by: Alexander Koskovich <[email protected]> # Milos (Nothing Phone 3a)
> Signed-off-by: Rob Clark <[email protected]>

Reviewed-by: Akhil P Oommen <[email protected]>

-Akhil

> ---
>  drivers/gpu/drm/msm/adreno/a6xx_gpu.h |  1 +
>  drivers/gpu/drm/msm/adreno/a8xx_gpu.c | 21 +++++++++++++--------
>  2 files changed, 14 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu.h 
> b/drivers/gpu/drm/msm/adreno/a6xx_gpu.h
> index c58a2665e9ab..e6ec85b20fb7 100644
> --- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.h
> +++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.h
> @@ -346,6 +346,7 @@ void a6xx_flush(struct msm_gpu *gpu, struct 
> msm_ringbuffer *ring);
>  void a6xx_flush_yield(struct msm_gpu *gpu, struct msm_ringbuffer *ring);
>  int a6xx_zap_shader_init(struct msm_gpu *gpu);
>  
> +void a8xx_aperture_acquire_raw(struct msm_gpu *gpu, u32 val, unsigned long 
> *flags);
>  void a8xx_aperture_acquire(struct msm_gpu *gpu, enum adreno_pipe pipe, 
> unsigned long *flags);
>  void a8xx_aperture_release(struct msm_gpu *gpu, unsigned long flags);
>  void a8xx_aperture_clear(struct msm_gpu *gpu);
> diff --git a/drivers/gpu/drm/msm/adreno/a8xx_gpu.c 
> b/drivers/gpu/drm/msm/adreno/a8xx_gpu.c
> index 82cddaa7278f..be81f141300f 100644
> --- a/drivers/gpu/drm/msm/adreno/a8xx_gpu.c
> +++ b/drivers/gpu/drm/msm/adreno/a8xx_gpu.c
> @@ -16,13 +16,10 @@
>  
>  #define GPU_PAS_ID 13
>  
> -static void a8xx_aperture_slice_set(struct msm_gpu *gpu, enum adreno_pipe 
> pipe, u32 slice)
> +static void a8xx_aperture_slice_set(struct msm_gpu *gpu, u32 val)
>  {
>       struct adreno_gpu *adreno_gpu = to_adreno_gpu(gpu);
>       struct a6xx_gpu *a6xx_gpu = to_a6xx_gpu(adreno_gpu);
> -     u32 val;
> -
> -     val = A8XX_CP_APERTURE_CNTL_HOST_PIPEID(pipe) | 
> A8XX_CP_APERTURE_CNTL_HOST_SLICEID(slice);
>  
>       if (a6xx_gpu->cached_aperture == val)
>               return;
> @@ -32,14 +29,20 @@ static void a8xx_aperture_slice_set(struct msm_gpu *gpu, 
> enum adreno_pipe pipe,
>       a6xx_gpu->cached_aperture = val;
>  }
>  
> -void a8xx_aperture_acquire(struct msm_gpu *gpu, enum adreno_pipe pipe, 
> unsigned long *flags)
> +void a8xx_aperture_acquire_raw(struct msm_gpu *gpu, u32 val, unsigned long 
> *flags)
>  {
>       struct adreno_gpu *adreno_gpu = to_adreno_gpu(gpu);
>       struct a6xx_gpu *a6xx_gpu = to_a6xx_gpu(adreno_gpu);
>  
>       spin_lock_irqsave(&a6xx_gpu->aperture_lock, *flags);
>  
> -     a8xx_aperture_slice_set(gpu, pipe, 0);
> +     a8xx_aperture_slice_set(gpu, val);
> +
> +}
> +
> +void a8xx_aperture_acquire(struct msm_gpu *gpu, enum adreno_pipe pipe, 
> unsigned long *flags)
> +{
> +     a8xx_aperture_acquire_raw(gpu, A8XX_CP_APERTURE_CNTL_HOST_PIPEID(pipe), 
> flags);
>  }
>  
>  void a8xx_aperture_release(struct msm_gpu *gpu, unsigned long flags)
> @@ -74,8 +77,10 @@ static u32 a8xx_read_pipe_slice(struct msm_gpu *gpu, enum 
> adreno_pipe pipe, u32
>       unsigned long flags;
>       u32 val;
>  
> -     spin_lock_irqsave(&a6xx_gpu->aperture_lock, flags);
> -     a8xx_aperture_slice_set(gpu, pipe, slice);
> +     a8xx_aperture_acquire_raw(gpu,
> +             A8XX_CP_APERTURE_CNTL_HOST_PIPEID(pipe) |
> +             A8XX_CP_APERTURE_CNTL_HOST_SLICEID(slice),
> +             &flags);
>       val = gpu_read(gpu, offset);
>       spin_unlock_irqrestore(&a6xx_gpu->aperture_lock, flags);
>  

Reply via email to