hw/arm/aspeed: Split AST1030 EVB machine into a separate source file for maintainability
This commit moves the Aspeed AST1030 MiniBMC machine implementation out of aspeed.c into a new standalone file aspeed_ast10x0_evb.c. This refactor continues the modularization effort for Aspeed platform support, placing each board’s logic and initialization sequence in its own dedicated source file. It improves maintainability, readability, and makes it easier to extend support for additional AST10x0-based variants. Key updates include: - Moved aspeed_minibmc_machine_init() and aspeed_minibmc_machine_ast1030_evb_class_init() from aspeed.c to aspeed_ast10x0_evb.c. - Moved ast1030_evb_i2c_init() and associated I2C setup code. - Removed AST1030 EVB machine type registration from aspeed.c. - Added aspeed_ast10x0_evb.c to the Meson build system (meson.build). No functional changes. 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/20251104031325.146374-31-jamin_lin@aspeedtech.com Signed-off-by: Cédric Le Goater <clg@redhat.com>
This commit is contained in:
parent
fcbcfb5afe
commit
1d2a5f8f5d
3 changed files with 109 additions and 89 deletions
|
|
@ -16,14 +16,9 @@
|
|||
#include "hw/arm/aspeed_soc.h"
|
||||
#include "hw/arm/machines-qom.h"
|
||||
#include "hw/block/flash.h"
|
||||
#include "hw/i2c/smbus_eeprom.h"
|
||||
#include "hw/gpio/pca9552.h"
|
||||
#include "hw/gpio/pca9554.h"
|
||||
#include "hw/sensor/tmp105.h"
|
||||
#include "hw/misc/led.h"
|
||||
#include "hw/qdev-properties.h"
|
||||
#include "system/block-backend.h"
|
||||
#include "system/reset.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "qemu/units.h"
|
||||
#include "hw/qdev-clock.h"
|
||||
|
|
@ -424,92 +419,8 @@ static void aspeed_machine_class_init(ObjectClass *oc, const void *data)
|
|||
aspeed_machine_class_props_init(oc);
|
||||
}
|
||||
|
||||
#define AST1030_INTERNAL_FLASH_SIZE (1024 * 1024)
|
||||
/* Main SYSCLK frequency in Hz (200MHz) */
|
||||
#define SYSCLK_FRQ 200000000ULL
|
||||
|
||||
static void aspeed_minibmc_machine_init(MachineState *machine)
|
||||
{
|
||||
AspeedMachineState *bmc = ASPEED_MACHINE(machine);
|
||||
AspeedMachineClass *amc = ASPEED_MACHINE_GET_CLASS(machine);
|
||||
Clock *sysclk;
|
||||
|
||||
sysclk = clock_new(OBJECT(machine), "SYSCLK");
|
||||
clock_set_hz(sysclk, SYSCLK_FRQ);
|
||||
|
||||
bmc->soc = ASPEED_SOC(object_new(amc->soc_name));
|
||||
object_property_add_child(OBJECT(machine), "soc", OBJECT(bmc->soc));
|
||||
object_unref(OBJECT(bmc->soc));
|
||||
qdev_connect_clock_in(DEVICE(bmc->soc), "sysclk", sysclk);
|
||||
|
||||
object_property_set_link(OBJECT(bmc->soc), "memory",
|
||||
OBJECT(get_system_memory()), &error_abort);
|
||||
aspeed_connect_serial_hds_to_uarts(bmc);
|
||||
qdev_realize(DEVICE(bmc->soc), NULL, &error_abort);
|
||||
|
||||
if (defaults_enabled()) {
|
||||
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,
|
||||
amc->num_cs, amc->num_cs);
|
||||
|
||||
aspeed_board_init_flashes(&bmc->soc->spi[1],
|
||||
bmc->spi_model ? bmc->spi_model : amc->spi_model,
|
||||
amc->num_cs, (amc->num_cs * 2));
|
||||
}
|
||||
|
||||
if (amc->i2c_init) {
|
||||
amc->i2c_init(bmc);
|
||||
}
|
||||
|
||||
armv7m_load_kernel(ARM_CPU(first_cpu),
|
||||
machine->kernel_filename,
|
||||
0,
|
||||
AST1030_INTERNAL_FLASH_SIZE);
|
||||
}
|
||||
|
||||
static void ast1030_evb_i2c_init(AspeedMachineState *bmc)
|
||||
{
|
||||
AspeedSoCState *soc = bmc->soc;
|
||||
|
||||
/* U10 24C08 connects to SDA/SCL Group 1 by default */
|
||||
uint8_t *eeprom_buf = g_malloc0(32 * 1024);
|
||||
smbus_eeprom_init_one(aspeed_i2c_get_bus(&soc->i2c, 0), 0x50, eeprom_buf);
|
||||
|
||||
/* U11 LM75 connects to SDA/SCL Group 2 by default */
|
||||
i2c_slave_create_simple(aspeed_i2c_get_bus(&soc->i2c, 1), "tmp105", 0x4d);
|
||||
}
|
||||
|
||||
static void aspeed_minibmc_machine_ast1030_evb_class_init(ObjectClass *oc,
|
||||
const void *data)
|
||||
{
|
||||
MachineClass *mc = MACHINE_CLASS(oc);
|
||||
AspeedMachineClass *amc = ASPEED_MACHINE_CLASS(oc);
|
||||
|
||||
mc->desc = "Aspeed AST1030 MiniBMC (Cortex-M4)";
|
||||
amc->soc_name = "ast1030-a1";
|
||||
amc->hw_strap1 = 0;
|
||||
amc->hw_strap2 = 0;
|
||||
mc->init = aspeed_minibmc_machine_init;
|
||||
amc->i2c_init = ast1030_evb_i2c_init;
|
||||
mc->default_ram_size = 0;
|
||||
amc->fmc_model = "w25q80bl";
|
||||
amc->spi_model = "w25q256";
|
||||
amc->num_cs = 2;
|
||||
amc->macs_mask = 0;
|
||||
aspeed_machine_class_init_cpus_defaults(mc);
|
||||
}
|
||||
|
||||
static const TypeInfo aspeed_machine_types[] = {
|
||||
{
|
||||
.name = MACHINE_TYPE_NAME("ast1030-evb"),
|
||||
.parent = TYPE_ASPEED_MACHINE,
|
||||
.class_init = aspeed_minibmc_machine_ast1030_evb_class_init,
|
||||
}, {
|
||||
.name = TYPE_ASPEED_MACHINE,
|
||||
.parent = TYPE_MACHINE,
|
||||
.instance_size = sizeof(AspeedMachineState),
|
||||
|
|
|
|||
108
hw/arm/aspeed_ast10x0_evb.c
Normal file
108
hw/arm/aspeed_ast10x0_evb.c
Normal file
|
|
@ -0,0 +1,108 @@
|
|||
/*
|
||||
* ASPEED AST10x0 EVB
|
||||
*
|
||||
* Copyright 2016 IBM Corp.
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0-or-later
|
||||
*/
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "qapi/error.h"
|
||||
#include "hw/arm/boot.h"
|
||||
#include "hw/arm/machines-qom.h"
|
||||
#include "hw/arm/aspeed.h"
|
||||
#include "hw/arm/aspeed_soc.h"
|
||||
#include "hw/qdev-clock.h"
|
||||
#include "system/system.h"
|
||||
#include "hw/i2c/smbus_eeprom.h"
|
||||
|
||||
#define AST1030_INTERNAL_FLASH_SIZE (1024 * 1024)
|
||||
/* Main SYSCLK frequency in Hz (200MHz) */
|
||||
#define SYSCLK_FRQ 200000000ULL
|
||||
|
||||
static void aspeed_minibmc_machine_init(MachineState *machine)
|
||||
{
|
||||
AspeedMachineState *bmc = ASPEED_MACHINE(machine);
|
||||
AspeedMachineClass *amc = ASPEED_MACHINE_GET_CLASS(machine);
|
||||
Clock *sysclk;
|
||||
|
||||
sysclk = clock_new(OBJECT(machine), "SYSCLK");
|
||||
clock_set_hz(sysclk, SYSCLK_FRQ);
|
||||
|
||||
bmc->soc = ASPEED_SOC(object_new(amc->soc_name));
|
||||
object_property_add_child(OBJECT(machine), "soc", OBJECT(bmc->soc));
|
||||
object_unref(OBJECT(bmc->soc));
|
||||
qdev_connect_clock_in(DEVICE(bmc->soc), "sysclk", sysclk);
|
||||
|
||||
object_property_set_link(OBJECT(bmc->soc), "memory",
|
||||
OBJECT(get_system_memory()), &error_abort);
|
||||
aspeed_connect_serial_hds_to_uarts(bmc);
|
||||
qdev_realize(DEVICE(bmc->soc), NULL, &error_abort);
|
||||
|
||||
if (defaults_enabled()) {
|
||||
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,
|
||||
amc->num_cs, amc->num_cs);
|
||||
|
||||
aspeed_board_init_flashes(&bmc->soc->spi[1],
|
||||
bmc->spi_model ? bmc->spi_model : amc->spi_model,
|
||||
amc->num_cs, (amc->num_cs * 2));
|
||||
}
|
||||
|
||||
if (amc->i2c_init) {
|
||||
amc->i2c_init(bmc);
|
||||
}
|
||||
|
||||
armv7m_load_kernel(ARM_CPU(first_cpu),
|
||||
machine->kernel_filename,
|
||||
0,
|
||||
AST1030_INTERNAL_FLASH_SIZE);
|
||||
}
|
||||
|
||||
static void ast1030_evb_i2c_init(AspeedMachineState *bmc)
|
||||
{
|
||||
AspeedSoCState *soc = bmc->soc;
|
||||
|
||||
/* U10 24C08 connects to SDA/SCL Group 1 by default */
|
||||
uint8_t *eeprom_buf = g_malloc0(32 * 1024);
|
||||
smbus_eeprom_init_one(aspeed_i2c_get_bus(&soc->i2c, 0), 0x50, eeprom_buf);
|
||||
|
||||
/* U11 LM75 connects to SDA/SCL Group 2 by default */
|
||||
i2c_slave_create_simple(aspeed_i2c_get_bus(&soc->i2c, 1), "tmp105", 0x4d);
|
||||
}
|
||||
|
||||
static void aspeed_minibmc_machine_ast1030_evb_class_init(ObjectClass *oc,
|
||||
const void *data)
|
||||
{
|
||||
MachineClass *mc = MACHINE_CLASS(oc);
|
||||
AspeedMachineClass *amc = ASPEED_MACHINE_CLASS(oc);
|
||||
|
||||
mc->desc = "Aspeed AST1030 MiniBMC (Cortex-M4)";
|
||||
amc->soc_name = "ast1030-a1";
|
||||
amc->hw_strap1 = 0;
|
||||
amc->hw_strap2 = 0;
|
||||
mc->init = aspeed_minibmc_machine_init;
|
||||
amc->i2c_init = ast1030_evb_i2c_init;
|
||||
mc->default_ram_size = 0;
|
||||
amc->fmc_model = "w25q80bl";
|
||||
amc->spi_model = "w25q256";
|
||||
amc->num_cs = 2;
|
||||
amc->macs_mask = 0;
|
||||
aspeed_machine_class_init_cpus_defaults(mc);
|
||||
}
|
||||
|
||||
static const TypeInfo aspeed_ast10x0_evb_types[] = {
|
||||
{
|
||||
.name = MACHINE_TYPE_NAME("ast1030-evb"),
|
||||
.parent = TYPE_ASPEED_MACHINE,
|
||||
.class_init = aspeed_minibmc_machine_ast1030_evb_class_init,
|
||||
.interfaces = arm_machine_interfaces,
|
||||
}
|
||||
};
|
||||
|
||||
DEFINE_TYPES(aspeed_ast10x0_evb_types)
|
||||
|
|
@ -67,6 +67,7 @@ arm_ss.add(when: 'CONFIG_ASPEED_SOC', if_true: files(
|
|||
'aspeed_ast2600_qcom-firework.c',
|
||||
'aspeed_ast2600_rainier.c',
|
||||
'aspeed_ast10x0.c',
|
||||
'aspeed_ast10x0_evb.c',
|
||||
'fby35.c'))
|
||||
arm_common_ss.add(when: ['CONFIG_ASPEED_SOC', 'TARGET_AARCH64'], if_true: files(
|
||||
'aspeed_ast27x0.c',
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue