mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
hw/arm/ast27x0: Add SRAM link and alias mapping for SSP coprocessor
AST2700 has a 128KB SRAM, physically mapped at 0x10000000–0x1001FFFF for the PSP (CA35) processor. The SSP coprocessor shares this same SRAM but accesses it through a different address window at 0x70000000–0x7001FFFF. To model this shared-memory behavior in QEMU, this commit introduces a linked SRAM property and alias mapping between the PSP and SSP subsystems. Changes include: - Add a "MemoryRegion *sram" link and "MemoryRegion sram_alias" to AspeedCoprocessorState. - Register the new "sram" property in aspeed_coprocessor_common.c. - In aspeed_ast27x0-fc.c, connect the SSP coprocessor’s "sram" link to the PSP’s SRAM region. - In aspeed_ast27x0-ssp.c, create an alias mapping for SRAM at 0x70000000 – 0x7001FFFF in the SSP’s memory map. This ensures that the SSP can correctly access the shared SRAM contents through its own address space while maintaining a consistent physical backing region. It also guarantees that the SRAM is realized before the SSP device, ensuring successful alias setup. Signed-off-by: Jamin Lin <jamin_lin@aspeedtech.com> Reviewed-by: Cédric Le Goater <clg@redhat.com> Link: https://lore.kernel.org/qemu-devel/20251015062210.3128710-4-jamin_lin@aspeedtech.com Signed-off-by: Cédric Le Goater <clg@redhat.com>
This commit is contained in:
committed by
Cédric Le Goater
parent
4e7232f268
commit
00d65b4541
@@ -118,6 +118,8 @@ static bool ast2700fc_ssp_init(MachineState *machine, Error **errp)
|
||||
AspeedCoprocessorState *soc;
|
||||
AspeedCoprocessorClass *sc;
|
||||
Ast2700FCState *s = AST2700A1FC(machine);
|
||||
AspeedSoCState *psp = ASPEED_SOC(&s->ca35);
|
||||
|
||||
s->ssp_sysclk = clock_new(OBJECT(s), "SSP_SYSCLK");
|
||||
clock_set_hz(s->ssp_sysclk, 200000000ULL);
|
||||
|
||||
@@ -134,6 +136,8 @@ static bool ast2700fc_ssp_init(MachineState *machine, Error **errp)
|
||||
sc = ASPEED_COPROCESSOR_GET_CLASS(soc);
|
||||
aspeed_soc_uart_set_chr(soc->uart, ASPEED_DEV_UART4, sc->uarts_base,
|
||||
sc->uarts_num, serial_hd(1));
|
||||
object_property_set_link(OBJECT(&s->ssp), "sram",
|
||||
OBJECT(&psp->sram), &error_abort);
|
||||
if (!qdev_realize(DEVICE(&s->ssp), NULL, errp)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
|
||||
static const hwaddr aspeed_soc_ast27x0ssp_memmap[] = {
|
||||
[ASPEED_DEV_SDRAM] = 0x00000000,
|
||||
[ASPEED_DEV_SRAM] = 0x70000000,
|
||||
[ASPEED_DEV_INTC] = 0x72100000,
|
||||
[ASPEED_DEV_SCU] = 0x72C02000,
|
||||
[ASPEED_DEV_SCUIO] = 0x74C02000,
|
||||
@@ -195,6 +196,12 @@ static void aspeed_soc_ast27x0ssp_realize(DeviceState *dev_soc, Error **errp)
|
||||
sc->memmap[ASPEED_DEV_SDRAM],
|
||||
&s->sdram);
|
||||
|
||||
/* SRAM */
|
||||
memory_region_init_alias(&s->sram_alias, OBJECT(s), "sram.alias",
|
||||
s->sram, 0, memory_region_size(s->sram));
|
||||
memory_region_add_subregion(s->memory, sc->memmap[ASPEED_DEV_SRAM],
|
||||
&s->sram_alias);
|
||||
|
||||
/* SCU */
|
||||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->scu), errp)) {
|
||||
return;
|
||||
|
||||
@@ -25,6 +25,8 @@ static void aspeed_coprocessor_realize(DeviceState *dev, Error **errp)
|
||||
static const Property aspeed_coprocessor_properties[] = {
|
||||
DEFINE_PROP_LINK("memory", AspeedCoprocessorState, memory,
|
||||
TYPE_MEMORY_REGION, MemoryRegion *),
|
||||
DEFINE_PROP_LINK("sram", AspeedCoprocessorState, sram, TYPE_MEMORY_REGION,
|
||||
MemoryRegion *),
|
||||
};
|
||||
|
||||
static void aspeed_coprocessor_class_init(ObjectClass *oc, const void *data)
|
||||
|
||||
@@ -17,7 +17,8 @@ struct AspeedCoprocessorState {
|
||||
|
||||
MemoryRegion *memory;
|
||||
MemoryRegion sdram;
|
||||
MemoryRegion sram;
|
||||
MemoryRegion *sram;
|
||||
MemoryRegion sram_alias;
|
||||
Clock *sysclk;
|
||||
|
||||
AspeedSCUState scu;
|
||||
|
||||
Reference in New Issue
Block a user