[PATCH 3/3] UBUNTU: [Upstream] drm/nouveau: Fix fbcon corruption with font width not divisible by 8

Stefan Bader stefan.bader at canonical.com
Mon Mar 29 13:12:22 UTC 2010


Actually I was probably mislead by upstream. These patches are not in Linus tree
as far as I can see. So they should get sent there as soon as possible (with CC:
stable at kernel.org in the s-o-b area).
For this one, changing to the ALIGN macro seems simple enough. Moving the later
code and changing the arguments, we have to take your word about it being tested.

Chris Halse Rogers wrote:
> From: Christopher James Halse Rogers <raof at ubuntu.com>
> 
> NV50 is nice and has a switch that autoaligns stuff for us. Pre-NV50, we need to align input bitmap width manually.
> 
> BugLink: http://bugs.launchpad.net/bugs/544739
> OriginalLocation: http://cgit.freedesktop.org/nouveau/linux-2.6/commit/?id=8af16649e7290eb361e9cf6724d050150e16a993
> 
> Signed-off-by: Marcin Ko�cielnicki <koriakin at 0x04.net>
> Signed-off-by: Francisco Jerez <currojerez at riseup.net>
> Signed-off-by: Christopher James Halse Rogers <raof at ubuntu.com>
Acked-by: Stefan Bader <stefan.bader at canonical.com>
> ---
>  drivers/gpu/drm/nouveau/nv04_fbcon.c |    6 +++---
>  drivers/gpu/drm/nouveau/nv50_fbcon.c |    2 +-
>  2 files changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/gpu/drm/nouveau/nv04_fbcon.c b/drivers/gpu/drm/nouveau/nv04_fbcon.c
> index fd01caa..813b25c 100644
> --- a/drivers/gpu/drm/nouveau/nv04_fbcon.c
> +++ b/drivers/gpu/drm/nouveau/nv04_fbcon.c
> @@ -118,8 +118,8 @@ nv04_fbcon_imageblit(struct fb_info *info, const struct fb_image *image)
>  		return;
>  	}
>  
> -	width = (image->width + 31) & ~31;
> -	dsize = (width * image->height) >> 5;
> +	width = ALIGN(image->width, 8);
> +	dsize = ALIGN(width * image->height, 32) >> 5;
>  
>  	if (info->fix.visual == FB_VISUAL_TRUECOLOR ||
>  	    info->fix.visual == FB_VISUAL_DIRECTCOLOR) {
> @@ -136,8 +136,8 @@ nv04_fbcon_imageblit(struct fb_info *info, const struct fb_image *image)
>  			 ((image->dx + image->width) & 0xffff));
>  	OUT_RING(chan, bg);
>  	OUT_RING(chan, fg);
> -	OUT_RING(chan, (image->height << 16) | image->width);
>  	OUT_RING(chan, (image->height << 16) | width);
> +	OUT_RING(chan, (image->height << 16) | image->width);
>  	OUT_RING(chan, (image->dy << 16) | (image->dx & 0xffff));
>  
>  	while (dsize) {
> diff --git a/drivers/gpu/drm/nouveau/nv50_fbcon.c b/drivers/gpu/drm/nouveau/nv50_fbcon.c
> index 0f57cdf..195c866 100644
> --- a/drivers/gpu/drm/nouveau/nv50_fbcon.c
> +++ b/drivers/gpu/drm/nouveau/nv50_fbcon.c
> @@ -233,7 +233,7 @@ nv50_fbcon_accel_init(struct fb_info *info)
>  	BEGIN_RING(chan, NvSub2D, 0x0808, 3);
>  	OUT_RING(chan, 0);
>  	OUT_RING(chan, 0);
> -	OUT_RING(chan, 0);
> +	OUT_RING(chan, 1);
>  	BEGIN_RING(chan, NvSub2D, 0x081c, 1);
>  	OUT_RING(chan, 1);
>  	BEGIN_RING(chan, NvSub2D, 0x0840, 4);
> 






More information about the kernel-team mailing list