include/hw/riscv/tt_atlantis.h | 1 +
hw/riscv/tt_atlantis.c | 19 ++++++++++---------
2 files changed, 11 insertions(+), 9 deletions(-)
diff --git a/include/hw/riscv/tt_atlantis.h b/include/hw/riscv/tt_atlantis.h
index 642490d21743..a29c67c1cfcf 100644
--- a/include/hw/riscv/tt_atlantis.h
+++ b/include/hw/riscv/tt_atlantis.h
@@ -29,6 +29,7 @@ struct TTAtlantisState {
Notifier machine_done;
const MemMapEntry *memmap;
+ MemoryRegion *memory;
RISCVHartArrayState cpus;
DeviceState *irqchip;
DesignWareI2CState i2c[TT_ATL_NUM_I2C];
diff --git a/hw/riscv/tt_atlantis.c b/hw/riscv/tt_atlantis.c
index c471c7cebf12..1c75fb5d8d57 100644
--- a/hw/riscv/tt_atlantis.c
+++ b/hw/riscv/tt_atlantis.c
@@ -482,13 +482,14 @@ static void tt_atlantis_machine_init(MachineState
*machine)
{
TTAtlantisState *s = TT_ATLANTIS_MACHINE(machine);
- MemoryRegion *system_memory = get_system_memory();
MemoryRegion *ram_hi = g_new(MemoryRegion, 1);
MemoryRegion *ram_lo = g_new(MemoryRegion, 1);
MemoryRegion *bootrom = g_new(MemoryRegion, 1);
ram_addr_t lo_ram_size;
int hart_count = machine->smp.cpus;
+ s->memory = get_system_memory();
+
s->memmap = tt_atlantis_memmap;
object_initialize_child(OBJECT(machine), "soc", &s->cpus,
@@ -504,7 +505,7 @@ static void tt_atlantis_machine_init(MachineState *machine)
&error_abort);
sysbus_realize(SYS_BUS_DEVICE(&s->cpus), &error_fatal);
- s->irqchip = riscv_create_aia(system_memory,
+ s->irqchip = riscv_create_aia(s->memory,
true, TT_IMSIC_GUESTS,
TT_IMSIC_STRIDE,
TT_IMSIC_STRIDE,
@@ -517,7 +518,7 @@ static void tt_atlantis_machine_init(MachineState *machine)
TT_IRQCHIP_NUM_MSIS,
TT_IRQCHIP_NUM_PRIO_BITS);
- riscv_aclint_mtimer_create(system_memory,
+ riscv_aclint_mtimer_create(s->memory,
s->memmap[TT_ATL_ACLINT].base,
TT_ACLINT_MTIME_SIZE,
0, hart_count,
@@ -540,23 +541,23 @@ static void tt_atlantis_machine_init(MachineState
*machine)
memory_region_init_alias(ram_hi, OBJECT(machine), "ram.high", machine->ram,
0, machine->ram_size);
- memory_region_add_subregion(system_memory,
+ memory_region_add_subregion(s->memory,
s->memmap[TT_ATL_DDR_HI].base, ram_hi);
lo_ram_size = MIN(machine->ram_size, s->memmap[TT_ATL_DDR_LO].size);
memory_region_init_alias(ram_lo, OBJECT(machine), "ram.low", machine->ram,
0, lo_ram_size);
- memory_region_add_subregion(system_memory,
+ memory_region_add_subregion(s->memory,
s->memmap[TT_ATL_DDR_LO].base, ram_lo);
/* Boot ROM */
memory_region_init_rom(bootrom, NULL, "tt-atlantis.bootrom",
s->memmap[TT_ATL_BOOTROM].size, &error_fatal);
- memory_region_add_subregion(system_memory, s->memmap[TT_ATL_BOOTROM].base,
+ memory_region_add_subregion(s->memory, s->memmap[TT_ATL_BOOTROM].base,
bootrom);
/* UART1, the soc console (UART0 is for the boot microcontroller) */
- serial_mm_init(system_memory, s->memmap[TT_ATL_UART1].base, 2,
+ serial_mm_init(s->memory, s->memmap[TT_ATL_UART1].base, 2,
qdev_get_gpio_in(s->irqchip, TT_ATL_UART1_IRQ),
115200, serial_hd(0), DEVICE_LITTLE_ENDIAN);
/*
@@ -570,7 +571,7 @@ static void tt_atlantis_machine_init(MachineState *machine)
*/
object_initialize_child(OBJECT(s), "uart1", &s->uart1,
TYPE_UNIMPLEMENTED_DEVICE);
- mmio_map_unimplemented(system_memory, SYS_BUS_DEVICE(&s->uart1),
+ mmio_map_unimplemented(s->memory, SYS_BUS_DEVICE(&s->uart1),
"tt-atlantis.uart1", s->memmap[TT_ATL_UART1].base,
s->memmap[TT_ATL_UART1].size);
@@ -582,7 +583,7 @@ static void tt_atlantis_machine_init(MachineState *machine)
TYPE_DESIGNWARE_I2C);
sbd = SYS_BUS_DEVICE(&s->i2c[i]);
sysbus_realize(sbd, &error_fatal);
- memory_region_add_subregion(system_memory,
+ memory_region_add_subregion(s->memory,
s->memmap[TT_ATL_I2C0 + i].base,
sysbus_mmio_get_region(sbd, 0));
sysbus_connect_irq(sbd, 0,