On 7/7/26 08:09, Jamin Lin wrote:
The original AST2700 FC support series [1] is fairly large, making it
difficult to review all changes together.
To help speed up the review process, this series extracts the SCU/FMC-related
refactoring into a standalone prerequisite series.
hw/arm/aspeed_ast27x0-ssp.c | 56 +++++++++++---
hw/arm/aspeed_ast27x0-tsp.c | 56 +++++++++++---
hw/arm/aspeed_coprocessor_common.c | 2 -
It is unfortunate these 2 complex models diverge so few...
$ diff -u -U0 hw/arm/aspeed_ast27x0-tsp.c hw/arm/aspeed_ast27x0-ssp.c
--- hw/arm/aspeed_ast27x0-tsp.c 2026-07-09 18:42:33
+++ hw/arm/aspeed_ast27x0-ssp.c 2026-07-09 18:42:33
@@ -2 +2 @@
- * ASPEED Ast27x0 TSP Coprocessor
+ * ASPEED Ast27x0 SSP Coprocessor
@@ -19 +19 @@
-#define AST2700_TSP_SDRAM_SIZE (512 * MiB)
+#define AST2700_SSP_SDRAM_SIZE (512 * MiB)
@@ -21 +21 @@
-static const hwaddr aspeed_soc_ast27x0tsp_memmap[] = {
+static const hwaddr aspeed_soc_ast27x0ssp_memmap[] = {
@@ -50 +50 @@
-static const int aspeed_soc_ast27x0tsp_irqmap[] = {
+static const int aspeed_soc_ast27x0ssp_irqmap[] = {
@@ -68,2 +68,2 @@
-/* TSPINT 164 */
-static const int ast2700_tsp164_intcmap[] = {
+/* SSPINT 164 */
+static const int ast2700_ssp164_intcmap[] = {
@@ -91 +91 @@
-static struct nvic_intc_irq_info ast2700_tsp_intcmap[] = {
+static struct nvic_intc_irq_info ast2700_ssp_intcmap[] = {
@@ -96 +96 @@
- {164, 1, 4, ast2700_tsp164_intcmap},
+ {164, 1, 4, ast2700_ssp164_intcmap},
@@ -104 +104 @@
-static qemu_irq aspeed_soc_ast27x0tsp_get_irq(AspeedCoprocessorState *s,
+static qemu_irq aspeed_soc_ast27x0ssp_get_irq(AspeedCoprocessorState *s,
@@ -107 +107 @@
- Aspeed27x0CoprocessorState *a = ASPEED27X0TSP_COPROCESSOR(s);
+ Aspeed27x0CoprocessorState *a = ASPEED27X0SSP_COPROCESSOR(s);
@@ -114,5 +114,5 @@
- for (i = 0; i < ARRAY_SIZE(ast2700_tsp_intcmap); i++) {
- if (sc->irqmap[dev] == ast2700_tsp_intcmap[i].irq) {
- assert(ast2700_tsp_intcmap[i].ptr);
- or_idx = ast2700_tsp_intcmap[i].orgate_idx;
- idx = ast2700_tsp_intcmap[i].intc_idx;
+ for (i = 0; i < ARRAY_SIZE(ast2700_ssp_intcmap); i++) {
+ if (sc->irqmap[dev] == ast2700_ssp_intcmap[i].irq) {
+ assert(ast2700_ssp_intcmap[i].ptr);
+ or_idx = ast2700_ssp_intcmap[i].orgate_idx;
+ idx = ast2700_ssp_intcmap[i].intc_idx;
@@ -120 +120 @@
- ast2700_tsp_intcmap[i].ptr[dev]);
+ ast2700_ssp_intcmap[i].ptr[dev]);
@@ -127 +127 @@
-static void aspeed_soc_ast27x0tsp_init(Object *obj)
+static void aspeed_soc_ast27x0ssp_init(Object *obj)
@@ -129 +129 @@
- Aspeed27x0CoprocessorState *a = ASPEED27X0TSP_COPROCESSOR(obj);
+ Aspeed27x0CoprocessorState *a = ASPEED27X0SSP_COPROCESSOR(obj);
@@ -136 +136 @@
- TYPE_ASPEED_2700TSP_INTC);
+ TYPE_ASPEED_2700SSP_INTC);
@@ -138 +138 @@
- TYPE_ASPEED_2700TSP_INTCIO);
+ TYPE_ASPEED_2700SSP_INTCIO);
@@ -154 +154 @@
-static void aspeed_soc_ast27x0tsp_realize(DeviceState *dev_soc, Error
**errp)
+static void aspeed_soc_ast27x0ssp_realize(DeviceState *dev_soc, Error
**errp)
@@ -156 +156 @@
- Aspeed27x0CoprocessorState *a = ASPEED27X0TSP_COPROCESSOR(dev_soc);
+ Aspeed27x0CoprocessorState *a = ASPEED27X0SSP_COPROCESSOR(dev_soc);
@@ -170 +170 @@
- error_setg(errp, TYPE_ASPEED27X0TSP_COPROCESSOR
+ error_setg(errp, TYPE_ASPEED27X0SSP_COPROCESSOR
@@ -176 +176 @@
- error_setg(errp, TYPE_ASPEED27X0TSP_COPROCESSOR
+ error_setg(errp, TYPE_ASPEED27X0SSP_COPROCESSOR
@@ -182 +182 @@
- error_setg(errp, TYPE_ASPEED27X0TSP_COPROCESSOR
+ error_setg(errp, TYPE_ASPEED27X0SSP_COPROCESSOR
@@ -187 +187 @@
- /* AST27X0 TSP Core */
+ /* AST27X0 SSP Core */
@@ -196,2 +196,2 @@
- * The TSP starts in a powered-down state and can be powered up
- * by setting the TSP Control Register through the SCU
+ * The SSP starts in a powered-down state and can be powered up
+ * by setting the SSP Control Register through the SCU
@@ -208 +208 @@
- AST2700_TSP_SDRAM_SIZE, errp)) {
+ AST2700_SSP_SDRAM_SIZE, errp)) {
@@ -235,2 +235,5 @@
- /* SDRAM remap alias used by PSP to access TSP SDRAM */
- memory_region_add_subregion(&s->sdram, 0,
&a->scu->dram_remap_alias[2]);
+ /* SDRAM remap alias used by PSP to access SSP SDRAM */
+ memory_region_add_subregion(&s->sdram, 0,
&a->scu->dram_remap_alias[1]);
+ memory_region_add_subregion(&s->sdram,
+ memory_region_size(&a->scu->dram_remap_alias[1]),
+ &a->scu->dram_remap_alias[0]);
@@ -254 +257 @@
- /* irq source orgates -> INTC */
+ /* irq source orgates -> INTC0 */
@@ -260 +263 @@
- assert(i < ARRAY_SIZE(ast2700_tsp_intcmap));
+ assert(i < ARRAY_SIZE(ast2700_ssp_intcmap));
@@ -263 +266 @@
- ast2700_tsp_intcmap[i].irq));
+ ast2700_ssp_intcmap[i].irq));
@@ -265 +268 @@
- /* irq source orgates -> INTC */
+ /* irq source orgates -> INTCIO */
@@ -287 +290 @@
- aspeed_soc_ast27x0tsp_get_irq(s, s->uart_dev));
+ aspeed_soc_ast27x0ssp_get_irq(s, s->uart_dev));
@@ -325 +328 @@
-static void aspeed_soc_ast27x0tsp_class_init(ObjectClass *klass,
+static void aspeed_soc_ast27x0ssp_class_init(ObjectClass *klass,
@@ -329 +332 @@
- ARM_CPU_TYPE_NAME("cortex-m4"), /* TODO cortex-m4f */
+ ARM_CPU_TYPE_NAME("cortex-m4"), /* TODO: cortex-m4f */
@@ -337 +340 @@
- dc->realize = aspeed_soc_ast27x0tsp_realize;
+ dc->realize = aspeed_soc_ast27x0ssp_realize;
@@ -341,2 +344,2 @@
- sc->irqmap = aspeed_soc_ast27x0tsp_irqmap;
- sc->memmap = aspeed_soc_ast27x0tsp_memmap;
+ sc->irqmap = aspeed_soc_ast27x0ssp_irqmap;
+ sc->memmap = aspeed_soc_ast27x0ssp_memmap;
@@ -345 +348 @@
-static const TypeInfo aspeed_soc_ast27x0tsp_types[] = {
+static const TypeInfo aspeed_soc_ast27x0ssp_types[] = {
@@ -347 +350 @@
- .name = TYPE_ASPEED27X0TSP_COPROCESSOR,
+ .name = TYPE_ASPEED27X0SSP_COPROCESSOR,
@@ -350,2 +353,2 @@
- .instance_init = aspeed_soc_ast27x0tsp_init,
- .class_init = aspeed_soc_ast27x0tsp_class_init,
+ .instance_init = aspeed_soc_ast27x0ssp_init,
+ .class_init = aspeed_soc_ast27x0ssp_class_init,
@@ -355 +358 @@
-DEFINE_TYPES(aspeed_soc_ast27x0tsp_types)
+DEFINE_TYPES(aspeed_soc_ast27x0ssp_types)
And without the s/tsp/ssp/ name changes, the diff is as
small as:
$ diff -u -U0 hw/arm/aspeed_ast27x0-tsp.c hw/arm/aspeed_ast27x0-ssp.c
--- hw/arm/aspeed_ast27x0-tsp.c 2026-07-09 18:42:33
+++ hw/arm/aspeed_ast27x0-ssp.c 2026-07-10 01:10:06
@@ -236 +236,4 @@
- memory_region_add_subregion(&s->sdram, 0,
&a->scu->dram_remap_alias[2]);
+ memory_region_add_subregion(&s->sdram, 0,
&a->scu->dram_remap_alias[1]);
+ memory_region_add_subregion(&s->sdram,
+ memory_region_size(&a->scu->dram_remap_alias[1]),
+ &a->scu->dram_remap_alias[0]);
2 lines of differences! Could we unify?
Thanks,
Phil.