mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
hw/arm/aspeed: Move aspeed_load_vbootrom to common SoC code
Move the vbootrom loader helper into common SoC code so it can be reused by all ASPEED boards, and decouple the API from AspeedMachineState. Specifically: - Move aspeed_load_vbootrom() to hw/arm/aspeed_soc_common.c and declare it in include/hw/arm/aspeed_soc.h. - Change the helper’s signature to take AspeedSoCState * instead of AspeedMachineState *. - Update aspeed_machine_init() call sites accordingly. No functional change. Signed-off-by: Jamin Lin <jamin_lin@aspeedtech.com> Reviewed-by: Cédric Le Goater <clg@redhat.com> Link: https://lore.kernel.org/qemu-devel/20250925050535.2657256-5-jamin_lin@aspeedtech.com Signed-off-by: Cédric Le Goater <clg@redhat.com>
This commit is contained in:
committed by
Cédric Le Goater
parent
a705e9997f
commit
ecabf8ba94
+1
-30
@@ -26,9 +26,7 @@
|
||||
#include "hw/qdev-properties.h"
|
||||
#include "system/block-backend.h"
|
||||
#include "system/reset.h"
|
||||
#include "hw/loader.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "qemu/datadir.h"
|
||||
#include "qemu/units.h"
|
||||
#include "hw/qdev-clock.h"
|
||||
#include "system/system.h"
|
||||
@@ -263,33 +261,6 @@ static void aspeed_reset_secondary(ARMCPU *cpu,
|
||||
cpu_set_pc(cs, info->smp_loader_start);
|
||||
}
|
||||
|
||||
#define VBOOTROM_FILE_NAME "ast27x0_bootrom.bin"
|
||||
|
||||
/*
|
||||
* This function locates the vbootrom image file specified via the command line
|
||||
* using the -bios option. It loads the specified image into the vbootrom
|
||||
* memory region and handles errors if the file cannot be found or loaded.
|
||||
*/
|
||||
static void aspeed_load_vbootrom(AspeedMachineState *bmc, const char *bios_name,
|
||||
Error **errp)
|
||||
{
|
||||
g_autofree char *filename = NULL;
|
||||
AspeedSoCState *soc = bmc->soc;
|
||||
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 sdhci_attach_drive(SDHCIState *sdhci, DriveInfo *dinfo, bool emmc,
|
||||
bool boot_emmc)
|
||||
{
|
||||
@@ -451,7 +422,7 @@ static void aspeed_machine_init(MachineState *machine)
|
||||
|
||||
if (amc->vbootrom) {
|
||||
bios_name = machine->firmware ?: VBOOTROM_FILE_NAME;
|
||||
aspeed_load_vbootrom(bmc, bios_name, &error_abort);
|
||||
aspeed_load_vbootrom(bmc->soc, bios_name, &error_abort);
|
||||
}
|
||||
|
||||
arm_load_kernel(ARM_CPU(first_cpu), machine, &aspeed_board_binfo);
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
#include "system/blockdev.h"
|
||||
#include "system/block-backend.h"
|
||||
#include "hw/loader.h"
|
||||
#include "qemu/datadir.h"
|
||||
|
||||
|
||||
const char *aspeed_soc_cpu_type(AspeedSoCClass *sc)
|
||||
@@ -195,6 +196,30 @@ void aspeed_install_boot_rom(AspeedSoCState *soc, BlockBackend *blk,
|
||||
&error_abort);
|
||||
}
|
||||
|
||||
/*
|
||||
* This function locates the vbootrom image file specified via the command line
|
||||
* using the -bios option. It loads the specified image into the vbootrom
|
||||
* memory region and handles errors if the file cannot be found or loaded.
|
||||
*/
|
||||
void aspeed_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 aspeed_soc_realize(DeviceState *dev, Error **errp)
|
||||
{
|
||||
AspeedSoCState *s = ASPEED_SOC(dev);
|
||||
|
||||
@@ -43,6 +43,8 @@
|
||||
#include "hw/char/serial-mm.h"
|
||||
#include "hw/intc/arm_gicv3.h"
|
||||
|
||||
#define VBOOTROM_FILE_NAME "ast27x0_bootrom.bin"
|
||||
|
||||
#define ASPEED_SPIS_NUM 3
|
||||
#define ASPEED_EHCIS_NUM 4
|
||||
#define ASPEED_WDTS_NUM 8
|
||||
@@ -316,6 +318,8 @@ void aspeed_write_boot_rom(BlockBackend *blk, hwaddr addr, size_t rom_size,
|
||||
Error **errp);
|
||||
void aspeed_install_boot_rom(AspeedSoCState *soc, BlockBackend *blk,
|
||||
MemoryRegion *boot_rom, uint64_t rom_size);
|
||||
void aspeed_load_vbootrom(AspeedSoCState *soc, const char *bios_name,
|
||||
Error **errp);
|
||||
|
||||
static inline int aspeed_uart_index(int uart_dev)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user