gxfb: replace FBSIZE config option with a module parameter

Use a command line option (vram) rather than hardcoding the vram size.  LxFB
already does this; it's useful for machines that can't query the BIOS for fb
size.  This patch originated from David Woodhouse, was modified by Jordan
Crouse, and was then modified further by me.

This also adds some gxfb documentation in Documentation/fb.

Signed-off-by: Andres Salomon <dilinger@debian.org>
Cc: Jordan Crouse <jordan.crouse@amd.com>
Cc: "Antonino A. Daplas" <adaplas@pol.net>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Andres Salomon
2008-04-28 02:14:57 -07:00
committed by Linus Torvalds
parent 0a5e790987
commit fa20c8a6e5
4 changed files with 59 additions and 33 deletions

View File

@@ -38,26 +38,6 @@ config FB_GEODE_GX
If unsure, say N.
config FB_GEODE_GX_SET_FBSIZE
bool "Manually specify the Geode GX framebuffer size"
depends on FB_GEODE_GX
default n
---help---
If you want to manually specify the size of your GX framebuffer,
say Y here, otherwise say N to dynamically probe it.
Say N unless you know what you are doing.
config FB_GEODE_GX_FBSIZE
hex "Size of the GX framebuffer, in bytes"
depends on FB_GEODE_GX_SET_FBSIZE
default "0x1600000"
---help---
Specify the size of the GX framebuffer. Normally, you will
want this to be MB aligned. Common values are 0x80000 (8MB)
and 0x1600000 (16MB). Don't change this unless you know what
you are doing
config FB_GEODE_GX1
tristate "AMD Geode GX1 framebuffer support (EXPERIMENTAL)"
depends on FB && FB_GEODE && EXPERIMENTAL

View File

@@ -21,12 +21,6 @@
#include "geodefb.h"
#include "display_gx.h"
#ifdef CONFIG_FB_GEODE_GX_SET_FBSIZE
unsigned int gx_frame_buffer_size(void)
{
return CONFIG_FB_GEODE_GX_FBSIZE;
}
#else
unsigned int gx_frame_buffer_size(void)
{
unsigned int val;
@@ -41,7 +35,6 @@ unsigned int gx_frame_buffer_size(void)
val = (unsigned int)(inw(0xAC1E)) & 0xFFl;
return (val << 19);
}
#endif
int gx_line_delta(int xres, int bpp)
{

View File

@@ -37,6 +37,7 @@
#include "video_gx.h"
static char *mode_option;
static int vram;
/* Modes relevant to the GX (taken from modedb.c) */
static const struct fb_videomode gx_modedb[] __initdata = {
@@ -208,7 +209,6 @@ static int gxfb_blank(int blank_mode, struct fb_info *info)
static int __init gxfb_map_video_memory(struct fb_info *info, struct pci_dev *dev)
{
struct geodefb_par *par = info->par;
int fb_len;
int ret;
ret = pci_enable_device(dev);
@@ -233,21 +233,20 @@ static int __init gxfb_map_video_memory(struct fb_info *info, struct pci_dev *de
ret = pci_request_region(dev, 0, "gxfb (framebuffer)");
if (ret < 0)
return ret;
if ((fb_len = gx_frame_buffer_size()) < 0)
return -ENOMEM;
info->fix.smem_start = pci_resource_start(dev, 0);
info->fix.smem_len = fb_len;
info->fix.smem_len = vram ? vram : gx_frame_buffer_size();
info->screen_base = ioremap(info->fix.smem_start, info->fix.smem_len);
if (!info->screen_base)
return -ENOMEM;
/* Set the 16MB aligned base address of the graphics memory region
/* Set the 16MiB aligned base address of the graphics memory region
* in the display controller */
writel(info->fix.smem_start & 0xFF000000,
par->dc_regs + DC_GLIU0_MEM_OFFSET);
dev_info(&dev->dev, "%d Kibyte of video memory at 0x%lx\n",
dev_info(&dev->dev, "%d KiB of video memory at 0x%lx\n",
info->fix.smem_len / 1024, info->fix.smem_start);
return 0;
@@ -455,5 +454,8 @@ module_exit(gxfb_cleanup);
module_param(mode_option, charp, 0);
MODULE_PARM_DESC(mode_option, "video mode (<x>x<y>[-<bpp>][@<refr>])");
module_param(vram, int, 0);
MODULE_PARM_DESC(vram, "video memory size");
MODULE_DESCRIPTION("Framebuffer driver for the AMD Geode GX");
MODULE_LICENSE("GPL");