Skip to content

Commit

Permalink
viafb: clean up virtual memory handling
Browse files Browse the repository at this point in the history
Clean the handling of ioremapped video memory up.  The following changes
were made:

info->screen_base - viafb_FB_MM
(VRAM offset calculation) was replaced by
info->fix.smem_start - viafbinfo->fix.smem_start
which is essentially the same calculation but done with physical instead
virtual addresses.

*->fbmem_virt
was replaced by
viafbinfo->screen_base
This is true for viafbinfo and viafbinfo1 as the par pointers are equal.

An early initialization of viafbinfo1->fix.smem* was removed as done later
in viafb_setup_fixinfo.

This patch highlights that the only usage of the ioremapped video memory
in the driver is for hardware cursor handling.  Even if it has to hold the
used virtual screen mapped for old-fashioned read/write calls (vs.
mmap'ed) a lot virtual memory could be saved by only ioremapping on
demand.

Code cleanup, no runtime changes expected.

Signed-off-by: Florian Tobias Schandinat <FlorianSchandinat@gmx.de>
Cc: Scott Fang <ScottFang@viatech.com.cn>
Cc: Joseph Chan <JosephChan@via.com.tw>
Cc: Harald Welte <laforge@gnumonks.org>
Cc: Jonathan Corbet <corbet@lwn.net>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  • Loading branch information
Florian Tobias Schandinat authored and Linus Torvalds committed Sep 23, 2009
1 parent b008c64 commit db88e38
Show file tree
Hide file tree
Showing 4 changed files with 8 additions and 22 deletions.
1 change: 0 additions & 1 deletion drivers/video/via/global.c
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,6 @@ int viafb_hotplug_refresh = 60;
unsigned int viafb_second_offset;
int viafb_second_size;
int viafb_primary_dev = None_Device;
void __iomem *viafb_FB_MM;
unsigned int viafb_second_xres = 640;
unsigned int viafb_second_yres = 480;
unsigned int viafb_second_virtual_xres;
Expand Down
1 change: 0 additions & 1 deletion drivers/video/via/global.h
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,6 @@ extern int viafb_hotplug_Yres;
extern int viafb_hotplug_bpp;
extern int viafb_hotplug_refresh;
extern int viafb_primary_dev;
extern void __iomem *viafb_FB_MM;
extern struct fb_cursor viacursor;

extern unsigned int viafb_second_xres;
Expand Down
27 changes: 8 additions & 19 deletions drivers/video/via/viafbdev.c
Original file line number Diff line number Diff line change
Expand Up @@ -832,8 +832,7 @@ static void viafb_fillrect(struct fb_info *info,
/* Source Base Address */
writel(0x0, viaparinfo->io_virt + VIA_REG_SRCBASE);
/* Destination Base Address */
writel(((unsigned long) (info->screen_base) -
(unsigned long) viafb_FB_MM) >> 3,
writel((info->fix.smem_start - viafbinfo->fix.smem_start) >> 3,
viaparinfo->io_virt + VIA_REG_DSTBASE);
/* Pitch */
pitch = (info->var.xres_virtual + 7) & ~7;
Expand Down Expand Up @@ -887,12 +886,10 @@ static void viafb_copyarea(struct fb_info *info,
}

/* Source Base Address */
writel(((unsigned long) (info->screen_base) -
(unsigned long) viafb_FB_MM) >> 3,
writel((info->fix.smem_start - viafbinfo->fix.smem_start) >> 3,
viaparinfo->io_virt + VIA_REG_SRCBASE);
/* Destination Base Address */
writel(((unsigned long) (info->screen_base) -
(unsigned long) viafb_FB_MM) >> 3,
writel((info->fix.smem_start - viafbinfo->fix.smem_start) >> 3,
viaparinfo->io_virt + VIA_REG_DSTBASE);
/* Pitch */
pitch = (info->var.xres_virtual + 7) & ~7;
Expand Down Expand Up @@ -951,8 +948,7 @@ static void viafb_imageblit(struct fb_info *info,
/* Source Base Address */
writel(0x0, viaparinfo->io_virt + VIA_REG_SRCBASE);
/* Destination Base Address */
writel(((unsigned long) (info->screen_base) -
(unsigned long) viafb_FB_MM) >> 3,
writel((info->fix.smem_start - viafbinfo->fix.smem_start) >> 3,
viaparinfo->io_virt + VIA_REG_DSTBASE);
/* Pitch */
pitch = (info->var.xres_virtual + 7) & ~7;
Expand Down Expand Up @@ -1170,7 +1166,7 @@ static int viafb_cursor(struct fb_info *info, struct fb_cursor *cursor)
}
}

memcpy(((struct viafb_par *)(info->par))->fbmem_virt +
memcpy(viafbinfo->screen_base +
((struct viafb_par *)(info->par))->cursor_start,
cr_data->bak, CURSOR_SIZE);
out:
Expand Down Expand Up @@ -2073,11 +2069,9 @@ static int __devinit via_pci_probe(void)
viafb_get_fb_info(&viaparinfo->fbmem, &viaparinfo->memsize);
viaparinfo->fbmem_free = viaparinfo->memsize;
viaparinfo->fbmem_used = 0;
viaparinfo->fbmem_virt = ioremap_nocache(viaparinfo->fbmem,
viafbinfo->screen_base = ioremap_nocache(viaparinfo->fbmem,
viaparinfo->memsize);
viafbinfo->screen_base = (char *)viaparinfo->fbmem_virt;

if (!viaparinfo->fbmem_virt) {
if (!viafbinfo->screen_base) {
printk(KERN_INFO "ioremap failed\n");
return -ENOMEM;
}
Expand Down Expand Up @@ -2110,7 +2104,6 @@ static int __devinit via_pci_probe(void)
viafb_second_size * 1024 * 1024;
}

viafb_FB_MM = viaparinfo->fbmem_virt;
tmpm = viafb_mode;
tmpc = strsep(&tmpm, "x");
strict_strtoul(tmpc, 0, &default_xres);
Expand Down Expand Up @@ -2203,8 +2196,6 @@ static int __devinit via_pci_probe(void)
viaparinfo1->memsize = viaparinfo->memsize -
viafb_second_offset;
viaparinfo->memsize = viafb_second_offset;
viaparinfo1->fbmem_virt = viaparinfo->fbmem_virt +
viafb_second_offset;
viaparinfo1->fbmem = viaparinfo->fbmem + viafb_second_offset;

viaparinfo1->fbmem_used = viaparinfo->fbmem_used;
Expand All @@ -2226,8 +2217,6 @@ static int __devinit via_pci_probe(void)
memcpy(viafbinfo1, viafbinfo, sizeof(struct fb_info));
viafbinfo1->screen_base = viafbinfo->screen_base +
viafb_second_offset;
viafbinfo1->fix.smem_start = viaparinfo1->fbmem;
viafbinfo1->fix.smem_len = viaparinfo1->fbmem_free;

default_var.xres = viafb_second_xres;
default_var.yres = viafb_second_yres;
Expand Down Expand Up @@ -2289,7 +2278,7 @@ static void __devexit via_pci_remove(void)
unregister_framebuffer(viafbinfo);
if (viafb_dual_fb)
unregister_framebuffer(viafbinfo1);
iounmap((void *)viaparinfo->fbmem_virt);
iounmap((void *)viafbinfo->screen_base);
iounmap(viaparinfo->io_virt);

viafb_delete_i2c_buss(viaparinfo);
Expand Down
1 change: 0 additions & 1 deletion drivers/video/via/viafbdev.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,6 @@
#define VERSION_MINOR 4

struct viafb_par {
void __iomem *fbmem_virt; /*framebuffer virtual memory address */
void __iomem *io_virt; /*iospace virtual memory address */
unsigned int fbmem; /*framebuffer physical memory address */
unsigned int memsize; /*size of fbmem */
Expand Down

0 comments on commit db88e38

Please sign in to comment.