@samitouri / QOSamiQemu / commits / 21eac78874

hw/arm/aspeed_ast27x0: Add unimplemented OTP controller MMIO regions for SSP/TSP

The AST2700 SSP/TSP firmware accesses OTP MMIO regions that are not yet implemented in QEMU. This change adds unimplemented MMIO devices for the OTP 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-6-jamin_lin@aspeedtech.com Signed-off-by: Cédric Le Goater <clg@redhat.com>

Jamin Lin committed Jul 6, 2026 at 05:27 UTC 21eac78874d3404cb26c83f261af25e0cdcb9686
4 files changed +14
hw/arm/aspeed_ast27x0-ssp.c
+6
@@ -29,6 +29,7 @@ static const hwaddr aspeed_soc_ast27x0ssp_memmap[] = {
29 [ASPEED_DEV_IPC0] = 0x72C1C000,
30 [ASPEED_DEV_PRIC1] = 0x74100000,
31 [ASPEED_DEV_SCUIO] = 0x74C02000,
32 + [ASPEED_DEV_OTP] = 0x74C07000,
33 [ASPEED_DEV_INTCIO] = 0x74C18000,
34 [ASPEED_DEV_UART0] = 0x74C33000,
35 [ASPEED_DEV_UART1] = 0x74C33100,
@@ -147,6 +148,8 @@ static void aspeed_soc_ast27x0ssp_init(Object *obj)
148 TYPE_UNIMPLEMENTED_DEVICE);
149 object_initialize_child(obj, "pric1", &a->pric[1],
150 TYPE_UNIMPLEMENTED_DEVICE);
151 + object_initialize_child(obj, "otp", &a->otp,
152 + TYPE_UNIMPLEMENTED_DEVICE);
153 }
154
155 static void aspeed_soc_ast27x0ssp_realize(DeviceState *dev_soc, Error **errp)
@@ -267,6 +270,9 @@ static void aspeed_soc_ast27x0ssp_realize(DeviceState *dev_soc, Error **errp)
270 aspeed_mmio_map_unimplemented(s->memory, SYS_BUS_DEVICE(&a->pric[1]),
271 "aspeed.pric1",
272 sc->memmap[ASPEED_DEV_PRIC1], 0x1000);
273 + aspeed_mmio_map_unimplemented(s->memory, SYS_BUS_DEVICE(&a->otp),
274 + "aspeed.otp",
275 + sc->memmap[ASPEED_DEV_OTP], 0x800);
276 }
277
278 static void aspeed_soc_ast27x0ssp_class_init(ObjectClass *klass,
hw/arm/aspeed_ast27x0-tsp.c
+6
@@ -29,6 +29,7 @@ static const hwaddr aspeed_soc_ast27x0tsp_memmap[] = {
29 [ASPEED_DEV_IPC0] = 0x72C1C000,
30 [ASPEED_DEV_PRIC1] = 0x74100000,
31 [ASPEED_DEV_SCUIO] = 0x74C02000,
32 + [ASPEED_DEV_OTP] = 0x74C07000,
33 [ASPEED_DEV_INTCIO] = 0x74C18000,
34 [ASPEED_DEV_UART0] = 0x74C33000,
35 [ASPEED_DEV_UART1] = 0x74C33100,
@@ -147,6 +148,8 @@ static void aspeed_soc_ast27x0tsp_init(Object *obj)
148 TYPE_UNIMPLEMENTED_DEVICE);
149 object_initialize_child(obj, "pric1", &a->pric[1],
150 TYPE_UNIMPLEMENTED_DEVICE);
151 + object_initialize_child(obj, "otp", &a->otp,
152 + TYPE_UNIMPLEMENTED_DEVICE);
153 }
154
155 static void aspeed_soc_ast27x0tsp_realize(DeviceState *dev_soc, Error **errp)
@@ -267,6 +270,9 @@ static void aspeed_soc_ast27x0tsp_realize(DeviceState *dev_soc, Error **errp)
270 aspeed_mmio_map_unimplemented(s->memory, SYS_BUS_DEVICE(&a->pric[1]),
271 "aspeed.pric1",
272 sc->memmap[ASPEED_DEV_PRIC1], 0x1000);
273 + aspeed_mmio_map_unimplemented(s->memory, SYS_BUS_DEVICE(&a->otp),
274 + "aspeed.otp",
275 + sc->memmap[ASPEED_DEV_OTP], 0x800);
276 }
277
278 static void aspeed_soc_ast27x0tsp_class_init(ObjectClass *klass,
include/hw/arm/aspeed_coprocessor.h
+1
@@ -49,6 +49,7 @@ struct Aspeed27x0CoprocessorState {
49 UnimplementedDeviceState ipc[2];
50 UnimplementedDeviceState scuio;
51 UnimplementedDeviceState pric[2];
52 + UnimplementedDeviceState otp;
53
54 ARMv7MState armv7m;
55 };
include/hw/arm/aspeed_soc.h
+1
@@ -297,6 +297,7 @@ enum {
297 ASPEED_DEV_IOEXP1_I3C,
298 ASPEED_DEV_PRIC0,
299 ASPEED_DEV_PRIC1,
300 + ASPEED_DEV_OTP,
301 };
302
303 const char *aspeed_soc_cpu_type(const char * const *valid_cpu_types);