From bcb441b2e2ab723fc0cede2aa8a6751677a32271 Mon Sep 17 00:00:00 2001 From: Oleg Perelet Date: Mon, 29 Feb 2016 09:45:27 -0800 Subject: msm: kgsl: Invoke AGC handshake on A540 Invoke AGC handshake on A540 even when LM is disabled, pass 0 for LM and pass HW patchid. CRs-Fixed: 973565 Change-Id: I62c32b55bf2e3a1ec498b1ec0a8bebf34ac803a9 Signed-off-by: Oleg Perelet --- drivers/gpu/msm/adreno-gpulist.h | 2 +- drivers/gpu/msm/adreno_a5xx.c | 62 +++++++++++++++++++++------------------- 2 files changed, 34 insertions(+), 30 deletions(-) diff --git a/drivers/gpu/msm/adreno-gpulist.h b/drivers/gpu/msm/adreno-gpulist.h index 78832b8a9712..65beccc5d7fe 100644 --- a/drivers/gpu/msm/adreno-gpulist.h +++ b/drivers/gpu/msm/adreno-gpulist.h @@ -254,7 +254,7 @@ static const struct adreno_gpu_core adreno_gpulist[] = { .gmem_size = SZ_1M, .num_protected_regs = 0x20, .busy_mask = 0xFFFFFFFE, - .gpmufw_name = "a540v1_gpmu.fw2", + .gpmufw_name = "a540_gpmu.fw2", .gpmu_major = 3, .gpmu_minor = 0, .gpmu_tsens = 0x000C000D, diff --git a/drivers/gpu/msm/adreno_a5xx.c b/drivers/gpu/msm/adreno_a5xx.c index 410662612246..283ba6e447cb 100644 --- a/drivers/gpu/msm/adreno_a5xx.c +++ b/drivers/gpu/msm/adreno_a5xx.c @@ -1834,42 +1834,45 @@ static void a540_lm_init(struct adreno_device *adreno_dev) { struct kgsl_device *device = KGSL_DEVICE(adreno_dev); uint32_t agc_lm_config = - AGC_LM_CONFIG_ENABLE_GPMU_ADAPTIVE | AGC_THROTTLE_SEL_DCS; + ((ADRENO_CHIPID_PATCH(adreno_dev->chipid) | 0x3) + << AGC_GPU_VERSION_SHIFT); unsigned int r, i; - if (!lm_on(adreno_dev)) - return; - - agc_lm_config |= ((ADRENO_CHIPID_PATCH(adreno_dev->chipid) | 0x3) - << AGC_GPU_VERSION_SHIFT); + if (lm_on(adreno_dev)) { + agc_lm_config |= + AGC_LM_CONFIG_ENABLE_GPMU_ADAPTIVE | + AGC_THROTTLE_SEL_DCS; - kgsl_regread(device, A5XX_GPMU_TEMP_SENSOR_CONFIG, &r); - if (r & GPMU_BCL_ENABLED) - agc_lm_config |= AGC_BCL_ENABLED; + kgsl_regread(device, A5XX_GPMU_TEMP_SENSOR_CONFIG, &r); + if (r & GPMU_BCL_ENABLED) + agc_lm_config |= AGC_BCL_ENABLED; - if (r & GPMU_LLM_ENABLED) - agc_lm_config |= AGC_LLM_ENABLED; + if (r & GPMU_LLM_ENABLED) + agc_lm_config |= AGC_LLM_ENABLED; - if ((r & GPMU_ISENSE_STATUS) == GPMU_ISENSE_END_POINT_CAL_ERR) { - KGSL_CORE_ERR("GPMU: ISENSE end point calibration failure\n"); - agc_lm_config |= AGC_LM_CONFIG_ENABLE_ERROR; - goto start_agc; - } + if ((r & GPMU_ISENSE_STATUS) == GPMU_ISENSE_END_POINT_CAL_ERR) { + KGSL_CORE_ERR( + "GPMU: ISENSE end point calibration failure\n"); + agc_lm_config |= AGC_LM_CONFIG_ENABLE_ERROR; + goto start_agc; + } - if (!isense_enable(adreno_dev)) { - agc_lm_config |= AGC_LM_CONFIG_ENABLE_ERROR; - goto start_agc; - } + if (!isense_enable(adreno_dev)) { + agc_lm_config |= AGC_LM_CONFIG_ENABLE_ERROR; + goto start_agc; + } - for (i = 0; i < AMP_CALIBRATION_RETRY_CNT; i++) - if (isense_cot(adreno_dev)) - cpu_relax(); - else - break; + for (i = 0; i < AMP_CALIBRATION_RETRY_CNT; i++) { + if (isense_cot(adreno_dev)) + cpu_relax(); + else + break; + } - if (i == AMP_CALIBRATION_RETRY_CNT) { - KGSL_CORE_ERR("GPMU: ISENSE cold trimming failure\n"); - agc_lm_config |= AGC_LM_CONFIG_ENABLE_ERROR; + if (i == AMP_CALIBRATION_RETRY_CNT) { + KGSL_CORE_ERR("GPMU: ISENSE cold trimming failure\n"); + agc_lm_config |= AGC_LM_CONFIG_ENABLE_ERROR; + } } start_agc: @@ -1891,7 +1894,8 @@ start_agc: kgsl_regwrite(device, A5XX_GPMU_GPMU_PWR_THRESHOLD, PWR_THRESHOLD_VALID | lm_limit(adreno_dev)); - wake_llm(adreno_dev); + if (lm_on(adreno_dev)) + wake_llm(adreno_dev); } -- cgit v1.2.3