aboutsummaryrefslogtreecommitdiff
path: root/hw/pci-host
diff options
context:
space:
mode:
authorHelge Deller <deller@gmx.de>2023-10-21 15:41:02 +0200
committerRichard Henderson <richard.henderson@linaro.org>2023-11-06 18:49:34 -0800
commitfd842b2f4ce2da082b400f9b9278fa6bd45d0864 (patch)
tree1bb1f9ae9df7b9949b79738c9ca93e6748503e8b /hw/pci-host
parent5dd5c003661c364d5c339675532c3d5c60207994 (diff)
downloadqemu-fd842b2f4ce2da082b400f9b9278fa6bd45d0864.zip
qemu-fd842b2f4ce2da082b400f9b9278fa6bd45d0864.tar.gz
qemu-fd842b2f4ce2da082b400f9b9278fa6bd45d0864.tar.bz2
hw/pci-host/astro: Map Astro chip into 64-bit I/O memory region
Map Astro into high F-region and add alias for 32-bit OS in low region. Signed-off-by: Helge Deller <deller@gmx.de>
Diffstat (limited to 'hw/pci-host')
-rw-r--r--hw/pci-host/astro.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/hw/pci-host/astro.c b/hw/pci-host/astro.c
index 4b2d7ca..df61386 100644
--- a/hw/pci-host/astro.c
+++ b/hw/pci-host/astro.c
@@ -19,6 +19,8 @@
#define TYPE_ASTRO_IOMMU_MEMORY_REGION "astro-iommu-memory-region"
+#define F_EXTEND(addr) ((addr) | MAKE_64BIT_MASK(32, 32))
+
#include "qemu/osdep.h"
#include "qemu/module.h"
#include "qemu/units.h"
@@ -821,15 +823,16 @@ static void astro_realize(DeviceState *obj, Error **errp)
/* map elroys mmio */
map_size = LMMIO_DIST_BASE_SIZE / ROPES_PER_IOC;
- map_addr = (uint32_t) (LMMIO_DIST_BASE_ADDR + rope * map_size);
+ map_addr = F_EXTEND(LMMIO_DIST_BASE_ADDR + rope * map_size);
memory_region_init_alias(&elroy->pci_mmio_alias, OBJECT(elroy),
"pci-mmio-alias",
- &elroy->pci_mmio, map_addr, map_size);
+ &elroy->pci_mmio, (uint32_t) map_addr, map_size);
memory_region_add_subregion(get_system_memory(), map_addr,
&elroy->pci_mmio_alias);
+ /* map elroys io */
map_size = IOS_DIST_BASE_SIZE / ROPES_PER_IOC;
- map_addr = (uint32_t) (IOS_DIST_BASE_ADDR + rope * map_size);
+ map_addr = F_EXTEND(IOS_DIST_BASE_ADDR + rope * map_size);
memory_region_add_subregion(get_system_memory(), map_addr,
&elroy->pci_io);