Hi Cédric

*
> Subject: Re: [PATCH v4 09/21] hw/misc/aspeed_scu: Add SCU support for SSP
> SDRAM remap
> 
> On 4/17/26 05:28, Jamin Lin wrote:
> > This commit adds SCU register support for SSP SDRAM remap control and
> > runtime activation. It introduces logic for the PSP to dynamically
> > configure the mapping of its own DRAM windows into SSP-visible SDRAM
> > space, enabling shared memory communication via memory region aliases.
> >
> > - coprocessor_sdram_remap[0]: maps PSP DRAM offset 0x400000000 (size:
> 0x1A77E000) to SSP SDRAM
> >      offset 0x5880000
> > - coprocessor_sdram_remap[1]: maps PSP DRAM offset 0x42C000000 (size:
> 0x05880000) to SSP SDRAM
> >      offset 0x0
> >
> > The SCU registers AST2700_SCU_SSP_CTRL_1/2 and
> > AST2700_SCU_SSP_REMAP_ADDR_{1,2} / REMAP_SIZE_{1,2} allow runtime
> > reconfiguration of alias offset, base, and size.
> >
> > |------------------------------------------|
> > |------------------------------------------| |------------------------
> > |------------------------------------------| ----|
> > |               PSP DRAM                   |         |
> SSP SDRAM           |
> > |------------------------------------------|
> > |------------------------------------------| |------------------------
> > |------------------------------------------| ----|
> > | 0x4_0000_0000 (SCU_124 << 4)             |     --> | 0x0000_0000
> |
> > |   remap1 base                            |---| |   |  - SCU_150:
> target addr    |
> > |   size: 0x1A77E000 (SCU_14C)             |   | |   |    remap2
> |
> > |------------------------------------------|   | |   
> > |----------------------------|
> > |                                          |   | |   |
> |
> > | 0x4_2C00_0000 (SCU_128 << 4)             |-----|   | 0x5880000
> |
> > |   remap2 base                            |   |     |  -
> SCU_148: target addr    |
> > |   size: 0x05880000 (SCU_154)             |   |---> |    remap1
> |
> > |------------------------------------------|
> > |------------------------------------------| |------------------------
> > |------------------------------------------| ----|
> >
> > Signed-off-by: Jamin Lin <[email protected]>
> > ---
> >   hw/misc/aspeed_scu.c | 54
> ++++++++++++++++++++++++++++++++++++++++++++
> >   1 file changed, 54 insertions(+)
> >
> > diff --git a/hw/misc/aspeed_scu.c b/hw/misc/aspeed_scu.c index
> > 6512b5fccd..8d1ad95402 100644
> > --- a/hw/misc/aspeed_scu.c
> > +++ b/hw/misc/aspeed_scu.c
> > @@ -147,6 +147,14 @@
> >
> >   /* SSP TSP */
> >   #define AST2700_SCU_SSP_CTRL_0          TO_REG(0x120)
> > +#define AST2700_SCU_SSP_CTRL_1          TO_REG(0x124)
> > +#define AST2700_SCU_SSP_CTRL_2          TO_REG(0x128)
> > +#define AST2700_SCU_SSP_REMAP_ADDR_0    TO_REG(0x140)
> > +#define AST2700_SCU_SSP_REMAP_SIZE_0    TO_REG(0x144)
> > +#define AST2700_SCU_SSP_REMAP_ADDR_1    TO_REG(0x148)
> > +#define AST2700_SCU_SSP_REMAP_SIZE_1    TO_REG(0x14C)
> > +#define AST2700_SCU_SSP_REMAP_ADDR_2    TO_REG(0x150)
> > +#define AST2700_SCU_SSP_REMAP_SIZE_2    TO_REG(0x154)
> >   #define AST2700_SCU_TSP_CTRL_0          TO_REG(0x160)
> >   #define AST2700_SSP_TSP_ENABLE          BIT(0)
> >   #define AST2700_SSP_TSP_RST             BIT(1)
> > @@ -938,6 +946,7 @@ static void aspeed_ast2700_scu_write(void *opaque,
> hwaddr offset,
> >   {
> >       Aspeed2700SCUState *a = ASPEED_2700_SCU(opaque);
> >       AspeedSCUState *s = ASPEED_SCU(opaque);
> > +    MemoryRegion *mr = NULL;
> >       int reg = TO_REG(offset);
> >       /* Truncate here so bitwise operations below behave as expected */
> >       uint32_t data = data64;
> > @@ -995,6 +1004,37 @@ static void aspeed_ast2700_scu_write(void
> *opaque, hwaddr offset,
> >           data &= ~AST2700_SSP_TSP_ENABLE;
> >           s->regs[reg] = (s->regs[reg] & ~0xff) | (data & 0xff);
> >           return;
> > +    case AST2700_SCU_SSP_CTRL_1:
> > +    case AST2700_SCU_SSP_CTRL_2:
> > +        mr = (reg == AST2700_SCU_SSP_CTRL_1) ?
> > +            &a->dram_remap_alias[0] : &a->dram_remap_alias[1];
> > +        if (a->ssp_cpuid < 0 || mr == NULL) {
> > +            return;
> > +        }
> > +        data &= 0x7fffffff;
> > +        memory_region_set_alias_offset(mr,
> > +                                       ((uint64_t) data << 4) &
> > + 0x3ffffffff);
> 
> I am not sure if transactions need to be protected. To check.
> 
Will add to avoid unexpected behavior.

> > +        break;
> > +    case AST2700_SCU_SSP_REMAP_ADDR_1:
> > +    case AST2700_SCU_SSP_REMAP_ADDR_2:
> > +        mr = (reg == AST2700_SCU_SSP_REMAP_ADDR_1) ?
> > +            &a->dram_remap_alias[0] : &a->dram_remap_alias[1];
> > +        if (a->ssp_cpuid < 0 || mr == NULL) {
> > +            return;
> > +        }
> > +        data &= 0x3fffffff;
> > +        memory_region_set_address(mr, data);
> > +        break;
> > +    case AST2700_SCU_SSP_REMAP_SIZE_1:
> > +    case AST2700_SCU_SSP_REMAP_SIZE_2:
> > +        mr = (reg == AST2700_SCU_SSP_REMAP_SIZE_1) ?
> > +            &a->dram_remap_alias[0] : &a->dram_remap_alias[1];
> > +        if (a->ssp_cpuid < 0 || mr == NULL) {
> > +            return;
> > +        }
> > +        data &= 0x3fffffff;
> > +        memory_region_set_size(mr, data);
> > +        break;
> >       case AST2700_SCU_SYS_RST_CTRL_1:
> >           if (a->ssp_cpuid < 0) {
> >               return;
> > @@ -1065,6 +1105,14 @@ static const uint32_t
> ast2700_a0_resets[ASPEED_AST2700_SCU_NR_REGS] = {
> >       [AST2700_HW_STRAP1_SEC2]        = 0x00000000,
> >       [AST2700_HW_STRAP1_SEC3]        = 0x1000408F,
> >       [AST2700_SCU_SSP_CTRL_0]        = 0x000007FE,
> > +    [AST2700_SCU_SSP_CTRL_1]        = 0x40000000,
> > +    [AST2700_SCU_SSP_CTRL_2]        = 0x42C00000,
> > +    [AST2700_SCU_SSP_REMAP_ADDR_0]  = 0x1FFFE000,
> > +    [AST2700_SCU_SSP_REMAP_SIZE_0]  = 0x00002000,
> > +    [AST2700_SCU_SSP_REMAP_ADDR_1]  = 0x05880000,
> > +    [AST2700_SCU_SSP_REMAP_SIZE_1]  = 0x1A77E000,
> > +    [AST2700_SCU_SSP_REMAP_ADDR_2]  = 0x00000000,
> > +    [AST2700_SCU_SSP_REMAP_SIZE_2]  = 0x05880000,
> >       [AST2700_SCU_TSP_CTRL_0]        = 0x000007FE,
> >       [AST2700_SCU_SYS_RST_CTRL_1]    = 0xFFC37FDC,
> >       [AST2700_SCU_SYS_RST_CTRL_2]    = 0x00001FFF,
> > @@ -1097,6 +1145,12 @@ static void
> > aspeed_ast2700_scu_reset(DeviceState *dev)
> >
> >       if (a->ssp_cpuid > 0) {
> >           arm_set_cpu_off(a->ssp_cpuid);
> 
>        memory_region_transaction_begin();
> 
Will add

> > +        memory_region_set_address(&a->dram_remap_alias[0],
> 0x5880000);
> > +        memory_region_set_alias_offset(&a->dram_remap_alias[0], 0);
> > +        memory_region_set_size(&a->dram_remap_alias[0],
> 0x1a77e000);
> > +        memory_region_set_address(&a->dram_remap_alias[1], 0);
> > +        memory_region_set_alias_offset(&a->dram_remap_alias[1],
> 0x2c000000);
> > +        memory_region_set_size(&a->dram_remap_alias[1], 0x5880000);
> 
>        memory_region_transaction_commit();
> 
Will add

Thanks,
Jamin
> >       }
> >
> >       if (a->tsp_cpuid > 0) {

Reply via email to