[PATCH v1 04/21] hw/arm/aspeed_ast27x0-ssp: Switch SSP memory to SDRAM and use dram_container for remap support

Jamin Lin via posted 21 patches 1 month, 2 weeks ago
[PATCH v1 04/21] hw/arm/aspeed_ast27x0-ssp: Switch SSP memory to SDRAM and use dram_container for remap support
Posted by Jamin Lin via 1 month, 2 weeks ago
According to the AST2700 design, the SSP coprocessor uses its own SDRAM
instead of SRAM. Additionally, all three coprocessors—SSP, TSP, and PSP—share
a common SRAM block. In the previous implementation, the SSP memory region
was labeled and sized as "SRAM", but in practice it was being used as SSP's
local SDRAM.

This commit updates the SSP memory mapping to reflect the correct hardware
design:

- Replace the SRAM region with a "512MB SDRAM" region starting at 0x0.
- Rename the internal variable from "sram" to "dram_container" for clarity.
- Use "AST2700_SSP_SDRAM_SIZE" (512MB) instead of the previous 32MB SRAM size.
- Map the new region using "ASPEED_DEV_SDRAM" instead of "ASPEED_DEV_SRAM".

This change also prepares for future enhancements where PSP DRAM will be
remapped into this SSP SDRAM container using subregions at specific offsets.
Using "dram_container" makes it easier to manage aliases and remap logic.

Signed-off-by: Jamin Lin <jamin_lin@aspeedtech.com>
---
 hw/arm/aspeed_ast27x0-ssp.c | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/hw/arm/aspeed_ast27x0-ssp.c b/hw/arm/aspeed_ast27x0-ssp.c
index 80ec5996c1..9641e27de1 100644
--- a/hw/arm/aspeed_ast27x0-ssp.c
+++ b/hw/arm/aspeed_ast27x0-ssp.c
@@ -15,10 +15,10 @@
 #include "hw/misc/unimp.h"
 #include "hw/arm/aspeed_soc.h"
 
