Commit 86718782 authored by Thomas Zimmermann's avatar Thomas Zimmermann

fbdev/metronomefb: Use struct fb_info.screen_buffer

Use info->screen_buffer when reading and writing framebuffers in
system memory. It's the correct pointer for this address space.

The struct fb_info has a union to store the framebuffer memory. This can
either be info->screen_base if the framebuffer is stored in I/O memory,
or info->screen_buffer if the framebuffer is stored in system memory.

As the driver operates on the latter address space, it is wrong to use
.screen_base and .screen_buffer must be used instead. This also gets
rid of casting needed due to not using the correct data type.
Signed-off-by: default avatarThomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: default avatarJavier Martinez Canillas <javierm@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230428122452.4856-9-tzimmermann@suse.de
parent 3907e683
...@@ -438,7 +438,7 @@ static void metronomefb_dpy_update(struct metronomefb_par *par) ...@@ -438,7 +438,7 @@ static void metronomefb_dpy_update(struct metronomefb_par *par)
{ {
int fbsize; int fbsize;
u16 cksum; u16 cksum;
unsigned char *buf = (unsigned char __force *)par->info->screen_base; unsigned char *buf = par->info->screen_buffer;
fbsize = par->info->fix.smem_len; fbsize = par->info->fix.smem_len;
/* copy from vm to metromem */ /* copy from vm to metromem */
...@@ -453,7 +453,7 @@ static u16 metronomefb_dpy_update_page(struct metronomefb_par *par, int index) ...@@ -453,7 +453,7 @@ static u16 metronomefb_dpy_update_page(struct metronomefb_par *par, int index)
{ {
int i; int i;
u16 csum = 0; u16 csum = 0;
u16 *buf = (u16 __force *)(par->info->screen_base + index); u16 *buf = (u16 *)(par->info->screen_buffer + index);
u16 *img = (u16 *)(par->metromem_img + index); u16 *img = (u16 *)(par->metromem_img + index);
/* swizzle from vm to metromem and recalc cksum at the same time*/ /* swizzle from vm to metromem and recalc cksum at the same time*/
...@@ -543,7 +543,7 @@ static ssize_t metronomefb_write(struct fb_info *info, const char __user *buf, ...@@ -543,7 +543,7 @@ static ssize_t metronomefb_write(struct fb_info *info, const char __user *buf,
count = total_size - p; count = total_size - p;
} }
dst = (void __force *)(info->screen_base + p); dst = info->screen_buffer + p;
if (copy_from_user(dst, buf, count)) if (copy_from_user(dst, buf, count))
err = -EFAULT; err = -EFAULT;
...@@ -599,7 +599,7 @@ static int metronomefb_probe(struct platform_device *dev) ...@@ -599,7 +599,7 @@ static int metronomefb_probe(struct platform_device *dev)
goto err; goto err;
/* we have two blocks of memory. /* we have two blocks of memory.
info->screen_base which is vm, and is the fb used by apps. info->screen_buffer which is vm, and is the fb used by apps.
par->metromem which is physically contiguous memory and par->metromem which is physically contiguous memory and
contains the display controller commands, waveform, contains the display controller commands, waveform,
processed image data and padding. this is the data pulled processed image data and padding. this is the data pulled
...@@ -634,7 +634,7 @@ static int metronomefb_probe(struct platform_device *dev) ...@@ -634,7 +634,7 @@ static int metronomefb_probe(struct platform_device *dev)
if (!videomemory) if (!videomemory)
goto err_fb_rel; goto err_fb_rel;
info->screen_base = (char __force __iomem *)videomemory; info->screen_buffer = videomemory;
info->fbops = &metronomefb_ops; info->fbops = &metronomefb_ops;
metronomefb_fix.line_length = fw; metronomefb_fix.line_length = fw;
...@@ -756,7 +756,7 @@ static int metronomefb_remove(struct platform_device *dev) ...@@ -756,7 +756,7 @@ static int metronomefb_remove(struct platform_device *dev)
fb_dealloc_cmap(&info->cmap); fb_dealloc_cmap(&info->cmap);
par->board->cleanup(par); par->board->cleanup(par);
vfree(par->csum_table); vfree(par->csum_table);
vfree((void __force *)info->screen_base); vfree(info->screen_buffer);
module_put(par->board->owner); module_put(par->board->owner);
dev_dbg(&dev->dev, "calling release\n"); dev_dbg(&dev->dev, "calling release\n");
framebuffer_release(info); framebuffer_release(info);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment