[Intel-gfx] [PATCH] drm/i915/fbdev: Implement wrappers for callbacks used by fbcon

Thomas Zimmermann tzimmermann at suse.de
Tue Jan 24 12:27:32 UTC 2023


Hi

Am 24.01.23 um 10:10 schrieb Jouni Högander:
> After disconnecting damage worker from update logic our dirty callback
> is not called on fbcon events. This is causing problems to features
> (PSR, FBC, DRRS) relying on dirty callback getting called and breaking
> fb console when these features are in use.
> 
> Implement wrappers for callbacks used by fbcon and call our dirty
> callback in those.
> 
> Fixes: f231af498c29 ("drm/fb-helper: Disconnect damage worker from update logic")
> Cc: Ville Syrjälä <ville.syrjala at linux.intel.com>
> Cc: Thomas Zimmermann <tzimmermann at suse.de>
> Cc: Jani Nikula <jani.nikula at intel.com>
> Signed-off-by: Jouni Högander <jouni.hogander at intel.com>

This is the better solution wrt what fbdev wants.

Acked-by: Thomas Zimmermann <tzimmermann at suse.de>

Best regards
Thomas

> ---
>   drivers/gpu/drm/i915/display/intel_fbdev.c | 53 ++++++++++++++++++++--
>   1 file changed, 49 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_fbdev.c b/drivers/gpu/drm/i915/display/intel_fbdev.c
> index 19f3b5d92a55..b1653624552e 100644
> --- a/drivers/gpu/drm/i915/display/intel_fbdev.c
> +++ b/drivers/gpu/drm/i915/display/intel_fbdev.c
> @@ -77,6 +77,18 @@ static void intel_fbdev_invalidate(struct intel_fbdev *ifbdev)
>   	intel_frontbuffer_invalidate(to_frontbuffer(ifbdev), ORIGIN_CPU);
>   }
>   
> +static void intel_fbdev_dirty(struct fb_info *info)
> +{
> +	struct drm_fb_helper *helper = info->par;
> +
> +	/*
> +	 * Intel_fb dirty implementation doesn't use damage clips ->
> +	 * no need to pass them here
> +	 */
> +	if (helper->fb->funcs->dirty)
> +		helper->fb->funcs->dirty(helper->fb, NULL, 0, 0, NULL, 0);
> +}
> +
>   static int intel_fbdev_set_par(struct fb_info *info)
>   {
>   	struct drm_fb_helper *fb_helper = info->par;
> @@ -91,6 +103,39 @@ static int intel_fbdev_set_par(struct fb_info *info)
>   	return ret;
>   }
>   
> +static ssize_t intel_fbdev_write(struct fb_info *info, const char __user *buf,
> +				 size_t count, loff_t *ppos)
> +{
> +	int ret;
> +
> +	ret = drm_fb_helper_cfb_write(info, buf, count, ppos);
> +	if (ret > 0)
> +		intel_fbdev_dirty(info);
> +
> +	return ret;
> +}
> +
> +static void intel_fbdev_fillrect(struct fb_info *info,
> +				  const struct fb_fillrect *rect)
> +{
> +	drm_fb_helper_cfb_fillrect(info, rect);
> +	intel_fbdev_dirty(info);
> +}
> +
> +static void intel_fbdev_copyarea(struct fb_info *info,
> +				  const struct fb_copyarea *area)
> +{
> +	drm_fb_helper_cfb_copyarea(info, area);
> +	intel_fbdev_dirty(info);
> +}
> +
> +static void intel_fbdev_imageblit(struct fb_info *info,
> +				 const struct fb_image *image)
> +{
> +	drm_fb_helper_cfb_imageblit(info, image);
> +	intel_fbdev_dirty(info);
> +}
> +
>   static int intel_fbdev_blank(int blank, struct fb_info *info)
>   {
>   	struct drm_fb_helper *fb_helper = info->par;
> @@ -125,10 +170,10 @@ static const struct fb_ops intelfb_ops = {
>   	DRM_FB_HELPER_DEFAULT_OPS,
>   	.fb_set_par = intel_fbdev_set_par,
>   	.fb_read = drm_fb_helper_cfb_read,
> -	.fb_write = drm_fb_helper_cfb_write,
> -	.fb_fillrect = drm_fb_helper_cfb_fillrect,
> -	.fb_copyarea = drm_fb_helper_cfb_copyarea,
> -	.fb_imageblit = drm_fb_helper_cfb_imageblit,
> +	.fb_write = intel_fbdev_write,
> +	.fb_fillrect = intel_fbdev_fillrect,
> +	.fb_copyarea = intel_fbdev_copyarea,
> +	.fb_imageblit = intel_fbdev_imageblit,
>   	.fb_pan_display = intel_fbdev_pan_display,
>   	.fb_blank = intel_fbdev_blank,
>   };

-- 
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Maxfeldstr. 5, 90409 Nürnberg, Germany
(HRB 36809, AG Nürnberg)
Geschäftsführer: Ivo Totev
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature
Type: application/pgp-signature
Size: 840 bytes
Desc: OpenPGP digital signature
URL: <https://lists.freedesktop.org/archives/intel-gfx/attachments/20230124/39654ba4/attachment.sig>


More information about the Intel-gfx mailing list