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
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);
> }
>
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);
> > }
> >
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.
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.
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.
© 2016 - 2026 Red Hat, Inc.