[PATCH] drm/etnaviv: Read some FE registers twice

Lucas Stach l.stach at pengutronix.de
Thu May 16 17:36:17 UTC 2024


Hi Derek,

Am Freitag, dem 03.05.2024 um 14:11 -0500 schrieb Derek Foreman:
> On some hardware (such at the GC7000 rev 6009), these registers need to be
> read twice to return the correct value. Hide that in gpu_read().
> 
> Signed-off-by: Derek Foreman <derek.foreman at collabora.com>
> ---
>  drivers/gpu/drm/etnaviv/etnaviv_gpu.h | 8 ++++++++
>  1 file changed, 8 insertions(+)
> 
> diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gpu.h b/drivers/gpu/drm/etnaviv/etnaviv_gpu.h
> index 197e0037732e..0f67c62be3d1 100644
> --- a/drivers/gpu/drm/etnaviv/etnaviv_gpu.h
> +++ b/drivers/gpu/drm/etnaviv/etnaviv_gpu.h
> @@ -11,6 +11,7 @@
>  #include "etnaviv_mmu.h"
>  #include "etnaviv_drv.h"
>  #include "common.xml.h"
> +#include "state.xml.h"
>  
>  struct etnaviv_gem_submit;
>  struct etnaviv_vram_mapping;
> @@ -170,6 +171,13 @@ static inline void gpu_write(struct etnaviv_gpu *gpu, u32 reg, u32 data)
>  
>  static inline u32 gpu_read(struct etnaviv_gpu *gpu, u32 reg)
>  {
> +	/* On some variants, such as the GC7000 6009, some FE registers
                                         GC7000 rev 6009
> +	 * need two reads to be consistent. Do that extra read here and
> +	 * throw away the result.
> +	 */

Please use the common comment style of this driver with a blank line
after the /*

> +	if (reg >= VIVS_FE_DMA_STATUS && reg <= VIVS_FE_AUTO_FLUSH)
> +		readl(gpu->mmio + reg);

I don't think it matters much, but we can save some of the overhead
here by using readl_relaxed.

Regards,
Lucas

> +
>  	return readl(gpu->mmio + reg);
>  }
>  



More information about the etnaviv mailing list