struct pcidev_info *pcidev_info = NULL;
        struct sn_irq_info *sn_irq_info = NULL;
        struct resource *res;
-       size_t image_size, size;
+       size_t size;
 
        if (sn_acpi_get_pcidev_info(dev, &pcidev_info, &sn_irq_info)) {
                panic("%s:  Failure obtaining pcidev_info for %s\n",
                 * of the shadowed copy, and the actual length of the ROM image.
                 */
                size = pci_resource_len(dev, PCI_ROM_RESOURCE);
-               addr = ioremap(pcidev_info->pdi_pio_mapped_addr[PCI_ROM_RESOURCE],
-                              size);
-               image_size = pci_get_rom_size(dev, addr, size);
+
                res = &dev->resource[PCI_ROM_RESOURCE];
-               res->start = (unsigned long) addr;
-               res->end = (unsigned long) addr + image_size - 1;
-               res->flags |= IORESOURCE_ROM_BIOS_COPY;
+
+               pci_disable_rom(dev);
+               if (res->parent)
+                       release_resource(res);
+
+               res->start = pcidev_info->pdi_pio_mapped_addr[PCI_ROM_RESOURCE];
+               res->end = res->start + size - 1;
+               res->flags = IORESOURCE_MEM | IORESOURCE_ROM_SHADOW |
+                            IORESOURCE_PCI_FIXED;
        }
        sn_pci_fixup_slot(dev, pcidev_info, sn_irq_info);
 }
 
                if (size == 0)
                        continue;
 
-               res->start = ioremap(pcidev_info->pdi_pio_mapped_addr[idx],
-                                    size + 1);
+               res->start = pcidev_info->pdi_pio_mapped_addr[idx];
                res->end = addr + size;
 
                /*
                else
                        insert_resource(&iomem_resource, res);
                /*
-                * If ROM, set the actual ROM image size, and mark as
-                * shadowed in PROM.
+                * If ROM, mark as shadowed in PROM.
                 */
                if (idx == PCI_ROM_RESOURCE) {
-                       size_t image_size;
-                       void __iomem *rom;
-
-                       rom = ioremap(pci_resource_start(dev, PCI_ROM_RESOURCE),
-                                     size + 1);
-                       image_size = pci_get_rom_size(dev, rom, size + 1);
-                       res->end = res->start + image_size - 1;
-                       res->flags |= IORESOURCE_ROM_BIOS_COPY;
+                       pci_disable_rom(dev);
+                       res->flags = IORESOURCE_MEM | IORESOURCE_ROM_SHADOW |
+                                    IORESOURCE_PCI_FIXED;
                }
        }