Skip to content

Commit 40c297e

Browse files
konradybciorobclark
authored andcommitted
drm/msm/a6xx: Set GMU CGC properties on a6xx too
This was apparently never done before.. Program the expected values. This also gets rid of sneakily setting that register through the HWCG reg list on A690. Signed-off-by: Konrad Dybcio <[email protected]> Patchwork: https://patchwork.freedesktop.org/patch/611098/ Signed-off-by: Rob Clark <[email protected]>
1 parent 51682bc commit 40c297e

File tree

3 files changed

+17
-10
lines changed

3 files changed

+17
-10
lines changed

drivers/gpu/drm/msm/adreno/a6xx_catalog.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -448,7 +448,6 @@ static const struct adreno_reglist a690_hwcg[] = {
448448
{REG_A6XX_RBBM_CLOCK_CNTL_GMU_GX, 0x00000222},
449449
{REG_A6XX_RBBM_CLOCK_DELAY_GMU_GX, 0x00000111},
450450
{REG_A6XX_RBBM_CLOCK_HYST_GMU_GX, 0x00000555},
451-
{REG_A6XX_GPU_GMU_AO_GMU_CGC_MODE_CNTL, 0x20200},
452451
{REG_A6XX_GPU_GMU_AO_GMU_CGC_DELAY_CNTL, 0x10111},
453452
{REG_A6XX_GPU_GMU_AO_GMU_CGC_HYST_CNTL, 0x5555},
454453
{}

drivers/gpu/drm/msm/adreno/a6xx_gpu.c

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -402,6 +402,7 @@ static void a6xx_set_hwcg(struct msm_gpu *gpu, bool state)
402402
struct a6xx_gmu *gmu = &a6xx_gpu->gmu;
403403
const struct adreno_reglist *reg;
404404
unsigned int i;
405+
u32 cgc_delay, cgc_hyst;
405406
u32 val, clock_cntl_on;
406407

407408
if (!(adreno_gpu->info->a6xx->hwcg || adreno_is_a7xx(adreno_gpu)))
@@ -416,14 +417,15 @@ static void a6xx_set_hwcg(struct msm_gpu *gpu, bool state)
416417
else
417418
clock_cntl_on = 0x8aa8aa82;
418419

419-
if (adreno_is_a7xx(adreno_gpu)) {
420-
gmu_write(&a6xx_gpu->gmu, REG_A6XX_GPU_GMU_AO_GMU_CGC_MODE_CNTL,
421-
state ? adreno_gpu->info->a6xx->gmu_cgc_mode : 0);
422-
gmu_write(&a6xx_gpu->gmu, REG_A6XX_GPU_GMU_AO_GMU_CGC_DELAY_CNTL,
423-
state ? 0x10111 : 0);
424-
gmu_write(&a6xx_gpu->gmu, REG_A6XX_GPU_GMU_AO_GMU_CGC_HYST_CNTL,
425-
state ? 0x5555 : 0);
426-
}
420+
cgc_delay = adreno_is_a615_family(adreno_gpu) ? 0x111 : 0x10111;
421+
cgc_hyst = adreno_is_a615_family(adreno_gpu) ? 0x555 : 0x5555;
422+
423+
gmu_write(&a6xx_gpu->gmu, REG_A6XX_GPU_GMU_AO_GMU_CGC_MODE_CNTL,
424+
state ? adreno_gpu->info->a6xx->gmu_cgc_mode : 0);
425+
gmu_write(&a6xx_gpu->gmu, REG_A6XX_GPU_GMU_AO_GMU_CGC_DELAY_CNTL,
426+
state ? cgc_delay : 0);
427+
gmu_write(&a6xx_gpu->gmu, REG_A6XX_GPU_GMU_AO_GMU_CGC_HYST_CNTL,
428+
state ? cgc_hyst : 0);
427429

428430
if (!adreno_gpu->info->a6xx->hwcg) {
429431
gpu_write(gpu, REG_A7XX_RBBM_CLOCK_CNTL_GLOBAL, 1);

drivers/gpu/drm/msm/adreno/adreno_gpu.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -463,7 +463,13 @@ static inline int adreno_is_a610_family(const struct adreno_gpu *gpu)
463463
return adreno_is_a610(gpu) || adreno_is_a702(gpu);
464464
}
465465

466-
/* check for a615, a616, a618, a619 or any a630 derivatives */
466+
/* TODO: 615/616 */
467+
static inline int adreno_is_a615_family(const struct adreno_gpu *gpu)
468+
{
469+
return adreno_is_a618(gpu) ||
470+
adreno_is_a619(gpu);
471+
}
472+
467473
static inline int adreno_is_a630_family(const struct adreno_gpu *gpu)
468474
{
469475
if (WARN_ON_ONCE(!gpu->info))

0 commit comments

Comments
 (0)