On 10/22/24 11:40, Jamin Lin wrote:
It only attached flash model of fmc and spi[0] in aspeed_machine_init function.
However, AST2500 and AST2600 have one fmc and two spi(spi1 and spi2)
controllers; AST2700 have one fmc and 3 spi(spi0, spi1 and spi2) controllers.

Besides, it used hardcode to attach flash model of fmc, spi[0] and spi[1] in
aspeed_minibmc_machine_init for AST1030.

To make both functions more flexible and support all ASPEED SOCs spi
controllers, adds a for loop with sc->spis_num to attach flash model of
all supported spi controllers. The sc->spis_num is from AspeedSoCClass.

Signed-off-by: Jamin Lin <jamin_...@aspeedtech.com>


Reviewed-by: Cédric Le Goater <c...@redhat.com>

Thanks,

C.


---
  hw/arm/aspeed.c | 21 ++++++++++++---------
  1 file changed, 12 insertions(+), 9 deletions(-)

diff --git a/hw/arm/aspeed.c b/hw/arm/aspeed.c
index b4b1ce9efb..7ac01a3562 100644
--- a/hw/arm/aspeed.c
+++ b/hw/arm/aspeed.c
@@ -419,9 +419,11 @@ static void aspeed_machine_init(MachineState *machine)
          aspeed_board_init_flashes(&bmc->soc->fmc,
                                bmc->fmc_model ? bmc->fmc_model : 
amc->fmc_model,
                                amc->num_cs, 0);
-        aspeed_board_init_flashes(&bmc->soc->spi[0],
-                              bmc->spi_model ? bmc->spi_model : amc->spi_model,
-                              1, amc->num_cs);
+        for (i = 0; i < sc->spis_num; i++) {
+            aspeed_board_init_flashes(&bmc->soc->spi[i],
+                            bmc->spi_model ? bmc->spi_model : amc->spi_model,
+                            amc->num_cs, amc->num_cs + (amc->num_cs * i));
+        }
      }
if (machine->kernel_filename && sc->num_cpus > 1) {
@@ -1579,7 +1581,9 @@ static void aspeed_minibmc_machine_init(MachineState 
*machine)
  {
      AspeedMachineState *bmc = ASPEED_MACHINE(machine);
      AspeedMachineClass *amc = ASPEED_MACHINE_GET_CLASS(machine);
+    AspeedSoCClass *sc;
      Clock *sysclk;
+    int i;
sysclk = clock_new(OBJECT(machine), "SYSCLK");
      clock_set_hz(sysclk, SYSCLK_FRQ);
@@ -1587,6 +1591,7 @@ static void aspeed_minibmc_machine_init(MachineState 
*machine)
      bmc->soc = ASPEED_SOC(object_new(amc->soc_name));
      object_property_add_child(OBJECT(machine), "soc", OBJECT(bmc->soc));
      object_unref(OBJECT(bmc->soc));
+    sc = ASPEED_SOC_GET_CLASS(bmc->soc);
      qdev_connect_clock_in(DEVICE(bmc->soc), "sysclk", sysclk);
object_property_set_link(OBJECT(bmc->soc), "memory",
@@ -1599,13 +1604,11 @@ static void aspeed_minibmc_machine_init(MachineState 
*machine)
                                amc->num_cs,
                                0);
- aspeed_board_init_flashes(&bmc->soc->spi[0],
-                              bmc->spi_model ? bmc->spi_model : amc->spi_model,
-                              amc->num_cs, amc->num_cs);
-
-    aspeed_board_init_flashes(&bmc->soc->spi[1],
+    for (i = 0; i < sc->spis_num; i++) {
+        aspeed_board_init_flashes(&bmc->soc->spi[i],
                                bmc->spi_model ? bmc->spi_model : 
amc->spi_model,
-                              amc->num_cs, (amc->num_cs * 2));
+                              amc->num_cs, amc->num_cs + (amc->num_cs * i));
+    }
if (amc->i2c_init) {
          amc->i2c_init(bmc);


Reply via email to