* [PATCH] fix radeon, r128 host & BAR value confusion
@ 2004-12-13 23:19 Jesse Barnes
0 siblings, 0 replies; only message in thread
From: Jesse Barnes @ 2004-12-13 23:19 UTC (permalink / raw)
To: ajoshi, linux-fbdev-devel; +Cc: benh
[-- Attachment #1: Type: text/plain, Size: 494 bytes --]
On some platforms, the values in the resource structures are not equivalent to
what's in the BARs, so you need to distinguish between them. This patch
fixes both of the drivers to use the BAR value where appropriate to
enable/disable ROM space access and also prevents the destruction of the ROM
BAR value as it may be needed if the card needs to be posted again. Please
Cc me on any replies as I'm not on linux-fbdev-devel.
Signed-off-by: Jesse Barnes <jbarnes@sgi.com>
Thanks,
Jesse
[-- Attachment #2: aty-rom-enable-fixes.patch --]
[-- Type: text/plain, Size: 2230 bytes --]
===== drivers/video/aty/aty128fb.c 1.52 vs edited =====
--- 1.52/drivers/video/aty/aty128fb.c 2004-11-12 11:40:39 -08:00
+++ edited/drivers/video/aty/aty128fb.c 2004-12-13 15:13:55 -08:00
@@ -791,6 +791,7 @@
static void __init aty128_unmap_ROM(struct pci_dev *dev, void __iomem * rom)
{
struct resource *r = &dev->resource[PCI_ROM_RESOURCE];
+ u32 val;
iounmap(rom);
@@ -801,8 +802,9 @@
r->end -= r->start;
r->start = 0;
}
- /* This will disable and set address to unassigned */
- pci_write_config_dword(dev, dev->rom_base_reg, 0);
+ /* This will disable it again */
+ pci_read_config_dword(dev, dev->rom_base_reg, &val);
+ pci_write_config_dword(dev, dev->rom_base_reg, val & ~PCI_ROM_ADDRESS_ENABLE);
}
@@ -830,8 +832,10 @@
/* enable if needed */
if (!(r->flags & PCI_ROM_ADDRESS_ENABLE)) {
+ u32 val;
+ pci_read_config_dword(dev, dev->rom_base_reg, &val);
pci_write_config_dword(dev, dev->rom_base_reg,
- r->start | PCI_ROM_ADDRESS_ENABLE);
+ val | PCI_ROM_ADDRESS_ENABLE);
r->flags |= PCI_ROM_ADDRESS_ENABLE;
}
===== drivers/video/aty/radeon_base.c 1.35 vs edited =====
--- 1.35/drivers/video/aty/radeon_base.c 2004-11-11 00:39:04 -08:00
+++ edited/drivers/video/aty/radeon_base.c 2004-12-13 15:11:56 -08:00
@@ -265,6 +265,7 @@
{
// leave it disabled and unassigned
struct resource *r = &dev->resource[PCI_ROM_RESOURCE];
+ u32 val;
if (!rinfo->bios_seg)
return;
@@ -277,8 +278,9 @@
r->end -= r->start;
r->start = 0;
}
- /* This will disable and set address to unassigned */
- pci_write_config_dword(dev, dev->rom_base_reg, 0);
+ /* This will disable it again */
+ pci_read_config_dword(dev, dev->rom_base_reg, &val);
+ pci_write_config_dword(dev, dev->rom_base_reg, val & ~PCI_ROM_ADDRESS_ENABLE);
}
static int __devinit radeon_map_ROM(struct radeonfb_info *rinfo, struct pci_dev *dev)
@@ -310,8 +312,10 @@
/* enable if needed */
if (!(r->flags & PCI_ROM_ADDRESS_ENABLE)) {
+ u32 val;
+ pci_read_config_dword(dev, dev->rom_base_reg, &val);
pci_write_config_dword(dev, dev->rom_base_reg,
- r->start | PCI_ROM_ADDRESS_ENABLE);
+ val | PCI_ROM_ADDRESS_ENABLE);
r->flags |= PCI_ROM_ADDRESS_ENABLE;
}
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2004-12-13 23:20 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-12-13 23:19 [PATCH] fix radeon, r128 host & BAR value confusion Jesse Barnes
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).