From: Derek Foreman Date: Fri, 3 May 2024 19:11:58 +0000 (-0500) Subject: drm/etnaviv: Read some FE registers twice X-Git-Tag: v6.11-rc1~141^2~10^2~5 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=95e3ca33f59882f33bc73ba7748f664b042a85c1;p=thirdparty%2Fkernel%2Flinux.git drm/etnaviv: Read some FE registers twice 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 Signed-off-by: Lucas Stach --- diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gpu.h b/drivers/gpu/drm/etnaviv/etnaviv_gpu.h index 197e0037732ec..31322195b9e41 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 GC7000r6009, some FE registers + * need two reads to be consistent. Do that extra read here and + * throw away the result. + */ + if (reg >= VIVS_FE_DMA_STATUS && reg <= VIVS_FE_AUTO_FLUSH) + readl(gpu->mmio + reg); + return readl(gpu->mmio + reg); }