[PATCH v1 01/21] hw/arm/aspeed_ast27x0-fc: Support VBootRom

Jamin Lin via posted 21 patches 1 month, 2 weeks ago
[PATCH v1 01/21] hw/arm/aspeed_ast27x0-fc: Support VBootRom
Posted by Jamin Lin via 1 month, 2 weeks ago
Introduces support for loading a vbootrom image into the dedicated vbootrom
memory region in the AST2700 Full Core machine.

Additionally, it implements a mechanism to extract the content of fmc_cs0
flash data(backend file) and copy it into the memory-mapped region
corresponding to ASPEED_DEV_SPI_BOOT.

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

diff --git a/hw/arm/aspeed_ast27x0-fc.c b/hw/arm/aspeed_ast27x0-fc.c
index 7087be4288..e2eee6183f 100644
--- a/hw/arm/aspeed_ast27x0-fc.c
+++ b/hw/arm/aspeed_ast27x0-fc.c
@@ -11,6 +11,7 @@
 
 #include "qemu/osdep.h"
 #include "qemu/units.h"
+#include "qemu/datadir.h"
 #include "qapi/error.h"
 #include "system/block-backend.h"
 #include "system/system.h"
@@ -35,6 +36,7 @@ struct Ast2700FCState {
 
     MemoryRegion ca35_memory;
     MemoryRegion ca35_dram;
+    MemoryRegion ca35_boot_rom;
     MemoryRegion ssp_memory;
     MemoryRegion tsp_memory;
 
@@ -55,12 +57,65 @@ struct Ast2700FCState {
 #define AST2700FC_HW_STRAP2 0x00000003
 #define AST2700FC_FMC_MODEL "w25q01jvq"
 #define AST2700FC_SPI_MODEL "w25q512jv"
+#define VBOOTROM_FILE_NAME  "ast27x0_bootrom.bin"
+
+static void ast2700fc_ca35_load_vbootrom(AspeedSoCState *soc,
+                                         const char *bios_name, Error **errp)
+{
+    g_autofree char *filename = NULL;
+    int ret;
+
+    filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, bios_name);
+    if (!filename) {
+        error_setg(errp, "Could not find vbootrom image '%s'", bios_name);
+        return;
+    }
+
+    ret = load_image_mr(filename, &soc->vbootrom);
+    if (ret < 0) {
+        error_setg(errp, "Failed to load vbootrom image '%s'", bios_name);
+        return;
+    }
+}
+
+static void ast2700fc_ca35_write_boot_rom(DriveInfo *dinfo, hwaddr addr,
+                                         size_t rom_size, Error **errp)
+{
+    BlockBackend *blk = blk_by_legacy_dinfo(dinfo);
+    g_autofree void *storage = NULL;
+    int64_t size;
+
+    /*
+     * The block backend size should have already been 'validated' by
+     * the creation of the m25p80 object.
+     */
+    size = blk_getlength(blk);
+    if (size <= 0) {
+        error_setg(errp, "failed to get flash size");
+        return;
+    }
+
+    if (rom_size > size) {
+        rom_size = size;
+    }
+
+    storage = g_malloc0(rom_size);
+    if (blk_pread(blk, 0, rom_size, storage, 0) < 0) {
+        error_setg(errp, "failed to read the initial flash content");
+        return;
+    }
+
+    rom_add_blob_fixed("aspeed.boot_rom", storage, rom_size, addr);
+}
 
 static void ast2700fc_ca35_init(MachineState *machine)
 {
     Ast2700FCState *s = AST2700A1FC(machine);
+    const char *bios_name = NULL;
     AspeedSoCState *soc;
     AspeedSoCClass *sc;
+    uint64_t rom_size;
+    DriveInfo *mtd0;
 
     object_initialize_child(OBJECT(s), "ca35", &s->ca35, "ast2700-a1");
     soc = ASPEED_SOC(&s->ca35);
@@ -118,6 +173,26 @@ static void ast2700fc_ca35_init(MachineState *machine)
     ast2700fc_board_info.ram_size = machine->ram_size;
     ast2700fc_board_info.loader_start = sc->memmap[ASPEED_DEV_SDRAM];
 
+    /* Install first FMC flash content as a boot rom. */
+    if (!s->mmio_exec) {
+        mtd0 = drive_get(IF_MTD, 0, 0);
+
+        if (mtd0) {
+            rom_size = memory_region_size(&soc->spi_boot);
+            memory_region_init_rom(&s->ca35_boot_rom, NULL, "aspeed.boot_rom",
+                                   rom_size, &error_abort);
+            memory_region_add_subregion_overlap(&soc->spi_boot_container, 0,
+                                                &s->ca35_boot_rom, 1);
+            ast2700fc_ca35_write_boot_rom(mtd0,
+                                          sc->memmap[ASPEED_DEV_SPI_BOOT],
+                                          rom_size, &error_abort);
+        }
+    }
+
+    /* VBOOTROM */
+    bios_name = machine->firmware ?: VBOOTROM_FILE_NAME;
+    ast2700fc_ca35_load_vbootrom(soc, bios_name, &error_abort);
+
     arm_load_kernel(ARM_CPU(first_cpu), machine, &ast2700fc_board_info);
 }
 
-- 
2.43.0
Re: [SPAM] [PATCH v1 01/21] hw/arm/aspeed_ast27x0-fc: Support VBootRom
Posted by Cédric Le Goater 3 days, 12 hours ago
On 7/17/25 05:40, Jamin Lin wrote:
> Introduces support for loading a vbootrom image into the dedicated vbootrom
> memory region in the AST2700 Full Core machine.
> 
> Additionally, it implements a mechanism to extract the content of fmc_cs0
> flash data(backend file) and copy it into the memory-mapped region
> corresponding to ASPEED_DEV_SPI_BOOT.
> 
> Signed-off-by: Jamin Lin <jamin_lin@aspeedtech.com>
> ---
>   hw/arm/aspeed_ast27x0-fc.c | 75 ++++++++++++++++++++++++++++++++++++++
>   1 file changed, 75 insertions(+)
> 
> diff --git a/hw/arm/aspeed_ast27x0-fc.c b/hw/arm/aspeed_ast27x0-fc.c
> index 7087be4288..e2eee6183f 100644
> --- a/hw/arm/aspeed_ast27x0-fc.c
> +++ b/hw/arm/aspeed_ast27x0-fc.c
> @@ -11,6 +11,7 @@
>   
>   #include "qemu/osdep.h"
>   #include "qemu/units.h"
> +#include "qemu/datadir.h"
>   #include "qapi/error.h"
>   #include "system/block-backend.h"
>   #include "system/system.h"
> @@ -35,6 +36,7 @@ struct Ast2700FCState {
>   
>       MemoryRegion ca35_memory;
>       MemoryRegion ca35_dram;
> +    MemoryRegion ca35_boot_rom;
>       MemoryRegion ssp_memory;
>       MemoryRegion tsp_memory;
>   
> @@ -55,12 +57,65 @@ struct Ast2700FCState {
>   #define AST2700FC_HW_STRAP2 0x00000003
>   #define AST2700FC_FMC_MODEL "w25q01jvq"
>   #define AST2700FC_SPI_MODEL "w25q512jv"
> +#define VBOOTROM_FILE_NAME  "ast27x0_bootrom.bin"
> +
> +static void ast2700fc_ca35_load_vbootrom(AspeedSoCState *soc,
> +                                         const char *bios_name, Error **errp)
> +{
> +    g_autofree char *filename = NULL;
> +    int ret;
> +
> +    filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, bios_name);
> +    if (!filename) {
> +        error_setg(errp, "Could not find vbootrom image '%s'", bios_name);
> +        return;
> +    }
> +
> +    ret = load_image_mr(filename, &soc->vbootrom);
> +    if (ret < 0) {
> +        error_setg(errp, "Failed to load vbootrom image '%s'", bios_name);
> +        return;
> +    }
> +}
> +
> +static void ast2700fc_ca35_write_boot_rom(DriveInfo *dinfo, hwaddr addr,
> +                                         size_t rom_size, Error **errp)
> +{
> +    BlockBackend *blk = blk_by_legacy_dinfo(dinfo);
> +    g_autofree void *storage = NULL;
> +    int64_t size;
> +
> +    /*
> +     * The block backend size should have already been 'validated' by
> +     * the creation of the m25p80 object.
> +     */
> +    size = blk_getlength(blk);
> +    if (size <= 0) {
> +        error_setg(errp, "failed to get flash size");
> +        return;
> +    }
> +
> +    if (rom_size > size) {
> +        rom_size = size;
> +    }
> +
> +    storage = g_malloc0(rom_size);
> +    if (blk_pread(blk, 0, rom_size, storage, 0) < 0) {
> +        error_setg(errp, "failed to read the initial flash content");
> +        return;
> +    }
> +
> +    rom_add_blob_fixed("aspeed.boot_rom", storage, rom_size, addr);
> +}

The above is duplicated code. Could we try to have common routines instead ?

>   static void ast2700fc_ca35_init(MachineState *machine)
>   {
>       Ast2700FCState *s = AST2700A1FC(machine);
> +    const char *bios_name = NULL;
>       AspeedSoCState *soc;
>       AspeedSoCClass *sc;
> +    uint64_t rom_size;
> +    DriveInfo *mtd0;
>   
>       object_initialize_child(OBJECT(s), "ca35", &s->ca35, "ast2700-a1");
>       soc = ASPEED_SOC(&s->ca35);
> @@ -118,6 +173,26 @@ static void ast2700fc_ca35_init(MachineState *machine)
>       ast2700fc_board_info.ram_size = machine->ram_size;
>       ast2700fc_board_info.loader_start = sc->memmap[ASPEED_DEV_SDRAM];
>   
> +    /* Install first FMC flash content as a boot rom. */

This is a first addition for the ast2700fc machine and ...

> +    if (!s->mmio_exec) {
> +        mtd0 = drive_get(IF_MTD, 0, 0);
> +
> +        if (mtd0) {
> +            rom_size = memory_region_size(&soc->spi_boot);
> +            memory_region_init_rom(&s->ca35_boot_rom, NULL, "aspeed.boot_rom",
> +                                   rom_size, &error_abort);
> +            memory_region_add_subregion_overlap(&soc->spi_boot_container, 0,
> +                                                &s->ca35_boot_rom, 1);
> +            ast2700fc_ca35_write_boot_rom(mtd0,
> +                                          sc->memmap[ASPEED_DEV_SPI_BOOT],
> +                                          rom_size, &error_abort);
> +        }
> +    }
> +
> +    /* VBOOTROM */

... this is a second. Could you please split the changes ?


Thanks,

C.




> +    bios_name = machine->firmware ?: VBOOTROM_FILE_NAME;
> +    ast2700fc_ca35_load_vbootrom(soc, bios_name, &error_abort);
> +
>       arm_load_kernel(ARM_CPU(first_cpu), machine, &ast2700fc_board_info);
>   }
>
RE: [SPAM] [PATCH v1 01/21] hw/arm/aspeed_ast27x0-fc: Support VBootRom
Posted by Jamin Lin 3 days, 9 hours ago
Hi Cédric

> Subject: Re: [SPAM] [PATCH v1 01/21] hw/arm/aspeed_ast27x0-fc: Support
> VBootRom
> 
> On 7/17/25 05:40, Jamin Lin wrote:
> > Introduces support for loading a vbootrom image into the dedicated
> > vbootrom memory region in the AST2700 Full Core machine.
> >
> > Additionally, it implements a mechanism to extract the content of
> > fmc_cs0 flash data(backend file) and copy it into the memory-mapped
> > region corresponding to ASPEED_DEV_SPI_BOOT.
> >
> > Signed-off-by: Jamin Lin <jamin_lin@aspeedtech.com>
> > ---
> >   hw/arm/aspeed_ast27x0-fc.c | 75
> ++++++++++++++++++++++++++++++++++++++
> >   1 file changed, 75 insertions(+)
> >
> > diff --git a/hw/arm/aspeed_ast27x0-fc.c b/hw/arm/aspeed_ast27x0-fc.c
> > index 7087be4288..e2eee6183f 100644
> > --- a/hw/arm/aspeed_ast27x0-fc.c
> > +++ b/hw/arm/aspeed_ast27x0-fc.c
> > @@ -11,6 +11,7 @@
> >
> >   #include "qemu/osdep.h"
> >   #include "qemu/units.h"
> > +#include "qemu/datadir.h"
> >   #include "qapi/error.h"
> >   #include "system/block-backend.h"
> >   #include "system/system.h"
> > @@ -35,6 +36,7 @@ struct Ast2700FCState {
> >
> >       MemoryRegion ca35_memory;
> >       MemoryRegion ca35_dram;
> > +    MemoryRegion ca35_boot_rom;
> >       MemoryRegion ssp_memory;
> >       MemoryRegion tsp_memory;
> >
> > @@ -55,12 +57,65 @@ struct Ast2700FCState {
> >   #define AST2700FC_HW_STRAP2 0x00000003
> >   #define AST2700FC_FMC_MODEL "w25q01jvq"
> >   #define AST2700FC_SPI_MODEL "w25q512jv"
> > +#define VBOOTROM_FILE_NAME  "ast27x0_bootrom.bin"
> > +
> > +static void ast2700fc_ca35_load_vbootrom(AspeedSoCState *soc,
> > +                                         const char *bios_name,
> Error
> > +**errp) {
> > +    g_autofree char *filename = NULL;
> > +    int ret;
> > +
> > +    filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, bios_name);
> > +    if (!filename) {
> > +        error_setg(errp, "Could not find vbootrom image '%s'",
> bios_name);
> > +        return;
> > +    }
> > +
> > +    ret = load_image_mr(filename, &soc->vbootrom);
> > +    if (ret < 0) {
> > +        error_setg(errp, "Failed to load vbootrom image '%s'",
> bios_name);
> > +        return;
> > +    }
> > +}
> > +
> > +static void ast2700fc_ca35_write_boot_rom(DriveInfo *dinfo, hwaddr addr,
> > +                                         size_t rom_size, Error
> > +**errp) {
> > +    BlockBackend *blk = blk_by_legacy_dinfo(dinfo);
> > +    g_autofree void *storage = NULL;
> > +    int64_t size;
> > +
> > +    /*
> > +     * The block backend size should have already been 'validated' by
> > +     * the creation of the m25p80 object.
> > +     */
> > +    size = blk_getlength(blk);
> > +    if (size <= 0) {
> > +        error_setg(errp, "failed to get flash size");
> > +        return;
> > +    }
> > +
> > +    if (rom_size > size) {
> > +        rom_size = size;
> > +    }
> > +
> > +    storage = g_malloc0(rom_size);
> > +    if (blk_pread(blk, 0, rom_size, storage, 0) < 0) {
> > +        error_setg(errp, "failed to read the initial flash content");
> > +        return;
> > +    }
> > +
> > +    rom_add_blob_fixed("aspeed.boot_rom", storage, rom_size, addr); }
> 
> The above is duplicated code. Could we try to have common routines instead ?

Thanks for your review and suggestion.

Per our earlier discussion, we plan to refactor hw/arm/aspeed.c. As a first
step, I can move the vbootrom helpers into a common source file so they can be
reused by other boards.

Do you have a preference for the filename?
hw/arm/aspeed_utils.c (with a small header in include/hw/arm/aspeed_utils.h),

Once that’s in place, aspeed_ast27x0f.c can reuse these helpers to support
vbootrom with coprocessors.

Thanks-Jamin

#define VBOOTROM_FILE_NAME  "ast27x0_bootrom.bin"
static void aspeed_load_vbootrom(AspeedMachineState *bmc, const char *bios_name,
                                 Error **errp)
static void aspeed_install_boot_rom(AspeedMachineState *bmc, BlockBackend *blk,
                                    uint64_t rom_size)
static void write_boot_rom(BlockBackend *blk, hwaddr addr, size_t rom_size,
                           Error **errp)
> 
> >   static void ast2700fc_ca35_init(MachineState *machine)
> >   {
> >       Ast2700FCState *s = AST2700A1FC(machine);
> > +    const char *bios_name = NULL;
> >       AspeedSoCState *soc;
> >       AspeedSoCClass *sc;
> > +    uint64_t rom_size;
> > +    DriveInfo *mtd0;
> >
> >       object_initialize_child(OBJECT(s), "ca35", &s->ca35, "ast2700-a1");
> >       soc = ASPEED_SOC(&s->ca35);
> > @@ -118,6 +173,26 @@ static void ast2700fc_ca35_init(MachineState
> *machine)
> >       ast2700fc_board_info.ram_size = machine->ram_size;
> >       ast2700fc_board_info.loader_start =
> > sc->memmap[ASPEED_DEV_SDRAM];
> >
> > +    /* Install first FMC flash content as a boot rom. */
> 
> This is a first addition for the ast2700fc machine and ...
> 
> > +    if (!s->mmio_exec) {
> > +        mtd0 = drive_get(IF_MTD, 0, 0);
> > +
> > +        if (mtd0) {
> > +            rom_size = memory_region_size(&soc->spi_boot);
> > +            memory_region_init_rom(&s->ca35_boot_rom, NULL,
> "aspeed.boot_rom",
> > +                                   rom_size, &error_abort);
> > +
> memory_region_add_subregion_overlap(&soc->spi_boot_container, 0,
> > +
> &s->ca35_boot_rom, 1);
> > +            ast2700fc_ca35_write_boot_rom(mtd0,
> > +
> sc->memmap[ASPEED_DEV_SPI_BOOT],
> > +                                          rom_size,
> &error_abort);
> > +        }
> > +    }
> > +
> > +    /* VBOOTROM */
> 
> ... this is a second. Could you please split the changes ?
> 

Will do

> 
> Thanks,
> 
> C.
> 
> 
> 
> 
> > +    bios_name = machine->firmware ?: VBOOTROM_FILE_NAME;
> > +    ast2700fc_ca35_load_vbootrom(soc, bios_name, &error_abort);
> > +
> >       arm_load_kernel(ARM_CPU(first_cpu), machine,
> &ast2700fc_board_info);
> >   }
> >

Re: [SPAM] [PATCH v1 01/21] hw/arm/aspeed_ast27x0-fc: Support VBootRom
Posted by Cédric Le Goater 3 days, 4 hours ago
On 9/2/25 10:28, Jamin Lin wrote:
> Hi Cédric
> 
>> Subject: Re: [SPAM] [PATCH v1 01/21] hw/arm/aspeed_ast27x0-fc: Support
>> VBootRom
>>
>> On 7/17/25 05:40, Jamin Lin wrote:
>>> Introduces support for loading a vbootrom image into the dedicated
>>> vbootrom memory region in the AST2700 Full Core machine.
>>>
>>> Additionally, it implements a mechanism to extract the content of
>>> fmc_cs0 flash data(backend file) and copy it into the memory-mapped
>>> region corresponding to ASPEED_DEV_SPI_BOOT.
>>>
>>> Signed-off-by: Jamin Lin <jamin_lin@aspeedtech.com>
>>> ---
>>>    hw/arm/aspeed_ast27x0-fc.c | 75
>> ++++++++++++++++++++++++++++++++++++++
>>>    1 file changed, 75 insertions(+)
>>>
>>> diff --git a/hw/arm/aspeed_ast27x0-fc.c b/hw/arm/aspeed_ast27x0-fc.c
>>> index 7087be4288..e2eee6183f 100644
>>> --- a/hw/arm/aspeed_ast27x0-fc.c
>>> +++ b/hw/arm/aspeed_ast27x0-fc.c
>>> @@ -11,6 +11,7 @@
>>>
>>>    #include "qemu/osdep.h"
>>>    #include "qemu/units.h"
>>> +#include "qemu/datadir.h"
>>>    #include "qapi/error.h"
>>>    #include "system/block-backend.h"
>>>    #include "system/system.h"
>>> @@ -35,6 +36,7 @@ struct Ast2700FCState {
>>>
>>>        MemoryRegion ca35_memory;
>>>        MemoryRegion ca35_dram;
>>> +    MemoryRegion ca35_boot_rom;
>>>        MemoryRegion ssp_memory;
>>>        MemoryRegion tsp_memory;
>>>
>>> @@ -55,12 +57,65 @@ struct Ast2700FCState {
>>>    #define AST2700FC_HW_STRAP2 0x00000003
>>>    #define AST2700FC_FMC_MODEL "w25q01jvq"
>>>    #define AST2700FC_SPI_MODEL "w25q512jv"
>>> +#define VBOOTROM_FILE_NAME  "ast27x0_bootrom.bin"
>>> +
>>> +static void ast2700fc_ca35_load_vbootrom(AspeedSoCState *soc,
>>> +                                         const char *bios_name,
>> Error
>>> +**errp) {
>>> +    g_autofree char *filename = NULL;
>>> +    int ret;
>>> +
>>> +    filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, bios_name);
>>> +    if (!filename) {
>>> +        error_setg(errp, "Could not find vbootrom image '%s'",
>> bios_name);
>>> +        return;
>>> +    }
>>> +
>>> +    ret = load_image_mr(filename, &soc->vbootrom);
>>> +    if (ret < 0) {
>>> +        error_setg(errp, "Failed to load vbootrom image '%s'",
>> bios_name);
>>> +        return;
>>> +    }
>>> +}
>>> +
>>> +static void ast2700fc_ca35_write_boot_rom(DriveInfo *dinfo, hwaddr addr,
>>> +                                         size_t rom_size, Error
>>> +**errp) {
>>> +    BlockBackend *blk = blk_by_legacy_dinfo(dinfo);
>>> +    g_autofree void *storage = NULL;
>>> +    int64_t size;
>>> +
>>> +    /*
>>> +     * The block backend size should have already been 'validated' by
>>> +     * the creation of the m25p80 object.
>>> +     */
>>> +    size = blk_getlength(blk);
>>> +    if (size <= 0) {
>>> +        error_setg(errp, "failed to get flash size");
>>> +        return;
>>> +    }
>>> +
>>> +    if (rom_size > size) {
>>> +        rom_size = size;
>>> +    }
>>> +
>>> +    storage = g_malloc0(rom_size);
>>> +    if (blk_pread(blk, 0, rom_size, storage, 0) < 0) {
>>> +        error_setg(errp, "failed to read the initial flash content");
>>> +        return;
>>> +    }
>>> +
>>> +    rom_add_blob_fixed("aspeed.boot_rom", storage, rom_size, addr); }
>>
>> The above is duplicated code. Could we try to have common routines instead ?
> 
> Thanks for your review and suggestion.
> 
> Per our earlier discussion, we plan to refactor hw/arm/aspeed.c. As a first
> step, I can move the vbootrom helpers into a common source file so they can be
> reused by other boards.
> 
> Do you have a preference for the filename?
> hw/arm/aspeed_utils.c (with a small header in include/hw/arm/aspeed_utils.h),


There is a aspeed_soc_common.c file for such helpers.


Thanks,

C.

RE: [SPAM] [PATCH v1 01/21] hw/arm/aspeed_ast27x0-fc: Support VBootRom
Posted by Jamin Lin 2 days, 12 hours ago
Hi Cédric,

> Subject: Re: [SPAM] [PATCH v1 01/21] hw/arm/aspeed_ast27x0-fc: Support
> VBootRom
> 
> On 9/2/25 10:28, Jamin Lin wrote:
> > Hi Cédric
> >
> >> Subject: Re: [SPAM] [PATCH v1 01/21] hw/arm/aspeed_ast27x0-fc:
> >> Support VBootRom
> >>
> >
> > Thanks for your review and suggestion.
> >
> > Per our earlier discussion, we plan to refactor hw/arm/aspeed.c. As a
> > first step, I can move the vbootrom helpers into a common source file
> > so they can be reused by other boards.
> >
> > Do you have a preference for the filename?
> > hw/arm/aspeed_utils.c (with a small header in
> > include/hw/arm/aspeed_utils.h),
> 
> 
> There is a aspeed_soc_common.c file for such helpers.
> 
Thanks for the suggestions.

It seems that aspeed_soc_common.c is meant for code shared across all ASPEED SoCs rather than the board-specific code.
I am planning to move the following APIs into a common file.

static void aspeed_load_vbootrom(AspeedMachineState *bmc, const char *bios_name,
                                 Error **errp)
static void aspeed_install_boot_rom(AspeedMachineState *bmc, BlockBackend *blk,
                                    uint64_t rom_size)
static void write_boot_rom(BlockBackend *blk, hwaddr addr, size_t rom_size,
                           Error **errp)

To build successfully, the AspeedMachineState struct also needs to be moved into aspeed.h.

struct AspeedMachineState {
    /* Private */
    MachineState parent_obj;
    /* Public */

    AspeedSoCState *soc;
    MemoryRegion boot_rom;
    bool mmio_exec;
    uint32_t uart_chosen;
    char *fmc_model;
    char *spi_model;
    uint32_t hw_strap1;
};

If I place the above APIs in aspeed_soc_common.h that header would also need to include aspeed.h.
To avoid mixing SOC-level and board-level code, I propose creating a new c/h file to place them such
as aspeed_board_common.c and aspeed_board_common.h
Do you have any concerns or could you please give me any suggestion?

Thanks-Jamin 

> 
> Thanks,
> 
> C.
RE: [SPAM] [PATCH v1 01/21] hw/arm/aspeed_ast27x0-fc: Support VBootRom
Posted by Jamin Lin 2 days, 9 hours ago
Hi Cédric

> Subject: RE: [SPAM] [PATCH v1 01/21] hw/arm/aspeed_ast27x0-fc: Support
> VBootRom
> 
> Hi Cédric,
> 
> > Subject: Re: [SPAM] [PATCH v1 01/21] hw/arm/aspeed_ast27x0-fc: Support
> > VBootRom
> >
> > On 9/2/25 10:28, Jamin Lin wrote:
> > > Hi Cédric
> > >
> > >> Subject: Re: [SPAM] [PATCH v1 01/21] hw/arm/aspeed_ast27x0-fc:
> > >> Support VBootRom
> > >>
> > >
> > > Thanks for your review and suggestion.
> > >
> > > Per our earlier discussion, we plan to refactor hw/arm/aspeed.c. As
> > > a first step, I can move the vbootrom helpers into a common source
> > > file so they can be reused by other boards.
> > >
> > > Do you have a preference for the filename?
> > > hw/arm/aspeed_utils.c (with a small header in
> > > include/hw/arm/aspeed_utils.h),
> >
> >
> > There is a aspeed_soc_common.c file for such helpers.
> >
> Thanks for the suggestions.
> 

Sorry, please ignore my previous comments.  
I realized that I can replace AspeedMachineState with AspeedSoCState to make the API more generic.  
Apologies for the inconvenience.

Jamin

> It seems that aspeed_soc_common.c is meant for code shared across all
> ASPEED SoCs rather than the board-specific code.
> I am planning to move the following APIs into a common file.
> 
> static void aspeed_load_vbootrom(AspeedMachineState *bmc, const char
> *bios_name,
>                                  Error **errp) static void
> aspeed_install_boot_rom(AspeedMachineState *bmc, BlockBackend *blk,
>                                     uint64_t rom_size) static void
> write_boot_rom(BlockBackend *blk, hwaddr addr, size_t rom_size,
>                            Error **errp)
> 
> To build successfully, the AspeedMachineState struct also needs to be moved
> into aspeed.h.
> 
> struct AspeedMachineState {
>     /* Private */
>     MachineState parent_obj;
>     /* Public */
> 
>     AspeedSoCState *soc;
>     MemoryRegion boot_rom;
>     bool mmio_exec;
>     uint32_t uart_chosen;
>     char *fmc_model;
>     char *spi_model;
>     uint32_t hw_strap1;
> };
> 
> If I place the above APIs in aspeed_soc_common.h that header would also
> need to include aspeed.h.
> To avoid mixing SOC-level and board-level code, I propose creating a new c/h
> file to place them such as aspeed_board_common.c and
> aspeed_board_common.h Do you have any concerns or could you please give
> me any suggestion?
> 
> Thanks-Jamin
> 
> >
> > Thanks,
> >
> > C.