diff options
author | Daniel Vetter <daniel.vetter@ffwll.ch> | 2016-06-02 09:41:53 -0400 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2016-06-02 09:42:52 -0400 |
commit | 8d76b79faaaefb1bd16a56dc66f799c9afd82c6f (patch) | |
tree | 39be737315d42730a12f664139d51ce011933c3e | |
parent | 831655e52e52d2b13aae6988935cce63830b1b4f (diff) |
drm/msm: Use for_each_*_in_state
We want to hide drm_atomic_state internals
v2: Review from Maarten:
- remove whitespace change in rockchip driver that slipped in.
- use drm_crtc_mask insted of open-coding it.
Cc: Rob Clark <robdclark@gmail.com>
Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1464818821-5736-4-git-send-email-daniel.vetter@ffwll.ch
-rw-r--r-- | drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.c | 20 | ||||
-rw-r--r-- | drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c | 12 | ||||
-rw-r--r-- | drivers/gpu/drm/msm/msm_atomic.c | 37 |
3 files changed, 23 insertions, 46 deletions
diff --git a/drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.c b/drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.c index 67442d50a6c2..f145d256e332 100644 --- a/drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.c +++ b/drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.c | |||
@@ -106,31 +106,27 @@ out: | |||
106 | static void mdp4_prepare_commit(struct msm_kms *kms, struct drm_atomic_state *state) | 106 | static void mdp4_prepare_commit(struct msm_kms *kms, struct drm_atomic_state *state) |
107 | { | 107 | { |
108 | struct mdp4_kms *mdp4_kms = to_mdp4_kms(to_mdp_kms(kms)); | 108 | struct mdp4_kms *mdp4_kms = to_mdp4_kms(to_mdp_kms(kms)); |
109 | int i, ncrtcs = state->dev->mode_config.num_crtc; | 109 | int i; |
110 | struct drm_crtc *crtc; | ||
111 | struct drm_crtc_state *crtc_state; | ||
110 | 112 | ||
111 | mdp4_enable(mdp4_kms); | 113 | mdp4_enable(mdp4_kms); |
112 | 114 | ||
113 | /* see 119ecb7fd */ | 115 | /* see 119ecb7fd */ |
114 | for (i = 0; i < ncrtcs; i++) { | 116 | for_each_crtc_in_state(state, crtc, crtc_state, i) |
115 | struct drm_crtc *crtc = state->crtcs[i]; | ||
116 | if (!crtc) | ||
117 | continue; | ||
118 | drm_crtc_vblank_get(crtc); | 117 | drm_crtc_vblank_get(crtc); |
119 | } | ||
120 | } | 118 | } |
121 | 119 | ||
122 | static void mdp4_complete_commit(struct msm_kms *kms, struct drm_atomic_state *state) | 120 | static void mdp4_complete_commit(struct msm_kms *kms, struct drm_atomic_state *state) |
123 | { | 121 | { |
124 | struct mdp4_kms *mdp4_kms = to_mdp4_kms(to_mdp_kms(kms)); | 122 | struct mdp4_kms *mdp4_kms = to_mdp4_kms(to_mdp_kms(kms)); |
125 | int i, ncrtcs = state->dev->mode_config.num_crtc; | 123 | int i; |
124 | struct drm_crtc *crtc; | ||
125 | struct drm_crtc_state *crtc_state; | ||
126 | 126 | ||
127 | /* see 119ecb7fd */ | 127 | /* see 119ecb7fd */ |
128 | for (i = 0; i < ncrtcs; i++) { | 128 | for_each_crtc_in_state(state, crtc, crtc_state, i) |
129 | struct drm_crtc *crtc = state->crtcs[i]; | ||
130 | if (!crtc) | ||
131 | continue; | ||
132 | drm_crtc_vblank_put(crtc); | 129 | drm_crtc_vblank_put(crtc); |
133 | } | ||
134 | 130 | ||
135 | mdp4_disable(mdp4_kms); | 131 | mdp4_disable(mdp4_kms); |
136 | } | 132 | } |
diff --git a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c index 484b4d15e71d..f0c285b1c027 100644 --- a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c +++ b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c | |||
@@ -78,17 +78,11 @@ static void mdp5_complete_commit(struct msm_kms *kms, struct drm_atomic_state *s | |||
78 | { | 78 | { |
79 | int i; | 79 | int i; |
80 | struct mdp5_kms *mdp5_kms = to_mdp5_kms(to_mdp_kms(kms)); | 80 | struct mdp5_kms *mdp5_kms = to_mdp5_kms(to_mdp_kms(kms)); |
81 | int nplanes = mdp5_kms->dev->mode_config.num_total_plane; | 81 | struct drm_plane *plane; |
82 | 82 | struct drm_plane_state *plane_state; | |
83 | for (i = 0; i < nplanes; i++) { | ||
84 | struct drm_plane *plane = state->planes[i]; | ||
85 | struct drm_plane_state *plane_state = state->plane_states[i]; | ||
86 | |||
87 | if (!plane) | ||
88 | continue; | ||
89 | 83 | ||
84 | for_each_plane_in_state(state, plane, plane_state, i) | ||
90 | mdp5_plane_complete_commit(plane, plane_state); | 85 | mdp5_plane_complete_commit(plane, plane_state); |
91 | } | ||
92 | 86 | ||
93 | mdp5_disable(mdp5_kms); | 87 | mdp5_disable(mdp5_kms); |
94 | } | 88 | } |
diff --git a/drivers/gpu/drm/msm/msm_atomic.c b/drivers/gpu/drm/msm/msm_atomic.c index e3892c263f27..8c3b463620bd 100644 --- a/drivers/gpu/drm/msm/msm_atomic.c +++ b/drivers/gpu/drm/msm/msm_atomic.c | |||
@@ -84,17 +84,12 @@ static void msm_atomic_wait_for_commit_done(struct drm_device *dev, | |||
84 | struct drm_atomic_state *old_state) | 84 | struct drm_atomic_state *old_state) |
85 | { | 85 | { |
86 | struct drm_crtc *crtc; | 86 | struct drm_crtc *crtc; |
87 | struct drm_crtc_state *crtc_state; | ||
87 | struct msm_drm_private *priv = old_state->dev->dev_private; | 88 | struct msm_drm_private *priv = old_state->dev->dev_private; |
88 | struct msm_kms *kms = priv->kms; | 89 | struct msm_kms *kms = priv->kms; |
89 | int ncrtcs = old_state->dev->mode_config.num_crtc; | ||
90 | int i; | 90 | int i; |
91 | 91 | ||
92 | for (i = 0; i < ncrtcs; i++) { | 92 | for_each_crtc_in_state(old_state, crtc, crtc_state, i) { |
93 | crtc = old_state->crtcs[i]; | ||
94 | |||
95 | if (!crtc) | ||
96 | continue; | ||
97 | |||
98 | if (!crtc->state->enable) | 93 | if (!crtc->state->enable) |
99 | continue; | 94 | continue; |
100 | 95 | ||
@@ -192,9 +187,11 @@ int msm_atomic_commit(struct drm_device *dev, | |||
192 | struct drm_atomic_state *state, bool nonblock) | 187 | struct drm_atomic_state *state, bool nonblock) |
193 | { | 188 | { |
194 | struct msm_drm_private *priv = dev->dev_private; | 189 | struct msm_drm_private *priv = dev->dev_private; |
195 | int nplanes = dev->mode_config.num_total_plane; | ||
196 | int ncrtcs = dev->mode_config.num_crtc; | ||
197 | struct msm_commit *c; | 190 | struct msm_commit *c; |
191 | struct drm_crtc *crtc; | ||
192 | struct drm_crtc_state *crtc_state; | ||
193 | struct drm_plane *plane; | ||
194 | struct drm_plane_state *plane_state; | ||
198 | int i, ret; | 195 | int i, ret; |
199 | 196 | ||
200 | ret = drm_atomic_helper_prepare_planes(dev, state); | 197 | ret = drm_atomic_helper_prepare_planes(dev, state); |
@@ -210,28 +207,18 @@ int msm_atomic_commit(struct drm_device *dev, | |||
210 | /* | 207 | /* |
211 | * Figure out what crtcs we have: | 208 | * Figure out what crtcs we have: |
212 | */ | 209 | */ |
213 | for (i = 0; i < ncrtcs; i++) { | 210 | for_each_crtc_in_state(state, crtc, crtc_state, i) |
214 | struct drm_crtc *crtc = state->crtcs[i]; | 211 | c->crtc_mask |= drm_crtc_mask(crtc); |
215 | if (!crtc) | ||
216 | continue; | ||
217 | c->crtc_mask |= (1 << drm_crtc_index(crtc)); | ||
218 | } | ||
219 | 212 | ||
220 | /* | 213 | /* |
221 | * Figure out what fence to wait for: | 214 | * Figure out what fence to wait for: |
222 | */ | 215 | */ |
223 | for (i = 0; i < nplanes; i++) { | 216 | for_each_plane_in_state(state, plane, plane_state, i) { |
224 | struct drm_plane *plane = state->planes[i]; | 217 | if ((plane->state->fb != plane_state->fb) && plane_state->fb) { |
225 | struct drm_plane_state *new_state = state->plane_states[i]; | 218 | struct drm_gem_object *obj = msm_framebuffer_bo(plane_state->fb, 0); |
226 | |||
227 | if (!plane) | ||
228 | continue; | ||
229 | |||
230 | if ((plane->state->fb != new_state->fb) && new_state->fb) { | ||
231 | struct drm_gem_object *obj = msm_framebuffer_bo(new_state->fb, 0); | ||
232 | struct msm_gem_object *msm_obj = to_msm_bo(obj); | 219 | struct msm_gem_object *msm_obj = to_msm_bo(obj); |
233 | 220 | ||
234 | new_state->fence = reservation_object_get_excl_rcu(msm_obj->resv); | 221 | plane_state->fence = reservation_object_get_excl_rcu(msm_obj->resv); |
235 | } | 222 | } |
236 | } | 223 | } |
237 | 224 | ||