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 <derek.foreman@collabora.com> Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
This commit is contained in:
committed by
Lucas Stach
parent
e843e87abb
commit
95e3ca33f5
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user