All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] drm/fb-helper: Don't clobber the display palette when fbdev isn't bound
@ 2013-05-27 15:44 ville.syrjala
  2013-05-27 15:44 ` [PATCH 2/2] drm/fb-helper: Don't load the display palette if the CRTC is disabled ville.syrjala
  2013-05-27 15:50 ` [PATCH 1/2] drm/fb-helper: Don't clobber the display palette when fbdev isn't bound Daniel Vetter
  0 siblings, 2 replies; 5+ messages in thread
From: ville.syrjala @ 2013-05-27 15:44 UTC (permalink / raw)
  To: dri-devel

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Perform the drm_fb_helper_is_bound() check to avoid clobbering the
display palette of some other KMS client.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/drm_fb_helper.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
index b78cbe7..1b6ca23 100644
--- a/drivers/gpu/drm/drm_fb_helper.c
+++ b/drivers/gpu/drm/drm_fb_helper.c
@@ -626,12 +626,19 @@ static int setcolreg(struct drm_crtc *crtc, u16 red, u16 green,
 int drm_fb_helper_setcmap(struct fb_cmap *cmap, struct fb_info *info)
 {
 	struct drm_fb_helper *fb_helper = info->par;
+	struct drm_device *dev = fb_helper->dev;
 	struct drm_crtc_helper_funcs *crtc_funcs;
 	u16 *red, *green, *blue, *transp;
 	struct drm_crtc *crtc;
 	int i, j, rc = 0;
 	int start;
 
+	drm_modeset_lock_all(dev);
+	if (!drm_fb_helper_is_bound(fb_helper)) {
+		drm_modeset_unlock_all(dev);
+		return -EBUSY;
+	}
+
 	for (i = 0; i < fb_helper->crtc_count; i++) {
 		crtc = fb_helper->crtc_info[i].mode_set.crtc;
 		crtc_funcs = crtc->helper_private;
@@ -654,10 +661,12 @@ int drm_fb_helper_setcmap(struct fb_cmap *cmap, struct fb_info *info)
 
 			rc = setcolreg(crtc, hred, hgreen, hblue, start++, info);
 			if (rc)
-				return rc;
+				goto out;
 		}
 		crtc_funcs->load_lut(crtc);
 	}
+ out:
+	drm_modeset_unlock_all(dev);
 	return rc;
 }
 EXPORT_SYMBOL(drm_fb_helper_setcmap);
-- 
1.8.1.5

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

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 2/2] drm/fb-helper: Don't load the display palette if the CRTC is disabled
  2013-05-27 15:44 [PATCH 1/2] drm/fb-helper: Don't clobber the display palette when fbdev isn't bound ville.syrjala
@ 2013-05-27 15:44 ` ville.syrjala
  2013-05-27 15:51   ` Ville Syrjälä
  2013-05-27 15:54   ` Daniel Vetter
  2013-05-27 15:50 ` [PATCH 1/2] drm/fb-helper: Don't clobber the display palette when fbdev isn't bound Daniel Vetter
  1 sibling, 2 replies; 5+ messages in thread
From: ville.syrjala @ 2013-05-27 15:44 UTC (permalink / raw)
  To: dri-devel

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Often the hardware needs certain clocks running when accessing the
palette, so don't go poking at it if the CRTC is disabled. We still
call the fb_helper gamma_set hooks to update the driver's notion of
what the palette should contain, so that if/when CRTC gets enabled,
the driver will load the correct palette.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
The other option would of course to put the check into the load_lut
function itself. I don't really care which way we do it as long as
the check is somewhere...

 drivers/gpu/drm/drm_fb_helper.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
index 1b6ca23..4ecf128 100644
--- a/drivers/gpu/drm/drm_fb_helper.c
+++ b/drivers/gpu/drm/drm_fb_helper.c
@@ -663,7 +663,9 @@ int drm_fb_helper_setcmap(struct fb_cmap *cmap, struct fb_info *info)
 			if (rc)
 				goto out;
 		}
