From a1a9d1bd1584e03198496014d438c4bba6720d7b Mon Sep 17 00:00:00 2001 From: Mohammed Mirza Mandayappurath Manzoor Date: Wed, 24 Jun 2020 22:05:24 -0700 Subject: [PATCH] msm: kgsl: Include data from all power levels in ACD table Update the logic to include data from all powerlevels in ACD table for ACD to be enabled on all levels. Change-Id: I0da7ab5e4449bbe38bc292c63f0d1a72c3991a0f Signed-off-by: Mohammed Mirza Mandayappurath Manzoor --- drivers/gpu/msm/adreno_a6xx_gmu.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/msm/adreno_a6xx_gmu.c b/drivers/gpu/msm/adreno_a6xx_gmu.c index b583a336cda9..9f4674ad476b 100644 --- a/drivers/gpu/msm/adreno_a6xx_gmu.c +++ b/drivers/gpu/msm/adreno_a6xx_gmu.c @@ -2437,9 +2437,10 @@ static void a6xx_gmu_acd_probe(struct kgsl_device *device, { struct adreno_device *adreno_dev = ADRENO_DEVICE(device); struct kgsl_pwrctrl *pwr = &device->pwrctrl; + struct kgsl_pwrlevel *pwrlevel = + &pwr->pwrlevels[pwr->num_pwrlevels - 1]; struct hfi_acd_table_cmd *cmd = &gmu->hfi.acd_table; - u32 acd_level, cmd_idx, numlvl = pwr->num_pwrlevels; - int ret, i; + int ret, i, cmd_idx = 0; if (!ADRENO_FEATURE(adreno_dev, ADRENO_ACD)) return; @@ -2449,12 +2450,17 @@ static void a6xx_gmu_acd_probe(struct kgsl_device *device, cmd->stride = 1; cmd->enable_by_level = 0; - for (i = 0, cmd_idx = 0; i < numlvl; i++) { - acd_level = pwr->pwrlevels[numlvl - i].acd_level; - if (acd_level) { - cmd->enable_by_level |= (1 << i); - cmd->data[cmd_idx++] = acd_level; + /* + * Iterate through each gpu power level and generate a mask for GMU + * firmware for ACD enabled levels and store the corresponding control + * register configurations to the acd_table structure. + */ + for (i = 0; i < pwr->num_pwrlevels; i++) { + if (pwrlevel->acd_level) { + cmd->enable_by_level |= (1 << (i + 1)); + cmd->data[cmd_idx++] = pwrlevel->acd_level; } + pwrlevel--; } if (!cmd->enable_by_level)