Hi Tomi, Thank you for the patch. On Friday 19 February 2016 11:48:08 Tomi Valkeinen wrote: > omapdrm is missing a check on the validity of the rotation property. > This leads to omapdrm possibly trying to use rotation on non-rotateable > framebuffer, which causes the overlay setup to fail. > > This patch adds the necessary check to omap_plane_atomic_check(). > > Signed-off-by: Tomi Valkeinen <tomi.valkeinen@xxxxxx> Reviewed-by: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx> > --- > drivers/gpu/drm/omapdrm/omap_drv.h | 1 + > drivers/gpu/drm/omapdrm/omap_fb.c | 8 ++++++++ > drivers/gpu/drm/omapdrm/omap_plane.c | 6 ++++++ > 3 files changed, 15 insertions(+) > > diff --git a/drivers/gpu/drm/omapdrm/omap_drv.h > b/drivers/gpu/drm/omapdrm/omap_drv.h index c077367dcb1a..16c3eeeae668 > 100644 > --- a/drivers/gpu/drm/omapdrm/omap_drv.h > +++ b/drivers/gpu/drm/omapdrm/omap_drv.h > @@ -189,6 +189,7 @@ void omap_framebuffer_update_scanout(struct > drm_framebuffer *fb, struct omap_drm_window *win, struct omap_overlay_info > *info); > struct drm_connector *omap_framebuffer_get_next_connector( > struct drm_framebuffer *fb, struct drm_connector *from); > +bool omap_framebuffer_supports_rotation(struct drm_framebuffer *fb); > > void omap_gem_init(struct drm_device *dev); > void omap_gem_deinit(struct drm_device *dev); > diff --git a/drivers/gpu/drm/omapdrm/omap_fb.c > b/drivers/gpu/drm/omapdrm/omap_fb.c index 481512db2656..610962396eb0 100644 > --- a/drivers/gpu/drm/omapdrm/omap_fb.c > +++ b/drivers/gpu/drm/omapdrm/omap_fb.c > @@ -145,6 +145,14 @@ static uint32_t get_linear_addr(struct plane *plane, > return plane->paddr + offset; > } > > +bool omap_framebuffer_supports_rotation(struct drm_framebuffer *fb) > +{ > + struct omap_framebuffer *omap_fb = to_omap_framebuffer(fb); > + struct plane *plane = &omap_fb->planes[0]; > + > + return omap_gem_flags(plane->bo) & OMAP_BO_TILED; > +} > + > /* update ovl info for scanout, handles cases of multi-planar fb's, etc. > */ > void omap_framebuffer_update_scanout(struct drm_framebuffer *fb, > diff --git a/drivers/gpu/drm/omapdrm/omap_plane.c > b/drivers/gpu/drm/omapdrm/omap_plane.c index d75b197eff46..93ee538a99f5 > 100644 > --- a/drivers/gpu/drm/omapdrm/omap_plane.c > +++ b/drivers/gpu/drm/omapdrm/omap_plane.c > @@ -177,6 +177,12 @@ static int omap_plane_atomic_check(struct drm_plane > *plane, if (state->crtc_y + state->crtc_h > > crtc_state->adjusted_mode.vdisplay) return -EINVAL; > > + if (state->fb) { > + if (state->rotation != BIT(DRM_ROTATE_0) && > + !omap_framebuffer_supports_rotation(state->fb)) > + return -EINVAL; > + } > + > return 0; > } -- Regards, Laurent Pinchart _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel