summaryrefslogtreecommitdiffstats
path: root/drivers/gpu
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2015-10-23 10:36:27 +0100
committerEric Anholt <eric@anholt.net>2015-11-17 12:27:03 -0800
commitbf893acc1675516fabf238a5ee3b52859c5687dc (patch)
tree20c28ae1c025c05ed23e17bd559db8aa6c983d2c /drivers/gpu
parent36f4f69a092d766581f2442ddffea051e1ef464e (diff)
downloadop-kernel-dev-bf893acc1675516fabf238a5ee3b52859c5687dc.zip
op-kernel-dev-bf893acc1675516fabf238a5ee3b52859c5687dc.tar.gz
drm/vc4: Make sure that planes aren't scaled.
We would scan out the memory around them if an upscale was attempted, and would just scan out incorrectly for downscaling. Signed-off-by: Eric Anholt <eric@anholt.net>
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/drm/vc4/vc4_plane.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/gpu/drm/vc4/vc4_plane.c b/drivers/gpu/drm/vc4/vc4_plane.c
index 2db5092..887f3ca 100644
--- a/drivers/gpu/drm/vc4/vc4_plane.c
+++ b/drivers/gpu/drm/vc4/vc4_plane.c
@@ -157,6 +157,16 @@ static int vc4_plane_mode_set(struct drm_plane *plane,
int crtc_w = state->crtc_w;
int crtc_h = state->crtc_h;
+ if (state->crtc_w << 16 != state->src_w ||
+ state->crtc_h << 16 != state->src_h) {
+ /* We don't support scaling yet, which involves
+ * allocating the LBM memory for scaling temporary
+ * storage, and putting filter kernels in the HVS
+ * context.
+ */
+ return -EINVAL;
+ }
+
if (crtc_x < 0) {
offset += drm_format_plane_cpp(fb->pixel_format, 0) * -crtc_x;
crtc_w += crtc_x;
OpenPOWER on IntegriCloud