hw/arm/aspeed: Do not sysbus-map mmio flash region directly, use alias

The flash mmio region is exposed as an AddressSpace.
AddressSpaces must not be sysbus-mapped, therefore map
the region using an alias.

Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
[ clg : Fix DMA_FLASH_ADDR() ]
Signed-off-by: Cédric Le Goater <clg@kaod.org>
Message-Id: <20210312182851.1922972-3-f4bug@amsat.org>
Signed-off-by: Cédric Le Goater <clg@kaod.org>
Message-Id: <20210407171637.777743-6-clg@kaod.org>
Signed-off-by: Cédric Le Goater <clg@kaod.org>
This commit is contained in:
Philippe Mathieu-Daudé 2021-05-01 10:03:51 +02:00 committed by Cédric Le Goater
parent 3f7a53b224
commit e9c568dbc2
2 changed files with 5 additions and 3 deletions

View File

@ -179,8 +179,7 @@
* 0x7FFFFF: 32M bytes * 0x7FFFFF: 32M bytes
*/ */
#define DMA_DRAM_ADDR(s, val) ((val) & (s)->ctrl->dma_dram_mask) #define DMA_DRAM_ADDR(s, val) ((val) & (s)->ctrl->dma_dram_mask)
#define DMA_FLASH_ADDR(s, val) ((s)->ctrl->flash_window_base | \ #define DMA_FLASH_ADDR(s, val) ((val) & (s)->ctrl->dma_flash_mask)
((val) & (s)->ctrl->dma_flash_mask))
#define DMA_LENGTH(val) ((val) & 0x01FFFFFC) #define DMA_LENGTH(val) ((val) & 0x01FFFFFC)
/* Flash opcodes. */ /* Flash opcodes. */
@ -1385,7 +1384,9 @@ static void aspeed_smc_realize(DeviceState *dev, Error **errp)
memory_region_init_io(&s->mmio_flash, OBJECT(s), memory_region_init_io(&s->mmio_flash, OBJECT(s),
&aspeed_smc_flash_default_ops, s, name, &aspeed_smc_flash_default_ops, s, name,
s->ctrl->flash_window_size); s->ctrl->flash_window_size);
sysbus_init_mmio(sbd, &s->mmio_flash); memory_region_init_alias(&s->mmio_flash_alias, OBJECT(s), name,
&s->mmio_flash, 0, s->ctrl->flash_window_size);
sysbus_init_mmio(sbd, &s->mmio_flash_alias);
s->flashes = g_new0(AspeedSMCFlash, s->ctrl->max_peripherals); s->flashes = g_new0(AspeedSMCFlash, s->ctrl->max_peripherals);

View File

@ -84,6 +84,7 @@ struct AspeedSMCState {
MemoryRegion mmio; MemoryRegion mmio;
MemoryRegion mmio_flash; MemoryRegion mmio_flash;
MemoryRegion mmio_flash_alias;
qemu_irq irq; qemu_irq irq;
int irqline; int irqline;