@samitouri / QOSamiQemu / commits / 59a3b57bab

hw/arm/aspeed_ast27x0: Add unimplemented Privilege Controller MMIO regions for SSP/TSP

The AST2700 SSP/TSP firmware accesses Privilege Controller MMIO regions that are not yet implemented in QEMU. This change adds unimplemented MMIO devices for the Privilege Controller blocks and maps them to their corresponding physical addresses in the SSP/TSP address space. These stub devices allow QEMU to safely handle firmware accesses and prevent spurious exceptions, while accurately reflecting the hardware memory map. No functional changes. Signed-off-by: Jamin Lin <jamin_lin@aspeedtech.com> Reviewed-by: Cédric Le Goater <clg@redhat.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@oss.qualcomm.com> Link: https://lore.kernel.org/qemu-devel/20260706052701.1141740-5-jamin_lin@aspeedtech.com Signed-off-by: Cédric Le Goater <clg@redhat.com>

Jamin Lin committed Jul 6, 2026 at 05:27 UTC 59a3b57bab6c1e7104b9ebaa70b3f1c85fc4f2e4
4 files changed +27
hw/arm/aspeed_ast27x0-ssp.c
+12
@@ -22,10 +22,12 @@ static const hwaddr aspeed_soc_ast27x0ssp_memmap[] = {
22 [ASPEED_DEV_SDRAM] = 0x00000000,
23 [ASPEED_DEV_SRAM0] = 0x70000000,
24 [ASPEED_DEV_INTC] = 0x72100000,
25 + [ASPEED_DEV_PRIC0] = 0x72140000,
26 [ASPEED_DEV_SCU] = 0x72C02000,
27 [ASPEED_DEV_TIMER1] = 0x72C10000,
28 [ASPEED_DEV_UART4] = 0x72C1A000,
29 [ASPEED_DEV_IPC0] = 0x72C1C000,
30 + [ASPEED_DEV_PRIC1] = 0x74100000,
31 [ASPEED_DEV_SCUIO] = 0x74C02000,
32 [ASPEED_DEV_INTCIO] = 0x74C18000,
33 [ASPEED_DEV_UART0] = 0x74C33000,
@@ -141,6 +143,10 @@ static void aspeed_soc_ast27x0ssp_init(Object *obj)
143 TYPE_UNIMPLEMENTED_DEVICE);
144 object_initialize_child(obj, "scuio", &a->scuio,
145 TYPE_UNIMPLEMENTED_DEVICE);
146 + object_initialize_child(obj, "pric0", &a->pric[0],
147 + TYPE_UNIMPLEMENTED_DEVICE);
148 + object_initialize_child(obj, "pric1", &a->pric[1],
149 + TYPE_UNIMPLEMENTED_DEVICE);
150 }
151
152 static void aspeed_soc_ast27x0ssp_realize(DeviceState *dev_soc, Error **errp)
@@ -255,6 +261,12 @@ static void aspeed_soc_ast27x0ssp_realize(DeviceState *dev_soc, Error **errp)
261 aspeed_mmio_map_unimplemented(s->memory, SYS_BUS_DEVICE(&a->scuio),
262 "aspeed.scuio",
263 sc->memmap[ASPEED_DEV_SCUIO], 0x1000);
264 + aspeed_mmio_map_unimplemented(s->memory, SYS_BUS_DEVICE(&a->pric[0]),
265 + "aspeed.pric0",
266 + sc->memmap[ASPEED_DEV_PRIC0], 0x1000);
267 + aspeed_mmio_map_unimplemented(s->memory, SYS_BUS_DEVICE(&a->pric[1]),
268 + "aspeed.pric1",
269 + sc->memmap[ASPEED_DEV_PRIC1], 0x1000);
270 }
271
272 static void aspeed_soc_ast27x0ssp_class_init(ObjectClass *klass,
hw/arm/aspeed_ast27x0-tsp.c
+12
@@ -22,10 +22,12 @@ static const hwaddr aspeed_soc_ast27x0tsp_memmap[] = {
22 [ASPEED_DEV_SDRAM] = 0x00000000,
23 [ASPEED_DEV_SRAM0] = 0x70000000,
24 [ASPEED_DEV_INTC] = 0x72100000,
25 + [ASPEED_DEV_PRIC0] = 0x72140000,
26 [ASPEED_DEV_SCU] = 0x72C02000,
27 [ASPEED_DEV_TIMER1] = 0x72C10000,
28 [ASPEED_DEV_UART4] = 0x72C1A000,
29 [ASPEED_DEV_IPC0] = 0x72C1C000,
30 + [ASPEED_DEV_PRIC1] = 0x74100000,
31 [ASPEED_DEV_SCUIO] = 0x74C02000,
32 [ASPEED_DEV_INTCIO] = 0x74C18000,
33 [ASPEED_DEV_UART0] = 0x74C33000,
@@ -141,6 +143,10 @@ static void aspeed_soc_ast27x0tsp_init(Object *obj)
143 TYPE_UNIMPLEMENTED_DEVICE);
144 object_initialize_child(obj, "scuio", &a->scuio,
145 TYPE_UNIMPLEMENTED_DEVICE);
146 + object_initialize_child(obj, "pric0", &a->pric[0],
147 + TYPE_UNIMPLEMENTED_DEVICE);
148 + object_initialize_child(obj, "pric1", &a->pric[1],
149 + TYPE_UNIMPLEMENTED_DEVICE);
150 }
151
152 static void aspeed_soc_ast27x0tsp_realize(DeviceState *dev_soc, Error **errp)
@@ -255,6 +261,12 @@ static void aspeed_soc_ast27x0tsp_realize(DeviceState *dev_soc, Error **errp)
261 aspeed_mmio_map_unimplemented(s->memory, SYS_BUS_DEVICE(&a->scuio),
262 "aspeed.scuio",
263 sc->memmap[ASPEED_DEV_SCUIO], 0x1000);
264 + aspeed_mmio_map_unimplemented(s->memory, SYS_BUS_DEVICE(&a->pric[0]),
265 + "aspeed.pric0",
266 + sc->memmap[ASPEED_DEV_PRIC0], 0x1000);
267 + aspeed_mmio_map_unimplemented(s->memory, SYS_BUS_DEVICE(&a->pric[1]),
268 + "aspeed.pric1",
269 + sc->memmap[ASPEED_DEV_PRIC1], 0x1000);
270 }
271
272 static void aspeed_soc_ast27x0tsp_class_init(ObjectClass *klass,
include/hw/arm/aspeed_coprocessor.h
+1
@@ -48,6 +48,7 @@ struct Aspeed27x0CoprocessorState {
48 AspeedINTCState intc[2];
49 UnimplementedDeviceState ipc[2];
50 UnimplementedDeviceState scuio;
51 + UnimplementedDeviceState pric[2];
52
53 ARMv7MState armv7m;
54 };
include/hw/arm/aspeed_soc.h
+2
@@ -295,6 +295,8 @@ enum {
295 ASPEED_DEV_IOEXP1_INTCIO,
296 ASPEED_DEV_IOEXP0_I3C,
297 ASPEED_DEV_IOEXP1_I3C,
298 + ASPEED_DEV_PRIC0,
299 + ASPEED_DEV_PRIC1,
300 };
301
302 const char *aspeed_soc_cpu_type(const char * const *valid_cpu_types);