[PATCH] drm/omap: fix primary-plane's possible_crtcs
Ville Syrjälä
ville.syrjala at linux.intel.com
Wed Nov 30 13:17:14 UTC 2016
On Wed, Nov 30, 2016 at 12:38:51PM +0200, Tomi Valkeinen wrote:
> We set the possible_crtc for all planes to "(1 << priv->num_crtcs) - 1",
> which is fine as the HW planes can be used fro all crtcs. However, when
> we're doing that, we are still incrementing 'num_crtcs', and we'll end
> up with bad possible_crtcs, preventing the use of the primary planes.
>
> We should have all crtcs in 'possible_crtc', but apparently it's not as
> easy to set as you would think. We create crtcs rather dynamically, and
> when creating the primary planes, we don't know how many crtcs we're
> going to have. This is mostly a problem with the way omapdrm creates
> crtcs and planes, and how it connects those to display outputs.
>
> So, this patch fixes the problem the easy way, and sets the
> possible_crtcs for primary planes only to the crtc in question, which in
> practice should cover all normal use cases.
>
> Signed-off-by: Tomi Valkeinen <tomi.valkeinen at ti.com>
> ---
> drivers/gpu/drm/omapdrm/omap_plane.c | 8 +++++++-
> 1 file changed, 7 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/omapdrm/omap_plane.c b/drivers/gpu/drm/omapdrm/omap_plane.c
> index 9c43cb481e62..fc1822870b26 100644
> --- a/drivers/gpu/drm/omapdrm/omap_plane.c
> +++ b/drivers/gpu/drm/omapdrm/omap_plane.c
> @@ -361,6 +361,7 @@ struct drm_plane *omap_plane_init(struct drm_device *dev,
> struct omap_drm_private *priv = dev->dev_private;
> struct drm_plane *plane;
> struct omap_plane *omap_plane;
> + unsigned long possible_crtcs;
Drive-by-comment:
unsigned long? Hmm. Apparently that is what this guy wants, and then
it proceeds to stuff it into a u32. Maybe someone could fix the
function to take a u32 instead...
> int ret;
>
> DBG("%s: type=%d", plane_names[id], type);
> @@ -381,7 +382,12 @@ struct drm_plane *omap_plane_init(struct drm_device *dev,
> omap_plane->error_irq.irq = omap_plane_error_irq;
> omap_irq_register(dev, &omap_plane->error_irq);
>
> - ret = drm_universal_plane_init(dev, plane, (1 << priv->num_crtcs) - 1,
> + if (type == DRM_PLANE_TYPE_PRIMARY)
> + possible_crtcs = 1 << id;
> + else
> + possible_crtcs = (1 << priv->num_crtcs) - 1;
> +
> + ret = drm_universal_plane_init(dev, plane, possible_crtcs,
> &omap_plane_funcs, omap_plane->formats,
> omap_plane->nformats, type, NULL);
> if (ret < 0)
> --
> 2.7.4
>
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
--
Ville Syrjälä
Intel OTC
More information about the dri-devel
mailing list