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
