diff mbox

[v2,05/29] atmel_lcdfb: use display information in info not in var for panning

Message ID 1308043507-11083-6-git-send-email-laurent.pinchart@ideasonboard.com (mailing list archive)
State Accepted
Commit 895607ec5c7d7b0d840416db6499f83a0ee187af
Headers show

Commit Message

Laurent Pinchart June 14, 2011, 9:24 a.m. UTC
We must not use any information in the passed var besides xoffset,
yoffset and vmode as otherwise applications might abuse it.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Cc: Nicolas Ferre <nicolas.ferre@atmel.com>
---
 drivers/video/atmel_lcdfb.c |   15 +++++++++------
 1 files changed, 9 insertions(+), 6 deletions(-)

Comments

Nicolas Ferre June 28, 2011, 8:10 a.m. UTC | #1
Laurent,

Le 14/06/2011 11:24, Laurent Pinchart :
> We must not use any information in the passed var besides xoffset,
> yoffset and vmode as otherwise applications might abuse it.
> 
> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> Cc: Nicolas Ferre <nicolas.ferre@atmel.com>
> ---
>  drivers/video/atmel_lcdfb.c |   15 +++++++++------
>  1 files changed, 9 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/video/atmel_lcdfb.c b/drivers/video/atmel_lcdfb.c
> index 4484c72..8b5d755 100644
> --- a/drivers/video/atmel_lcdfb.c
> +++ b/drivers/video/atmel_lcdfb.c
> @@ -39,7 +39,8 @@
>  					 | FBINFO_HWACCEL_YPAN)
>  
>  static inline void atmel_lcdfb_update_dma2d(struct atmel_lcdfb_info *sinfo,
> -					struct fb_var_screeninfo *var)
> +					struct fb_var_screeninfo *var,
> +					struct fb_info *info)
>  {
>  
>  }
> @@ -50,14 +51,16 @@ static inline void atmel_lcdfb_update_dma2d(struct atmel_lcdfb_info *sinfo,
>  					| FBINFO_HWACCEL_YPAN)
>  
>  static void atmel_lcdfb_update_dma2d(struct atmel_lcdfb_info *sinfo,
> -				     struct fb_var_screeninfo *var)
> +				     struct fb_var_screeninfo *var,
> +				     struct fb_info *info)
>  {
>  	u32 dma2dcfg;
>  	u32 pixeloff;
>  
> -	pixeloff = (var->xoffset * var->bits_per_pixel) & 0x1f;
> +	pixeloff = (var->xoffset * info->var.bits_per_pixel) & 0x1f;
>  
> -	dma2dcfg = ((var->xres_virtual - var->xres) * var->bits_per_pixel) / 8;
> +	dma2dcfg = (info-var.xres_virtual - info->var.xres)

------------------------^^^
Wolfram Sang identified this error: it cannot compile!
Thank you Wolfram.

> +		 * info->var.bits_per_pixel / 8;
>  	dma2dcfg |= pixeloff << ATMEL_LCDC_PIXELOFF_OFFSET;
>  	lcdc_writel(sinfo, ATMEL_LCDC_DMA2DCFG, dma2dcfg);
>  
> @@ -249,14 +252,14 @@ static void atmel_lcdfb_update_dma(struct fb_info *info,
>  	unsigned long dma_addr;
>  
>  	dma_addr = (fix->smem_start + var->yoffset * fix->line_length
> -		    + var->xoffset * var->bits_per_pixel / 8);
> +		    + var->xoffset * info->var.bits_per_pixel / 8);
>  
>  	dma_addr &= ~3UL;
>  
>  	/* Set framebuffer DMA base address and pixel offset */
>  	lcdc_writel(sinfo, ATMEL_LCDC_DMABADDR1, dma_addr);
>  
> -	atmel_lcdfb_update_dma2d(sinfo, var);
> +	atmel_lcdfb_update_dma2d(sinfo, var, info);
>  }
>  
>  static inline void atmel_lcdfb_free_video_memory(struct atmel_lcdfb_info *sinfo)


*When* the error will be corrected, you can submit it to linux-fbdev
with my:

Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>

Thanks, best regards,
Laurent Pinchart June 28, 2011, 9:09 a.m. UTC | #2
Hi Nicolas,