-		crtc_funcs->load_lut(crtc);
+
+		if (crtc->enabled)
+			crtc_funcs->load_lut(crtc);
 	}
  out:
 	drm_modeset_unlock_all(dev);
-- 
1.8.1.5

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

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH 1/2] drm/fb-helper: Don't clobber the display palette when fbdev isn't bound
  2013-05-27 15:44 [PATCH 1/2] drm/fb-helper: Don't clobber the display palette when fbdev isn't bound ville.syrjala
  2013-05-27 15:44 ` [PATCH 2/2] drm/fb-helper: Don't load the display palette if the CRTC is disabled ville.syrjala
@ 2013-05-27 15:50 ` Daniel Vetter
  1 sibling, 0 replies; 5+ messages in thread
From: Daniel Vetter @ 2013-05-27 15:50 UTC (permalink / raw)
  To: ville.syrjala; +Cc: dri-devel

On Mon, May 27, 2013 at 06:44:56PM +0300, ville.syrjala@linux.intel.com wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> 
> Perform the drm_fb_helper_is_bound() check to avoid clobbering the
> display palette of some other KMS client.
> 
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

You might want to mention that you're also fixing up the locking a bit ;-)
The lack of that would be much more obvious if the fbdev helper would use
the real kms gamma interface instead of it's own driver backdoor. But
that's a different patch to write.

Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> ---
>  drivers/gpu/drm/drm_fb_helper.c | 11 ++++++++++-
>  1 file changed, 10 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
> index b78cbe7..1b6ca23 100644
> --- a/drivers/gpu/drm/drm_fb_helper.c
> +++ b/drivers/gpu/drm/drm_fb_helper.c
> @@ -626,12 +626,19 @@ static int setcolreg(struct drm_crtc *crtc, u16 red, u16 green,
>  int drm_fb_helper_setcmap(struct fb_cmap *cmap, struct fb_info *info)
>  {
>  	struct drm_fb_helper *fb_helper = info->par;
> +	struct drm_device *dev = fb_helper->dev;
>  	struct drm_crtc_helper_funcs *crtc_funcs;
>  	u16 *red, *green, *blue, *transp;
>  	struct drm_crtc *crtc;
>  	int i, j, rc = 0;
>  	int start;
>  
> +	drm_modeset_lock_all(dev);
> +	if (!drm_fb_helper_is_bound(fb_helper)) {
> +		drm_modeset_unlock_all(dev);
> +		return -EBUSY;
> +	}
> +
>  	for (i = 0; i < fb_helper->crtc_count; i++) {
>  		crtc = fb_helper->crtc_info[i].mode_set.crtc;
>  		crtc_funcs = crtc->helper_private;
> @@ -654,10 +661,12 @@ int drm_fb_helper_setcmap(struct fb_cmap *cmap, struct fb_info *info)
>  
>  			rc = setcolreg(crtc, hred, hgreen, hblue, start++, info);
>  			if (rc)
> -				return rc;
> +				goto out;
>  		}
>  		crtc_funcs->load_lut(crtc);
>  	}
> + out:
> +	drm_modeset_unlock_all(dev);
>  	return rc;
>  }
>  EXPORT_SYMBOL(drm_fb_helper_setcmap);
> -- 
> 1.8.1.5
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel

