[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