diff options
Diffstat (limited to 'target/linux/bcm27xx/patches-5.15/950-0617-drm-vc4-kms-Take-old-state-core-clock-rate-into-acco.patch')
-rw-r--r-- | target/linux/bcm27xx/patches-5.15/950-0617-drm-vc4-kms-Take-old-state-core-clock-rate-into-acco.patch | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/target/linux/bcm27xx/patches-5.15/950-0617-drm-vc4-kms-Take-old-state-core-clock-rate-into-acco.patch b/target/linux/bcm27xx/patches-5.15/950-0617-drm-vc4-kms-Take-old-state-core-clock-rate-into-acco.patch new file mode 100644 index 0000000000..8eb8067732 --- /dev/null +++ b/target/linux/bcm27xx/patches-5.15/950-0617-drm-vc4-kms-Take-old-state-core-clock-rate-into-acco.patch @@ -0,0 +1,38 @@ +From ae03b35cf2792e7c4cf55c44dc37322487b72d1d Mon Sep 17 00:00:00 2001 +From: Maxime Ripard <maxime@cerno.tech> +Date: Thu, 18 Nov 2021 14:04:00 +0100 +Subject: [PATCH] drm/vc4: kms: Take old state core clock rate into + account + +During a commit, the core clock, which feeds the HVS, needs to run at +a minimum of 500MHz. + +While doing that commit, we can also change the mode to one that +requires a higher core clock, so we take the core clock rate associated +to that new state into account for that boost. + +However, the old state also needs to be taken into account if it +requires a core clock higher that the new one and our 500MHz limit, +since it's still live in hardware at the beginning of our commit. + +Fixes: 16e101051f32 ("drm/vc4: Increase the core clock based on HVS load") +Signed-off-by: Maxime Ripard <maxime@cerno.tech> +--- + drivers/gpu/drm/vc4/vc4_kms.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +--- a/drivers/gpu/drm/vc4/vc4_kms.c ++++ b/drivers/gpu/drm/vc4/vc4_kms.c +@@ -390,9 +390,10 @@ static void vc4_atomic_commit_tail(struc + } + + if (vc4->hvs && vc4->hvs->hvs5) { ++ unsigned long state_rate = max(old_hvs_state->core_clock_rate, ++ new_hvs_state->core_clock_rate); + unsigned long core_rate = max_t(unsigned long, +- 500000000, +- new_hvs_state->core_clock_rate); ++ 500000000, state_rate); + + core_req = clk_request_start(hvs->core_clk, core_rate); + /* |