diff options
Diffstat (limited to 'arch/ia64/sn/kernel/io_init.c')
-rw-r--r-- | arch/ia64/sn/kernel/io_init.c | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/arch/ia64/sn/kernel/io_init.c b/arch/ia64/sn/kernel/io_init.c index 6b10e5d28488..906b93674b76 100644 --- a/arch/ia64/sn/kernel/io_init.c +++ b/arch/ia64/sn/kernel/io_init.c | |||
@@ -259,9 +259,23 @@ sn_io_slot_fixup(struct pci_dev *dev) | |||
259 | insert_resource(&ioport_resource, &dev->resource[idx]); | 259 | insert_resource(&ioport_resource, &dev->resource[idx]); |
260 | else | 260 | else |
261 | insert_resource(&iomem_resource, &dev->resource[idx]); | 261 | insert_resource(&iomem_resource, &dev->resource[idx]); |
262 | /* If ROM, mark as shadowed in PROM */ | 262 | /* |
263 | if (idx == PCI_ROM_RESOURCE) | 263 | * If ROM, set the actual ROM image size, and mark as |
264 | dev->resource[idx].flags |= IORESOURCE_ROM_BIOS_COPY; | 264 | * shadowed in PROM. |
265 | */ | ||
266 | if (idx == PCI_ROM_RESOURCE) { | ||
267 | size_t image_size; | ||
268 | void __iomem *rom; | ||
269 | |||
270 | rom = ioremap(pci_resource_start(dev, PCI_ROM_RESOURCE), | ||
271 | size + 1); | ||
272 | image_size = pci_get_rom_size(rom, size + 1); | ||
273 | dev->resource[PCI_ROM_RESOURCE].end = | ||
274 | dev->resource[PCI_ROM_RESOURCE].start + | ||
275 | image_size - 1; | ||
276 | dev->resource[PCI_ROM_RESOURCE].flags |= | ||
277 | IORESOURCE_ROM_BIOS_COPY; | ||
278 | } | ||
265 | } | 279 | } |
266 | /* Create a pci_window in the pci_controller struct for | 280 | /* Create a pci_window in the pci_controller struct for |
267 | * each device resource. | 281 | * each device resource. |