-#define AST2700_SSP_RAM_SIZE (32 * MiB)
+#define AST2700_SSP_SDRAM_SIZE (512 * MiB)
 
 static const hwaddr aspeed_soc_ast27x0ssp_memmap[] = {
-    [ASPEED_DEV_SRAM]      =  0x00000000,
+    [ASPEED_DEV_SDRAM]     =  0x00000000,
     [ASPEED_DEV_INTC]      =  0x72100000,
     [ASPEED_DEV_SCU]       =  0x72C02000,
     [ASPEED_DEV_SCUIO]     =  0x74C02000,
@@ -163,7 +163,7 @@ static void aspeed_soc_ast27x0ssp_realize(DeviceState *dev_soc, Error **errp)
     AspeedSoCState *s = ASPEED_SOC(dev_soc);
     AspeedSoCClass *sc = ASPEED_SOC_GET_CLASS(s);
     DeviceState *armv7m;
-    g_autofree char *sram_name = NULL;
+    g_autofree char *name = NULL;
     int i;
 
     if (!clock_has_source(s->sysclk)) {
@@ -180,16 +180,17 @@ static void aspeed_soc_ast27x0ssp_realize(DeviceState *dev_soc, Error **errp)
                              OBJECT(s->memory), &error_abort);
     sysbus_realize(SYS_BUS_DEVICE(&a->armv7m), &error_abort);
 
-    sram_name = g_strdup_printf("aspeed.dram.%d",
-                                CPU(a->armv7m.cpu)->cpu_index);
+    /* SDRAM */
+    name = g_strdup_printf("aspeed.sdram-container.%d",
+                           CPU(a->armv7m.cpu)->cpu_index);
 
-    if (!memory_region_init_ram(&s->sram, OBJECT(s), sram_name, sc->sram_size,
-                                errp)) {
+    if (!memory_region_init_ram(&s->dram_container, OBJECT(s), name,
+                                AST2700_SSP_SDRAM_SIZE, errp)) {
         return;
     }
     memory_region_add_subregion(s->memory,
-                                sc->memmap[ASPEED_DEV_SRAM],
-                                &s->sram);
+                                sc->memmap[ASPEED_DEV_SDRAM],
+                                &s->dram_container);
 
     /* SCU */
     if (!sysbus_realize(SYS_BUS_DEVICE(&s->scu), errp)) {
@@ -268,7 +269,6 @@ static void aspeed_soc_ast27x0ssp_class_init(ObjectClass *klass, const void *dat
 
     sc->valid_cpu_types = valid_cpu_types;
     sc->silicon_rev = AST2700_A1_SILICON_REV;
-    sc->sram_size = AST2700_SSP_RAM_SIZE;
     sc->spis_num = 0;
     sc->ehcis_num = 0;
     sc->wdts_num = 0;
-- 
2.43.0


Re: [SPAM] [PATCH v1 04/21] hw/arm/aspeed_ast27x0-ssp: Switch SSP memory to SDRAM and use dram_container for remap support
Posted by Cédric Le Goater 3 days, 10 hours ago
On 7/17/25 05:40, Jamin Lin wrote:
> According to the AST2700 design, the SSP coprocessor uses its own SDRAM
> instead of SRAM. Additionally, all three coprocessors—SSP, TSP, and PSP—share
> a common SRAM block. In the previous implementation, the SSP memory region
> was labeled and sized as "SRAM", but in practice it was being used as SSP's
> local SDRAM.


So the SSP coprocessor has no SRAM ?


> 
> This commit updates the SSP memory mapping to reflect the correct hardware
> design:
> 
> - Replace the SRAM region with a "512MB SDRAM" region starting at 0x0.

Is 512MB a real HW value ?


Thanks,

C.



> - Rename the internal variable from "sram" to "dram_container" for clarity.
> - Use "AST2700_SSP_SDRAM_SIZE" (512MB) instead of the previous 32MB SRAM size.
> - Map the new region using "ASPEED_DEV_SDRAM" instead of "ASPEED_DEV_SRAM".
> 
> This change also prepares for future enhancements where PSP DRAM will be
> remapped into this SSP SDRAM container using subregions at specific offsets.
> Using "dram_container" makes it easier to manage aliases and remap logic.
> 
> Signed-off-by: Jamin Lin <jamin_lin@aspeedtech.com>
> ---
>   hw/arm/aspeed_ast27x0-ssp.c | 20 ++++++++++----------
>   1 file changed, 10 insertions(+), 10 deletions(-)
> 
> diff --git a/hw/arm/aspeed_ast27x0-ssp.c b/hw/arm/aspeed_ast27x0-ssp.c
> index 80ec5996c1..9641e27de1 100644
> --- a/hw/arm/aspeed_ast27x0-ssp.c
> +++ b/hw/arm/aspeed_ast27x0-ssp.c
> @@ -15,10 +15,10 @@
>   #include "hw/misc/unimp.h"
>   #include "hw/arm/aspeed_soc.h"
>   
> -#define AST2700_SSP_RAM_SIZE (32 * MiB)
> +#define AST2700_SSP_SDRAM_SIZE (512 * MiB)
>   
>   static const hwaddr aspeed_soc_ast27x0ssp_memmap[] = {
> -    [ASPEED_DEV_SRAM]      =  0x00000000,
> +    [ASPEED_DEV_SDRAM]     =  0x00000000,
>       [ASPEED_DEV_INTC]      =  0x72100000,
>       [ASPEED_DEV_SCU]       =  0x72C02000,
>       [ASPEED_DEV_SCUIO]     =  0x74C02000,
> @@ -163,7 +163,7 @@ static void aspeed_soc_ast27x0ssp_realize(DeviceState *dev_soc, Error **errp)
>       AspeedSoCState *s = ASPEED_SOC(dev_soc);
>       AspeedSoCClass *sc = ASPEED_SOC_GET_CLASS(s);
>       DeviceState *armv7m;
> -    g_autofree char *sram_name = NULL;
> +    g_autofree char *name = NULL;
>       int i;
>   
>       if (!clock_has_source(s->sysclk)) {
> @@ -180,16 +180,17 @@ static void aspeed_soc_ast27x0ssp_realize(DeviceState *dev_soc, Error **errp)
>                                OBJECT(s->memory), &error_abort);
>       sysbus_realize(SYS_BUS_DEVICE(&a->armv7m), &error_abort);
>   
> -    sram_name = g_strdup_printf("aspeed.dram.%d",
> -                                CPU(a->armv7m.cpu)->cpu_index);
> +    /* SDRAM */
> +    name = g_strdup_printf("aspeed.sdram-container.%d",
> +                           CPU(a->armv7m.cpu)->cpu_index);
>   
> -    if (!memory_region_init_ram(&s->sram, OBJECT(s), sram_name, sc->sram_size,
> -                                errp)) {
> +    if (!memory_region_init_ram(&s->dram_container, OBJECT(s), name,
> +                                AST2700_SSP_SDRAM_SIZE, errp)) {
>           return;
>       }
>       memory_region_add_subregion(s->memory,
> -                                sc->memmap[ASPEED_DEV_SRAM],
> -                                &s->sram);
> +                                sc->memmap[ASPEED_DEV_SDRAM],
> +                                &s->dram_container);
>   
>       /* SCU */
>       if (!sysbus_realize(SYS_BUS_DEVICE(&s->scu), errp)) {
> @@ -268,7 +269,6 @@ static void aspeed_soc_ast27x0ssp_class_init(ObjectClass *klass, const void *dat
>   
>       sc->valid_cpu_types = valid_cpu_types;
>       sc->silicon_rev = AST2700_A1_SILICON_REV;
> -    sc->sram_size = AST2700_SSP_RAM_SIZE;
>       sc->spis_num = 0;
>       sc->ehcis_num = 0;
>       sc->wdts_num = 0;


RE: [SPAM] [PATCH v1 04/21] hw/arm/aspeed_ast27x0-ssp: Switch SSP memory to SDRAM and use dram_container for remap support
Posted by Jamin Lin 2 days, 16 hours ago
Hi Cédric

> Subject: Re: [SPAM] [PATCH v1 04/21] hw/arm/aspeed_ast27x0-ssp: Switch SSP
> memory to SDRAM and use dram_container for remap support
> 
> On 7/17/25 05:40, Jamin Lin wrote:
> > According to the AST2700 design, the SSP coprocessor uses its own
> > SDRAM instead of SRAM. Additionally, all three coprocessors—SSP, TSP,
> > and PSP—share a common SRAM block. In the previous implementation, the
> > SSP memory region was labeled and sized as "SRAM", but in practice it
> > was being used as SSP's local SDRAM.
> 
> 
> So the SSP coprocessor has no SRAM ?

Thanks for review.

Yes, both the coprocessor and the PSP(Cortex A35) share the same SRAM.

> 
> 
> >
> > This commit updates the SSP memory mapping to reflect the correct
> > hardware
> > design:
> >
> > - Replace the SRAM region with a "512MB SDRAM" region starting at 0x0.
> 
> Is 512MB a real HW value ?
> 

Yes, the SDRAM size is 512MB in a real HW.

Jamin
> 
> Thanks,
> 
> C.
> 
> 
> 
> > - Rename the internal variable from "sram" to "dram_container" for clarity.
> > - Use "AST2700_SSP_SDRAM_SIZE" (512MB) instead of the previous 32MB
> SRAM size.
> > - Map the new region using "ASPEED_DEV_SDRAM" instead of
> "ASPEED_DEV_SRAM".
> >
> > This change also prepares for future enhancements where PSP DRAM will
> > be remapped into this SSP SDRAM container using subregions at specific
> offsets.
> > Using "dram_container" makes it easier to manage aliases and remap logic.
> >
> > Signed-off-by: Jamin Lin <jamin_lin@aspeedtech.com>
> > ---
> >   hw/arm/aspeed_ast27x0-ssp.c | 20 ++++++++++----------
> >   1 file changed, 10 insertions(+), 10 deletions(-)
> >
> > diff --git a/hw/arm/aspeed_ast27x0-ssp.c b/hw/arm/aspeed_ast27x0-ssp.c
> > index 80ec5996c1..9641e27de1 100644
> > --- a/hw/arm/aspeed_ast27x0-ssp.c
> > +++ b/hw/arm/aspeed_ast27x0-ssp.c
> > @@ -15,10 +15,10 @@
> >   #include "hw/misc/unimp.h"
> >   #include "hw/arm/aspeed_soc.h"
> >
> > -#define AST2700_SSP_RAM_SIZE (32 * MiB)
> > +#define AST2700_SSP_SDRAM_SIZE (512 * MiB)
> >
> >   static const hwaddr aspeed_soc_ast27x0ssp_memmap[] = {
> > -    [ASPEED_DEV_SRAM]      =  0x00000000,
> > +    [ASPEED_DEV_SDRAM]     =  0x00000000,
> >       [ASPEED_DEV_INTC]      =  0x72100000,
> >       [ASPEED_DEV_SCU]       =  0x72C02000,
> >       [ASPEED_DEV_SCUIO]     =  0x74C02000,
> > @@ -163,7 +163,7 @@ static void
> aspeed_soc_ast27x0ssp_realize(DeviceState *dev_soc, Error **errp)
> >       AspeedSoCState *s = ASPEED_SOC(dev_soc);
> >       AspeedSoCClass *sc = ASPEED_SOC_GET_CLASS(s);
> >       DeviceState *armv7m;
> > -    g_autofree char *sram_name = NULL;
> > +    g_autofree char *name = NULL;
> >       int i;
> >
> >       if (!clock_has_source(s->sysclk)) { @@ -180,16 +180,17 @@ static
> > void aspeed_soc_ast27x0ssp_realize(DeviceState *dev_soc, Error **errp)
> >                                OBJECT(s->memory), &error_abort);
> >       sysbus_realize(SYS_BUS_DEVICE(&a->armv7m), &error_abort);
> >
> > -    sram_name = g_strdup_printf("aspeed.dram.%d",
> > -                                CPU(a->armv7m.cpu)->cpu_index);
> > +    /* SDRAM */
> > +    name = g_strdup_printf("aspeed.sdram-container.%d",
> > +                           CPU(a->armv7m.cpu)->cpu_index);
> >
> > -    if (!memory_region_init_ram(&s->sram, OBJECT(s), sram_name,
> sc->sram_size,
> > -                                errp)) {
> > +    if (!memory_region_init_ram(&s->dram_container, OBJECT(s), name,
> > +                                AST2700_SSP_SDRAM_SIZE, errp)) {
> >           return;
> >       }
> >       memory_region_add_subregion(s->memory,
> > -                                sc->memmap[ASPEED_DEV_SRAM],
> > -                                &s->sram);
> > +
> sc->memmap[ASPEED_DEV_SDRAM],
> > +                                &s->dram_container);
> >
> >       /* SCU */
> >       if (!sysbus_realize(SYS_BUS_DEVICE(&s->scu), errp)) { @@ -268,7
> > +269,6 @@ static void aspeed_soc_ast27x0ssp_class_init(ObjectClass
> > *klass, const void *dat
> >
> >       sc->valid_cpu_types = valid_cpu_types;
> >       sc->silicon_rev = AST2700_A1_SILICON_REV;
> > -    sc->sram_size = AST2700_SSP_RAM_SIZE;
> >       sc->spis_num = 0;
> >       sc->ehcis_num = 0;
> >       sc->wdts_num = 0;