-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 2/2] drm/fb-helper: Don't load the display palette if the CRTC is disabled
  2013-05-27 15:44 ` [PATCH 2/2] drm/fb-helper: Don't load the display palette if the CRTC is disabled ville.syrjala
@ 2013-05-27 15:51   ` Ville Syrjälä
  2013-05-27 15:54   ` Daniel Vetter
  1 sibling, 0 replies; 5+ messages in thread
From: Ville Syrjälä @ 2013-05-27 15:51 UTC (permalink / raw)
  To: dri-devel

On Mon, May 27, 2013 at 06:44:57PM +0300, ville.syrjala@linux.intel.com wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> 
> Often the hardware needs certain clocks running when accessing the
> palette, so don't go poking at it if the CRTC is disabled. We still
> call the fb_helper gamma_set hooks to update the driver's notion of
> what the palette should contain, so that if/when CRTC gets enabled,
> the driver will load the correct palette.
> 
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
> The other option would of course to put the check into the load_lut
> function itself. I don't really care which way we do it as long as
> the check is somewhere...

And I just realized we already have the check in i915 load_lut at least.
Not sure how I failed to notice it before. So feel free to ignore this
patch. Patch 1/2 still seems relevant though.

> 
>  drivers/gpu/drm/drm_fb_helper.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
> index 1b6ca23..4ecf128 100644
> --- a/drivers/gpu/drm/drm_fb_helper.c
> +++ b/drivers/gpu/drm/drm_fb_helper.c
> @@ -663,7 +663,9 @@ int drm_fb_helper_setcmap(struct fb_cmap *cmap, struct fb_info *info)
>  			if (rc)
>  				goto out;
>  		}
> -		crtc_funcs->load_lut(crtc);
> +
> +		if (crtc->enabled)
> +			crtc_funcs->load_lut(crtc);
>  	}
>   out:
>  	drm_modeset_unlock_all(dev);
> -- 
> 1.8.1.5

-- 
Ville Syrjälä
Intel OTC

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 2/2] drm/fb-helper: Don't load the display palette if the CRTC is disabled
  2013-05-27 15:44 ` [PATCH 2/2] drm/fb-helper: Don't load the display palette if the CRTC is disabled ville.syrjala
  2013-05-27 15:51   ` Ville Syrjälä
@ 2013-05-27 15:54   ` Daniel Vetter
  1 sibling, 0 replies; 5+ messages in thread
From: Daniel Vetter @ 2013-05-27 15:54 UTC (permalink / raw)
  To: ville.syrjala; +Cc: dri-devel

On Mon, May 27, 2013 at 06:44:57PM +0300, ville.syrjala@linux.intel.com wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> 
> Often the hardware needs certain clocks running when accessing the
> palette, so don't go poking at it if the CRTC is disabled. We still
> call the fb_helper gamma_set hooks to update the driver's notion of
> what the palette should contain, so that if/when CRTC gets enabled,
> the driver will load the correct palette.
> 
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
> The other option would of course to put the check into the load_lut
> function itself. I don't really care which way we do it as long as
> the check is somewhere...
> 
>  drivers/gpu/drm/drm_fb_helper.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
> index 1b6ca23..4ecf128 100644
> --- a/drivers/gpu/drm/drm_fb_helper.c
> +++ b/drivers/gpu/drm/drm_fb_helper.c
> @@ -663,7 +663,9 @@ int drm_fb_helper_setcmap(struct fb_cmap *cmap, struct fb_info *info)
>  			if (rc)
>  				goto out;
>  		}
> -		crtc_funcs->load_lut(crtc);
> +
> +		if (crtc->enabled)

I'd vote for if (crtc->enabled && crtc_funcs->load_lut) since a lot of kms
drivers only implement dummy ->load_lut functions.

Then please also throw a pile of driver patches on top to kill all the now
redundant crtc->enabled checks and all the dummy load_lut functions. With
that fixed this is

Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch>

> +			crtc_funcs->load_lut(crtc);
>  	}
>   out:
>  	drm_modeset_unlock_all(dev);
> -- 
> 1.8.1.5
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel

-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2013-05-27 15:54 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-05-27 15:44 [PATCH 1/2] drm/fb-helper: Don't clobber the display palette when fbdev isn't bound ville.syrjala
2013-05-27 15:44 ` [PATCH 2/2] drm/fb-helper: Don't load the display palette if the CRTC is disabled ville.syrjala
2013-05-27 15:51   ` Ville Syrjälä
2013-05-27 15:54   ` Daniel Vetter
2013-05-27 15:50 ` [PATCH 1/2] drm/fb-helper: Don't clobber the display palette when fbdev isn't bound Daniel Vetter

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.