diff options
author | Aaro Koskinen <aaro.koskinen@iki.fi> | 2012-09-13 00:45:42 +0300 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2012-09-13 20:41:56 -0700 |
commit | 98f4eade14b4bb077304ca16a1be45ec9c72b381 (patch) | |
tree | 6073ce08debe48ba017cef10e0188e059947fa29 /drivers/staging/xgifb | |
parent | 1839c7ebd9363cc73b55ce48d4c3c6823c2fdd42 (diff) | |
download | linux-98f4eade14b4bb077304ca16a1be45ec9c72b381.tar.bz2 |
staging: xgifb: setup initial video RAM size for systems without BIOS
On embedded systems without a BIOS, the DRAM sizing register is 0 after
the boot, and the driver thinks we have only 1 MB video memory. On such
cases, use the PCI window size for the initial size. This information
is needed only to create the I/O mapping - the driver will later detect
and configure the memory size correctly. Limit the size to 16 MB as it
should be sufficient for all supported video modes.
Signed-off-by: Aaro Koskinen <aaro.koskinen@iki.fi>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/staging/xgifb')
-rw-r--r-- | drivers/staging/xgifb/XGI_main_26.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/drivers/staging/xgifb/XGI_main_26.c b/drivers/staging/xgifb/XGI_main_26.c index 98b8b096d58c..f775c5453845 100644 --- a/drivers/staging/xgifb/XGI_main_26.c +++ b/drivers/staging/xgifb/XGI_main_26.c @@ -6,6 +6,7 @@ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt +#include <linux/sizes.h> #include <linux/module.h> #ifdef CONFIG_MTRR @@ -1470,6 +1471,9 @@ static int XGIfb_get_dram_size(struct xgifb_video_info *xgifb_info) xgifb_reg_set(XGISR, IND_SIS_DRAM_SIZE, 0x51); reg = xgifb_reg_get(XGISR, IND_SIS_DRAM_SIZE); + if (!reg) + return -1; + switch ((reg & XGI_DRAM_SIZE_MASK) >> 4) { case XGI_DRAM_SIZE_1MB: xgifb_info->video_size = 0x100000; @@ -1778,10 +1782,8 @@ static int __devinit xgifb_probe(struct pci_dev *pdev, hw_info->jChipType = xgifb_info->chip; if (XGIfb_get_dram_size(xgifb_info)) { - dev_err(&pdev->dev, - "Fatal error: Unable to determine RAM size.\n"); - ret = -ENODEV; - goto error_disable; + xgifb_info->video_size = min_t(unsigned long, video_size_max, + SZ_16M); } else if (xgifb_info->video_size > video_size_max) { xgifb_info->video_size = video_size_max; } |