drm/msm/adreno: Introduce/rework device hw catalog
Subsystems (4)
v3 cover drm/msm/adreno: Introduce/rework device hw catalog
From: Rob Clark <[email protected]>
Split the single flat gpulist table into per-gen tables that exist in their own per-gen files, and start moving more info into the device table. This at least gets all the big tables of register settings out of the heart of the a6xx_gpu code. Probably more could be moved, to remove at least some of the per-gen if/else ladders, but this seemed like a reasonably good start.
v2: Drop sentinel table entries
v3: Fix typo
Rob Clark (5):
drm/msm/adreno: Split up giant device table drm/msm/adreno: Split catalog into separate files drm/msm/adreno: Move hwcg regs to a6xx hw catalog drm/msm/adreno: Move hwcg table into a6xx specific info drm/msm/adreno: Move CP_PROTECT settings to hw catalog
drivers/gpu/drm/msm/Makefile | 5 + drivers/gpu/drm/msm/adreno/a2xx_catalog.c | 52 + drivers/gpu/drm/msm/adreno/a3xx_catalog.c | 81 ++ drivers/gpu/drm/msm/adreno/a4xx_catalog.c | 50 + drivers/gpu/drm/msm/adreno/a5xx_catalog.c | 148 +++ drivers/gpu/drm/msm/adreno/a6xx_catalog.c | 1239 ++++++++++++++++++++ drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 880 +------------- drivers/gpu/drm/msm/adreno/a6xx_gpu.h | 11 + drivers/gpu/drm/msm/adreno/adreno_device.c | 624 +--------- drivers/gpu/drm/msm/adreno/adreno_gpu.h | 32 +- 10 files changed, 1648 insertions(+), 1474 deletions(-) create mode 100644 drivers/gpu/drm/msm/adreno/a2xx_catalog.c create mode 100644 drivers/gpu/drm/msm/adreno/a3xx_catalog.c create mode 100644 drivers/gpu/drm/msm/adreno/a4xx_catalog.c create mode 100644 drivers/gpu/drm/msm/adreno/a5xx_catalog.c create mode 100644 drivers/gpu/drm/msm/adreno/a6xx_catalog.c
Signature · 1 line
2.45.2
PATCH v3 1/5 drm/msm/adreno: Split up giant device table
From: Rob Clark <[email protected]>
Split into a separate table per generation, in preparation to move each gen's device table to it's own file.
--- drivers/gpu/drm/msm/adreno/adreno_device.c | 67 +++++++++++++++++----- drivers/gpu/drm/msm/adreno/adreno_gpu.h | 10 ++++ 2 files changed, 63 insertions(+), 14 deletions(-)
drivers/gpu/drm/msm/adreno/adreno_device.c +53 -14
@@ -20,7 +20,7 @@ bool allow_vram_carveout = false;MODULE_PARM_DESC (allow_vram_carveout,"Allow using VRAM Carveout, in place of IOMMU" );module_param_named (allow_vram_carveout, allow_vram_carveout, bool,0600 ); -static const struct adreno_info gpulist[] = { +static const struct adreno_info a2xx_gpus[] = { { .chip_ids =ADRENO_CHIP_IDS (0x02000000 ), .family =ADRENO_2XX_GEN1 ,
@@ -54,7 +54,12 @@ static const struct adreno_info gpulist[] = { .gmem = SZ_512K, .inactive_period = DRM_MSM_INACTIVE_PERIOD, .init = a2xx_gpu_init, - }, { + } +}; +DECLARE_ADRENO_GPULIST (a2xx); + +static const struct adreno_info a3xx_gpus[] = { + { .chip_ids =ADRENO_CHIP_IDS (0x03000512 ), .family =ADRENO_3XX , .fw = {
@@ -116,7 +121,12 @@ static const struct adreno_info gpulist[] = { .gmem = SZ_1M, .inactive_period = DRM_MSM_INACTIVE_PERIOD, .init = a3xx_gpu_init, - }, { + } +}; +DECLARE_ADRENO_GPULIST (a3xx); + +static const struct adreno_info a4xx_gpus[] = { + { .chip_ids =ADRENO_CHIP_IDS (0x04000500 ), .family =ADRENO_4XX , .revn =405 ,
@@ -149,7 +159,12 @@ static const struct adreno_info gpulist[] = { .gmem = (SZ_1M + SZ_512K), .inactive_period = DRM_MSM_INACTIVE_PERIOD, .init = a4xx_gpu_init, - }, { + } +}; +DECLARE_ADRENO_GPULIST (a4xx); + +static const struct adreno_info a5xx_gpus[] = { + { .chip_ids =ADRENO_CHIP_IDS (0x05000600 ), .family =ADRENO_5XX , .revn =506 ,
@@ -274,7 +289,12 @@ static const struct adreno_info gpulist[] = { .quirks = ADRENO_QUIRK_LMLOADKILL_DISABLE, .init = a5xx_gpu_init, .zapfw = "a540_zap.mdt", - }, { + } +}; +DECLARE_ADRENO_GPULIST (a5xx); + +static const struct adreno_info a6xx_gpus[] = { + { .chip_ids =ADRENO_CHIP_IDS (0x06010000 ), .family =ADRENO_6XX_GEN1 , .revn =610 ,
@@ -520,7 +540,12 @@ static const struct adreno_info gpulist[] = { .zapfw = "a690_zap.mdt", .hwcg = a690_hwcg, .address_space_size = SZ_16G, - }, { + } +}; +DECLARE_ADRENO_GPULIST (a6xx); + +static const struct adreno_info a7xx_gpus[] = { + { .chip_ids =ADRENO_CHIP_IDS (0x07000200 ), .family =ADRENO_6XX_GEN1 ,/* NOT a mistake! */ .fw = {
@@ -582,7 +607,17 @@ static const struct adreno_info gpulist[] = { .init = a6xx_gpu_init, .zapfw = "gen70900_zap.mbn", .address_space_size = SZ_16G, - }, + } +}; +DECLARE_ADRENO_GPULIST (a7xx); + +static const struct adreno_gpulist *gpulists[] = { + &a2xx_gpulist, + &a3xx_gpulist, + &a4xx_gpulist, + &a5xx_gpulist, + &a6xx_gpulist, + &a6xx_gpulist, };MODULE_FIRMWARE ("qcom/a300_pm4.fw" );
@@ -617,13 +652,17 @@ MODULE_FIRMWARE("qcom/yamato_pm4.fw");static const struct adreno_info *adreno_info (uint32_t chip_id) {/* identify gpu: */ -for (int i =0 ; i <ARRAY_SIZE (gpulist); i++) { -const struct adreno_info *info = &gpulist[i]; -if (info->machine && !of_machine_is_compatible (info->machine)) -continue ; -for (int j =0 ; info->chip_ids[j]; j++) -if (info->chip_ids[j] == chip_id) -return info; +for (int i =0 ; i <ARRAY_SIZE (gpulists); i++) { +for (int j =0 ; j < gpulists[i]->gpus_count; j++) { +const struct adreno_info *info = &gpulists[i]->gpus[j]; + +if (info->machine && !of_machine_is_compatible (info->machine)) +continue ; + +for (int k =0 ; info->chip_ids[k]; k++) +if (info->chip_ids[k] == chip_id) +return info; + } }return NULL ;
drivers/gpu/drm/msm/adreno/adreno_gpu.h +10 -0
@@ -114,6 +114,16 @@ struct adreno_info { #define ADRENO_CHIP_IDS(tbl...) (uint32_t[]) { tbl, 0 } +struct adreno_gpulist { +const struct adreno_info *gpus; +unsigned gpus_count; +}; + +#define DECLARE_ADRENO_GPULIST (name) \ +const struct adreno_gpulist name ## _gpulist = { \ + name ## _gpus, ARRAY_SIZE(name ## _gpus) \ +} +/* * Helper to build a speedbin table, ie. the table: * fuse | speedbin
Signature · 1 line
2.45.2
Re: [PATCH v3 1/5] drm/msm/adreno: Split up giant device table
Quoted 11 lines · Rob Clark
From: Rob Clark <[email protected]>
Split into a separate table per generation, in preparation to move each gen's device table to it's own file.
Signed-off-by Rob Clark <[email protected]>--- drivers/gpu/drm/msm/adreno/adreno_device.c | 67 +++++++++++++++++----- drivers/gpu/drm/msm/adreno/adreno_gpu.h | 10 ++++ 2 files changed, 63 insertions(+), 14 deletions(-)
Signature · 2 lines
With best wishes Dmitry
Re: [PATCH v3 1/5] drm/msm/adreno: Split up giant device table
In reply to Rob ClarkQuoted 7 lines · Rob Clark
From: Rob Clark <[email protected]>
Split into a separate table per generation, in preparation to move each gen's device table to it's own file.
Signed-off-by Rob Clark <[email protected]>---
Konrad
PATCH v3 2/5 drm/msm/adreno: Split catalog into separate files
In reply to Rob ClarkFrom: Rob Clark <[email protected]>
Split each gen's gpu table into it's own file. Only code-motion, no functional change.
--- drivers/gpu/drm/msm/Makefile | 5 + drivers/gpu/drm/msm/adreno/a2xx_catalog.c | 52 ++ drivers/gpu/drm/msm/adreno/a3xx_catalog.c | 81 +++ drivers/gpu/drm/msm/adreno/a4xx_catalog.c | 50 ++ drivers/gpu/drm/msm/adreno/a5xx_catalog.c | 148 +++++ drivers/gpu/drm/msm/adreno/a6xx_catalog.c | 338 +++++++++++ drivers/gpu/drm/msm/adreno/adreno_device.c | 625 +-------------------- 7 files changed, 680 insertions(+), 619 deletions(-) create mode 100644 drivers/gpu/drm/msm/adreno/a2xx_catalog.c create mode 100644 drivers/gpu/drm/msm/adreno/a3xx_catalog.c create mode 100644 drivers/gpu/drm/msm/adreno/a4xx_catalog.c create mode 100644 drivers/gpu/drm/msm/adreno/a5xx_catalog.c create mode 100644 drivers/gpu/drm/msm/adreno/a6xx_catalog.c
drivers/gpu/drm/msm/Makefile +5 -0
@@ -8,13 +8,18 @@ ccflags-$(CONFIG_DRM_MSM_DP) += -I $(src)/dp adreno-y := \ adreno/adreno_device.o \ adreno/adreno_gpu.o \ + adreno/a2xx_catalog.o \ adreno/a2xx_gpu.o \ adreno/a2xx_gpummu.o \ + adreno/a3xx_catalog.o \ adreno/a3xx_gpu.o \ + adreno/a4xx_catalog.o \ adreno/a4xx_gpu.o \ + adreno/a5xx_catalog.o \ adreno/a5xx_gpu.o \ adreno/a5xx_power.o \ adreno/a5xx_preempt.o \ + adreno/a6xx_catalog.o \ adreno/a6xx_gpu.o \ adreno/a6xx_gmu.o \ adreno/a6xx_hfi.o \
drivers/gpu/drm/msm/adreno/a2xx_catalog.c new file +52 -0
52 lines not on this page · raw message
drivers/gpu/drm/msm/adreno/a3xx_catalog.c new file +81 -0
81 lines not on this page · raw message
drivers/gpu/drm/msm/adreno/a4xx_catalog.c new file +50 -0
50 lines not on this page · raw message
drivers/gpu/drm/msm/adreno/a5xx_catalog.c new file +148 -0
148 lines not on this page · raw message
drivers/gpu/drm/msm/adreno/a6xx_catalog.c new file +338 -0
338 lines not on this page · raw message
drivers/gpu/drm/msm/adreno/adreno_device.c +6 -619
637 lines not on this page · raw message
Signature · 1 line
2.45.2
Re: [PATCH v3 2/5] drm/msm/adreno: Split catalog into separate files
Quoted 6 lines · Rob Clark
From: Rob Clark <[email protected]>
Split each gen's gpu table into it's own file. Only code-motion, no functional change.
Signed-off-by Rob Clark <[email protected]>
Quoted 15 lines
--- drivers/gpu/drm/msm/Makefile | 5 + drivers/gpu/drm/msm/adreno/a2xx_catalog.c | 52 ++ drivers/gpu/drm/msm/adreno/a3xx_catalog.c | 81 +++ drivers/gpu/drm/msm/adreno/a4xx_catalog.c | 50 ++ drivers/gpu/drm/msm/adreno/a5xx_catalog.c | 148 +++++ drivers/gpu/drm/msm/adreno/a6xx_catalog.c | 338 +++++++++++ drivers/gpu/drm/msm/adreno/adreno_device.c | 625 +-------------------- 7 files changed, 680 insertions(+), 619 deletions(-) create mode 100644 drivers/gpu/drm/msm/adreno/a2xx_catalog.c create mode 100644 drivers/gpu/drm/msm/adreno/a3xx_catalog.c create mode 100644 drivers/gpu/drm/msm/adreno/a4xx_catalog.c create mode 100644 drivers/gpu/drm/msm/adreno/a5xx_catalog.c create mode 100644 drivers/gpu/drm/msm/adreno/a6xx_catalog.c
Signature · 2 lines
With best wishes Dmitry
Re: [PATCH v3 2/5] drm/msm/adreno: Split catalog into separate files
In reply to Rob ClarkQuoted 7 lines · Rob Clark
From: Rob Clark <[email protected]>
Split each gen's gpu table into it's own file. Only code-motion, no functional change.
Signed-off-by Rob Clark <[email protected]>---
Konrad
PATCH v3 3/5 drm/msm/adreno: Move hwcg regs to a6xx hw catalog
In reply to Rob ClarkFrom: Rob Clark <[email protected]>
Move the hwcg tables into the hw catalog.
--- drivers/gpu/drm/msm/adreno/a6xx_catalog.c | 619 ++++++++++++++++++++++ drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 617 --------------------- drivers/gpu/drm/msm/adreno/adreno_gpu.h | 3 - 3 files changed, 619 insertions(+), 620 deletions(-)
drivers/gpu/drm/msm/adreno/a6xx_catalog.c +619 -0
@@ -7,6 +7,451 @@*/ #include "adreno_gpu.h" +#include "a6xx.xml.h" +#include "a6xx_gmu.xml.h" + +static const struct adreno_reglist a612_hwcg[] = { + {REG_A6XX_RBBM_CLOCK_CNTL_SP0 ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL2_SP0 ,0x02222220 }, + {REG_A6XX_RBBM_CLOCK_DELAY_SP0 ,0x00000081 }, + {REG_A6XX_RBBM_CLOCK_HYST_SP0 ,0x0000f3cf }, + {REG_A6XX_RBBM_CLOCK_CNTL_TP0 ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL2_TP0 ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL3_TP0 ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL4_TP0 ,0x00022222 }, + {REG_A6XX_RBBM_CLOCK_DELAY_TP0 ,0x11111111 }, + {REG_A6XX_RBBM_CLOCK_DELAY2_TP0 ,0x11111111 }, + {REG_A6XX_RBBM_CLOCK_DELAY3_TP0 ,0x11111111 }, + {REG_A6XX_RBBM_CLOCK_DELAY4_TP0 ,0x00011111 }, + {REG_A6XX_RBBM_CLOCK_HYST_TP0 ,0x77777777 }, + {REG_A6XX_RBBM_CLOCK_HYST2_TP0 ,0x77777777 }, + {REG_A6XX_RBBM_CLOCK_HYST3_TP0 ,0x77777777 }, + {REG_A6XX_RBBM_CLOCK_HYST4_TP0 ,0x00077777 }, + {REG_A6XX_RBBM_CLOCK_CNTL_RB0 ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL2_RB0 ,0x01202222 }, + {REG_A6XX_RBBM_CLOCK_CNTL_CCU0 ,0x00002220 }, + {REG_A6XX_RBBM_CLOCK_HYST_RB_CCU0 ,0x00040f00 }, + {REG_A6XX_RBBM_CLOCK_CNTL_RAC ,0x05522022 }, + {REG_A6XX_RBBM_CLOCK_CNTL2_RAC ,0x00005555 }, + {REG_A6XX_RBBM_CLOCK_DELAY_RAC ,0x00000011 }, + {REG_A6XX_RBBM_CLOCK_HYST_RAC ,0x00445044 }, + {REG_A6XX_RBBM_CLOCK_CNTL_TSE_RAS_RBBM ,0x04222222 }, + {REG_A6XX_RBBM_CLOCK_MODE_VFD ,0x00002222 }, + {REG_A6XX_RBBM_CLOCK_MODE_GPC ,0x02222222 }, + {REG_A6XX_RBBM_CLOCK_DELAY_HLSQ_2 ,0x00000002 }, + {REG_A6XX_RBBM_CLOCK_MODE_HLSQ ,0x00002222 }, + {REG_A6XX_RBBM_CLOCK_DELAY_TSE_RAS_RBBM ,0x00004000 }, + {REG_A6XX_RBBM_CLOCK_DELAY_VFD ,0x00002222 }, + {REG_A6XX_RBBM_CLOCK_DELAY_GPC ,0x00000200 }, + {REG_A6XX_RBBM_CLOCK_DELAY_HLSQ ,0x00000000 }, + {REG_A6XX_RBBM_CLOCK_HYST_TSE_RAS_RBBM ,0x00000000 }, + {REG_A6XX_RBBM_CLOCK_HYST_VFD ,0x00000000 }, + {REG_A6XX_RBBM_CLOCK_HYST_GPC ,0x04104004 }, + {REG_A6XX_RBBM_CLOCK_HYST_HLSQ ,0x00000000 }, + {REG_A6XX_RBBM_CLOCK_CNTL_UCHE ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_HYST_UCHE ,0x00000004 }, + {REG_A6XX_RBBM_CLOCK_DELAY_UCHE ,0x00000002 }, + {REG_A6XX_RBBM_ISDB_CNT ,0x00000182 }, + {REG_A6XX_RBBM_RAC_THRESHOLD_CNT ,0x00000000 }, + {REG_A6XX_RBBM_SP_HYST_CNT ,0x00000000 }, + {REG_A6XX_RBBM_CLOCK_CNTL_GMU_GX ,0x00000222 }, + {REG_A6XX_RBBM_CLOCK_DELAY_GMU_GX ,0x00000111 }, + {REG_A6XX_RBBM_CLOCK_HYST_GMU_GX ,0x00000555 }, + {}, +}; + +/* For a615 family (a615, a616, a618 and a619) */ +static const struct adreno_reglist a615_hwcg[] = { + {REG_A6XX_RBBM_CLOCK_CNTL_SP0 ,0x02222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL2_SP0 ,0x02222220 }, + {REG_A6XX_RBBM_CLOCK_DELAY_SP0 ,0x00000080 }, + {REG_A6XX_RBBM_CLOCK_HYST_SP0 ,0x0000F3CF }, + {REG_A6XX_RBBM_CLOCK_CNTL_TP0 ,0x02222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL_TP1 ,0x02222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL2_TP0 ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL2_TP1 ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL3_TP0 ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL3_TP1 ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL4_TP0 ,0x00022222 }, + {REG_A6XX_RBBM_CLOCK_CNTL4_TP1 ,0x00022222 }, + {REG_A6XX_RBBM_CLOCK_HYST_TP0 ,0x77777777 }, + {REG_A6XX_RBBM_CLOCK_HYST_TP1 ,0x77777777 }, + {REG_A6XX_RBBM_CLOCK_HYST2_TP0 ,0x77777777 }, + {REG_A6XX_RBBM_CLOCK_HYST2_TP1 ,0x77777777 }, + {REG_A6XX_RBBM_CLOCK_HYST3_TP0 ,0x77777777 }, + {REG_A6XX_RBBM_CLOCK_HYST3_TP1 ,0x77777777 }, + {REG_A6XX_RBBM_CLOCK_HYST4_TP0 ,0x00077777 }, + {REG_A6XX_RBBM_CLOCK_HYST4_TP1 ,0x00077777 }, + {REG_A6XX_RBBM_CLOCK_DELAY_TP0 ,0x11111111 }, + {REG_A6XX_RBBM_CLOCK_DELAY_TP1 ,0x11111111 }, + {REG_A6XX_RBBM_CLOCK_DELAY2_TP0 ,0x11111111 }, + {REG_A6XX_RBBM_CLOCK_DELAY2_TP1 ,0x11111111 }, + {REG_A6XX_RBBM_CLOCK_DELAY3_TP0 ,0x11111111 }, + {REG_A6XX_RBBM_CLOCK_DELAY3_TP1 ,0x11111111 }, + {REG_A6XX_RBBM_CLOCK_DELAY4_TP0 ,0x00011111 }, + {REG_A6XX_RBBM_CLOCK_DELAY4_TP1 ,0x00011111 }, + {REG_A6XX_RBBM_CLOCK_CNTL_UCHE ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL2_UCHE ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL3_UCHE ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL4_UCHE ,0x00222222 }, + {REG_A6XX_RBBM_CLOCK_HYST_UCHE ,0x00000004 }, + {REG_A6XX_RBBM_CLOCK_DELAY_UCHE ,0x00000002 }, + {REG_A6XX_RBBM_CLOCK_CNTL_RB0 ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL2_RB0 ,0x00002222 }, + {REG_A6XX_RBBM_CLOCK_CNTL_CCU0 ,0x00002020 }, + {REG_A6XX_RBBM_CLOCK_CNTL_CCU1 ,0x00002220 }, + {REG_A6XX_RBBM_CLOCK_CNTL_CCU2 ,0x00002220 }, + {REG_A6XX_RBBM_CLOCK_CNTL_CCU3 ,0x00002220 }, + {REG_A6XX_RBBM_CLOCK_HYST_RB_CCU0 ,0x00040F00 }, + {REG_A6XX_RBBM_CLOCK_HYST_RB_CCU1 ,0x00040F00 }, + {REG_A6XX_RBBM_CLOCK_HYST_RB_CCU2 ,0x00040F00 }, + {REG_A6XX_RBBM_CLOCK_HYST_RB_CCU3 ,0x00040F00 }, + {REG_A6XX_RBBM_CLOCK_CNTL_RAC ,0x05022022 }, + {REG_A6XX_RBBM_CLOCK_CNTL2_RAC ,0x00005555 }, + {REG_A6XX_RBBM_CLOCK_DELAY_RAC ,0x00000011 }, + {REG_A6XX_RBBM_CLOCK_HYST_RAC ,0x00445044 }, + {REG_A6XX_RBBM_CLOCK_CNTL_TSE_RAS_RBBM ,0x04222222 }, + {REG_A6XX_RBBM_CLOCK_MODE_GPC ,0x00222222 }, + {REG_A6XX_RBBM_CLOCK_MODE_VFD ,0x00002222 }, + {REG_A6XX_RBBM_CLOCK_HYST_TSE_RAS_RBBM ,0x00000000 }, + {REG_A6XX_RBBM_CLOCK_HYST_GPC ,0x04104004 }, + {REG_A6XX_RBBM_CLOCK_HYST_VFD ,0x00000000 }, + {REG_A6XX_RBBM_CLOCK_DELAY_HLSQ ,0x00000000 }, + {REG_A6XX_RBBM_CLOCK_DELAY_TSE_RAS_RBBM ,0x00004000 }, + {REG_A6XX_RBBM_CLOCK_DELAY_GPC ,0x00000200 }, + {REG_A6XX_RBBM_CLOCK_DELAY_VFD ,0x00002222 }, + {REG_A6XX_RBBM_CLOCK_DELAY_HLSQ_2 ,0x00000002 }, + {REG_A6XX_RBBM_CLOCK_MODE_HLSQ ,0x00002222 }, + {REG_A6XX_RBBM_CLOCK_CNTL_GMU_GX ,0x00000222 }, + {REG_A6XX_RBBM_CLOCK_DELAY_GMU_GX ,0x00000111 }, + {REG_A6XX_RBBM_CLOCK_HYST_GMU_GX ,0x00000555 }, + {}, +}; + +static const struct adreno_reglist a630_hwcg[] = { + {REG_A6XX_RBBM_CLOCK_CNTL_SP0 ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL_SP1 ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL_SP2 ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL_SP3 ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL2_SP0 ,0x02022220 }, + {REG_A6XX_RBBM_CLOCK_CNTL2_SP1 ,0x02022220 }, + {REG_A6XX_RBBM_CLOCK_CNTL2_SP2 ,0x02022220 }, + {REG_A6XX_RBBM_CLOCK_CNTL2_SP3 ,0x02022220 }, + {REG_A6XX_RBBM_CLOCK_DELAY_SP0 ,0x00000080 }, + {REG_A6XX_RBBM_CLOCK_DELAY_SP1 ,0x00000080 }, + {REG_A6XX_RBBM_CLOCK_DELAY_SP2 ,0x00000080 }, + {REG_A6XX_RBBM_CLOCK_DELAY_SP3 ,0x00000080 }, + {REG_A6XX_RBBM_CLOCK_HYST_SP0 ,0x0000f3cf }, + {REG_A6XX_RBBM_CLOCK_HYST_SP1 ,0x0000f3cf }, + {REG_A6XX_RBBM_CLOCK_HYST_SP2 ,0x0000f3cf }, + {REG_A6XX_RBBM_CLOCK_HYST_SP3 ,0x0000f3cf }, + {REG_A6XX_RBBM_CLOCK_CNTL_TP0 ,0x02222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL_TP1 ,0x02222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL_TP2 ,0x02222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL_TP3 ,0x02222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL2_TP0 ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL2_TP1 ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL2_TP2 ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL2_TP3 ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL3_TP0 ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL3_TP1 ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL3_TP2 ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL3_TP3 ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL4_TP0 ,0x00022222 }, + {REG_A6XX_RBBM_CLOCK_CNTL4_TP1 ,0x00022222 }, + {REG_A6XX_RBBM_CLOCK_CNTL4_TP2 ,0x00022222 }, + {REG_A6XX_RBBM_CLOCK_CNTL4_TP3 ,0x00022222 }, + {REG_A6XX_RBBM_CLOCK_HYST_TP0 ,0x77777777 }, + {REG_A6XX_RBBM_CLOCK_HYST_TP1 ,0x77777777 }, + {REG_A6XX_RBBM_CLOCK_HYST_TP2 ,0x77777777 }, + {REG_A6XX_RBBM_CLOCK_HYST_TP3 ,0x77777777 }, + {REG_A6XX_RBBM_CLOCK_HYST2_TP0 ,0x77777777 }, + {REG_A6XX_RBBM_CLOCK_HYST2_TP1 ,0x77777777 }, + {REG_A6XX_RBBM_CLOCK_HYST2_TP2 ,0x77777777 }, + {REG_A6XX_RBBM_CLOCK_HYST2_TP3 ,0x77777777 }, + {REG_A6XX_RBBM_CLOCK_HYST3_TP0 ,0x77777777 }, + {REG_A6XX_RBBM_CLOCK_HYST3_TP1 ,0x77777777 }, + {REG_A6XX_RBBM_CLOCK_HYST3_TP2 ,0x77777777 }, + {REG_A6XX_RBBM_CLOCK_HYST3_TP3 ,0x77777777 }, + {REG_A6XX_RBBM_CLOCK_HYST4_TP0 ,0x00077777 }, + {REG_A6XX_RBBM_CLOCK_HYST4_TP1 ,0x00077777 }, + {REG_A6XX_RBBM_CLOCK_HYST4_TP2 ,0x00077777 }, + {REG_A6XX_RBBM_CLOCK_HYST4_TP3 ,0x00077777 }, + {REG_A6XX_RBBM_CLOCK_DELAY_TP0 ,0x11111111 }, + {REG_A6XX_RBBM_CLOCK_DELAY_TP1 ,0x11111111 }, + {REG_A6XX_RBBM_CLOCK_DELAY_TP2 ,0x11111111 }, + {REG_A6XX_RBBM_CLOCK_DELAY_TP3 ,0x11111111 }, + {REG_A6XX_RBBM_CLOCK_DELAY2_TP0 ,0x11111111 }, + {REG_A6XX_RBBM_CLOCK_DELAY2_TP1 ,0x11111111 }, + {REG_A6XX_RBBM_CLOCK_DELAY2_TP2 ,0x11111111 }, + {REG_A6XX_RBBM_CLOCK_DELAY2_TP3 ,0x11111111 }, + {REG_A6XX_RBBM_CLOCK_DELAY3_TP0 ,0x11111111 }, + {REG_A6XX_RBBM_CLOCK_DELAY3_TP1 ,0x11111111 }, + {REG_A6XX_RBBM_CLOCK_DELAY3_TP2 ,0x11111111 }, + {REG_A6XX_RBBM_CLOCK_DELAY3_TP3 ,0x11111111 }, + {REG_A6XX_RBBM_CLOCK_DELAY4_TP0 ,0x00011111 }, + {REG_A6XX_RBBM_CLOCK_DELAY4_TP1 ,0x00011111 }, + {REG_A6XX_RBBM_CLOCK_DELAY4_TP2 ,0x00011111 }, + {REG_A6XX_RBBM_CLOCK_DELAY4_TP3 ,0x00011111 }, + {REG_A6XX_RBBM_CLOCK_CNTL_UCHE ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL2_UCHE ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL3_UCHE ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL4_UCHE ,0x00222222 }, + {REG_A6XX_RBBM_CLOCK_HYST_UCHE ,0x00000004 }, + {REG_A6XX_RBBM_CLOCK_DELAY_UCHE ,0x00000002 }, + {REG_A6XX_RBBM_CLOCK_CNTL_RB0 ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL_RB1 ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL_RB2 ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL_RB3 ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL2_RB0 ,0x00002222 }, + {REG_A6XX_RBBM_CLOCK_CNTL2_RB1 ,0x00002222 }, + {REG_A6XX_RBBM_CLOCK_CNTL2_RB2 ,0x00002222 }, + {REG_A6XX_RBBM_CLOCK_CNTL2_RB3 ,0x00002222 }, + {REG_A6XX_RBBM_CLOCK_CNTL_CCU0 ,0x00002220 }, + {REG_A6XX_RBBM_CLOCK_CNTL_CCU1 ,0x00002220 }, + {REG_A6XX_RBBM_CLOCK_CNTL_CCU2 ,0x00002220 }, + {REG_A6XX_RBBM_CLOCK_CNTL_CCU3 ,0x00002220 }, + {REG_A6XX_RBBM_CLOCK_HYST_RB_CCU0 ,0x00040f00 }, + {REG_A6XX_RBBM_CLOCK_HYST_RB_CCU1 ,0x00040f00 }, + {REG_A6XX_RBBM_CLOCK_HYST_RB_CCU2 ,0x00040f00 }, + {REG_A6XX_RBBM_CLOCK_HYST_RB_CCU3 ,0x00040f00 }, + {REG_A6XX_RBBM_CLOCK_CNTL_RAC ,0x05022022 }, + {REG_A6XX_RBBM_CLOCK_CNTL2_RAC ,0x00005555 }, + {REG_A6XX_RBBM_CLOCK_DELAY_RAC ,0x00000011 }, + {REG_A6XX_RBBM_CLOCK_HYST_RAC ,0x00445044 }, + {REG_A6XX_RBBM_CLOCK_CNTL_TSE_RAS_RBBM ,0x04222222 }, + {REG_A6XX_RBBM_CLOCK_MODE_GPC ,0x00222222 }, + {REG_A6XX_RBBM_CLOCK_MODE_VFD ,0x00002222 }, + {REG_A6XX_RBBM_CLOCK_HYST_TSE_RAS_RBBM ,0x00000000 }, + {REG_A6XX_RBBM_CLOCK_HYST_GPC ,0x04104004 }, + {REG_A6XX_RBBM_CLOCK_HYST_VFD ,0x00000000 }, + {REG_A6XX_RBBM_CLOCK_DELAY_HLSQ ,0x00000000 }, + {REG_A6XX_RBBM_CLOCK_DELAY_TSE_RAS_RBBM ,0x00004000 }, + {REG_A6XX_RBBM_CLOCK_DELAY_GPC ,0x00000200 }, + {REG_A6XX_RBBM_CLOCK_DELAY_VFD ,0x00002222 }, + {REG_A6XX_RBBM_CLOCK_DELAY_HLSQ_2 ,0x00000002 }, + {REG_A6XX_RBBM_CLOCK_MODE_HLSQ ,0x00002222 }, + {REG_A6XX_RBBM_CLOCK_CNTL_GMU_GX ,0x00000222 }, + {REG_A6XX_RBBM_CLOCK_DELAY_GMU_GX ,0x00000111 }, + {REG_A6XX_RBBM_CLOCK_HYST_GMU_GX ,0x00000555 }, + {}, +}; + +static const struct adreno_reglist a640_hwcg[] = { + {REG_A6XX_RBBM_CLOCK_CNTL_SP0 ,0x02222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL2_SP0 ,0x02222220 }, + {REG_A6XX_RBBM_CLOCK_DELAY_SP0 ,0x00000080 }, + {REG_A6XX_RBBM_CLOCK_HYST_SP0 ,0x0000F3CF }, + {REG_A6XX_RBBM_CLOCK_CNTL_TP0 ,0x02222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL2_TP0 ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL3_TP0 ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL4_TP0 ,0x00022222 }, + {REG_A6XX_RBBM_CLOCK_DELAY_TP0 ,0x11111111 }, + {REG_A6XX_RBBM_CLOCK_DELAY2_TP0 ,0x11111111 }, + {REG_A6XX_RBBM_CLOCK_DELAY3_TP0 ,0x11111111 }, + {REG_A6XX_RBBM_CLOCK_DELAY4_TP0 ,0x00011111 }, + {REG_A6XX_RBBM_CLOCK_HYST_TP0 ,0x77777777 }, + {REG_A6XX_RBBM_CLOCK_HYST2_TP0 ,0x77777777 }, + {REG_A6XX_RBBM_CLOCK_HYST3_TP0 ,0x77777777 }, + {REG_A6XX_RBBM_CLOCK_HYST4_TP0 ,0x00077777 }, + {REG_A6XX_RBBM_CLOCK_CNTL_RB0 ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL2_RB0 ,0x01002222 }, + {REG_A6XX_RBBM_CLOCK_CNTL_CCU0 ,0x00002220 }, + {REG_A6XX_RBBM_CLOCK_HYST_RB_CCU0 ,0x00040F00 }, + {REG_A6XX_RBBM_CLOCK_CNTL_RAC ,0x05222022 }, + {REG_A6XX_RBBM_CLOCK_CNTL2_RAC ,0x00005555 }, + {REG_A6XX_RBBM_CLOCK_DELAY_RAC ,0x00000011 }, + {REG_A6XX_RBBM_CLOCK_HYST_RAC ,0x00445044 }, + {REG_A6XX_RBBM_CLOCK_CNTL_TSE_RAS_RBBM ,0x04222222 }, + {REG_A6XX_RBBM_CLOCK_MODE_VFD ,0x00002222 }, + {REG_A6XX_RBBM_CLOCK_MODE_GPC ,0x00222222 }, + {REG_A6XX_RBBM_CLOCK_DELAY_HLSQ_2 ,0x00000002 }, + {REG_A6XX_RBBM_CLOCK_MODE_HLSQ ,0x00002222 }, + {REG_A6XX_RBBM_CLOCK_DELAY_TSE_RAS_RBBM ,0x00004000 }, + {REG_A6XX_RBBM_CLOCK_DELAY_VFD ,0x00002222 }, + {REG_A6XX_RBBM_CLOCK_DELAY_GPC ,0x00000200 }, + {REG_A6XX_RBBM_CLOCK_DELAY_HLSQ ,0x00000000 }, + {REG_A6XX_RBBM_CLOCK_HYST_TSE_RAS_RBBM ,0x00000000 }, + {REG_A6XX_RBBM_CLOCK_HYST_VFD ,0x00000000 }, + {REG_A6XX_RBBM_CLOCK_HYST_GPC ,0x04104004 }, + {REG_A6XX_RBBM_CLOCK_HYST_HLSQ ,0x00000000 }, + {REG_A6XX_RBBM_CLOCK_CNTL_TEX_FCHE ,0x00000222 }, + {REG_A6XX_RBBM_CLOCK_DELAY_TEX_FCHE ,0x00000111 }, + {REG_A6XX_RBBM_CLOCK_HYST_TEX_FCHE ,0x00000000 }, + {REG_A6XX_RBBM_CLOCK_CNTL_UCHE ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_HYST_UCHE ,0x00000004 }, + {REG_A6XX_RBBM_CLOCK_DELAY_UCHE ,0x00000002 }, + {REG_A6XX_RBBM_ISDB_CNT ,0x00000182 }, + {REG_A6XX_RBBM_RAC_THRESHOLD_CNT ,0x00000000 }, + {REG_A6XX_RBBM_SP_HYST_CNT ,0x00000000 }, + {REG_A6XX_RBBM_CLOCK_CNTL_GMU_GX ,0x00000222 }, + {REG_A6XX_RBBM_CLOCK_DELAY_GMU_GX ,0x00000111 }, + {REG_A6XX_RBBM_CLOCK_HYST_GMU_GX ,0x00000555 }, + {}, +}; + +static const struct adreno_reglist a650_hwcg[] = { + {REG_A6XX_RBBM_CLOCK_CNTL_SP0 ,0x02222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL2_SP0 ,0x02222220 }, + {REG_A6XX_RBBM_CLOCK_DELAY_SP0 ,0x00000080 }, + {REG_A6XX_RBBM_CLOCK_HYST_SP0 ,0x0000F3CF }, + {REG_A6XX_RBBM_CLOCK_CNTL_TP0 ,0x02222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL2_TP0 ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL3_TP0 ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL4_TP0 ,0x00022222 }, + {REG_A6XX_RBBM_CLOCK_DELAY_TP0 ,0x11111111 }, + {REG_A6XX_RBBM_CLOCK_DELAY2_TP0 ,0x11111111 }, + {REG_A6XX_RBBM_CLOCK_DELAY3_TP0 ,0x11111111 }, + {REG_A6XX_RBBM_CLOCK_DELAY4_TP0 ,0x00011111 }, + {REG_A6XX_RBBM_CLOCK_HYST_TP0 ,0x77777777 }, + {REG_A6XX_RBBM_CLOCK_HYST2_TP0 ,0x77777777 }, + {REG_A6XX_RBBM_CLOCK_HYST3_TP0 ,0x77777777 }, + {REG_A6XX_RBBM_CLOCK_HYST4_TP0 ,0x00077777 }, + {REG_A6XX_RBBM_CLOCK_CNTL_RB0 ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL2_RB0 ,0x01002222 }, + {REG_A6XX_RBBM_CLOCK_CNTL_CCU0 ,0x00002220 }, + {REG_A6XX_RBBM_CLOCK_HYST_RB_CCU0 ,0x00040F00 }, + {REG_A6XX_RBBM_CLOCK_CNTL_RAC ,0x25222022 }, + {REG_A6XX_RBBM_CLOCK_CNTL2_RAC ,0x00005555 }, + {REG_A6XX_RBBM_CLOCK_DELAY_RAC ,0x00000011 }, + {REG_A6XX_RBBM_CLOCK_HYST_RAC ,0x00445044 }, + {REG_A6XX_RBBM_CLOCK_CNTL_TSE_RAS_RBBM ,0x04222222 }, + {REG_A6XX_RBBM_CLOCK_MODE_VFD ,0x00002222 }, + {REG_A6XX_RBBM_CLOCK_MODE_GPC ,0x00222222 }, + {REG_A6XX_RBBM_CLOCK_DELAY_HLSQ_2 ,0x00000002 }, + {REG_A6XX_RBBM_CLOCK_MODE_HLSQ ,0x00002222 }, + {REG_A6XX_RBBM_CLOCK_DELAY_TSE_RAS_RBBM ,0x00004000 }, + {REG_A6XX_RBBM_CLOCK_DELAY_VFD ,0x00002222 }, + {REG_A6XX_RBBM_CLOCK_DELAY_GPC ,0x00000200 }, + {REG_A6XX_RBBM_CLOCK_DELAY_HLSQ ,0x00000000 }, + {REG_A6XX_RBBM_CLOCK_HYST_TSE_RAS_RBBM ,0x00000000 }, + {REG_A6XX_RBBM_CLOCK_HYST_VFD ,0x00000000 }, + {REG_A6XX_RBBM_CLOCK_HYST_GPC ,0x04104004 }, + {REG_A6XX_RBBM_CLOCK_HYST_HLSQ ,0x00000000 }, + {REG_A6XX_RBBM_CLOCK_CNTL_TEX_FCHE ,0x00000222 }, + {REG_A6XX_RBBM_CLOCK_DELAY_TEX_FCHE ,0x00000111 }, + {REG_A6XX_RBBM_CLOCK_HYST_TEX_FCHE ,0x00000777 }, + {REG_A6XX_RBBM_CLOCK_CNTL_UCHE ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_HYST_UCHE ,0x00000004 }, + {REG_A6XX_RBBM_CLOCK_DELAY_UCHE ,0x00000002 }, + {REG_A6XX_RBBM_ISDB_CNT ,0x00000182 }, + {REG_A6XX_RBBM_RAC_THRESHOLD_CNT ,0x00000000 }, + {REG_A6XX_RBBM_SP_HYST_CNT ,0x00000000 }, + {REG_A6XX_RBBM_CLOCK_CNTL_GMU_GX ,0x00000222 }, + {REG_A6XX_RBBM_CLOCK_DELAY_GMU_GX ,0x00000111 }, + {REG_A6XX_RBBM_CLOCK_HYST_GMU_GX ,0x00000555 }, + {}, +}; + +static const struct adreno_reglist a660_hwcg[] = { + {REG_A6XX_RBBM_CLOCK_CNTL_SP0 ,0x02222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL2_SP0 ,0x02222220 }, + {REG_A6XX_RBBM_CLOCK_DELAY_SP0 ,0x00000080 }, + {REG_A6XX_RBBM_CLOCK_HYST_SP0 ,0x0000F3CF }, + {REG_A6XX_RBBM_CLOCK_CNTL_TP0 ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL2_TP0 ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL3_TP0 ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL4_TP0 ,0x00022222 }, + {REG_A6XX_RBBM_CLOCK_DELAY_TP0 ,0x11111111 }, + {REG_A6XX_RBBM_CLOCK_DELAY2_TP0 ,0x11111111 }, + {REG_A6XX_RBBM_CLOCK_DELAY3_TP0 ,0x11111111 }, + {REG_A6XX_RBBM_CLOCK_DELAY4_TP0 ,0x00011111 }, + {REG_A6XX_RBBM_CLOCK_HYST_TP0 ,0x77777777 }, + {REG_A6XX_RBBM_CLOCK_HYST2_TP0 ,0x77777777 }, + {REG_A6XX_RBBM_CLOCK_HYST3_TP0 ,0x77777777 }, + {REG_A6XX_RBBM_CLOCK_HYST4_TP0 ,0x00077777 }, + {REG_A6XX_RBBM_CLOCK_CNTL_RB0 ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL2_RB0 ,0x01002222 }, + {REG_A6XX_RBBM_CLOCK_CNTL_CCU0 ,0x00002220 }, + {REG_A6XX_RBBM_CLOCK_HYST_RB_CCU0 ,0x00040F00 }, + {REG_A6XX_RBBM_CLOCK_CNTL_RAC ,0x25222022 }, + {REG_A6XX_RBBM_CLOCK_CNTL2_RAC ,0x00005555 }, + {REG_A6XX_RBBM_CLOCK_DELAY_RAC ,0x00000011 }, + {REG_A6XX_RBBM_CLOCK_HYST_RAC ,0x00445044 }, + {REG_A6XX_RBBM_CLOCK_CNTL_TSE_RAS_RBBM ,0x04222222 }, + {REG_A6XX_RBBM_CLOCK_MODE_VFD ,0x00002222 }, + {REG_A6XX_RBBM_CLOCK_MODE_GPC ,0x00222222 }, + {REG_A6XX_RBBM_CLOCK_DELAY_HLSQ_2 ,0x00000002 }, + {REG_A6XX_RBBM_CLOCK_MODE_HLSQ ,0x00002222 }, + {REG_A6XX_RBBM_CLOCK_DELAY_TSE_RAS_RBBM ,0x00004000 }, + {REG_A6XX_RBBM_CLOCK_DELAY_VFD ,0x00002222 }, + {REG_A6XX_RBBM_CLOCK_DELAY_GPC ,0x00000200 }, + {REG_A6XX_RBBM_CLOCK_DELAY_HLSQ ,0x00000000 }, + {REG_A6XX_RBBM_CLOCK_HYST_TSE_RAS_RBBM ,0x00000000 }, + {REG_A6XX_RBBM_CLOCK_HYST_VFD ,0x00000000 }, + {REG_A6XX_RBBM_CLOCK_HYST_GPC ,0x04104004 }, + {REG_A6XX_RBBM_CLOCK_HYST_HLSQ ,0x00000000 }, + {REG_A6XX_RBBM_CLOCK_CNTL_TEX_FCHE ,0x00000222 }, + {REG_A6XX_RBBM_CLOCK_DELAY_TEX_FCHE ,0x00000111 }, + {REG_A6XX_RBBM_CLOCK_HYST_TEX_FCHE ,0x00000000 }, + {REG_A6XX_RBBM_CLOCK_CNTL_UCHE ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_HYST_UCHE ,0x00000004 }, + {REG_A6XX_RBBM_CLOCK_DELAY_UCHE ,0x00000002 }, + {REG_A6XX_RBBM_ISDB_CNT ,0x00000182 }, + {REG_A6XX_RBBM_RAC_THRESHOLD_CNT ,0x00000000 }, + {REG_A6XX_RBBM_SP_HYST_CNT ,0x00000000 }, + {REG_A6XX_RBBM_CLOCK_CNTL_GMU_GX ,0x00000222 }, + {REG_A6XX_RBBM_CLOCK_DELAY_GMU_GX ,0x00000111 }, + {REG_A6XX_RBBM_CLOCK_HYST_GMU_GX ,0x00000555 }, + {}, +}; + +static const struct adreno_reglist a690_hwcg[] = { + {REG_A6XX_RBBM_CLOCK_CNTL_SP0 ,0x02222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL2_SP0 ,0x02222220 }, + {REG_A6XX_RBBM_CLOCK_DELAY_SP0 ,0x00000080 }, + {REG_A6XX_RBBM_CLOCK_HYST_SP0 ,0x0000F3CF }, + {REG_A6XX_RBBM_CLOCK_CNTL_TP0 ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL2_TP0 ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL3_TP0 ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL4_TP0 ,0x00022222 }, + {REG_A6XX_RBBM_CLOCK_DELAY_TP0 ,0x11111111 }, + {REG_A6XX_RBBM_CLOCK_DELAY2_TP0 ,0x11111111 }, + {REG_A6XX_RBBM_CLOCK_DELAY3_TP0 ,0x11111111 }, + {REG_A6XX_RBBM_CLOCK_DELAY4_TP0 ,0x00011111 }, + {REG_A6XX_RBBM_CLOCK_HYST_TP0 ,0x77777777 }, + {REG_A6XX_RBBM_CLOCK_HYST2_TP0 ,0x77777777 }, + {REG_A6XX_RBBM_CLOCK_HYST3_TP0 ,0x77777777 }, + {REG_A6XX_RBBM_CLOCK_HYST4_TP0 ,0x00077777 }, + {REG_A6XX_RBBM_CLOCK_CNTL_RB0 ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL2_RB0 ,0x01002222 }, + {REG_A6XX_RBBM_CLOCK_CNTL_CCU0 ,0x00002220 }, + {REG_A6XX_RBBM_CLOCK_HYST_RB_CCU0 ,0x00040F00 }, + {REG_A6XX_RBBM_CLOCK_CNTL_RAC ,0x25222022 }, + {REG_A6XX_RBBM_CLOCK_CNTL2_RAC ,0x00005555 }, + {REG_A6XX_RBBM_CLOCK_DELAY_RAC ,0x00000011 }, + {REG_A6XX_RBBM_CLOCK_HYST_RAC ,0x00445044 }, + {REG_A6XX_RBBM_CLOCK_CNTL_TSE_RAS_RBBM ,0x04222222 }, + {REG_A6XX_RBBM_CLOCK_MODE_VFD ,0x00002222 }, + {REG_A6XX_RBBM_CLOCK_MODE_GPC ,0x00222222 }, + {REG_A6XX_RBBM_CLOCK_DELAY_HLSQ_2 ,0x00000002 }, + {REG_A6XX_RBBM_CLOCK_MODE_HLSQ ,0x00002222 }, + {REG_A6XX_RBBM_CLOCK_DELAY_TSE_RAS_RBBM ,0x00004000 }, + {REG_A6XX_RBBM_CLOCK_DELAY_VFD ,0x00002222 }, + {REG_A6XX_RBBM_CLOCK_DELAY_GPC ,0x00000200 }, + {REG_A6XX_RBBM_CLOCK_DELAY_HLSQ ,0x00000000 }, + {REG_A6XX_RBBM_CLOCK_HYST_TSE_RAS_RBBM ,0x00000000 }, + {REG_A6XX_RBBM_CLOCK_HYST_VFD ,0x00000000 }, + {REG_A6XX_RBBM_CLOCK_HYST_GPC ,0x04104004 }, + {REG_A6XX_RBBM_CLOCK_HYST_HLSQ ,0x00000000 }, + {REG_A6XX_RBBM_CLOCK_CNTL_TEX_FCHE ,0x00000222 }, + {REG_A6XX_RBBM_CLOCK_DELAY_TEX_FCHE ,0x00000111 }, + {REG_A6XX_RBBM_CLOCK_HYST_TEX_FCHE ,0x00000000 }, + {REG_A6XX_RBBM_CLOCK_CNTL_UCHE ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_HYST_UCHE ,0x00000004 }, + {REG_A6XX_RBBM_CLOCK_DELAY_UCHE ,0x00000002 }, + {REG_A6XX_RBBM_CLOCK_CNTL ,0x8AA8AA82 }, + {REG_A6XX_RBBM_ISDB_CNT ,0x00000182 }, + {REG_A6XX_RBBM_RAC_THRESHOLD_CNT ,0x00000000 }, + {REG_A6XX_RBBM_SP_HYST_CNT ,0x00000000 }, + {REG_A6XX_RBBM_CLOCK_CNTL_GMU_GX ,0x00000222 }, + {REG_A6XX_RBBM_CLOCK_DELAY_GMU_GX ,0x00000111 }, + {REG_A6XX_RBBM_CLOCK_HYST_GMU_GX ,0x00000555 }, + {REG_A6XX_GPU_GMU_AO_GMU_CGC_MODE_CNTL ,0x20200 }, + {REG_A6XX_GPU_GMU_AO_GMU_CGC_DELAY_CNTL ,0x10111 }, + {REG_A6XX_GPU_GMU_AO_GMU_CGC_HYST_CNTL ,0x5555 }, + {} +};static const struct adreno_info a6xx_gpus[] = { {
@@ -270,6 +715,180 @@ MODULE_FIRMWARE("qcom/a650_sqe.fw");MODULE_FIRMWARE ("qcom/a660_gmu.bin" );MODULE_FIRMWARE ("qcom/a660_sqe.fw" ); +static const struct adreno_reglist a702_hwcg[] = { + {REG_A6XX_RBBM_CLOCK_CNTL_SP0 ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL2_SP0 ,0x02222220 }, + {REG_A6XX_RBBM_CLOCK_DELAY_SP0 ,0x00000081 }, + {REG_A6XX_RBBM_CLOCK_HYST_SP0 ,0x0000f3cf }, + {REG_A6XX_RBBM_CLOCK_CNTL_TP0 ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL2_TP0 ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL3_TP0 ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL4_TP0 ,0x00022222 }, + {REG_A6XX_RBBM_CLOCK_DELAY_TP0 ,0x11111111 }, + {REG_A6XX_RBBM_CLOCK_DELAY2_TP0 ,0x11111111 }, + {REG_A6XX_RBBM_CLOCK_DELAY3_TP0 ,0x11111111 }, + {REG_A6XX_RBBM_CLOCK_DELAY4_TP0 ,0x00011111 }, + {REG_A6XX_RBBM_CLOCK_HYST_TP0 ,0x77777777 }, + {REG_A6XX_RBBM_CLOCK_HYST2_TP0 ,0x77777777 }, + {REG_A6XX_RBBM_CLOCK_HYST3_TP0 ,0x77777777 }, + {REG_A6XX_RBBM_CLOCK_HYST4_TP0 ,0x00077777 }, + {REG_A6XX_RBBM_CLOCK_CNTL_RB0 ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL2_RB0 ,0x01202222 }, + {REG_A6XX_RBBM_CLOCK_CNTL_CCU0 ,0x00002220 }, + {REG_A6XX_RBBM_CLOCK_HYST_RB_CCU0 ,0x00040f00 }, + {REG_A6XX_RBBM_CLOCK_CNTL_RAC ,0x05522022 }, + {REG_A6XX_RBBM_CLOCK_CNTL2_RAC ,0x00005555 }, + {REG_A6XX_RBBM_CLOCK_DELAY_RAC ,0x00000011 }, + {REG_A6XX_RBBM_CLOCK_HYST_RAC ,0x00445044 }, + {REG_A6XX_RBBM_CLOCK_CNTL_TSE_RAS_RBBM ,0x04222222 }, + {REG_A6XX_RBBM_CLOCK_MODE_VFD ,0x00002222 }, + {REG_A6XX_RBBM_CLOCK_MODE_GPC ,0x02222222 }, + {REG_A6XX_RBBM_CLOCK_DELAY_HLSQ_2 ,0x00000002 }, + {REG_A6XX_RBBM_CLOCK_MODE_HLSQ ,0x00002222 }, + {REG_A6XX_RBBM_CLOCK_DELAY_TSE_RAS_RBBM ,0x00004000 }, + {REG_A6XX_RBBM_CLOCK_DELAY_VFD ,0x00002222 }, + {REG_A6XX_RBBM_CLOCK_DELAY_GPC ,0x00000200 }, + {REG_A6XX_RBBM_CLOCK_DELAY_HLSQ ,0x00000000 }, + {REG_A6XX_RBBM_CLOCK_HYST_TSE_RAS_RBBM ,0x00000000 }, + {REG_A6XX_RBBM_CLOCK_HYST_VFD ,0x00000000 }, + {REG_A6XX_RBBM_CLOCK_HYST_GPC ,0x04104004 }, + {REG_A6XX_RBBM_CLOCK_HYST_HLSQ ,0x00000000 }, + {REG_A6XX_RBBM_CLOCK_CNTL_UCHE ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_HYST_UCHE ,0x00000004 }, + {REG_A6XX_RBBM_CLOCK_DELAY_UCHE ,0x00000002 }, + {REG_A6XX_RBBM_ISDB_CNT ,0x00000182 }, + {REG_A6XX_RBBM_RAC_THRESHOLD_CNT ,0x00000000 }, + {REG_A6XX_RBBM_SP_HYST_CNT ,0x00000000 }, + {REG_A6XX_RBBM_CLOCK_CNTL_GMU_GX ,0x00000222 }, + {REG_A6XX_RBBM_CLOCK_DELAY_GMU_GX ,0x00000111 }, + {REG_A6XX_RBBM_CLOCK_HYST_GMU_GX ,0x00000555 }, + {REG_A6XX_RBBM_CLOCK_CNTL_FCHE ,0x00000222 }, + {REG_A6XX_RBBM_CLOCK_DELAY_FCHE ,0x00000000 }, + {REG_A6XX_RBBM_CLOCK_HYST_FCHE ,0x00000000 }, + {REG_A6XX_RBBM_CLOCK_CNTL_GLC ,0x00222222 }, + {REG_A6XX_RBBM_CLOCK_DELAY_GLC ,0x00000000 }, + {REG_A6XX_RBBM_CLOCK_HYST_GLC ,0x00000000 }, + {REG_A6XX_RBBM_CLOCK_CNTL_MHUB ,0x00000002 }, + {REG_A6XX_RBBM_CLOCK_DELAY_MHUB ,0x00000000 }, + {REG_A6XX_RBBM_CLOCK_HYST_MHUB ,0x00000000 }, + {} +}; + +static const struct adreno_reglist a730_hwcg[] = { + {REG_A6XX_RBBM_CLOCK_CNTL_SP0 ,0x02222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL2_SP0 ,0x02022222 }, + {REG_A6XX_RBBM_CLOCK_HYST_SP0 ,0x0000f3cf }, + {REG_A6XX_RBBM_CLOCK_DELAY_SP0 ,0x00000080 }, + {REG_A6XX_RBBM_CLOCK_CNTL_TP0 ,0x22222220 }, + {REG_A6XX_RBBM_CLOCK_CNTL2_TP0 ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL3_TP0 ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL4_TP0 ,0x00222222 }, + {REG_A6XX_RBBM_CLOCK_HYST_TP0 ,0x77777777 }, + {REG_A6XX_RBBM_CLOCK_HYST2_TP0 ,0x77777777 }, + {REG_A6XX_RBBM_CLOCK_HYST3_TP0 ,0x77777777 }, + {REG_A6XX_RBBM_CLOCK_HYST4_TP0 ,0x00077777 }, + {REG_A6XX_RBBM_CLOCK_DELAY_TP0 ,0x11111111 }, + {REG_A6XX_RBBM_CLOCK_DELAY2_TP0 ,0x11111111 }, + {REG_A6XX_RBBM_CLOCK_DELAY3_TP0 ,0x11111111 }, + {REG_A6XX_RBBM_CLOCK_DELAY4_TP0 ,0x00011111 }, + {REG_A6XX_RBBM_CLOCK_CNTL_UCHE ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_HYST_UCHE ,0x00000004 }, + {REG_A6XX_RBBM_CLOCK_DELAY_UCHE ,0x00000002 }, + {REG_A6XX_RBBM_CLOCK_CNTL_RB0 ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL2_RB0 ,0x01002222 }, + {REG_A6XX_RBBM_CLOCK_CNTL_CCU0 ,0x00002220 }, + {REG_A6XX_RBBM_CLOCK_HYST_RB_CCU0 ,0x44000f00 }, + {REG_A6XX_RBBM_CLOCK_CNTL_RAC ,0x25222022 }, + {REG_A6XX_RBBM_CLOCK_CNTL2_RAC ,0x00555555 }, + {REG_A6XX_RBBM_CLOCK_DELAY_RAC ,0x00000011 }, + {REG_A6XX_RBBM_CLOCK_HYST_RAC ,0x00440044 }, + {REG_A6XX_RBBM_CLOCK_CNTL_TSE_RAS_RBBM ,0x04222222 }, + {REG_A7XX_RBBM_CLOCK_MODE2_GRAS ,0x00000222 }, + {REG_A7XX_RBBM_CLOCK_MODE_BV_GRAS ,0x00222222 }, + {REG_A6XX_RBBM_CLOCK_MODE_GPC ,0x02222223 }, + {REG_A6XX_RBBM_CLOCK_MODE_VFD ,0x00002222 }, + {REG_A7XX_RBBM_CLOCK_MODE_BV_GPC ,0x00222222 }, + {REG_A7XX_RBBM_CLOCK_MODE_BV_VFD ,0x00002222 }, + {REG_A6XX_RBBM_CLOCK_HYST_TSE_RAS_RBBM ,0x00000000 }, + {REG_A6XX_RBBM_CLOCK_HYST_GPC ,0x04104004 }, + {REG_A6XX_RBBM_CLOCK_HYST_VFD ,0x00000000 }, + {REG_A6XX_RBBM_CLOCK_DELAY_TSE_RAS_RBBM ,0x00004000 }, + {REG_A6XX_RBBM_CLOCK_DELAY_GPC ,0x00000200 }, + {REG_A6XX_RBBM_CLOCK_DELAY_VFD ,0x00002222 }, + {REG_A6XX_RBBM_CLOCK_MODE_HLSQ ,0x00002222 }, + {REG_A6XX_RBBM_CLOCK_DELAY_HLSQ ,0x00000000 }, + {REG_A6XX_RBBM_CLOCK_HYST_HLSQ ,0x00000000 }, + {REG_A6XX_RBBM_CLOCK_DELAY_HLSQ_2 ,0x00000002 }, + {REG_A7XX_RBBM_CLOCK_MODE_BV_LRZ ,0x55555552 }, + {REG_A7XX_RBBM_CLOCK_MODE_CP ,0x00000223 }, + {REG_A6XX_RBBM_CLOCK_CNTL ,0x8aa8aa82 }, + {REG_A6XX_RBBM_ISDB_CNT ,0x00000182 }, + {REG_A6XX_RBBM_RAC_THRESHOLD_CNT ,0x00000000 }, + {REG_A6XX_RBBM_SP_HYST_CNT ,0x00000000 }, + {REG_A6XX_RBBM_CLOCK_CNTL_GMU_GX ,0x00000222 }, + {REG_A6XX_RBBM_CLOCK_DELAY_GMU_GX ,0x00000111 }, + {REG_A6XX_RBBM_CLOCK_HYST_GMU_GX ,0x00000555 }, + {}, +}; + +static const struct adreno_reglist a740_hwcg[] = { + {REG_A6XX_RBBM_CLOCK_CNTL_SP0 ,0x02222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL2_SP0 ,0x22022222 }, + {REG_A6XX_RBBM_CLOCK_HYST_SP0 ,0x003cf3cf }, + {REG_A6XX_RBBM_CLOCK_DELAY_SP0 ,0x00000080 }, + {REG_A6XX_RBBM_CLOCK_CNTL_TP0 ,0x22222220 }, + {REG_A6XX_RBBM_CLOCK_CNTL2_TP0 ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL3_TP0 ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL4_TP0 ,0x00222222 }, + {REG_A6XX_RBBM_CLOCK_HYST_TP0 ,0x77777777 }, + {REG_A6XX_RBBM_CLOCK_HYST2_TP0 ,0x77777777 }, + {REG_A6XX_RBBM_CLOCK_HYST3_TP0 ,0x77777777 }, + {REG_A6XX_RBBM_CLOCK_HYST4_TP0 ,0x00077777 }, + {REG_A6XX_RBBM_CLOCK_DELAY_TP0 ,0x11111111 }, + {REG_A6XX_RBBM_CLOCK_DELAY2_TP0 ,0x11111111 }, + {REG_A6XX_RBBM_CLOCK_DELAY3_TP0 ,0x11111111 }, + {REG_A6XX_RBBM_CLOCK_DELAY4_TP0 ,0x00011111 }, + {REG_A6XX_RBBM_CLOCK_CNTL_UCHE ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL2_UCHE ,0x00222222 }, + {REG_A6XX_RBBM_CLOCK_HYST_UCHE ,0x00000444 }, + {REG_A6XX_RBBM_CLOCK_DELAY_UCHE ,0x00000222 }, + {REG_A6XX_RBBM_CLOCK_CNTL_RB0 ,0x22222222 }, + {REG_A6XX_RBBM_CLOCK_CNTL2_RB0 ,0x01002222 }, + {REG_A6XX_RBBM_CLOCK_CNTL_CCU0 ,0x00002220 }, + {REG_A6XX_RBBM_CLOCK_HYST_RB_CCU0 ,0x44000f00 }, + {REG_A6XX_RBBM_CLOCK_CNTL_RAC ,0x25222022 }, + {REG_A6XX_RBBM_CLOCK_CNTL2_RAC ,0x00555555 }, + {REG_A6XX_RBBM_CLOCK_DELAY_RAC ,0x00000011 }, + {REG_A6XX_RBBM_CLOCK_HYST_RAC ,0x00440044 }, + {REG_A6XX_RBBM_CLOCK_CNTL_TSE_RAS_RBBM ,0x04222222 }, + {REG_A7XX_RBBM_CLOCK_MODE2_GRAS ,0x00000222 }, + {REG_A7XX_RBBM_CLOCK_MODE_BV_GRAS ,0x00222222 }, + {REG_A6XX_RBBM_CLOCK_MODE_GPC ,0x02222223 }, + {REG_A6XX_RBBM_CLOCK_MODE_VFD ,0x00222222 }, + {REG_A7XX_RBBM_CLOCK_MODE_BV_GPC ,0x00222222 }, + {REG_A7XX_RBBM_CLOCK_MODE_BV_VFD ,0x00002222 }, + {REG_A6XX_RBBM_CLOCK_HYST_TSE_RAS_RBBM ,0x00000000 }, + {REG_A6XX_RBBM_CLOCK_HYST_GPC ,0x04104004 }, + {REG_A6XX_RBBM_CLOCK_HYST_VFD ,0x00000000 }, + {REG_A6XX_RBBM_CLOCK_DELAY_TSE_RAS_RBBM ,0x00000000 }, + {REG_A6XX_RBBM_CLOCK_DELAY_GPC ,0x00000200 }, + {REG_A6XX_RBBM_CLOCK_DELAY_VFD ,0x00000000 }, + {REG_A6XX_RBBM_CLOCK_MODE_HLSQ ,0x00002222 }, + {REG_A6XX_RBBM_CLOCK_DELAY_HLSQ ,0x00000000 }, + {REG_A6XX_RBBM_CLOCK_HYST_HLSQ ,0x00000000 }, + {REG_A7XX_RBBM_CLOCK_MODE_BV_LRZ ,0x55555552 }, + {REG_A7XX_RBBM_CLOCK_HYST2_VFD ,0x00000000 }, + {REG_A7XX_RBBM_CLOCK_MODE_CP ,0x00000222 }, + {REG_A6XX_RBBM_CLOCK_CNTL ,0x8aa8aa82 }, + {REG_A6XX_RBBM_ISDB_CNT ,0x00000182 }, + {REG_A6XX_RBBM_RAC_THRESHOLD_CNT ,0x00000000 }, + {REG_A6XX_RBBM_SP_HYST_CNT ,0x00000000 }, + {REG_A6XX_RBBM_CLOCK_CNTL_GMU_GX ,0x00000222 }, + {REG_A6XX_RBBM_CLOCK_DELAY_GMU_GX ,0x00000111 }, + {REG_A6XX_RBBM_CLOCK_HYST_GMU_GX ,0x00000555 }, + {}, +}; +static const struct adreno_info a7xx_gpus[] = { { .chip_ids =ADRENO_CHIP_IDS (0x07000200 ),
drivers/gpu/drm/msm/adreno/a6xx_gpu.c +0 -617
623 lines not on this page · raw message
drivers/gpu/drm/msm/adreno/adreno_gpu.h +0 -3
@@ -77,9 +77,6 @@ struct adreno_reglist {u32 value; }; -extern const struct adreno_reglist a612_hwcg[], a615_hwcg[], a630_hwcg[], a640_hwcg[], a650_hwcg[]; -extern const struct adreno_reglist a660_hwcg[], a690_hwcg[], a702_hwcg[], a730_hwcg[], a740_hwcg[]; -struct adreno_speedbin {uint16_t fuse;uint16_t speedbin;
Signature · 1 line
2.45.2
Re: [PATCH v3 3/5] drm/msm/adreno: Move hwcg regs to a6xx hw catalog
Quoted 11 lines · Rob Clark
From: Rob Clark <[email protected]>
Move the hwcg tables into the hw catalog.
Signed-off-by Rob Clark <[email protected]>--- drivers/gpu/drm/msm/adreno/a6xx_catalog.c | 619 ++++++++++++++++++++++ drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 617 --------------------- drivers/gpu/drm/msm/adreno/adreno_gpu.h | 3 - 3 files changed, 619 insertions(+), 620 deletions(-)
Signature · 2 lines
With best wishes Dmitry
Re: [PATCH v3 3/5] drm/msm/adreno: Move hwcg regs to a6xx hw catalog
In reply to Rob ClarkQuoted 6 lines · Rob Clark
From: Rob Clark <[email protected]>
Move the hwcg tables into the hw catalog.
Signed-off-by Rob Clark <[email protected]>---
Konrad
PATCH v3 4/5 drm/msm/adreno: Move hwcg table into a6xx specific info
In reply to Rob ClarkFrom: Rob Clark <[email protected]>
Introduce a6xx_info where we can stash gen specific stuff without polluting the toplevel adreno_info struct.
--- drivers/gpu/drm/msm/adreno/a6xx_catalog.c | 65 +++++++++++++++++------ drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 6 +-- drivers/gpu/drm/msm/adreno/a6xx_gpu.h | 9 ++++ drivers/gpu/drm/msm/adreno/adreno_gpu.h | 6 ++- 4 files changed, 67 insertions(+), 19 deletions(-)
drivers/gpu/drm/msm/adreno/a6xx_catalog.c +50 -15
@@ -7,6 +7,7 @@*/ #include "adreno_gpu.h" +#include "a6xx_gpu.h" #include "a6xx.xml.h" #include "a6xx_gmu.xml.h"
@@ -465,7 +466,9 @@ static const struct adreno_info a6xx_gpus[] = { .inactive_period = DRM_MSM_INACTIVE_PERIOD, .init = a6xx_gpu_init, .zapfw = "a610_zap.mdt", - .hwcg = a612_hwcg, + .a6xx = &(struct a6xx_info ) { + .hwcg = a612_hwcg, + },/* * There are (at least) three SoCs implementing A610: SM6125 * (trinket), SM6115 (bengal) and SM6225 (khaje). Trinket does
@@ -493,7 +496,9 @@ static const struct adreno_info a6xx_gpus[] = { .quirks = ADRENO_QUIRK_HAS_CACHED_COHERENT, .init = a6xx_gpu_init, .zapfw = "a615_zap.mbn", - .hwcg = a615_hwcg, + .a6xx = &(struct a6xx_info) { + .hwcg = a615_hwcg, + }, .speedbins = ADRENO_SPEEDBINS( { 0, 0 }, { 128, 1 },
@@ -513,6 +518,8 @@ static const struct adreno_info a6xx_gpus[] = { .inactive_period = DRM_MSM_INACTIVE_PERIOD, .quirks = ADRENO_QUIRK_HAS_CACHED_COHERENT, .init = a6xx_gpu_init, + .a6xx = &(struct a6xx_info) { + }, .speedbins = ADRENO_SPEEDBINS( { 0, 0 }, { 169, 1 },
@@ -531,7 +538,9 @@ static const struct adreno_info a6xx_gpus[] = { .inactive_period = DRM_MSM_INACTIVE_PERIOD, .init = a6xx_gpu_init, .zapfw = "a615_zap.mdt", - .hwcg = a615_hwcg, + .a6xx = &(struct a6xx_info) { + .hwcg = a615_hwcg, + }, .speedbins = ADRENO_SPEEDBINS( { 0, 0 }, { 138, 1 },
@@ -550,7 +559,9 @@ static const struct adreno_info a6xx_gpus[] = { .inactive_period = DRM_MSM_INACTIVE_PERIOD, .init = a6xx_gpu_init, .zapfw = "a615_zap.mdt", - .hwcg = a615_hwcg, + .a6xx = &(struct a6xx_info) { + .hwcg = a615_hwcg, + }, .speedbins = ADRENO_SPEEDBINS( { 0, 0 }, { 190, 1 },
@@ -569,7 +580,9 @@ static const struct adreno_info a6xx_gpus[] = { .quirks = ADRENO_QUIRK_HAS_CACHED_COHERENT, .init = a6xx_gpu_init, .zapfw = "a615_zap.mdt", - .hwcg = a615_hwcg, + .a6xx = &(struct a6xx_info) { + .hwcg = a615_hwcg, + }, .speedbins = ADRENO_SPEEDBINS( { 0, 0 }, { 120, 4 },
@@ -593,7 +606,9 @@ static const struct adreno_info a6xx_gpus[] = { .quirks = ADRENO_QUIRK_HAS_CACHED_COHERENT, .init = a6xx_gpu_init, .zapfw = "a630_zap.mdt", - .hwcg = a630_hwcg, + .a6xx = &(struct a6xx_info) { + .hwcg = a630_hwcg, + }, }, { .chip_ids = ADRENO_CHIP_IDS(0x06040001), .family = ADRENO_6XX_GEN2,
@@ -607,7 +622,9 @@ static const struct adreno_info a6xx_gpus[] = { .quirks = ADRENO_QUIRK_HAS_CACHED_COHERENT, .init = a6xx_gpu_init, .zapfw = "a640_zap.mdt", - .hwcg = a640_hwcg, + .a6xx = &(struct a6xx_info) { + .hwcg = a640_hwcg, + }, .speedbins = ADRENO_SPEEDBINS( { 0, 0 }, { 1, 1 },
@@ -626,7 +643,9 @@ static const struct adreno_info a6xx_gpus[] = { ADRENO_QUIRK_HAS_HW_APRIV, .init = a6xx_gpu_init, .zapfw = "a650_zap.mdt", - .hwcg = a650_hwcg, + .a6xx = &(struct a6xx_info) { + .hwcg = a650_hwcg, + }, .address_space_size = SZ_16G, .speedbins = ADRENO_SPEEDBINS( { 0, 0 },
@@ -648,7 +667,9 @@ static const struct adreno_info a6xx_gpus[] = { ADRENO_QUIRK_HAS_HW_APRIV, .init = a6xx_gpu_init, .zapfw = "a660_zap.mdt", - .hwcg = a660_hwcg, + .a6xx = &(struct a6xx_info ) { + .hwcg = a660_hwcg, + }, .address_space_size = SZ_16G, }, { .chip_ids = ADRENO_CHIP_IDS(0x06030500),
@@ -663,7 +684,9 @@ static const struct adreno_info a6xx_gpus[] = { ADRENO_QUIRK_HAS_HW_APRIV, .init = a6xx_gpu_init, .zapfw = "a660_zap.mbn", - .hwcg = a660_hwcg, + .a6xx = &(struct a6xx_info) { + .hwcg = a660_hwcg, + }, .address_space_size = SZ_16G, .speedbins = ADRENO_SPEEDBINS( { 0, 0 },
@@ -684,7 +707,9 @@ static const struct adreno_info a6xx_gpus[] = { .quirks = ADRENO_QUIRK_HAS_CACHED_COHERENT, .init = a6xx_gpu_init, .zapfw = "a640_zap.mdt", - .hwcg = a640_hwcg, + .a6xx = &(struct a6xx_info) { + .hwcg = a640_hwcg, + }, }, { .chip_ids = ADRENO_CHIP_IDS(0x06090000), .family = ADRENO_6XX_GEN4,
@@ -698,7 +723,9 @@ static const struct adreno_info a6xx_gpus[] = { ADRENO_QUIRK_HAS_HW_APRIV, .init = a6xx_gpu_init, .zapfw = "a690_zap.mdt", - .hwcg = a690_hwcg, + .a6xx = &(struct a6xx_info) { + .hwcg = a690_hwcg, + }, .address_space_size = SZ_16G, } };
@@ -901,7 +928,9 @@ static const struct adreno_info a7xx_gpus[] = { .quirks = ADRENO_QUIRK_HAS_HW_APRIV, .init = a6xx_gpu_init, .zapfw = "a702_zap.mbn", - .hwcg = a702_hwcg, + .a6xx = &(struct a6xx_info) { + .hwcg = a702_hwcg, + }, .speedbins = ADRENO_SPEEDBINS( { 0, 0 }, { 236, 1 },
@@ -921,7 +950,9 @@ static const struct adreno_info a7xx_gpus[] = { ADRENO_QUIRK_HAS_HW_APRIV, .init = a6xx_gpu_init, .zapfw = "a730_zap.mdt", - .hwcg = a730_hwcg, + .a6xx = &(struct a6xx_info ) { + .hwcg = a730_hwcg, + }, .address_space_size = SZ_16G, }, { .chip_ids = ADRENO_CHIP_IDS(0x43050a01), /* "C510v2" */
@@ -936,7 +967,9 @@ static const struct adreno_info a7xx_gpus[] = { ADRENO_QUIRK_HAS_HW_APRIV, .init = a6xx_gpu_init, .zapfw = "a740_zap.mdt", - .hwcg = a740_hwcg, + .a6xx = &(struct a6xx_info ) { + .hwcg = a740_hwcg, + }, .address_space_size = SZ_16G, }, { .chip_ids = ADRENO_CHIP_IDS(0x43051401), /* "C520v2" */
@@ -951,6 +984,8 @@ static const struct adreno_info a7xx_gpus[] = { ADRENO_QUIRK_HAS_HW_APRIV, .init = a6xx_gpu_init, .zapfw = "gen70900_zap.mbn", + .a6xx = &(struct a6xx_info) { + }, .address_space_size = SZ_16G, } };
drivers/gpu/drm/msm/adreno/a6xx_gpu.c +3 -3
@@ -403,7 +403,7 @@ static void a6xx_set_hwcg(struct msm_gpu *gpu, bool state)unsigned int i;u32 val, clock_cntl_on, cgc_mode; -if (!(adreno_gpu->info->hwcg ||adreno_is_a7xx (adreno_gpu))) +if (!(adreno_gpu->info->a6xx->hwcg ||adreno_is_a7xx (adreno_gpu)))return ;if (adreno_is_a630 (adreno_gpu))
@@ -426,7 +426,7 @@ static void a6xx_set_hwcg(struct msm_gpu *gpu, bool state) state ? 0x5555 : 0); } -if (!adreno_gpu->info->hwcg) { +if (!adreno_gpu->info->a6xx->hwcg) {gpu_write (gpu,REG_A7XX_RBBM_CLOCK_CNTL_GLOBAL ,1 );gpu_write (gpu,REG_A7XX_RBBM_CGC_GLOBAL_LOAD_CMD , state ?1 :0 );
@@ -455,7 +455,7 @@ static void a6xx_set_hwcg(struct msm_gpu *gpu, bool state)if (!adreno_is_a610_family (adreno_gpu) && !adreno_is_a7xx (adreno_gpu))gmu_rmw (gmu,REG_A6XX_GPU_GMU_GX_SPTPRAC_CLOCK_CONTROL ,1 ,0 ); -for (i =0 ; (reg = &adreno_gpu->info->hwcg[i], reg->offset); i++) +for (i =0 ; (reg = &adreno_gpu->info->a6xx->hwcg[i], reg->offset); i++)gpu_write (gpu, reg->offset, state ? reg->value :0 );/* Enable SP clock */
drivers/gpu/drm/msm/adreno/a6xx_gpu.h +9 -0
@@ -12,6 +12,15 @@extern bool hang_debug; +/** +* struct a6xx_info - a6xx specific information from device table +* +* @hwcg: hw clock gating register sequence +*/ +struct a6xx_info { +const struct adreno_reglist *hwcg; +}; +struct a6xx_gpu {struct adreno_gpu base;
drivers/gpu/drm/msm/adreno/adreno_gpu.h +5 -1
@@ -82,6 +82,8 @@ struct adreno_speedbin {uint16_t speedbin; }; +struct a6xx_info ; +struct adreno_info {const char *machine;/**
@@ -98,7 +100,9 @@ struct adreno_info {struct msm_gpu *(*init)(struct drm_device *dev);const char *zapfw;u32 inactive_period; -const struct adreno_reglist *hwcg; +union { +const struct a6xx_info *a6xx; + };u64 address_space_size;/** * @speedbins: Optional table of fuse to speedbin mappings
Signature · 1 line
2.45.2
Re: [PATCH v3 4/5] drm/msm/adreno: Move hwcg table into a6xx specific info
Quoted 5 lines · Rob Clark
From: Rob Clark <[email protected]>
Introduce
a6xx_infowhere we can stash gen specific stuff without polluting the topleveladreno_infostruct.
Quoted 8 lines
Signed-off-by Rob Clark <[email protected]>--- drivers/gpu/drm/msm/adreno/a6xx_catalog.c | 65 +++++++++++++++++------ drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 6 +-- drivers/gpu/drm/msm/adreno/a6xx_gpu.h | 9 ++++ drivers/gpu/drm/msm/adreno/adreno_gpu.h | 6 ++- 4 files changed, 67 insertions(+), 19 deletions(-)
drivers/gpu/drm/msm/adreno/adreno_gpu.h struct adreno_info { · line 108
Quoted 11 lines
drivers/gpu/drm/msm/adreno/adreno_gpu.h +3
-1@@ -98,7 +100,9 @@ struct adreno_info {struct msm_gpu *(*init)(struct drm_device *dev);const char *zapfw;u32 inactive_period; -const struct adreno_reglist *hwcg; +union { +const struct a6xx_info *a6xx; + };u64 address_space_size;/** * @speedbins: Optional table of fuse to speedbin mappings
My preference would be towards wrapping the adreno_gpu, but that would require more significant rework of the driver. Let's see if we can get to that later.
Signature · 2 lines
With best wishes Dmitry
Re: [PATCH v3 4/5] drm/msm/adreno: Move hwcg table into a6xx specific info
Quoted 19 lines · Dmitry Baryshkov
Quoted 5 lines · Rob Clark
From: Rob Clark <[email protected]>
Introduce
a6xx_infowhere we can stash gen specific stuff without polluting the topleveladreno_infostruct.Quoted 8 lines
Signed-off-by Rob Clark <[email protected]>--- drivers/gpu/drm/msm/adreno/a6xx_catalog.c | 65 +++++++++++++++++------ drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 6 +-- drivers/gpu/drm/msm/adreno/a6xx_gpu.h | 9 ++++ drivers/gpu/drm/msm/adreno/adreno_gpu.h | 6 ++- 4 files changed, 67 insertions(+), 19 deletions(-)Reviewed-by Dmitry Baryshkov <[email protected]>
Quoted 16 lines
drivers/gpu/drm/msm/adreno/adreno_gpu.h struct adreno_info { · line 108
Quoted 11 lines
drivers/gpu/drm/msm/adreno/adreno_gpu.h +3
-1@@ -98,7 +100,9 @@ struct adreno_info {struct msm_gpu *(*init)(struct drm_device *dev);const char *zapfw;u32 inactive_period; -const struct adreno_reglist *hwcg; +union { +const struct a6xx_info *a6xx; + };u64 address_space_size;/** * @speedbins: Optional table of fuse to speedbin mappings My preference would be towards wrapping the
adreno_gpu, but that would require more significant rework of the driver. Let's see if we can get to that later.
yeah, it was going to be more re-work, and I'm neck deep in gpuvm/vm_bind.. I just wanted to land this since it is a pita (and error prone) to rebase as more gpu's get added ;-)
It isn't entirely unlike how we handle gpu gen specific options in mesa, where we have a somewhat bigger set of options, so I wouldn't say that this approach was worse than extending adreno_info.. just different..
BR,
-R
Re: [PATCH v3 4/5] drm/msm/adreno: Move hwcg table into a6xx specific info
Quoted 38 lines · Rob Clark
Quoted 19 lines · Dmitry Baryshkov
Quoted 5 lines · Rob Clark
From: Rob Clark <[email protected]>
Introduce
a6xx_infowhere we can stash gen specific stuff without polluting the topleveladreno_infostruct.Quoted 8 lines
Signed-off-by Rob Clark <[email protected]>--- drivers/gpu/drm/msm/adreno/a6xx_catalog.c | 65 +++++++++++++++++------ drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 6 +-- drivers/gpu/drm/msm/adreno/a6xx_gpu.h | 9 ++++ drivers/gpu/drm/msm/adreno/adreno_gpu.h | 6 ++- 4 files changed, 67 insertions(+), 19 deletions(-)Reviewed-by Dmitry Baryshkov <[email protected]>Quoted 16 lines
drivers/gpu/drm/msm/adreno/adreno_gpu.h struct adreno_info { · line 108
Quoted 11 lines
drivers/gpu/drm/msm/adreno/adreno_gpu.h +3
-1@@ -98,7 +100,9 @@ struct adreno_info {struct msm_gpu *(*init)(struct drm_device *dev);const char *zapfw;u32 inactive_period; -const struct adreno_reglist *hwcg; +union { +const struct a6xx_info *a6xx; + };u64 address_space_size;/** * @speedbins: Optional table of fuse to speedbin mappings My preference would be towards wrapping the
adreno_gpu, but that would require more significant rework of the driver. Let's see if we can get to that later.
Quoted 3 lines
yeah, it was going to be more re-work, and I'm neck deep in gpuvm/vm_bind.. I just wanted to land this since it is a pita (and error prone) to rebase as more gpu's get added ;-)
Yes, I'm fine with that. My note was more like a 'later todo' item.
Quoted 5 lines
It isn't entirely unlike how we handle gpu gen specific options in mesa, where we have a somewhat bigger set of options, so I wouldn't say that this approach was worse than extending
adreno_info.. just different..
Signature · 2 lines
With best wishes Dmitry
Re: [PATCH v3 4/5] drm/msm/adreno: Move hwcg table into a6xx specific info
In reply to Rob ClarkQuoted 26 lines · Rob Clark
From: Rob Clark <[email protected]>
Introduce
a6xx_infowhere we can stash gen specific stuff without polluting the topleveladreno_infostruct.Signed-off-by Rob Clark <[email protected]>--- drivers/gpu/drm/msm/adreno/a6xx_catalog.c | 65 +++++++++++++++++------ drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 6 +-- drivers/gpu/drm/msm/adreno/a6xx_gpu.h | 9 ++++ drivers/gpu/drm/msm/adreno/adreno_gpu.h | 6 ++- 4 files changed, 67 insertions(+), 19 deletions(-)drivers/gpu/drm/msm/adreno/a6xx_catalog.c +1
-0@@ -7,6 +7,7 @@*/ #include "adreno_gpu.h" +#include "a6xx_gpu.h" #include "a6xx.xml.h" #include "a6xx_gmu.xml.h"
drivers/gpu/drm/msm/adreno/a6xx_catalog.c static const struct adreno_info a6xx_gpus[] = { · line 469
Quoted 5 lines
drivers/gpu/drm/msm/adreno/a6xx_catalog.c +1
-1@@ -465,7 +466,9 @@ static const struct adreno_info a6xx_gpus[] = { .inactive_period = DRM_MSM_INACTIVE_PERIOD, .init = a6xx_gpu_init, .zapfw = "a610_zap.mdt", - .hwcg = a612_hwcg, + .a6xx = &(struct a6xx_info ) {
const
Konrad
PATCH v3 5/5 drm/msm/adreno: Move CP_PROTECT settings to hw catalog
In reply to Rob ClarkFrom: Rob Clark <[email protected]>
Move the CP_PROTECT settings into the hw catalog.
--- drivers/gpu/drm/msm/adreno/a6xx_catalog.c | 247 +++++++++++++++++++++ drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 257 +--------------------- drivers/gpu/drm/msm/adreno/a6xx_gpu.h | 2 + drivers/gpu/drm/msm/adreno/adreno_gpu.h | 13 ++ 4 files changed, 268 insertions(+), 251 deletions(-)
drivers/gpu/drm/msm/adreno/a6xx_catalog.c +247 -0
@@ -454,6 +454,173 @@ static const struct adreno_reglist a690_hwcg[] = { {} }; +/* For a615, a616, a618, a619, a630, a640 and a680 */ +static const u32 a630_protect_regs[] = { +A6XX_PROTECT_RDONLY (0x00000 ,0x04ff ), +A6XX_PROTECT_RDONLY (0x00501 ,0x0005 ), +A6XX_PROTECT_RDONLY (0x0050b ,0x02f4 ), +A6XX_PROTECT_NORDWR (0x0050e ,0x0000 ), +A6XX_PROTECT_NORDWR (0x00510 ,0x0000 ), +A6XX_PROTECT_NORDWR (0x00534 ,0x0000 ), +A6XX_PROTECT_NORDWR (0x00800 ,0x0082 ), +A6XX_PROTECT_NORDWR (0x008a0 ,0x0008 ), +A6XX_PROTECT_NORDWR (0x008ab ,0x0024 ), +A6XX_PROTECT_RDONLY (0x008de ,0x00ae ), +A6XX_PROTECT_NORDWR (0x00900 ,0x004d ), +A6XX_PROTECT_NORDWR (0x0098d ,0x0272 ), +A6XX_PROTECT_NORDWR (0x00e00 ,0x0001 ), +A6XX_PROTECT_NORDWR (0x00e03 ,0x000c ), +A6XX_PROTECT_NORDWR (0x03c00 ,0x00c3 ), +A6XX_PROTECT_RDONLY (0x03cc4 ,0x1fff ), +A6XX_PROTECT_NORDWR (0x08630 ,0x01cf ), +A6XX_PROTECT_NORDWR (0x08e00 ,0x0000 ), +A6XX_PROTECT_NORDWR (0x08e08 ,0x0000 ), +A6XX_PROTECT_NORDWR (0x08e50 ,0x001f ), +A6XX_PROTECT_NORDWR (0x09624 ,0x01db ), +A6XX_PROTECT_NORDWR (0x09e70 ,0x0001 ), +A6XX_PROTECT_NORDWR (0x09e78 ,0x0187 ), +A6XX_PROTECT_NORDWR (0x0a630 ,0x01cf ), +A6XX_PROTECT_NORDWR (0x0ae02 ,0x0000 ), +A6XX_PROTECT_NORDWR (0x0ae50 ,0x032f ), +A6XX_PROTECT_NORDWR (0x0b604 ,0x0000 ), +A6XX_PROTECT_NORDWR (0x0be02 ,0x0001 ), +A6XX_PROTECT_NORDWR (0x0be20 ,0x17df ), +A6XX_PROTECT_NORDWR (0x0f000 ,0x0bff ), +A6XX_PROTECT_RDONLY (0x0fc00 ,0x1fff ), +A6XX_PROTECT_NORDWR (0x11c00 ,0x0000 ),/* note: infinite range */ +}; +DECLARE_ADRENO_PROTECT (a630_protect,32 ); + +/* These are for a620 and a650 */ +static const u32 a650_protect_regs[] = { +A6XX_PROTECT_RDONLY (0x00000 ,0x04ff ), +A6XX_PROTECT_RDONLY (0x00501 ,0x0005 ), +A6XX_PROTECT_RDONLY (0x0050b ,0x02f4 ), +A6XX_PROTECT_NORDWR (0x0050e ,0x0000 ), +A6XX_PROTECT_NORDWR (0x00510 ,0x0000 ), +A6XX_PROTECT_NORDWR (0x00534 ,0x0000 ), +A6XX_PROTECT_NORDWR (0x00800 ,0x0082 ), +A6XX_PROTECT_NORDWR (0x008a0 ,0x0008 ), +A6XX_PROTECT_NORDWR (0x008ab ,0x0024 ), +A6XX_PROTECT_RDONLY (0x008de ,0x00ae ), +A6XX_PROTECT_NORDWR (0x00900 ,0x004d ), +A6XX_PROTECT_NORDWR (0x0098d ,0x0272 ), +A6XX_PROTECT_NORDWR (0x00e00 ,0x0001 ), +A6XX_PROTECT_NORDWR (0x00e03 ,0x000c ), +A6XX_PROTECT_NORDWR (0x03c00 ,0x00c3 ), +A6XX_PROTECT_RDONLY (0x03cc4 ,0x1fff ), +A6XX_PROTECT_NORDWR (0x08630 ,0x01cf ), +A6XX_PROTECT_NORDWR (0x08e00 ,0x0000 ), +A6XX_PROTECT_NORDWR (0x08e08 ,0x0000 ), +A6XX_PROTECT_NORDWR (0x08e50 ,0x001f ), +A6XX_PROTECT_NORDWR (0x08e80 ,0x027f ), +A6XX_PROTECT_NORDWR (0x09624 ,0x01db ), +A6XX_PROTECT_NORDWR (0x09e60 ,0x0011 ), +A6XX_PROTECT_NORDWR (0x09e78 ,0x0187 ), +A6XX_PROTECT_NORDWR (0x0a630 ,0x01cf ), +A6XX_PROTECT_NORDWR (0x0ae02 ,0x0000 ), +A6XX_PROTECT_NORDWR (0x0ae50 ,0x032f ), +A6XX_PROTECT_NORDWR (0x0b604 ,0x0000 ), +A6XX_PROTECT_NORDWR (0x0b608 ,0x0007 ), +A6XX_PROTECT_NORDWR (0x0be02 ,0x0001 ), +A6XX_PROTECT_NORDWR (0x0be20 ,0x17df ), +A6XX_PROTECT_NORDWR (0x0f000 ,0x0bff ), +A6XX_PROTECT_RDONLY (0x0fc00 ,0x1fff ), +A6XX_PROTECT_NORDWR (0x18400 ,0x1fff ), +A6XX_PROTECT_NORDWR (0x1a800 ,0x1fff ), +A6XX_PROTECT_NORDWR (0x1f400 ,0x0443 ), +A6XX_PROTECT_RDONLY (0x1f844 ,0x007b ), +A6XX_PROTECT_NORDWR (0x1f887 ,0x001b ), +A6XX_PROTECT_NORDWR (0x1f8c0 ,0x0000 ),/* note: infinite range */ +}; +DECLARE_ADRENO_PROTECT (a650_protect,48 ); + +/* These are for a635 and a660 */ +static const u32 a660_protect_regs[] = { +A6XX_PROTECT_RDONLY (0x00000 ,0x04ff ), +A6XX_PROTECT_RDONLY (0x00501 ,0x0005 ), +A6XX_PROTECT_RDONLY (0x0050b ,0x02f4 ), +A6XX_PROTECT_NORDWR (0x0050e ,0x0000 ), +A6XX_PROTECT_NORDWR (0x00510 ,0x0000 ), +A6XX_PROTECT_NORDWR (0x00534 ,0x0000 ), +A6XX_PROTECT_NORDWR (0x00800 ,0x0082 ), +A6XX_PROTECT_NORDWR (0x008a0 ,0x0008 ), +A6XX_PROTECT_NORDWR (0x008ab ,0x0024 ), +A6XX_PROTECT_RDONLY (0x008de ,0x00ae ), +A6XX_PROTECT_NORDWR (0x00900 ,0x004d ), +A6XX_PROTECT_NORDWR (0x0098d ,0x0272 ), +A6XX_PROTECT_NORDWR (0x00e00 ,0x0001 ), +A6XX_PROTECT_NORDWR (0x00e03 ,0x000c ), +A6XX_PROTECT_NORDWR (0x03c00 ,0x00c3 ), +A6XX_PROTECT_RDONLY (0x03cc4 ,0x1fff ), +A6XX_PROTECT_NORDWR (0x08630 ,0x01cf ), +A6XX_PROTECT_NORDWR (0x08e00 ,0x0000 ), +A6XX_PROTECT_NORDWR (0x08e08 ,0x0000 ), +A6XX_PROTECT_NORDWR (0x08e50 ,0x001f ), +A6XX_PROTECT_NORDWR (0x08e80 ,0x027f ), +A6XX_PROTECT_NORDWR (0x09624 ,0x01db ), +A6XX_PROTECT_NORDWR (0x09e60 ,0x0011 ), +A6XX_PROTECT_NORDWR (0x09e78 ,0x0187 ), +A6XX_PROTECT_NORDWR (0x0a630 ,0x01cf ), +A6XX_PROTECT_NORDWR (0x0ae02 ,0x0000 ), +A6XX_PROTECT_NORDWR (0x0ae50 ,0x012f ), +A6XX_PROTECT_NORDWR (0x0b604 ,0x0000 ), +A6XX_PROTECT_NORDWR (0x0b608 ,0x0006 ), +A6XX_PROTECT_NORDWR (0x0be02 ,0x0001 ), +A6XX_PROTECT_NORDWR (0x0be20 ,0x015f ), +A6XX_PROTECT_NORDWR (0x0d000 ,0x05ff ), +A6XX_PROTECT_NORDWR (0x0f000 ,0x0bff ), +A6XX_PROTECT_RDONLY (0x0fc00 ,0x1fff ), +A6XX_PROTECT_NORDWR (0x18400 ,0x1fff ), +A6XX_PROTECT_NORDWR (0x1a400 ,0x1fff ), +A6XX_PROTECT_NORDWR (0x1f400 ,0x0443 ), +A6XX_PROTECT_RDONLY (0x1f844 ,0x007b ), +A6XX_PROTECT_NORDWR (0x1f860 ,0x0000 ), +A6XX_PROTECT_NORDWR (0x1f887 ,0x001b ), +A6XX_PROTECT_NORDWR (0x1f8c0 ,0x0000 ),/* note: infinite range */ +}; +DECLARE_ADRENO_PROTECT (a660_protect,48 ); + +/* These are for a690 */ +static const u32 a690_protect_regs[] = { +A6XX_PROTECT_RDONLY (0x00000 ,0x004ff ), +A6XX_PROTECT_RDONLY (0x00501 ,0x00001 ), +A6XX_PROTECT_RDONLY (0x0050b ,0x002f4 ), +A6XX_PROTECT_NORDWR (0x0050e ,0x00000 ), +A6XX_PROTECT_NORDWR (0x00510 ,0x00000 ), +A6XX_PROTECT_NORDWR (0x00534 ,0x00000 ), +A6XX_PROTECT_NORDWR (0x00800 ,0x00082 ), +A6XX_PROTECT_NORDWR (0x008a0 ,0x00008 ), +A6XX_PROTECT_NORDWR (0x008ab ,0x00024 ), +A6XX_PROTECT_RDONLY (0x008de ,0x000ae ), +A6XX_PROTECT_NORDWR (0x00900 ,0x0004d ), +A6XX_PROTECT_NORDWR (0x0098d ,0x00272 ), +A6XX_PROTECT_NORDWR (0x00e00 ,0x00001 ), +A6XX_PROTECT_NORDWR (0x00e03 ,0x0000c ), +A6XX_PROTECT_NORDWR (0x03c00 ,0x000c3 ), +A6XX_PROTECT_RDONLY (0x03cc4 ,0x01fff ), +A6XX_PROTECT_NORDWR (0x08630 ,0x001cf ), +A6XX_PROTECT_NORDWR (0x08e00 ,0x00000 ), +A6XX_PROTECT_NORDWR (0x08e08 ,0x00007 ), +A6XX_PROTECT_NORDWR (0x08e50 ,0x0001f ), +A6XX_PROTECT_NORDWR (0x08e80 ,0x0027f ), +A6XX_PROTECT_NORDWR (0x09624 ,0x001db ), +A6XX_PROTECT_NORDWR (0x09e60 ,0x00011 ), +A6XX_PROTECT_NORDWR (0x09e78 ,0x00187 ), +A6XX_PROTECT_NORDWR (0x0a630 ,0x001cf ), +A6XX_PROTECT_NORDWR (0x0ae02 ,0x00000 ), +A6XX_PROTECT_NORDWR (0x0ae50 ,0x0012f ), +A6XX_PROTECT_NORDWR (0x0b604 ,0x00000 ), +A6XX_PROTECT_NORDWR (0x0b608 ,0x00006 ), +A6XX_PROTECT_NORDWR (0x0be02 ,0x00001 ), +A6XX_PROTECT_NORDWR (0x0be20 ,0x0015f ), +A6XX_PROTECT_NORDWR (0x0d000 ,0x005ff ), +A6XX_PROTECT_NORDWR (0x0f000 ,0x00bff ), +A6XX_PROTECT_RDONLY (0x0fc00 ,0x01fff ), +A6XX_PROTECT_NORDWR (0x11c00 ,0x00000 ),/*note: infiite range */ +}; +DECLARE_ADRENO_PROTECT (a690_protect,48 ); +static const struct adreno_info a6xx_gpus[] = { { .chip_ids =ADRENO_CHIP_IDS (0x06010000 ),
@@ -468,6 +635,7 @@ static const struct adreno_info a6xx_gpus[] = { .zapfw = "a610_zap.mdt", .a6xx = &(struct a6xx_info ) { .hwcg = a612_hwcg, + .protect = &a630_protect, },/* * There are (at least) three SoCs implementing A610: SM6125
@@ -498,6 +666,7 @@ static const struct adreno_info a6xx_gpus[] = { .zapfw = "a615_zap.mbn", .a6xx = &(struct a6xx_info) { .hwcg = a615_hwcg, + .protect = &a630_protect, }, .speedbins = ADRENO_SPEEDBINS( { 0, 0 },
@@ -519,6 +688,7 @@ static const struct adreno_info a6xx_gpus[] = { .quirks = ADRENO_QUIRK_HAS_CACHED_COHERENT, .init = a6xx_gpu_init, .a6xx = &(struct a6xx_info) { + .protect = &a630_protect, }, .speedbins = ADRENO_SPEEDBINS( { 0, 0 },
@@ -540,6 +710,7 @@ static const struct adreno_info a6xx_gpus[] = { .zapfw = "a615_zap.mdt", .a6xx = &(struct a6xx_info) { .hwcg = a615_hwcg, + .protect = &a630_protect, }, .speedbins = ADRENO_SPEEDBINS( { 0, 0 },
@@ -561,6 +732,7 @@ static const struct adreno_info a6xx_gpus[] = { .zapfw = "a615_zap.mdt", .a6xx = &(struct a6xx_info) { .hwcg = a615_hwcg, + .protect = &a630_protect, }, .speedbins = ADRENO_SPEEDBINS( { 0, 0 },
@@ -582,6 +754,7 @@ static const struct adreno_info a6xx_gpus[] = { .zapfw = "a615_zap.mdt", .a6xx = &(struct a6xx_info) { .hwcg = a615_hwcg, + .protect = &a630_protect, }, .speedbins = ADRENO_SPEEDBINS( { 0, 0 },
@@ -608,6 +781,7 @@ static const struct adreno_info a6xx_gpus[] = { .zapfw = "a630_zap.mdt", .a6xx = &(struct a6xx_info) { .hwcg = a630_hwcg, + .protect = &a630_protect, }, }, { .chip_ids = ADRENO_CHIP_IDS(0x06040001),
@@ -624,6 +798,7 @@ static const struct adreno_info a6xx_gpus[] = { .zapfw = "a640_zap.mdt", .a6xx = &(struct a6xx_info) { .hwcg = a640_hwcg, + .protect = &a630_protect, }, .speedbins = ADRENO_SPEEDBINS( { 0, 0 },
@@ -645,6 +820,7 @@ static const struct adreno_info a6xx_gpus[] = { .zapfw = "a650_zap.mdt", .a6xx = &(struct a6xx_info ) { .hwcg = a650_hwcg, + .protect = &a650_protect, }, .address_space_size = SZ_16G, .speedbins = ADRENO_SPEEDBINS(
@@ -669,6 +845,7 @@ static const struct adreno_info a6xx_gpus[] = { .zapfw = "a660_zap.mdt", .a6xx = &(struct a6xx_info) { .hwcg = a660_hwcg, + .protect = &a660_protect, }, .address_space_size = SZ_16G, }, {
@@ -686,6 +863,7 @@ static const struct adreno_info a6xx_gpus[] = { .zapfw = "a660_zap.mbn", .a6xx = &(struct a6xx_info ) { .hwcg = a660_hwcg, + .protect = &a660_protect, }, .address_space_size = SZ_16G, .speedbins = ADRENO_SPEEDBINS(
@@ -709,6 +887,7 @@ static const struct adreno_info a6xx_gpus[] = { .zapfw = "a640_zap.mdt", .a6xx = &(struct a6xx_info) { .hwcg = a640_hwcg, + .protect = &a630_protect, }, }, { .chip_ids = ADRENO_CHIP_IDS(0x06090000),
@@ -725,6 +904,7 @@ static const struct adreno_info a6xx_gpus[] = { .zapfw = "a690_zap.mdt", .a6xx = &(struct a6xx_info ) { .hwcg = a690_hwcg, + .protect = &a690_protect, }, .address_space_size = SZ_16G, }
@@ -916,6 +1096,60 @@ static const struct adreno_reglist a740_hwcg[] = { {}, }; +static const u32 a730_protect_regs[] = { +A6XX_PROTECT_RDONLY (0x00000 ,0x04ff ), +A6XX_PROTECT_RDONLY (0x0050b ,0x0058 ), +A6XX_PROTECT_NORDWR (0x0050e ,0x0000 ), +A6XX_PROTECT_NORDWR (0x00510 ,0x0000 ), +A6XX_PROTECT_NORDWR (0x00534 ,0x0000 ), +A6XX_PROTECT_RDONLY (0x005fb ,0x009d ), +A6XX_PROTECT_NORDWR (0x00699 ,0x01e9 ), +A6XX_PROTECT_NORDWR (0x008a0 ,0x0008 ), +A6XX_PROTECT_NORDWR (0x008ab ,0x0024 ), +/* 0x008d0-0x008dd and 0x008e0-0x008e6 are unprotected on purpose for tools like perfetto */ +A6XX_PROTECT_NORDWR (0x008de ,0x0001 ), +A6XX_PROTECT_RDONLY (0x008e7 ,0x014b ), +A6XX_PROTECT_NORDWR (0x00900 ,0x004d ), +A6XX_PROTECT_NORDWR (0x0098d ,0x00b2 ), +A6XX_PROTECT_NORDWR (0x00a41 ,0x01be ), +A6XX_PROTECT_NORDWR (0x00df0 ,0x0001 ), +A6XX_PROTECT_NORDWR (0x00e01 ,0x0000 ), +A6XX_PROTECT_NORDWR (0x00e07 ,0x0008 ), +A6XX_PROTECT_NORDWR (0x03c00 ,0x00c3 ), +A6XX_PROTECT_RDONLY (0x03cc4 ,0x1fff ), +A6XX_PROTECT_NORDWR (0x08630 ,0x01cf ), +A6XX_PROTECT_NORDWR (0x08e00 ,0x0000 ), +A6XX_PROTECT_NORDWR (0x08e08 ,0x0000 ), +A6XX_PROTECT_NORDWR (0x08e50 ,0x001f ), +A6XX_PROTECT_NORDWR (0x08e80 ,0x0280 ), +A6XX_PROTECT_NORDWR (0x09624 ,0x01db ), +A6XX_PROTECT_NORDWR (0x09e40 ,0x0000 ), +A6XX_PROTECT_NORDWR (0x09e64 ,0x000d ), +A6XX_PROTECT_NORDWR (0x09e78 ,0x0187 ), +A6XX_PROTECT_NORDWR (0x0a630 ,0x01cf ), +A6XX_PROTECT_NORDWR (0x0ae02 ,0x0000 ), +A6XX_PROTECT_NORDWR (0x0ae50 ,0x000f ), +A6XX_PROTECT_NORDWR (0x0ae66 ,0x0003 ), +A6XX_PROTECT_NORDWR (0x0ae6f ,0x0003 ), +A6XX_PROTECT_NORDWR (0x0b604 ,0x0003 ), +A6XX_PROTECT_NORDWR (0x0ec00 ,0x0fff ), +A6XX_PROTECT_RDONLY (0x0fc00 ,0x1fff ), +A6XX_PROTECT_NORDWR (0x18400 ,0x0053 ), +A6XX_PROTECT_RDONLY (0x18454 ,0x0004 ), +A6XX_PROTECT_NORDWR (0x18459 ,0x1fff ), +A6XX_PROTECT_NORDWR (0x1a459 ,0x1fff ), +A6XX_PROTECT_NORDWR (0x1c459 ,0x1fff ), +A6XX_PROTECT_NORDWR (0x1f400 ,0x0443 ), +A6XX_PROTECT_RDONLY (0x1f844 ,0x007b ), +A6XX_PROTECT_NORDWR (0x1f860 ,0x0000 ), +A6XX_PROTECT_NORDWR (0x1f878 ,0x002a ), +/* CP_PROTECT_REG[45, 46] are left untouched! */ +0 , +0 , +A6XX_PROTECT_NORDWR (0x1f8c0 ,0x00000 ), +}; +DECLARE_ADRENO_PROTECT (a730_protect,48 ); +static const struct adreno_info a7xx_gpus[] = { { .chip_ids =ADRENO_CHIP_IDS (0x07000200 ),
@@ -952,6 +1186,7 @@ static const struct adreno_info a7xx_gpus[] = { .zapfw = "a730_zap.mdt", .a6xx = &(struct a6xx_info) { .hwcg = a730_hwcg, + .protect = &a730_protect, }, .address_space_size = SZ_16G, }, {
@@ -969,6 +1204,7 @@ static const struct adreno_info a7xx_gpus[] = { .zapfw = "a740_zap.mdt", .a6xx = &(struct a6xx_info) { .hwcg = a740_hwcg, + .protect = &a730_protect, }, .address_space_size = SZ_16G, }, {
@@ -985,8 +1221,19 @@ static const struct adreno_info a7xx_gpus[] = { .init = a6xx_gpu_init, .zapfw = "gen70900_zap.mbn", .a6xx = &(struct a6xx_info) { + .protect = &a730_protect, }, .address_space_size = SZ_16G, } };DECLARE_ADRENO_GPULIST (a7xx); + +static inline void __build_asserts (void ) +{ +BUILD_BUG_ON (a630_protect.count > a630_protect.count_max); +BUILD_BUG_ON (a650_protect.count > a650_protect.count_max); +BUILD_BUG_ON (a660_protect.count > a660_protect.count_max); +BUILD_BUG_ON (a690_protect.count > a690_protect.count_max); +BUILD_BUG_ON (a730_protect.count > a730_protect.count_max); +} +
drivers/gpu/drm/msm/adreno/a6xx_gpu.c +6 -251
275 lines not on this page · raw message
drivers/gpu/drm/msm/adreno/a6xx_gpu.h +2 -0
@@ -16,9 +16,11 @@ extern bool hang_debug;* struct a6xx_info - a6xx specific information from device table * * @hwcg: hw clock gating register sequence +* @protect: CP_PROTECT settings */ struct a6xx_info {const struct adreno_reglist *hwcg; +const struct adreno_protect *protect; };struct a6xx_gpu {
drivers/gpu/drm/msm/adreno/adreno_gpu.h +13 -0
@@ -143,6 +143,19 @@ const struct adreno_gpulist name ## _gpulist = { \*/ #define ADRENO_SPEEDBINS(tbl...) (struct adreno_speedbin[]) { tbl {SHRT_MAX, 0} } +struct adreno_protect { +const uint32_t *regs; +uint32_t count; +uint32_t count_max; +}; + +#define DECLARE_ADRENO_PROTECT (name, __count_max) \ +static const struct adreno_protect name = { \ + .regs = name ## _regs, \ + .count = ARRAY_SIZE(name ## _regs), \ + .count_max = __count_max, \ +}; +struct adreno_gpu {struct msm_gpu base;const struct adreno_info *info;
Signature · 1 line
2.45.2
Re: [PATCH v3 5/5] drm/msm/adreno: Move CP_PROTECT settings to hw catalog
Quoted 4 lines · Rob Clark
From: Rob Clark <[email protected]>
Move the
CP_PROTECTsettings into the hw catalog.
Quoted 8 lines
Signed-off-by Rob Clark <[email protected]>--- drivers/gpu/drm/msm/adreno/a6xx_catalog.c | 247 +++++++++++++++++++++ drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 257 +--------------------- drivers/gpu/drm/msm/adreno/a6xx_gpu.h | 2 + drivers/gpu/drm/msm/adreno/adreno_gpu.h | 13 ++ 4 files changed, 268 insertions(+), 251 deletions(-)
Signature · 2 lines
With best wishes Dmitry
Re: [PATCH v3 5/5] drm/msm/adreno: Move CP_PROTECT settings to hw catalog
In reply to Rob ClarkQuoted 6 lines · Rob Clark
From: Rob Clark <[email protected]>
Move the
CP_PROTECTsettings into the hw catalog.Signed-off-by Rob Clark <[email protected]>---
I think a702 was skipped over
Konrad