On Tuesday 28 June 2011 10:10:13 Nicolas Ferre wrote:
> Le 14/06/2011 11:24, Laurent Pinchart :
> > We must not use any information in the passed var besides xoffset,
> > yoffset and vmode as otherwise applications might abuse it.
> > 
> > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> > Cc: Nicolas Ferre <nicolas.ferre@atmel.com>
> > ---
> > 
> >  drivers/video/atmel_lcdfb.c |   15 +++++++++------
> >  1 files changed, 9 insertions(+), 6 deletions(-)
> > 
> > diff --git a/drivers/video/atmel_lcdfb.c b/drivers/video/atmel_lcdfb.c
> > index 4484c72..8b5d755 100644
> > --- a/drivers/video/atmel_lcdfb.c
> > +++ b/drivers/video/atmel_lcdfb.c
> > @@ -39,7 +39,8 @@
> > 
> >  					 | FBINFO_HWACCEL_YPAN)
> >  
> >  static inline void atmel_lcdfb_update_dma2d(struct atmel_lcdfb_info
> >  *sinfo,
> > 
> > -					struct fb_var_screeninfo *var)
> > +					struct fb_var_screeninfo *var,
> > +					struct fb_info *info)
> > 
> >  {
> >  
> >  }
> > 
> > @@ -50,14 +51,16 @@ static inline void atmel_lcdfb_update_dma2d(struct
> > atmel_lcdfb_info *sinfo,
> > 
> >  					| FBINFO_HWACCEL_YPAN)
> >  
> >  static void atmel_lcdfb_update_dma2d(struct atmel_lcdfb_info *sinfo,
> > 
> > -				     struct fb_var_screeninfo *var)
> > +				     struct fb_var_screeninfo *var,
> > +				     struct fb_info *info)
> > 
> >  {
> >  
> >  	u32 dma2dcfg;
> >  	u32 pixeloff;
> > 
> > -	pixeloff = (var->xoffset * var->bits_per_pixel) & 0x1f;
> > +	pixeloff = (var->xoffset * info->var.bits_per_pixel) & 0x1f;
> > 
> > -	dma2dcfg = ((var->xres_virtual - var->xres) * var->bits_per_pixel) / 8;
> > +	dma2dcfg = (info-var.xres_virtual - info->var.xres)
> 
> ------------------------^^^
> Wolfram Sang identified this error: it cannot compile!
> Thank you Wolfram.

Oops, sorry for that.

> > +		 * info->var.bits_per_pixel / 8;
> > 
> >  	dma2dcfg |= pixeloff << ATMEL_LCDC_PIXELOFF_OFFSET;
> >  	lcdc_writel(sinfo, ATMEL_LCDC_DMA2DCFG, dma2dcfg);
> > 
> > @@ -249,14 +252,14 @@ static void atmel_lcdfb_update_dma(struct fb_info
> > *info,
> > 
> >  	unsigned long dma_addr;
> >  	
> >  	dma_addr = (fix->smem_start + var->yoffset * fix->line_length
> > 
> > -		    + var->xoffset * var->bits_per_pixel / 8);
> > +		    + var->xoffset * info->var.bits_per_pixel / 8);
> > 
> >  	dma_addr &= ~3UL;
> >  	
> >  	/* Set framebuffer DMA base address and pixel offset */
> >  	lcdc_writel(sinfo, ATMEL_LCDC_DMABADDR1, dma_addr);
> > 
> > -	atmel_lcdfb_update_dma2d(sinfo, var);
> > +	atmel_lcdfb_update_dma2d(sinfo, var, info);
> > 
> >  }
> >  
> >  static inline void atmel_lcdfb_free_video_memory(struct atmel_lcdfb_info
> >  *sinfo)
> 
> *When* the error will be corrected, you can submit it to linux-fbdev
> with my:
> 
> Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>

Thank you. I will resubmit fixed patches with your ack.
Wolfram Sang June 28, 2011, 9:13 a.m. UTC | #3
> > ------------------------^^^
> > Wolfram Sang identified this error: it cannot compile!
> > Thank you Wolfram.
> 
> Oops, sorry for that.

Thanks for fixing the issue :)

> > *When* the error will be corrected, you can submit it to linux-fbdev
> > with my:
> > 
> > Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>
> 
> Thank you. I will resubmit fixed patches with your ack.

And my

Reviewed-by: Wolfram Sang <w.sang@pengutronix.de>
diff mbox

Patch

diff --git a/drivers/video/atmel_lcdfb.c b/drivers/video/atmel_lcdfb.c
index 4484c72..8b5d755 100644
--- a/drivers/video/atmel_lcdfb.c
+++ b/drivers/video/atmel_lcdfb.c
@@ -39,7 +39,8 @@ 
 					 | FBINFO_HWACCEL_YPAN)
 
 static inline void atmel_lcdfb_update_dma2d(struct atmel_lcdfb_info *sinfo,
-					struct fb_var_screeninfo *var)
+					struct fb_var_screeninfo *var,
+					struct fb_info *info)
 {
 
 }
@@ -50,14 +51,16 @@  static inline void atmel_lcdfb_update_dma2d(struct atmel_lcdfb_info *sinfo,
 					| FBINFO_HWACCEL_YPAN)
 
 static void atmel_lcdfb_update_dma2d(struct atmel_lcdfb_info *sinfo,
-				     struct fb_var_screeninfo *var)
+				     struct fb_var_screeninfo *var,
+				     struct fb_info *info)
 {
 	u32 dma2dcfg;
 	u32 pixeloff;
 
-	pixeloff = (var->xoffset * var->bits_per_pixel) & 0x1f;
+	pixeloff = (var->xoffset * info->var.bits_per_pixel) & 0x1f;
 
-	dma2dcfg = ((var->xres_virtual - var->xres) * var->bits_per_pixel) / 8;
+	dma2dcfg = (info-var.xres_virtual - info->var.xres)
+		 * info->var.bits_per_pixel / 8;
 	dma2dcfg |= pixeloff << ATMEL_LCDC_PIXELOFF_OFFSET;
 	lcdc_writel(sinfo, ATMEL_LCDC_DMA2DCFG, dma2dcfg);
 
@@ -249,14 +252,14 @@  static void atmel_lcdfb_update_dma(struct fb_info *info,
 	unsigned long dma_addr;
 
 	dma_addr = (fix->smem_start + var->yoffset * fix->line_length
-		    + var->xoffset * var->bits_per_pixel / 8);
+		    + var->xoffset * info->var.bits_per_pixel / 8);
 
 	dma_addr &= ~3UL;
 
 	/* Set framebuffer DMA base address and pixel offset */
 	lcdc_writel(sinfo, ATMEL_LCDC_DMABADDR1, dma_addr);
 
-	atmel_lcdfb_update_dma2d(sinfo, var);
+	atmel_lcdfb_update_dma2d(sinfo, var, info);
 }
 
 static inline void atmel_lcdfb_free_video_memory(struct atmel_lcdfb_info *sinfo)