|
@@ -25,6 +25,7 @@
|
|
|
#define ASPEED_SOC_IOMEM_SIZE 0x00200000
|
|
|
|
|
|
static const hwaddr aspeed_soc_ast2400_memmap[] = {
|
|
|
+ [ASPEED_DEV_SPI_BOOT] = ASPEED_SOC_SPI_BOOT_ADDR,
|
|
|
[ASPEED_DEV_IOMEM] = 0x1E600000,
|
|
|
[ASPEED_DEV_FMC] = 0x1E620000,
|
|
|
[ASPEED_DEV_SPI1] = 0x1E630000,
|
|
@@ -59,6 +60,7 @@ static const hwaddr aspeed_soc_ast2400_memmap[] = {
|
|
|
};
|
|
|
|
|
|
static const hwaddr aspeed_soc_ast2500_memmap[] = {
|
|
|
+ [ASPEED_DEV_SPI_BOOT] = ASPEED_SOC_SPI_BOOT_ADDR,
|
|
|
[ASPEED_DEV_IOMEM] = 0x1E600000,
|
|
|
[ASPEED_DEV_FMC] = 0x1E620000,
|
|
|
[ASPEED_DEV_SPI1] = 0x1E630000,
|
|
@@ -245,6 +247,12 @@ static void aspeed_soc_realize(DeviceState *dev, Error **errp)
|
|
|
Error *err = NULL;
|
|
|
g_autofree char *sram_name = NULL;
|
|
|
|
|
|
+ /* Default boot region (SPI memory or ROMs) */
|
|
|
+ memory_region_init(&s->spi_boot_container, OBJECT(s),
|
|
|
+ "aspeed.spi_boot_container", 0x10000000);
|
|
|
+ memory_region_add_subregion(s->memory, sc->memmap[ASPEED_DEV_SPI_BOOT],
|
|
|
+ &s->spi_boot_container);
|
|
|
+
|
|
|
/* IO space */
|
|
|
aspeed_mmio_map_unimplemented(s, SYS_BUS_DEVICE(&s->iomem), "aspeed.io",
|
|
|
sc->memmap[ASPEED_DEV_IOMEM],
|
|
@@ -354,6 +362,12 @@ static void aspeed_soc_realize(DeviceState *dev, Error **errp)
|
|
|
sysbus_connect_irq(SYS_BUS_DEVICE(&s->fmc), 0,
|
|
|
aspeed_soc_get_irq(s, ASPEED_DEV_FMC));
|
|
|
|
|
|
+ /* Set up an alias on the FMC CE0 region (boot default) */
|
|
|
+ MemoryRegion *fmc0_mmio = &s->fmc.flashes[0].mmio;
|
|
|
+ memory_region_init_alias(&s->spi_boot, OBJECT(s), "aspeed.spi_boot",
|
|
|
+ fmc0_mmio, 0, memory_region_size(fmc0_mmio));
|
|
|
+ memory_region_add_subregion(&s->spi_boot_container, 0x0, &s->spi_boot);
|
|
|
+
|
|
|
/* SPI */
|
|
|
for (i = 0; i < sc->spis_num; i++) {
|
|
|
if (!sysbus_realize(SYS_BUS_DEVICE(&s->spi[i]), errp)) {
|