@@ -75,6 +75,16 @@ static void pci_bios_init_bridges(u16 bdf)
}
}
+static inline u32 pci_bios_alloc(u32 *region, u32 size)
+{
+ u32 ret;
+
+ ret = ALIGN(*region, size);
+ *region = ret + size;
+
+ return ret;
+}
+
static void pci_bios_init_device(u16 bdf)
{
int class;
@@ -146,14 +156,13 @@ static void pci_bios_init_device(u16 bdf)
pci_config_writel(bdf, ofs, old);
if (val != 0) {
- u32 size = (~(val & mask)) + 1;
+ u32 base, size = (~(val & mask)) + 1;
if (val & PCI_BASE_ADDRESS_SPACE_IO)
paddr = &pci_bios_io_addr;
else
paddr = &pci_bios_mem_addr;
- *paddr = ALIGN(*paddr, size);
- pci_set_io_region_addr(bdf, i, *paddr);
- *paddr += size;
+ base = pci_bios_alloc(paddr, size);
+ pci_set_io_region_addr(bdf, i, base);
}
}
break;
pci_bios_alloc() can be used to allocate space in the PCI region for other purposes. This is needed by the AMD IOMMU support code. Signed-off-by: Eduard - Gabriel Munteanu <eduard.munteanu@linux360.ro> --- src/pciinit.c | 17 +++++++++++++---- 1 files changed, 13 insertions(+), 4 deletions(-)