Skip to content

Commit

Permalink
sisfb: limit POST memory test according to PCI resource length
Browse files Browse the repository at this point in the history
If the POST memory test fails, the driver may access illegal
memory areas. Instead of hard coding the maximum size, set it
according to the PCI resource length (an additional check is needed in
sisfb_post_map_vram() to ensure it's big enough). DRAM sizing will later
adjust video_size to the correct value.

Signed-off-by: Aaro Koskinen <aaro.koskinen@iki.fi>
Cc: Thomas Winischhofer <thomas@winischhofer.net>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
  • Loading branch information
Aaro Koskinen authored and Paul Mundt committed Nov 10, 2010
1 parent 7ac3d3e commit 32ed303
Showing 1 changed file with 6 additions and 2 deletions.
8 changes: 6 additions & 2 deletions drivers/video/sis/sis_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -4181,6 +4181,9 @@ static void __devinit
sisfb_post_map_vram(struct sis_video_info *ivideo, unsigned int *mapsize,
unsigned int min)
{
if (*mapsize < (min << 20))
return;

ivideo->video_vbase = ioremap(ivideo->video_base, (*mapsize));

if(!ivideo->video_vbase) {
Expand Down Expand Up @@ -4514,7 +4517,7 @@ sisfb_post_sis300(struct pci_dev *pdev)
} else {
#endif
/* Need to map max FB size for finding out about RAM size */
mapsize = 64 << 20;
mapsize = ivideo->video_size;
sisfb_post_map_vram(ivideo, &mapsize, 4);

if(ivideo->video_vbase) {
Expand Down Expand Up @@ -4680,7 +4683,7 @@ sisfb_post_xgi_ramsize(struct sis_video_info *ivideo)
orSISIDXREG(SISSR, 0x20, (0x80 | 0x04));

/* Need to map max FB size for finding out about RAM size */
mapsize = 256 << 20;
mapsize = ivideo->video_size;
sisfb_post_map_vram(ivideo, &mapsize, 32);

if(!ivideo->video_vbase) {
Expand Down Expand Up @@ -5936,6 +5939,7 @@ sisfb_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
}

ivideo->video_base = pci_resource_start(pdev, 0);
ivideo->video_size = pci_resource_len(pdev, 0);
ivideo->mmio_base = pci_resource_start(pdev, 1);
ivideo->mmio_size = pci_resource_len(pdev, 1);
ivideo->SiS_Pr.RelIO = pci_resource_start(pdev, 2) + 0x30;
Expand Down

0 comments on commit 32ed303

Please sign in to comment.