Skip to content

Commit f863e35

Browse files
committed
drm/vc4: Fix which value is being used for source image size.
This doesn't matter yet since we only allow 1:1 scaling, but the comment clearly says we should be using the source size. Signed-off-by: Eric Anholt <[email protected]>
1 parent fc2d6f1 commit f863e35

File tree

1 file changed

+14
-9
lines changed

1 file changed

+14
-9
lines changed

drivers/gpu/drm/vc4/vc4_plane.c

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ struct vc4_plane_state {
4747

4848
/* Clipped coordinates of the plane on the display. */
4949
int crtc_x, crtc_y, crtc_w, crtc_h;
50+
/* Clipped size of the area scanned from in the FB. */
51+
u32 src_w, src_h;
5052

5153
/* Offset to start scanning out from the start of the plane's
5254
* BO.
@@ -170,11 +172,6 @@ static int vc4_plane_setup_clipping_and_scaling(struct drm_plane_state *state)
170172

171173
vc4_state->offset = fb->offsets[0];
172174

173-
vc4_state->crtc_x = state->crtc_x;
174-
vc4_state->crtc_y = state->crtc_y;
175-
vc4_state->crtc_w = state->crtc_w;
176-
vc4_state->crtc_h = state->crtc_h;
177-
178175
if (state->crtc_w << 16 != state->src_w ||
179176
state->crtc_h << 16 != state->src_h) {
180177
/* We don't support scaling yet, which involves
@@ -185,17 +182,25 @@ static int vc4_plane_setup_clipping_and_scaling(struct drm_plane_state *state)
185182
return -EINVAL;
186183
}
187184

185+
vc4_state->src_w = state->src_w >> 16;
186+
vc4_state->src_h = state->src_h >> 16;
187+
188+
vc4_state->crtc_x = state->crtc_x;
189+
vc4_state->crtc_y = state->crtc_y;
190+
vc4_state->crtc_w = state->crtc_w;
191+
vc4_state->crtc_h = state->crtc_h;
192+
188193
if (vc4_state->crtc_x < 0) {
189194
vc4_state->offset += (drm_format_plane_cpp(fb->pixel_format,
190195
0) *
191196
-vc4_state->crtc_x);
192-
vc4_state->crtc_w += vc4_state->crtc_x;
197+
vc4_state->src_w += vc4_state->crtc_x;
193198
vc4_state->crtc_x = 0;
194199
}
195200

196201
if (vc4_state->crtc_y < 0) {
197202
vc4_state->offset += fb->pitches[0] * -vc4_state->crtc_y;
198-
vc4_state->crtc_h += vc4_state->crtc_y;
203+
vc4_state->src_h += vc4_state->crtc_y;
199204
vc4_state->crtc_y = 0;
200205
}
201206

@@ -244,8 +249,8 @@ static int vc4_plane_mode_set(struct drm_plane *plane,
244249
SCALER_POS2_ALPHA_MODE_PIPELINE :
245250
SCALER_POS2_ALPHA_MODE_FIXED,
246251
SCALER_POS2_ALPHA_MODE) |
247-
VC4_SET_FIELD(vc4_state->crtc_w, SCALER_POS2_WIDTH) |
248-
VC4_SET_FIELD(vc4_state->crtc_h, SCALER_POS2_HEIGHT));
252+
VC4_SET_FIELD(vc4_state->src_w, SCALER_POS2_WIDTH) |
253+
VC4_SET_FIELD(vc4_state->src_h, SCALER_POS2_HEIGHT));
249254

250255
/* Position Word 3: Context. Written by the HVS. */
251256
vc4_dlist_write(vc4_state, 0xc0c0c0c0);

0 commit comments

Comments
 (0)