All of lore.kernel.org
 help / color / mirror / Atom feed
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Tomi Valkeinen <tomi.valkeinen@ti.com>
Cc: dri-devel@lists.freedesktop.org
Subject: Re: [PATCHv2 2/2] drm/omap: fix primary-plane's possible_crtcs
Date: Fri, 02 Dec 2016 16:16:23 +0200	[thread overview]
Message-ID: <7020038.B9AVUSTvni@avalon> (raw)
In-Reply-To: <1480687631-22196-2-git-send-email-tomi.valkeinen@ti.com>

Hi Tomi,

Thank you for the patch.

On Friday 02 Dec 2016 16:07:11 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.
> 
> This patch passes a possible_crtcs mask to plane init function so that
> we get correct possible_crtc.
> 
> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
> ---
> 
> v2: use correct possible_crtcs value
> 
>  drivers/gpu/drm/omapdrm/omap_drv.c   | 17 ++++++++++++-----
>  drivers/gpu/drm/omapdrm/omap_drv.h   |  3 ++-
>  drivers/gpu/drm/omapdrm/omap_plane.c |  6 +++---
>  3 files changed, 17 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/gpu/drm/omapdrm/omap_drv.c
> b/drivers/gpu/drm/omapdrm/omap_drv.c index 39c5312b466c..fdc83cbcde61
> 100644
> --- a/drivers/gpu/drm/omapdrm/omap_drv.c
> +++ b/drivers/gpu/drm/omapdrm/omap_drv.c
> @@ -267,13 +267,15 @@ static int omap_connect_dssdevs(void)
>  }
> 
>  static int omap_modeset_create_crtc(struct drm_device *dev, int id,
> -				    enum omap_channel channel)
> +				    enum omap_channel channel,
> +				    u32 possible_crtcs)
>  {
>  	struct omap_drm_private *priv = dev->dev_private;
>  	struct drm_plane *plane;
>  	struct drm_crtc *crtc;
> 
> -	plane = omap_plane_init(dev, id, DRM_PLANE_TYPE_PRIMARY);
> +	plane = omap_plane_init(dev, id, DRM_PLANE_TYPE_PRIMARY,
> +		possible_crtcs);
>  	if (IS_ERR(plane))
>  		return PTR_ERR(plane);

If you removed the priv->num_crtcs++ a bit below in this function...

> @@ -309,6 +311,7 @@ static int omap_modeset_init(struct drm_device *dev)
>  	int num_crtcs;
>  	int i, id = 0;
>  	int ret;
> +	u32 possible_crtcs;
> 
>  	drm_mode_config_init(dev);
> 
> @@ -325,6 +328,7 @@ static int omap_modeset_init(struct drm_device *dev)
>  	 * We use the num_crtc argument to limit the number of crtcs we 
create.
>  	 */
>  	num_crtcs = min3(num_crtc, num_mgrs, num_ovls);

and assigned priv->num_crtcs here and replaced the channel_used() function 
with a simple bitmask private to omap_modeset_init() you would end up with a 
much simpler implementation that wouldn't require passing possible_crtcs 
through a bunch of functions.

> +	possible_crtcs = (1 << num_crtcs) - 1;
> 
>  	dssdev = NULL;
> 
> @@ -388,7 +392,8 @@ static int omap_modeset_init(struct drm_device *dev)
>  		 * allocated crtc, we create a new crtc for it
>  		 */
>  		if (!channel_used(dev, channel)) {
> -			ret = omap_modeset_create_crtc(dev, id, channel);
> +			ret = omap_modeset_create_crtc(dev, id, channel,
> +				possible_crtcs);
>  			if (ret < 0) {
>  				dev_err(dev->dev,
>  					"could not create CRTC (channel 
%u)\n",
> @@ -418,7 +423,8 @@ static int omap_modeset_init(struct drm_device *dev)
>  			return -ENOMEM;
>  		}
> 
> -		ret = omap_modeset_create_crtc(dev, id, i);
> +		ret = omap_modeset_create_crtc(dev, id, i,
> +			possible_crtcs);
>  		if (ret < 0) {
>  			dev_err(dev->dev,
>  				"could not create CRTC (channel %u)\n", i);
> @@ -432,7 +438,8 @@ static int omap_modeset_init(struct drm_device *dev)
>  	for (; id < num_ovls; id++) {
>  		struct drm_plane *plane;
> 
> -		plane = omap_plane_init(dev, id, DRM_PLANE_TYPE_OVERLAY);
> +		plane = omap_plane_init(dev, id, DRM_PLANE_TYPE_OVERLAY,
> +			possible_crtcs);
>  		if (IS_ERR(plane))
>  			return PTR_ERR(plane);
> 
> diff --git a/drivers/gpu/drm/omapdrm/omap_drv.h
> b/drivers/gpu/drm/omapdrm/omap_drv.h index 4c51135eb9a6..7d9dd5400cef
> 100644
> --- a/drivers/gpu/drm/omapdrm/omap_drv.h
> +++ b/drivers/gpu/drm/omapdrm/omap_drv.h
> @@ -157,7 +157,8 @@ struct drm_crtc *omap_crtc_init(struct drm_device *dev,
>  int omap_crtc_wait_pending(struct drm_crtc *crtc);
> 
>  struct drm_plane *omap_plane_init(struct drm_device *dev,
> -		int id, enum drm_plane_type type);
> +		int id, enum drm_plane_type type,
> +		u32 possible_crtcs);
>  void omap_plane_install_properties(struct drm_plane *plane,
>  		struct drm_mode_object *obj);
> 
> diff --git a/drivers/gpu/drm/omapdrm/omap_plane.c
> b/drivers/gpu/drm/omapdrm/omap_plane.c index 9c43cb481e62..82b2c23d6769
> 100644
> --- a/drivers/gpu/drm/omapdrm/omap_plane.c
> +++ b/drivers/gpu/drm/omapdrm/omap_plane.c
> @@ -356,9 +356,9 @@ static const uint32_t error_irqs[] = {
> 
>  /* initialize plane */
>  struct drm_plane *omap_plane_init(struct drm_device *dev,
> -		int id, enum drm_plane_type type)
> +		int id, enum drm_plane_type type,
> +		u32 possible_crtcs)
>  {
> -	struct omap_drm_private *priv = dev->dev_private;
>  	struct drm_plane *plane;
>  	struct omap_plane *omap_plane;
>  	int ret;
> @@ -381,7 +381,7 @@ 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,
> +	ret = drm_universal_plane_init(dev, plane, possible_crtcs,
>  				       &omap_plane_funcs, omap_plane->formats,
>  				       omap_plane->nformats, type, NULL);
>  	if (ret < 0)

-- 
Regards,

Laurent Pinchart

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

  reply	other threads:[~2016-12-02 14:16 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-12-02 14:07 [PATCH 1/2] drm: fix possible_crtc's type Tomi Valkeinen
2016-12-02 14:07 ` [PATCHv2 2/2] drm/omap: fix primary-plane's possible_crtcs Tomi Valkeinen
2016-12-02 14:16   ` Laurent Pinchart [this message]
2016-12-02 14:22     ` Tomi Valkeinen
2016-12-02 15:42       ` Laurent Pinchart
2016-12-02 15:55         ` Tomi Valkeinen
2016-12-02 15:56           ` Laurent Pinchart
2016-12-08 11:37             ` Tomi Valkeinen
2016-12-02 14:12 ` [PATCH 1/2] drm: fix possible_crtc's type Laurent Pinchart
2016-12-02 14:12 ` Ville Syrjälä

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=7020038.B9AVUSTvni@avalon \
    --to=laurent.pinchart@ideasonboard.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=tomi.valkeinen@ti.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.