[PATCH 6/8] drm/msm/a6xx: Add IFPC tables for Adreno 640/680
From: Konrad Dybcio
Date: Fri Oct 30 2026 - 06:09:35 EST
From: Konrad Dybcio <konrad.dybcio@xxxxxxxxxxxxxxxx>
Fill out the register tables to enable IFPC on these SKUs.
Signed-off-by: Konrad Dybcio <konrad.dybcio@xxxxxxxxxxxxxxxx>
---
drivers/gpu/drm/msm/adreno/a6xx_catalog.c | 47 +++++++++++++++++++++++++++++--
1 file changed, 45 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/msm/adreno/a6xx_catalog.c b/drivers/gpu/drm/msm/adreno/a6xx_catalog.c
index 5e1d91a73a4e..89829fa8f4f4 100644
--- a/drivers/gpu/drm/msm/adreno/a6xx_catalog.c
+++ b/drivers/gpu/drm/msm/adreno/a6xx_catalog.c
@@ -814,6 +814,43 @@ static const u32 a630_pwrup_reglist_regs[] = {
DECLARE_ADRENO_REGLIST_LIST(a630_pwrup_reglist);
+static const u32 a640_pwrup_reglist_regs[] = {
+ REG_A6XX_VSC_ADDR_MODE_CNTL,
+ REG_A6XX_GRAS_ADDR_MODE_CNTL,
+ REG_A6XX_RB_ADDR_MODE_CNTL,
+ REG_A6XX_PC_ADDR_MODE_CNTL,
+ REG_A6XX_HLSQ_ADDR_MODE_CNTL,
+ REG_A6XX_VFD_ADDR_MODE_CNTL,
+ REG_A6XX_VPC_ADDR_MODE_CNTL,
+ REG_A6XX_UCHE_ADDR_MODE_CNTL,
+ REG_A6XX_SP_ADDR_MODE_CNTL,
+ REG_A6XX_TPL1_ADDR_MODE_CNTL,
+ REG_A6XX_UCHE_WRITE_RANGE_MAX,
+ REG_A6XX_UCHE_WRITE_RANGE_MAX + 1,
+ REG_A6XX_UCHE_TRAP_BASE,
+ REG_A6XX_UCHE_TRAP_BASE + 1,
+ REG_A6XX_UCHE_WRITE_THRU_BASE,
+ REG_A6XX_UCHE_WRITE_THRU_BASE + 1,
+ REG_A6XX_UCHE_GMEM_RANGE_MIN,
+ REG_A6XX_UCHE_GMEM_RANGE_MIN + 1,
+ REG_A6XX_UCHE_GMEM_RANGE_MAX,
+ REG_A6XX_UCHE_GMEM_RANGE_MAX + 1,
+ REG_A6XX_UCHE_FILTER_CNTL,
+ REG_A6XX_UCHE_CACHE_WAYS,
+ REG_A6XX_UCHE_MODE_CNTL,
+ REG_A6XX_RB_NC_MODE_CNTL,
+ REG_A6XX_TPL1_NC_MODE_CNTL,
+ REG_A6XX_SP_NC_MODE_CNTL,
+ REG_A6XX_PC_DBG_ECO_CNTL,
+ REG_A6XX_RB_CONTEXT_SWITCH_GMEM_SAVE_RESTORE_ENABLE,
+ REG_A6XX_UCHE_GBIF_GX_CONFIG,
+ REG_A6XX_UCHE_CLIENT_PF,
+ REG_A6XX_RBBM_GBIF_CLIENT_QOS_CNTL,
+ REG_A6XX_RBBM_PERFCTR_CNTL,
+};
+
+DECLARE_ADRENO_REGLIST_LIST(a640_pwrup_reglist);
+
static const struct adreno_info a6xx_gpus[] = {
{
.chip_ids = ADRENO_CHIP_IDS(0x06010000),
@@ -1115,7 +1152,8 @@ static const struct adreno_info a6xx_gpus[] = {
},
.gmem = SZ_1M,
.quirks = ADRENO_QUIRK_HAS_CACHED_COHERENT |
- ADRENO_QUIRK_4GB_VA,
+ ADRENO_QUIRK_4GB_VA |
+ ADRENO_QUIRK_IFPC,
.inactive_period = DRM_MSM_INACTIVE_PERIOD,
.funcs = &a6xx_gpu_funcs,
.zapfw = "a640_zap.mdt",
@@ -1124,6 +1162,8 @@ static const struct adreno_info a6xx_gpus[] = {
.protect = &a630_protect,
.gmu_cgc_mode = 0x00020202,
.prim_fifo_threshold = 0x00180000,
+ .ifpc_reglist = &a630_ifpc_reglist,
+ .pwrup_reglist = &a640_pwrup_reglist,
},
.speedbins = ADRENO_SPEEDBINS(
{ 0, 0 },
@@ -1238,7 +1278,8 @@ static const struct adreno_info a6xx_gpus[] = {
},
.gmem = SZ_2M,
.quirks = ADRENO_QUIRK_HAS_CACHED_COHERENT |
- ADRENO_QUIRK_4GB_VA,
+ ADRENO_QUIRK_4GB_VA |
+ ADRENO_QUIRK_IFPC,
.inactive_period = DRM_MSM_INACTIVE_PERIOD,
.funcs = &a6xx_gpu_funcs,
.zapfw = "a640_zap.mdt",
@@ -1247,6 +1288,8 @@ static const struct adreno_info a6xx_gpus[] = {
.protect = &a630_protect,
.gmu_cgc_mode = 0x00020202,
.prim_fifo_threshold = 0x00200200,
+ .ifpc_reglist = &a630_ifpc_reglist,
+ .pwrup_reglist = &a640_pwrup_reglist,
},
}, {
.chip_ids = ADRENO_CHIP_IDS(0x06090000),
--
2.56.0