aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/bcm27xx/patches-5.15/950-0564-drm-vc4-kms-Move-clock-request-to-our-HVS-state.patch
blob: 6ffe0f1e4141165071fd035691cbf49b189335e7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
From f7d98ba8c30bbc5b29bf740f28bf2daeeec09d2b Mon Sep 17 00:00:00 2001
From: Maxime Ripard <maxime@cerno.tech>
Date: Thu, 4 Nov 2021 14:04:37 +0100
Subject: [PATCH] drm/vc4: kms: Move clock request to our HVS state

Our current clock request has been stored so far on the main HVS
structure, but even though we shouldn't have two commits in parallel and
it shouldn't cause any functional change, the request itself is linked
to a given HVS state.

Move the request there to make a bit more sense.

Signed-off-by: Maxime Ripard <maxime@cerno.tech>
---
 drivers/gpu/drm/vc4/vc4_drv.h | 1 -
 drivers/gpu/drm/vc4/vc4_kms.c | 8 +++++---
 2 files changed, 5 insertions(+), 4 deletions(-)

--- a/drivers/gpu/drm/vc4/vc4_drv.h
+++ b/drivers/gpu/drm/vc4/vc4_drv.h
@@ -326,7 +326,6 @@ struct vc4_hvs {
 	u32 __iomem *dlist;
 
 	struct clk *core_clk;
-	struct clk_request *core_req;
 
 	/* Memory manager for CRTCs to allocate space in the display
 	 * list.  Units are dwords.
--- a/drivers/gpu/drm/vc4/vc4_kms.c
+++ b/drivers/gpu/drm/vc4/vc4_kms.c
@@ -40,6 +40,7 @@ static struct vc4_ctm_state *to_vc4_ctm_
 struct vc4_hvs_state {
 	struct drm_private_state base;
 	unsigned long core_clock_rate;
+	struct clk_request *core_req;
 
 	struct {
 		unsigned in_use: 1;
@@ -398,7 +399,8 @@ static void vc4_atomic_commit_tail(struc
 		 * And remove the previous one based on the HVS
 		 * requirements if any.
 		 */
-               clk_request_done(hvs->core_req);
+		clk_request_done(old_hvs_state->core_req);
+		old_hvs_state->core_req = NULL;
 	}
 
 	drm_atomic_helper_commit_modeset_disables(dev, state);
@@ -432,8 +434,8 @@ static void vc4_atomic_commit_tail(struc
 		 * Request a clock rate based on the current HVS
 		 * requirements.
 		 */
-		hvs->core_req = clk_request_start(hvs->core_clk,
-						  new_hvs_state->core_clock_rate);
+		new_hvs_state->core_req = clk_request_start(hvs->core_clk,
+							    new_hvs_state->core_clock_rate);
 
 		/* And drop the temporary request */
 		clk_request_done(core_req);