[PATCH 2/2] drm/etnaviv: fix power register offset on GC300
Doug Brown
doug at schmorgal.com
Sat Sep 3 06:05:58 UTC 2022
Older GC300 revisions have their power registers at an offset of 0x200
rather than 0x100.
Signed-off-by: Doug Brown <doug at schmorgal.com>
---
drivers/gpu/drm/etnaviv/etnaviv_gpu.h | 16 ++++++++++++++--
1 file changed, 14 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gpu.h b/drivers/gpu/drm/etnaviv/etnaviv_gpu.h
index 85eddd492774..b375612df862 100644
--- a/drivers/gpu/drm/etnaviv/etnaviv_gpu.h
+++ b/drivers/gpu/drm/etnaviv/etnaviv_gpu.h
@@ -10,6 +10,8 @@
#include "etnaviv_gem.h"
#include "etnaviv_mmu.h"
#include "etnaviv_drv.h"
+#include "common.xml.h"
+#include "state_hi.xml.h"
struct etnaviv_gem_submit;
struct etnaviv_vram_mapping;
@@ -149,14 +151,24 @@ struct etnaviv_gpu {
unsigned long base_rate_shader;
};
+static inline u32 gpu_fix_reg_address(struct etnaviv_gpu *gpu, u32 reg)
+{
+ /* Power registers in GC300 < 2.0 are offset by 0x100 */
+ if (reg >= VIVS_PM_POWER_CONTROLS && reg <= VIVS_PM_PULSE_EATER &&
+ gpu->identity.model == chipModel_GC300 &&
+ gpu->identity.revision < 0x2000)
+ reg += 0x100;
+ return reg;
+}
+
static inline void gpu_write(struct etnaviv_gpu *gpu, u32 reg, u32 data)
{
- writel(data, gpu->mmio + reg);
+ writel(data, gpu->mmio + gpu_fix_reg_address(gpu, reg));
}
static inline u32 gpu_read(struct etnaviv_gpu *gpu, u32 reg)
{
- return readl(gpu->mmio + reg);
+ return readl(gpu->mmio + gpu_fix_reg_address(gpu, reg));
}
int etnaviv_gpu_get_param(struct etnaviv_gpu *gpu, u32 param, u64 *value);
--
2.25.1
More information about the etnaviv
mailing list