Hi,
+#define ROOT_BASE(top, sum, align) ALIGN_DOWN((top)-(sum),(align))
+static int pci_bios_init_root_regions(u32 start, u32 end) +{
- struct pci_bus *bus =&busses[0];
- bus->r[PCI_REGION_TYPE_IO].base = 0xc000;
- if (bus->r[PCI_REGION_TYPE_MEM].sum< bus->r[PCI_REGION_TYPE_PREFMEM].sum) {
bus->r[PCI_REGION_TYPE_MEM].base =
ROOT_BASE(end,
bus->r[PCI_REGION_TYPE_MEM].sum,
bus->r[PCI_REGION_TYPE_MEM].max);
This aligns down which looks strange to me. Shouldn't we align up to avoid overlap?
Depends on how you allocate. This starts from the top of the pci address space, so we actually have to align down to avoid overlaps.
cheers, Gerd