From: Fabricio Akio <[email protected]>

The A508, A509 and A512 took the 250 ms runtime-PM autosuspend delay
of the A530, raised there because quickly cycling that GPU's power
hung the system. Qualcomm's downstream driver powers these GPUs down
after 80 ms idle, qcom,idle-timeout, on SDM630, SDM636 and SDM660
alike.

Use 80 ms for these three, so the GPU powers down, and releases its
CPU latency request, sooner after its last work.

Signed-off-by: Fabricio Akio <[email protected]>
---
The value is downstream's idle timeout for these SoCs:
https://github.com/LineageOS/android_kernel_motorola_msm8998/blob/ce9ea8f125c7302ae9b2fec84f23a69271e957c3/arch/arm/boot/dts/qcom/sdm630-gpu.dtsi#L71
https://github.com/LineageOS/android_kernel_motorola_msm8998/blob/ce9ea8f125c7302ae9b2fec84f23a69271e957c3/arch/arm/boot/dts/qcom/sdm660-gpu.dtsi#L73
SDM636 includes sdm660.dtsi:
https://github.com/LineageOS/android_kernel_motorola_msm8998/blob/ce9ea8f125c7302ae9b2fec84f23a69271e957c3/arch/arm/boot/dts/qcom/sdm636.dtsi#L13
Downstream reads it at probe, restarts the idle timer when the last
work completes, and slumbers the GPU when it fires, dropping its CPU
latency request:
https://github.com/LineageOS/android_kernel_motorola_msm8998/blob/ce9ea8f125c7302ae9b2fec84f23a69271e957c3/drivers/gpu/msm/adreno.c#L901
https://github.com/LineageOS/android_kernel_motorola_msm8998/blob/ce9ea8f125c7302ae9b2fec84f23a69271e957c3/drivers/gpu/msm/kgsl_pwrctrl.c#L2981
https://github.com/LineageOS/android_kernel_motorola_msm8998/blob/ce9ea8f125c7302ae9b2fec84f23a69271e957c3/drivers/gpu/msm/kgsl_pwrctrl.c#L2467
https://github.com/LineageOS/android_kernel_motorola_msm8998/blob/ce9ea8f125c7302ae9b2fec84f23a69271e957c3/drivers/gpu/msm/kgsl_pwrctrl.c#L2753

Tested on an A508 with the previous patch: 1381 GPU power cycles at
gaps from 50 ms to 3 s without a fault. The A509 and A512 values are
downstream's for SDM636 and SDM660; tested on an A508 only.
---
 drivers/gpu/drm/msm/adreno/a5xx_catalog.c | 18 +++---------------
 1 file changed, 3 insertions(+), 15 deletions(-)

diff --git a/drivers/gpu/drm/msm/adreno/a5xx_catalog.c 
b/drivers/gpu/drm/msm/adreno/a5xx_catalog.c
index 7b261f045eae..254bae06af39 100644
--- a/drivers/gpu/drm/msm/adreno/a5xx_catalog.c
+++ b/drivers/gpu/drm/msm/adreno/a5xx_catalog.c
@@ -50,11 +50,7 @@ static const struct adreno_info a5xx_gpus[] = {
                        [ADRENO_FW_PFP] = "a530_pfp.fw",
                },
                .gmem = (SZ_128K + SZ_8K),
-               /*
-                * Increase inactive period to 250 to avoid bouncing
-                * the GDSC which appears to make it grumpy
-                */
-               .inactive_period = 250,
+               .inactive_period = 80,
                .cpu_latency_us = 424,
                .quirks = ADRENO_QUIRK_LMLOADKILL_DISABLE,
                .funcs = &a5xx_gpu_funcs,
@@ -68,11 +64,7 @@ static const struct adreno_info a5xx_gpus[] = {
                        [ADRENO_FW_PFP] = "a530_pfp.fw",
                },
                .gmem = (SZ_256K + SZ_16K),
-               /*
-                * Increase inactive period to 250 to avoid bouncing
-                * the GDSC which appears to make it grumpy
-                */
-               .inactive_period = 250,
+               .inactive_period = 80,
                .cpu_latency_us = 518,
                .quirks = ADRENO_QUIRK_LMLOADKILL_DISABLE,
                .funcs = &a5xx_gpu_funcs,
@@ -102,11 +94,7 @@ static const struct adreno_info a5xx_gpus[] = {
                        [ADRENO_FW_PFP] = "a530_pfp.fw",
                },
                .gmem = (SZ_256K + SZ_16K),
-               /*
-                * Increase inactive period to 250 to avoid bouncing
-                * the GDSC which appears to make it grumpy
-                */
-               .inactive_period = 250,
+               .inactive_period = 80,
                .cpu_latency_us = 518,
                .quirks = ADRENO_QUIRK_LMLOADKILL_DISABLE,
                .funcs = &a5xx_gpu_funcs,

-- 
2.56.0


Reply via email to