Mapping I/O space works via viewports in this device but isn't
implemented in the model. Fix that.
Signed-off-by: Bernhard Beschow <shentey@gmail.com>
---
hw/pci-host/designware.c | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/hw/pci-host/designware.c b/hw/pci-host/designware.c
index 5ad7574924..7342207eb3 100644
--- a/hw/pci-host/designware.c
+++ b/hw/pci-host/designware.c
@@ -283,6 +283,7 @@ static void designware_pcie_update_viewport(DesignwarePCIERoot *root,
if (enabled) {
switch (iatu_type) {
case DESIGNWARE_PCIE_ATU_TYPE_MEM:
+ case DESIGNWARE_PCIE_ATU_TYPE_IO:
if (viewport->inbound) {
/*
* Configure MemoryRegion implementing PCI -> CPU memory
@@ -298,9 +299,12 @@ static void designware_pcie_update_viewport(DesignwarePCIERoot *root,
* Configure MemoryRegion implementing CPU -> PCI memory
* access
*/
+ MemoryRegion *mr = iatu_type == DESIGNWARE_PCIE_ATU_TYPE_IO
+ ? &host->pci.io
+ : &host->pci.memory;
+
memory_region_init_alias(&viewport->mem, OBJECT(root),
- viewport->name, &host->pci.memory,
- target, size);
+ viewport->name, mr, target, size);
memory_region_add_subregion(get_system_memory(), base,
&viewport->mem);
}
@@ -332,7 +336,6 @@ static void designware_pcie_update_viewport(DesignwarePCIERoot *root,
}
break;
- case DESIGNWARE_PCIE_ATU_TYPE_IO:
case DESIGNWARE_PCIE_ATU_TYPE_MSG:
qemu_log_mask(LOG_UNIMP, "%s: Unimplemented iATU type %d", __func__,
iatu_type);
--
2.50.1