summaryrefslogtreecommitdiff
path: root/drivers/gpu
diff options
context:
space:
mode:
authorOleg Perelet <operelet@codeaurora.org>2016-02-29 09:45:27 -0800
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-25 16:02:50 -0700
commitbcb441b2e2ab723fc0cede2aa8a6751677a32271 (patch)
tree59df46ac6ad6a6bfdcdec07f97a026c67463fae2 /drivers/gpu
parent5dda28c7bd1bb077ef36068950e7a3870ce35e7b (diff)
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 <operelet@codeaurora.org>
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/msm/adreno-gpulist.h2
-rw-r--r--drivers/gpu/msm/adreno_a5xx.c62
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);
}