|
@@ -406,6 +406,7 @@ void pci_determine_mem_io_space(struct pci_pbm_info *pbm)
|
|
|
}
|
|
|
|
|
|
num_pbm_ranges = i / sizeof(*pbm_ranges);
|
|
|
+ memset(&pbm->mem64_space, 0, sizeof(struct resource));
|
|
|
|
|
|
for (i = 0; i < num_pbm_ranges; i++) {
|
|
|
const struct linux_prom_pci_ranges *pr = &pbm_ranges[i];
|
|
@@ -451,7 +452,12 @@ void pci_determine_mem_io_space(struct pci_pbm_info *pbm)
|
|
|
break;
|
|
|
|
|
|
case 3:
|
|
|
- /* XXX 64-bit MEM handling XXX */
|
|
|
+ /* 64-bit MEM handling */
|
|
|
+ pbm->mem64_space.start = a;
|
|
|
+ pbm->mem64_space.end = a + size - 1UL;
|
|
|
+ pbm->mem64_space.flags = IORESOURCE_MEM;
|
|
|
+ saw_mem = 1;
|
|
|
+ break;
|
|
|
|
|
|
default:
|
|
|
break;
|
|
@@ -465,15 +471,22 @@ void pci_determine_mem_io_space(struct pci_pbm_info *pbm)
|
|
|
prom_halt();
|
|
|
}
|
|
|
|
|
|
- printk("%s: PCI IO[%llx] MEM[%llx]\n",
|
|
|
+ printk("%s: PCI IO[%llx] MEM[%llx]",
|
|
|
pbm->name,
|
|
|
pbm->io_space.start,
|
|
|
pbm->mem_space.start);
|
|
|
+ if (pbm->mem64_space.flags)
|
|
|
+ printk(" MEM64[%llx]",
|
|
|
+ pbm->mem64_space.start);
|
|
|
+ printk("\n");
|
|
|
|
|
|
pbm->io_space.name = pbm->mem_space.name = pbm->name;
|
|
|
+ pbm->mem64_space.name = pbm->name;
|
|
|
|
|
|
request_resource(&ioport_resource, &pbm->io_space);
|
|
|
request_resource(&iomem_resource, &pbm->mem_space);
|
|
|
+ if (pbm->mem64_space.flags)
|
|
|
+ request_resource(&iomem_resource, &pbm->mem64_space);
|
|
|
|
|
|
pci_register_legacy_regions(&pbm->io_space,
|
|
|
&pbm->mem_space);
|