aspeed queue:
* Improve AST2700 co-processor models * Add vbootrom support to the ast2700fc multi-soc machine * Bump SDK version to v09.08 for the ast2700fc machine * Add 32 bits property for Aspeed GPIOs * Change ast2600-evb machine flash model to w25q512jv -----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEoPZlSPBIlev+awtgUaNDx8/77KEFAmj4ziMACgkQUaNDx8/7 7KFBBxAAy6LnSZDA9XncZsqVe1Vk254OLdwHAlOVgFD7pBDXp12qNBMJHyjw8QmV sxxQXyyLARq4z+P58HMdEBvqdwtdyrieo7lv7QsR8zhYa/HSJtFQmnwRVFKA9lS5 vAJ1TRi+B29ff24DC2CVBjnAgjrvE0lxmcXoLhObFdc2gU4Gzd+Oia91Nbgf35gA NjfgIjMs1wKLO5SICCGDhW5bsdm2jYS+b5dP35VuvizfSihlUQMAbdnSXzLk2aT+ iimik/aOAv/Tu3nV8G6RmQ/aWZhRNvuTGfBnK0AnSCWnQP6/9a9y+gp61mDzD8ht 6hpLgEbBTwldjdrvaejg1iYQ04szYNiIYRTxT7ral4sIkCEi0tg4yzOcpHLfSnr1 1YT3Z1+Z2z7w3jAsd/SqMfQXksLQR3G/51tGkatxHMJ4IScdt/cASZWXK3RlhXH1 YrQjiF5GuanM0oMcbyhgoq+sWNXP4EIWC3i6ER7H6MSRlfIjG+27kuxfnzJuZtDU iAq4YD0tckoivhixvdv2OiT9IdYCDAeb/TMRy+5Xdf36D8NOhyoQUBgHeIhow6yJ nCNPyCkM4HnpgkF0C+fyPBTqUP2AQ8NiTzBQA1bLorSjEN/9LMKvY9lwkEammp8/ VnfeoIzNHIupeEcFCO+vgomHBKo/i4DeetrQYGDGkicvR7ztP8k= =mivB -----END PGP SIGNATURE----- Merge tag 'pull-aspeed-20251022' of https://github.com/legoater/qemu into staging aspeed queue: * Improve AST2700 co-processor models * Add vbootrom support to the ast2700fc multi-soc machine * Bump SDK version to v09.08 for the ast2700fc machine * Add 32 bits property for Aspeed GPIOs * Change ast2600-evb machine flash model to w25q512jv # -----BEGIN PGP SIGNATURE----- # # iQIzBAABCAAdFiEEoPZlSPBIlev+awtgUaNDx8/77KEFAmj4ziMACgkQUaNDx8/7 # 7KFBBxAAy6LnSZDA9XncZsqVe1Vk254OLdwHAlOVgFD7pBDXp12qNBMJHyjw8QmV # sxxQXyyLARq4z+P58HMdEBvqdwtdyrieo7lv7QsR8zhYa/HSJtFQmnwRVFKA9lS5 # vAJ1TRi+B29ff24DC2CVBjnAgjrvE0lxmcXoLhObFdc2gU4Gzd+Oia91Nbgf35gA # NjfgIjMs1wKLO5SICCGDhW5bsdm2jYS+b5dP35VuvizfSihlUQMAbdnSXzLk2aT+ # iimik/aOAv/Tu3nV8G6RmQ/aWZhRNvuTGfBnK0AnSCWnQP6/9a9y+gp61mDzD8ht # 6hpLgEbBTwldjdrvaejg1iYQ04szYNiIYRTxT7ral4sIkCEi0tg4yzOcpHLfSnr1 # 1YT3Z1+Z2z7w3jAsd/SqMfQXksLQR3G/51tGkatxHMJ4IScdt/cASZWXK3RlhXH1 # YrQjiF5GuanM0oMcbyhgoq+sWNXP4EIWC3i6ER7H6MSRlfIjG+27kuxfnzJuZtDU # iAq4YD0tckoivhixvdv2OiT9IdYCDAeb/TMRy+5Xdf36D8NOhyoQUBgHeIhow6yJ # nCNPyCkM4HnpgkF0C+fyPBTqUP2AQ8NiTzBQA1bLorSjEN/9LMKvY9lwkEammp8/ # VnfeoIzNHIupeEcFCO+vgomHBKo/i4DeetrQYGDGkicvR7ztP8k= # =mivB # -----END PGP SIGNATURE----- # gpg: Signature made Wed 22 Oct 2025 07:29:23 AM CDT # gpg: using RSA key A0F66548F04895EBFE6B0B6051A343C7CFFBECA1 # gpg: Good signature from "Cédric Le Goater <clg@redhat.com>" [full] # gpg: aka "Cédric Le Goater <clg@kaod.org>" [full] * tag 'pull-aspeed-20251022' of https://github.com/legoater/qemu: hw/arm/aspeed: Remove ast2700fc self-aliasing hw/arm/aspeed: ast2600-evb: Use w25q512jv flash model tests/qtest: Add qtest for for ASPEED GPIO gpio-set property hw/gpio: Add property for ASPEED GPIO in 32 bits basis tests/functional/aarch64/ast2700fc: Add vbootrom test tests/functional/aarch64/ast2700fc: Move coprocessor image loading to common function tests/functional/aarch64/ast2700fc: Add eth2 network interface check in PCIe test tests/functional/aarch64/ast2700fc: Update test ASPEED SDK v09.08 hw/arm/aspeed_ast27x0-fc: Add VBOOTROM support hw/arm/aspeed_ast27x0-fc: Map FMC0 flash contents into CA35 boot ROM hw/arm/ast27x0: Share single UART set across PSP, SSP, and TSP hw/arm/ast27x0: Share single SCU instance across PSP, SSP, and TSP hw/arm/ast27x0: Add SRAM link and alias mapping for TSP coprocessor hw/arm/ast27x0: Add SRAM link and alias mapping for SSP coprocessor hw/arm/aspeed_ast27x0-tsp: Add SDRAM region and fix naming and size to 512MB hw/arm/aspeed_ast27x0-ssp: Add SDRAM region and fix naming and size to 512MB Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
commit
93bc983201
12 changed files with 333 additions and 121 deletions
|
|
@ -1592,8 +1592,8 @@ static void aspeed_machine_ast2600_evb_class_init(ObjectClass *oc,
|
|||
amc->soc_name = "ast2600-a3";
|
||||
amc->hw_strap1 = AST2600_EVB_HW_STRAP1;
|
||||
amc->hw_strap2 = AST2600_EVB_HW_STRAP2;
|
||||
amc->fmc_model = "mx66u51235f";
|
||||
amc->spi_model = "mx66u51235f";
|
||||
amc->fmc_model = "w25q512jv";
|
||||
amc->spi_model = "w25q512jv";
|
||||
amc->num_cs = 1;
|
||||
amc->macs_mask = ASPEED_MAC0_ON | ASPEED_MAC1_ON | ASPEED_MAC2_ON |
|
||||
ASPEED_MAC3_ON;
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@ struct Ast2700FCState {
|
|||
|
||||
MemoryRegion ca35_memory;
|
||||
MemoryRegion ca35_dram;
|
||||
MemoryRegion ca35_boot_rom;
|
||||
MemoryRegion ssp_memory;
|
||||
MemoryRegion tsp_memory;
|
||||
|
||||
|
|
@ -44,8 +45,6 @@ struct Ast2700FCState {
|
|||
Aspeed27x0SoCState ca35;
|
||||
Aspeed27x0CoprocessorState ssp;
|
||||
Aspeed27x0CoprocessorState tsp;
|
||||
|
||||
bool mmio_exec;
|
||||
};
|
||||
|
||||
#define AST2700FC_BMC_RAM_SIZE (1 * GiB)
|
||||
|
|
@ -61,6 +60,10 @@ static bool ast2700fc_ca35_init(MachineState *machine, Error **errp)
|
|||
Ast2700FCState *s = AST2700A1FC(machine);
|
||||
AspeedSoCState *soc;
|
||||
AspeedSoCClass *sc;
|
||||
const char *bios_name = NULL;
|
||||
BlockBackend *fmc0 = NULL;
|
||||
DeviceState *dev = NULL;
|
||||
uint64_t rom_size;
|
||||
|
||||
object_initialize_child(OBJECT(s), "ca35", &s->ca35, "ast2700-a1");
|
||||
soc = ASPEED_SOC(&s->ca35);
|
||||
|
|
@ -93,6 +96,10 @@ static bool ast2700fc_ca35_init(MachineState *machine, Error **errp)
|
|||
AST2700FC_HW_STRAP2, &error_abort);
|
||||
aspeed_soc_uart_set_chr(soc->uart, ASPEED_DEV_UART12, sc->uarts_base,
|
||||
sc->uarts_num, serial_hd(0));
|
||||
aspeed_soc_uart_set_chr(soc->uart, ASPEED_DEV_UART4, sc->uarts_base,
|
||||
sc->uarts_num, serial_hd(1));
|
||||
aspeed_soc_uart_set_chr(soc->uart, ASPEED_DEV_UART7, sc->uarts_base,
|
||||
sc->uarts_num, serial_hd(2));
|
||||
if (!qdev_realize(DEVICE(&s->ca35), NULL, errp)) {
|
||||
return false;
|
||||
}
|
||||
|
|
@ -108,6 +115,18 @@ static bool ast2700fc_ca35_init(MachineState *machine, Error **errp)
|
|||
ast2700fc_board_info.ram_size = machine->ram_size;
|
||||
ast2700fc_board_info.loader_start = sc->memmap[ASPEED_DEV_SDRAM];
|
||||
|
||||
dev = ssi_get_cs(soc->fmc.spi, 0);
|
||||
fmc0 = dev ? m25p80_get_blk(dev) : NULL;
|
||||
|
||||
if (fmc0) {
|
||||
rom_size = memory_region_size(&soc->spi_boot);
|
||||
aspeed_install_boot_rom(soc, fmc0, &s->ca35_boot_rom, rom_size);
|
||||
}
|
||||
|
||||
/* VBOOTROM */
|
||||
bios_name = machine->firmware ?: VBOOTROM_FILE_NAME;
|
||||
aspeed_load_vbootrom(soc, bios_name, errp);
|
||||
|
||||
arm_load_kernel(ARM_CPU(first_cpu), machine, &ast2700fc_board_info);
|
||||
|
||||
return true;
|
||||
|
|
@ -115,9 +134,9 @@ static bool ast2700fc_ca35_init(MachineState *machine, Error **errp)
|
|||
|
||||
static bool ast2700fc_ssp_init(MachineState *machine, Error **errp)
|
||||
{
|
||||
AspeedCoprocessorState *soc;
|
||||
AspeedCoprocessorClass *sc;
|
||||
Ast2700FCState *s = AST2700A1FC(machine);
|
||||
AspeedSoCState *psp = ASPEED_SOC(&s->ca35);
|
||||
|
||||
s->ssp_sysclk = clock_new(OBJECT(s), "SSP_SYSCLK");
|
||||
clock_set_hz(s->ssp_sysclk, 200000000ULL);
|
||||
|
||||
|
|
@ -130,10 +149,14 @@ static bool ast2700fc_ssp_init(MachineState *machine, Error **errp)
|
|||
object_property_set_link(OBJECT(&s->ssp), "memory",
|
||||
OBJECT(&s->ssp_memory), &error_abort);
|
||||
|
||||
soc = ASPEED_COPROCESSOR(&s->ssp);
|
||||
sc = ASPEED_COPROCESSOR_GET_CLASS(soc);
|
||||
aspeed_soc_uart_set_chr(soc->uart, ASPEED_DEV_UART4, sc->uarts_base,
|
||||
sc->uarts_num, serial_hd(1));
|
||||
object_property_set_link(OBJECT(&s->ssp), "uart",
|
||||
OBJECT(&psp->uart[4]), &error_abort);
|
||||
object_property_set_int(OBJECT(&s->ssp), "uart-dev", ASPEED_DEV_UART4,
|
||||
&error_abort);
|
||||
object_property_set_link(OBJECT(&s->ssp), "sram",
|
||||
OBJECT(&psp->sram), &error_abort);
|
||||
object_property_set_link(OBJECT(&s->ssp), "scu",
|
||||
OBJECT(&psp->scu), &error_abort);
|
||||
if (!qdev_realize(DEVICE(&s->ssp), NULL, errp)) {
|
||||
return false;
|
||||
}
|
||||
|
|
@ -143,9 +166,9 @@ static bool ast2700fc_ssp_init(MachineState *machine, Error **errp)
|
|||
|
||||
static bool ast2700fc_tsp_init(MachineState *machine, Error **errp)
|
||||
{
|
||||
AspeedCoprocessorState *soc;
|
||||
AspeedCoprocessorClass *sc;
|
||||
Ast2700FCState *s = AST2700A1FC(machine);
|
||||
AspeedSoCState *psp = ASPEED_SOC(&s->ca35);
|
||||
|
||||
s->tsp_sysclk = clock_new(OBJECT(s), "TSP_SYSCLK");
|
||||
clock_set_hz(s->tsp_sysclk, 200000000ULL);
|
||||
|
||||
|
|
@ -158,10 +181,14 @@ static bool ast2700fc_tsp_init(MachineState *machine, Error **errp)
|
|||
object_property_set_link(OBJECT(&s->tsp), "memory",
|
||||
OBJECT(&s->tsp_memory), &error_abort);
|
||||
|
||||
soc = ASPEED_COPROCESSOR(&s->tsp);
|
||||
sc = ASPEED_COPROCESSOR_GET_CLASS(soc);
|
||||
aspeed_soc_uart_set_chr(soc->uart, ASPEED_DEV_UART7, sc->uarts_base,
|
||||
sc->uarts_num, serial_hd(2));
|
||||
object_property_set_link(OBJECT(&s->tsp), "uart",
|
||||
OBJECT(&psp->uart[7]), &error_abort);
|
||||
object_property_set_int(OBJECT(&s->tsp), "uart-dev", ASPEED_DEV_UART7,
|
||||
&error_abort);
|
||||
object_property_set_link(OBJECT(&s->tsp), "sram",
|
||||
OBJECT(&psp->sram), &error_abort);
|
||||
object_property_set_link(OBJECT(&s->tsp), "scu",
|
||||
OBJECT(&psp->scu), &error_abort);
|
||||
if (!qdev_realize(DEVICE(&s->tsp), NULL, errp)) {
|
||||
return false;
|
||||
}
|
||||
|
|
@ -180,7 +207,6 @@ static void ast2700fc_class_init(ObjectClass *oc, const void *data)
|
|||
{
|
||||
MachineClass *mc = MACHINE_CLASS(oc);
|
||||
|
||||
mc->alias = "ast2700fc";
|
||||
mc->desc = "ast2700 full core support";
|
||||
mc->init = ast2700fc_init;
|
||||
mc->no_floppy = 1;
|
||||
|
|
|
|||
|
|
@ -16,10 +16,11 @@
|
|||
#include "hw/arm/aspeed_soc.h"
|
||||
#include "hw/arm/aspeed_coprocessor.h"
|
||||
|
||||
#define AST2700_SSP_RAM_SIZE (32 * MiB)
|
||||
#define AST2700_SSP_SDRAM_SIZE (512 * MiB)
|
||||
|
||||
static const hwaddr aspeed_soc_ast27x0ssp_memmap[] = {
|
||||
[ASPEED_DEV_SRAM] = 0x00000000,
|
||||
[ASPEED_DEV_SDRAM] = 0x00000000,
|
||||
[ASPEED_DEV_SRAM] = 0x70000000,
|
||||
[ASPEED_DEV_INTC] = 0x72100000,
|
||||
[ASPEED_DEV_SCU] = 0x72C02000,
|
||||
[ASPEED_DEV_SCUIO] = 0x74C02000,
|
||||
|
|
@ -132,17 +133,9 @@ static void aspeed_soc_ast27x0ssp_init(Object *obj)
|
|||
{
|
||||
Aspeed27x0CoprocessorState *a = ASPEED27X0SSP_COPROCESSOR(obj);
|
||||
AspeedCoprocessorState *s = ASPEED_COPROCESSOR(obj);
|
||||
AspeedCoprocessorClass *sc = ASPEED_COPROCESSOR_GET_CLASS(s);
|
||||
int i;
|
||||
|
||||
object_initialize_child(obj, "armv7m", &a->armv7m, TYPE_ARMV7M);
|
||||
object_initialize_child(obj, "scu", &s->scu, TYPE_ASPEED_2700_SCU);
|
||||
s->sysclk = qdev_init_clock_in(DEVICE(s), "sysclk", NULL, NULL, 0);
|
||||
qdev_prop_set_uint32(DEVICE(&s->scu), "silicon-rev", sc->silicon_rev);
|
||||
|
||||
for (i = 0; i < sc->uarts_num; i++) {
|
||||
object_initialize_child(obj, "uart[*]", &s->uart[i], TYPE_SERIAL_MM);
|
||||
}
|
||||
|
||||
object_initialize_child(obj, "intc0", &a->intc[0],
|
||||
TYPE_ASPEED_2700SSP_INTC);
|
||||
|
|
@ -165,8 +158,7 @@ static void aspeed_soc_ast27x0ssp_realize(DeviceState *dev_soc, Error **errp)
|
|||
AspeedCoprocessorState *s = ASPEED_COPROCESSOR(dev_soc);
|
||||
AspeedCoprocessorClass *sc = ASPEED_COPROCESSOR_GET_CLASS(s);
|
||||
DeviceState *armv7m;
|
||||
g_autofree char *sram_name = NULL;
|
||||
int uart;
|
||||
g_autofree char *sdram_name = NULL;
|
||||
int i;
|
||||
|
||||
if (!clock_has_source(s->sysclk)) {
|
||||
|
|
@ -184,23 +176,29 @@ static void aspeed_soc_ast27x0ssp_realize(DeviceState *dev_soc, Error **errp)
|
|||
OBJECT(s->memory), &error_abort);
|
||||
sysbus_realize(SYS_BUS_DEVICE(&a->armv7m), &error_abort);
|
||||
|
||||
sram_name = g_strdup_printf("aspeed.dram.%d",
|
||||
CPU(a->armv7m.cpu)->cpu_index);
|
||||
|
||||
if (!memory_region_init_ram(&s->sram, OBJECT(s), sram_name,
|
||||
AST2700_SSP_RAM_SIZE, errp)) {
|
||||
/* SDRAM */
|
||||
sdram_name = g_strdup_printf("aspeed.sdram.%d",
|
||||
CPU(a->armv7m.cpu)->cpu_index);
|
||||
if (!memory_region_init_ram(&s->sdram, OBJECT(s), sdram_name,
|
||||
AST2700_SSP_SDRAM_SIZE, errp)) {
|
||||
return;
|
||||
}
|
||||
memory_region_add_subregion(s->memory,
|
||||
sc->memmap[ASPEED_DEV_SRAM],
|
||||
&s->sram);
|
||||
sc->memmap[ASPEED_DEV_SDRAM],
|
||||
&s->sdram);
|
||||
|
||||
/* SRAM */
|
||||
memory_region_init_alias(&s->sram_alias, OBJECT(s), "sram.alias",
|
||||
s->sram, 0, memory_region_size(s->sram));
|
||||
memory_region_add_subregion(s->memory, sc->memmap[ASPEED_DEV_SRAM],
|
||||
&s->sram_alias);
|
||||
|
||||
/* SCU */
|
||||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->scu), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->scu), 0,
|
||||
sc->memmap[ASPEED_DEV_SCU]);
|
||||
memory_region_init_alias(&s->scu_alias, OBJECT(s), "scu.alias",
|
||||
&s->scu->iomem, 0,
|
||||
memory_region_size(&s->scu->iomem));
|
||||
memory_region_add_subregion(s->memory, sc->memmap[ASPEED_DEV_SCU],
|
||||
&s->scu_alias);
|
||||
|
||||
/* INTC */
|
||||
if (!sysbus_realize(SYS_BUS_DEVICE(&a->intc[0]), errp)) {
|
||||
|
|
@ -239,15 +237,19 @@ static void aspeed_soc_ast27x0ssp_realize(DeviceState *dev_soc, Error **errp)
|
|||
sysbus_connect_irq(SYS_BUS_DEVICE(&a->intc[1]), i,
|
||||
qdev_get_gpio_in(DEVICE(&a->intc[0].orgates[0]), i));
|
||||
}
|
||||
|
||||
/* UART */
|
||||
for (i = 0, uart = sc->uarts_base; i < sc->uarts_num; i++, uart++) {
|
||||
if (!aspeed_soc_uart_realize(s->memory, &s->uart[i],
|
||||
sc->memmap[uart], errp)) {
|
||||
return;
|
||||
}
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->uart[i]), 0,
|
||||
aspeed_soc_ast27x0ssp_get_irq(s, uart));
|
||||
}
|
||||
memory_region_init_alias(&s->uart_alias, OBJECT(s), "uart.alias",
|
||||
&s->uart->serial.io, 0,
|
||||
memory_region_size(&s->uart->serial.io));
|
||||
memory_region_add_subregion(s->memory, sc->memmap[s->uart_dev],
|
||||
&s->uart_alias);
|
||||
/*
|
||||
* Redirect the UART interrupt to the NVIC, replacing the default routing
|
||||
* to the PSP's GIC.
|
||||
*/
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(s->uart), 0,
|
||||
aspeed_soc_ast27x0ssp_get_irq(s, s->uart_dev));
|
||||
|
||||
aspeed_mmio_map_unimplemented(s->memory, SYS_BUS_DEVICE(&s->timerctrl),
|
||||
"aspeed.timerctrl",
|
||||
|
|
@ -278,9 +280,6 @@ static void aspeed_soc_ast27x0ssp_class_init(ObjectClass *klass,
|
|||
dc->realize = aspeed_soc_ast27x0ssp_realize;
|
||||
|
||||
sc->valid_cpu_types = valid_cpu_types;
|
||||
sc->silicon_rev = AST2700_A1_SILICON_REV;
|
||||
sc->uarts_num = 13;
|
||||
sc->uarts_base = ASPEED_DEV_UART0;
|
||||
sc->irqmap = aspeed_soc_ast27x0ssp_irqmap;
|
||||
sc->memmap = aspeed_soc_ast27x0ssp_memmap;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,10 +16,11 @@
|
|||
#include "hw/arm/aspeed_soc.h"
|
||||
#include "hw/arm/aspeed_coprocessor.h"
|
||||
|
||||
#define AST2700_TSP_RAM_SIZE (32 * MiB)
|
||||
#define AST2700_TSP_SDRAM_SIZE (512 * MiB)
|
||||
|
||||
static const hwaddr aspeed_soc_ast27x0tsp_memmap[] = {
|
||||
[ASPEED_DEV_SRAM] = 0x00000000,
|
||||
[ASPEED_DEV_SDRAM] = 0x00000000,
|
||||
[ASPEED_DEV_SRAM] = 0x70000000,
|
||||
[ASPEED_DEV_INTC] = 0x72100000,
|
||||
[ASPEED_DEV_SCU] = 0x72C02000,
|
||||
[ASPEED_DEV_SCUIO] = 0x74C02000,
|
||||
|
|
@ -132,17 +133,9 @@ static void aspeed_soc_ast27x0tsp_init(Object *obj)
|
|||
{
|
||||
Aspeed27x0CoprocessorState *a = ASPEED27X0TSP_COPROCESSOR(obj);
|
||||
AspeedCoprocessorState *s = ASPEED_COPROCESSOR(obj);
|
||||
AspeedCoprocessorClass *sc = ASPEED_COPROCESSOR_GET_CLASS(s);
|
||||
int i;
|
||||
|
||||
object_initialize_child(obj, "armv7m", &a->armv7m, TYPE_ARMV7M);
|
||||
object_initialize_child(obj, "scu", &s->scu, TYPE_ASPEED_2700_SCU);
|
||||
s->sysclk = qdev_init_clock_in(DEVICE(s), "sysclk", NULL, NULL, 0);
|
||||
qdev_prop_set_uint32(DEVICE(&s->scu), "silicon-rev", sc->silicon_rev);
|
||||
|
||||
for (i = 0; i < sc->uarts_num; i++) {
|
||||
object_initialize_child(obj, "uart[*]", &s->uart[i], TYPE_SERIAL_MM);
|
||||
}
|
||||
|
||||
object_initialize_child(obj, "intc0", &a->intc[0],
|
||||
TYPE_ASPEED_2700TSP_INTC);
|
||||
|
|
@ -165,8 +158,7 @@ static void aspeed_soc_ast27x0tsp_realize(DeviceState *dev_soc, Error **errp)
|
|||
AspeedCoprocessorState *s = ASPEED_COPROCESSOR(dev_soc);
|
||||
AspeedCoprocessorClass *sc = ASPEED_COPROCESSOR_GET_CLASS(s);
|
||||
DeviceState *armv7m;
|
||||
g_autofree char *sram_name = NULL;
|
||||
int uart;
|
||||
g_autofree char *sdram_name = NULL;
|
||||
int i;
|
||||
|
||||
if (!clock_has_source(s->sysclk)) {
|
||||
|
|
@ -184,23 +176,29 @@ static void aspeed_soc_ast27x0tsp_realize(DeviceState *dev_soc, Error **errp)
|
|||
OBJECT(s->memory), &error_abort);
|
||||
sysbus_realize(SYS_BUS_DEVICE(&a->armv7m), &error_abort);
|
||||
|
||||
sram_name = g_strdup_printf("aspeed.dram.%d",
|
||||
CPU(a->armv7m.cpu)->cpu_index);
|
||||
|
||||
if (!memory_region_init_ram(&s->sram, OBJECT(s), sram_name,
|
||||
AST2700_TSP_RAM_SIZE, errp)) {
|
||||
/* SDRAM */
|
||||
sdram_name = g_strdup_printf("aspeed.sdram.%d",
|
||||
CPU(a->armv7m.cpu)->cpu_index);
|
||||
if (!memory_region_init_ram(&s->sdram, OBJECT(s), sdram_name,
|
||||
AST2700_TSP_SDRAM_SIZE, errp)) {
|
||||
return;
|
||||
}
|
||||
memory_region_add_subregion(s->memory,
|
||||
sc->memmap[ASPEED_DEV_SRAM],
|
||||
&s->sram);
|
||||
sc->memmap[ASPEED_DEV_SDRAM],
|
||||
&s->sdram);
|
||||
|
||||
/* SRAM */
|
||||
memory_region_init_alias(&s->sram_alias, OBJECT(s), "sram.alias",
|
||||
s->sram, 0, memory_region_size(s->sram));
|
||||
memory_region_add_subregion(s->memory, sc->memmap[ASPEED_DEV_SRAM],
|
||||
&s->sram_alias);
|
||||
|
||||
/* SCU */
|
||||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->scu), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->scu), 0,
|
||||
sc->memmap[ASPEED_DEV_SCU]);
|
||||
memory_region_init_alias(&s->scu_alias, OBJECT(s), "scu.alias",
|
||||
&s->scu->iomem, 0,
|
||||
memory_region_size(&s->scu->iomem));
|
||||
memory_region_add_subregion(s->memory, sc->memmap[ASPEED_DEV_SCU],
|
||||
&s->scu_alias);
|
||||
|
||||
/* INTC */
|
||||
if (!sysbus_realize(SYS_BUS_DEVICE(&a->intc[0]), errp)) {
|
||||
|
|
@ -239,15 +237,19 @@ static void aspeed_soc_ast27x0tsp_realize(DeviceState *dev_soc, Error **errp)
|
|||
sysbus_connect_irq(SYS_BUS_DEVICE(&a->intc[1]), i,
|
||||
qdev_get_gpio_in(DEVICE(&a->intc[0].orgates[0]), i));
|
||||
}
|
||||
|
||||
/* UART */
|
||||
for (i = 0, uart = sc->uarts_base; i < sc->uarts_num; i++, uart++) {
|
||||
if (!aspeed_soc_uart_realize(s->memory, &s->uart[i],
|
||||
sc->memmap[uart], errp)) {
|
||||
return;
|
||||
}
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->uart[i]), 0,
|
||||
aspeed_soc_ast27x0tsp_get_irq(s, uart));
|
||||
}
|
||||
memory_region_init_alias(&s->uart_alias, OBJECT(s), "uart.alias",
|
||||
&s->uart->serial.io, 0,
|
||||
memory_region_size(&s->uart->serial.io));
|
||||
memory_region_add_subregion(s->memory, sc->memmap[s->uart_dev],
|
||||
&s->uart_alias);
|
||||
/*
|
||||
* Redirect the UART interrupt to the NVIC, replacing the default routing
|
||||
* to the PSP's GIC.
|
||||
*/
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(s->uart), 0,
|
||||
aspeed_soc_ast27x0tsp_get_irq(s, s->uart_dev));
|
||||
|
||||
aspeed_mmio_map_unimplemented(s->memory, SYS_BUS_DEVICE(&s->timerctrl),
|
||||
"aspeed.timerctrl",
|
||||
|
|
@ -278,9 +280,6 @@ static void aspeed_soc_ast27x0tsp_class_init(ObjectClass *klass,
|
|||
dc->realize = aspeed_soc_ast27x0tsp_realize;
|
||||
|
||||
sc->valid_cpu_types = valid_cpu_types;
|
||||
sc->silicon_rev = AST2700_A1_SILICON_REV;
|
||||
sc->uarts_num = 13;
|
||||
sc->uarts_base = ASPEED_DEV_UART0;
|
||||
sc->irqmap = aspeed_soc_ast27x0tsp_irqmap;
|
||||
sc->memmap = aspeed_soc_ast27x0tsp_memmap;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,6 +25,13 @@ static void aspeed_coprocessor_realize(DeviceState *dev, Error **errp)
|
|||
static const Property aspeed_coprocessor_properties[] = {
|
||||
DEFINE_PROP_LINK("memory", AspeedCoprocessorState, memory,
|
||||
TYPE_MEMORY_REGION, MemoryRegion *),
|
||||
DEFINE_PROP_LINK("sram", AspeedCoprocessorState, sram, TYPE_MEMORY_REGION,
|
||||
MemoryRegion *),
|
||||
DEFINE_PROP_LINK("scu", AspeedCoprocessorState, scu, TYPE_ASPEED_SCU,
|
||||
AspeedSCUState *),
|
||||
DEFINE_PROP_LINK("uart", AspeedCoprocessorState, uart, TYPE_SERIAL_MM,
|
||||
SerialMM *),
|
||||
DEFINE_PROP_INT32("uart-dev", AspeedCoprocessorState, uart_dev, 0),
|
||||
};
|
||||
|
||||
static void aspeed_coprocessor_class_init(ObjectClass *oc, const void *data)
|
||||
|
|
|
|||
|
|
@ -1308,6 +1308,57 @@ static void aspeed_gpio_2700_write(void *opaque, hwaddr offset,
|
|||
}
|
||||
|
||||
/* Setup functions */
|
||||
static void aspeed_gpio_set_set(Object *obj, Visitor *v,
|
||||
const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
uint32_t set_val = 0;
|
||||
AspeedGPIOState *s = ASPEED_GPIO(obj);
|
||||
AspeedGPIOClass *agc = ASPEED_GPIO_GET_CLASS(s);
|
||||
int set_idx = 0;
|
||||
|
||||
if (!visit_type_uint32(v, name, &set_val, errp)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (sscanf(name, "gpio-set[%d]", &set_idx) != 1) {
|
||||
error_setg(errp, "%s: error reading %s", __func__, name);
|
||||
return;
|
||||
}
|
||||
|
||||
if (set_idx >= agc->nr_gpio_sets || set_idx < 0) {
|
||||
error_setg(errp, "%s: invalid set_idx %s", __func__, name);
|
||||
return;
|
||||
}
|
||||
|
||||
aspeed_gpio_update(s, &s->sets[set_idx], set_val,
|
||||
~s->sets[set_idx].direction);
|
||||
}
|
||||
|
||||
static void aspeed_gpio_get_set(Object *obj, Visitor *v,
|
||||
const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
uint32_t set_val = 0;
|
||||
AspeedGPIOState *s = ASPEED_GPIO(obj);
|
||||
AspeedGPIOClass *agc = ASPEED_GPIO_GET_CLASS(s);
|
||||
int set_idx = 0;
|
||||
|
||||
if (sscanf(name, "gpio-set[%d]", &set_idx) != 1) {
|
||||
error_setg(errp, "%s: error reading %s", __func__, name);
|
||||
return;
|
||||
}
|
||||
|
||||
if (set_idx >= agc->nr_gpio_sets || set_idx < 0) {
|
||||
error_setg(errp, "%s: invalid set_idx %s", __func__, name);
|
||||
return;
|
||||
}
|
||||
|
||||
set_val = s->sets[set_idx].data_value;
|
||||
visit_type_uint32(v, name, &set_val, errp);
|
||||
}
|
||||
|
||||
/****************** Setup functions ******************/
|
||||
static const GPIOSetProperties ast2400_set_props[ASPEED_GPIO_MAX_NR_SETS] = {
|
||||
[0] = {0xffffffff, 0xffffffff, {"A", "B", "C", "D"} },
|
||||
[1] = {0xffffffff, 0xffffffff, {"E", "F", "G", "H"} },
|
||||
|
|
@ -1435,6 +1486,12 @@ static void aspeed_gpio_init(Object *obj)
|
|||
g_free(name);
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < agc->nr_gpio_sets; i++) {
|
||||
char *name = g_strdup_printf("gpio-set[%d]", i);
|
||||
object_property_add(obj, name, "uint32", aspeed_gpio_get_set,
|
||||
aspeed_gpio_set_set, NULL, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
static const VMStateDescription vmstate_gpio_regs = {
|
||||
|
|
|
|||
|
|
@ -16,13 +16,18 @@ struct AspeedCoprocessorState {
|
|||
DeviceState parent;
|
||||
|
||||
MemoryRegion *memory;
|
||||
MemoryRegion sram;
|
||||
MemoryRegion sdram;
|
||||
MemoryRegion *sram;
|
||||
MemoryRegion sram_alias;
|
||||
MemoryRegion uart_alias;
|
||||
MemoryRegion scu_alias;
|
||||
Clock *sysclk;
|
||||
|
||||
AspeedSCUState scu;
|
||||
AspeedSCUState *scu;
|
||||
AspeedSCUState scuio;
|
||||
AspeedTimerCtrlState timerctrl;
|
||||
SerialMM uart[ASPEED_UARTS_NUM];
|
||||
SerialMM *uart;
|
||||
int uart_dev;
|
||||
};
|
||||
|
||||
#define TYPE_ASPEED_COPROCESSOR "aspeed-coprocessor"
|
||||
|
|
@ -34,11 +39,8 @@ struct AspeedCoprocessorClass {
|
|||
|
||||
/** valid_cpu_types: NULL terminated array of a single CPU type. */
|
||||
const char * const *valid_cpu_types;
|
||||
uint32_t silicon_rev;
|
||||
const hwaddr *memmap;
|
||||
const int *irqmap;
|
||||
int uarts_base;
|
||||
int uarts_num;
|
||||
};
|
||||
|
||||
struct Aspeed27x0CoprocessorState {
|
||||
|
|
|
|||
|
|
@ -57,6 +57,7 @@ void qdict_put_str(QDict *qdict, const char *key, const char *value);
|
|||
|
||||
double qdict_get_double(const QDict *qdict, const char *key);
|
||||
int64_t qdict_get_int(const QDict *qdict, const char *key);
|
||||
uint64_t qdict_get_uint(const QDict *qdict, const char *key);
|
||||
bool qdict_get_bool(const QDict *qdict, const char *key);
|
||||
QList *qdict_get_qlist(const QDict *qdict, const char *key);
|
||||
QDict *qdict_get_qdict(const QDict *qdict, const char *key);
|
||||
|
|
|
|||
|
|
@ -209,6 +209,19 @@ int64_t qdict_get_int(const QDict *qdict, const char *key)
|
|||
return qnum_get_int(qobject_to(QNum, qdict_get(qdict, key)));
|
||||
}
|
||||
|
||||
/**
|
||||
* qdict_get_uint(): Get an unsigned integer mapped by 'key'
|
||||
*
|
||||
* This function assumes that 'key' exists and it stores a
|
||||
* QNum representable as uint.
|
||||
*
|
||||
* Return unsigned integer mapped by 'key'.
|
||||
*/
|
||||
uint64_t qdict_get_uint(const QDict *qdict, const char *key)
|
||||
{
|
||||
return qnum_get_uint(qobject_to(QNum, qdict_get(qdict, key)));
|
||||
}
|
||||
|
||||
/**
|
||||
* qdict_get_bool(): Get a bool mapped by 'key'
|
||||
*
|
||||
|
|
|
|||
|
|
@ -36,9 +36,20 @@ class AST2x00MachineSDK(QemuSystemTest):
|
|||
exec_command_and_wait_for_pattern(self, 'root', 'Password:')
|
||||
exec_command_and_wait_for_pattern(self, '0penBmc', f'root@{name}:~#')
|
||||
|
||||
ASSET_SDK_V906_AST2700 = Asset(
|
||||
'https://github.com/AspeedTech-BMC/openbmc/releases/download/v09.06/ast2700-default-obmc.tar.gz',
|
||||
'f1d53e0be8a404ecce3e105f72bc50fa4e090ad13160ffa91b10a6e0233a9dc6')
|
||||
def load_ast2700fc_coprocessor(self, name):
|
||||
load_elf_list = {
|
||||
'ssp': self.scratch_file(name, 'zephyr-aspeed-ssp.elf'),
|
||||
'tsp': self.scratch_file(name, 'zephyr-aspeed-tsp.elf')
|
||||
}
|
||||
|
||||
for cpu_num, key in enumerate(load_elf_list, start=4):
|
||||
file = load_elf_list[key]
|
||||
self.vm.add_args('-device',
|
||||
f'loader,file={file},cpu-num={cpu_num}')
|
||||
|
||||
ASSET_SDK_V908_AST2700 = Asset(
|
||||
'https://github.com/AspeedTech-BMC/openbmc/releases/download/v09.08/ast2700-default-obmc.tar.gz',
|
||||
'eac3dc409b7ea3cd4b03d4792d3cebd469792ad893cb51e1d15f0fc20bd1e2cd')
|
||||
|
||||
def do_ast2700_i2c_test(self):
|
||||
exec_command_and_wait_for_pattern(self,
|
||||
|
|
@ -60,13 +71,16 @@ class AST2x00MachineSDK(QemuSystemTest):
|
|||
'lspci -s 0002:01:00.0',
|
||||
'0002:01:00.0 Ethernet controller: '
|
||||
'Intel Corporation 82574L Gigabit Network Connection')
|
||||
exec_command_and_wait_for_pattern(self,
|
||||
'ip addr show dev eth2',
|
||||
'inet 10.0.2.15/24')
|
||||
|
||||
def do_ast2700fc_ssp_test(self):
|
||||
self.vm.shutdown()
|
||||
self.vm.set_console(console_index=1)
|
||||
self.vm.launch()
|
||||
|
||||
exec_command_and_wait_for_pattern(self, '\012', 'ssp:~$')
|
||||
exec_command_and_wait_for_pattern(self, '\012', 'ssp_tsp:~$')
|
||||
exec_command_and_wait_for_pattern(self, 'version',
|
||||
'Zephyr version 3.7.1')
|
||||
exec_command_and_wait_for_pattern(self, 'md 72c02000 1',
|
||||
|
|
@ -120,23 +134,21 @@ class AST2x00MachineSDK(QemuSystemTest):
|
|||
self.vm.add_args('-device',
|
||||
f'loader,addr=0x430000000,cpu-num={i}')
|
||||
|
||||
load_elf_list = {
|
||||
'ssp': self.scratch_file(name, 'zephyr-aspeed-ssp.elf'),
|
||||
'tsp': self.scratch_file(name, 'zephyr-aspeed-tsp.elf')
|
||||
}
|
||||
|
||||
for cpu_num, key in enumerate(load_elf_list, start=4):
|
||||
file = load_elf_list[key]
|
||||
self.vm.add_args('-device',
|
||||
f'loader,file={file},cpu-num={cpu_num}')
|
||||
|
||||
self.load_ast2700fc_coprocessor(name)
|
||||
self.do_test_aarch64_aspeed_sdk_start(
|
||||
self.scratch_file(name, 'image-bmc'))
|
||||
|
||||
def test_aarch64_ast2700fc_sdk_v09_06(self):
|
||||
self.set_machine('ast2700fc')
|
||||
def start_ast2700fc_test_vbootrom(self, name):
|
||||
self.vm.add_args('-bios', 'ast27x0_bootrom.bin')
|
||||
self.load_ast2700fc_coprocessor(name)
|
||||
self.do_test_aarch64_aspeed_sdk_start(
|
||||
self.scratch_file(name, 'image-bmc'))
|
||||
|
||||
self.archive_extract(self.ASSET_SDK_V906_AST2700)
|
||||
def test_aarch64_ast2700fc_sdk_v09_08(self):
|
||||
self.set_machine('ast2700fc')
|
||||
self.require_netdev('user')
|
||||
|
||||
self.archive_extract(self.ASSET_SDK_V908_AST2700)
|
||||
self.start_ast2700fc_test('ast2700-default')
|
||||
self.verify_openbmc_boot_and_login('ast2700-default')
|
||||
self.do_ast2700_i2c_test()
|
||||
|
|
@ -144,5 +156,14 @@ class AST2x00MachineSDK(QemuSystemTest):
|
|||
self.do_ast2700fc_ssp_test()
|
||||
self.do_ast2700fc_tsp_test()
|
||||
|
||||
def test_aarch64_ast2700fc_sdk_vbootrom_v09_08(self):
|
||||
self.set_machine('ast2700fc')
|
||||
|
||||
self.archive_extract(self.ASSET_SDK_V908_AST2700)
|
||||
self.start_ast2700fc_test_vbootrom('ast2700-default')
|
||||
self.verify_openbmc_boot_and_login('ast2700-default')
|
||||
self.do_ast2700fc_ssp_test()
|
||||
self.do_ast2700fc_tsp_test()
|
||||
|
||||
if __name__ == '__main__':
|
||||
QemuSystemTest.main()
|
||||
|
|
|
|||
|
|
@ -27,28 +27,115 @@
|
|||
#include "qemu/timer.h"
|
||||
#include "qobject/qdict.h"
|
||||
#include "libqtest-single.h"
|
||||
#include "qemu/typedefs.h"
|
||||
|
||||
#define AST2600_GPIO_BASE 0x1E780000
|
||||
|
||||
#define GPIO_ABCD_DATA_VALUE 0x000
|
||||
#define GPIO_ABCD_DIRECTION 0x004
|
||||
|
||||
static uint32_t qtest_qom_get_uint32(QTestState *s, const char *path,
|
||||
const char *property)
|
||||
{
|
||||
QDict *r;
|
||||
|
||||
uint32_t res;
|
||||
r = qtest_qmp(s, "{ 'execute': 'qom-get', 'arguments': "
|
||||
"{ 'path': %s, 'property': %s } }", path, property);
|
||||
res = qdict_get_uint(r, "return");
|
||||
qobject_unref(r);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
static void qtest_qom_set_uint32(QTestState *s, const char *path,
|
||||
const char *property, uint32_t value)
|
||||
{
|
||||
QDict *r;
|
||||
|
||||
r = qtest_qmp(s, "{ 'execute': 'qom-set', 'arguments': "
|
||||
"{ 'path': %s, 'property': %s, 'value': %" PRIu32 " } }",
|
||||
path, property, value);
|
||||
qobject_unref(r);
|
||||
}
|
||||
|
||||
static const char *resp_get_error(QDict *r, const char* error_key)
|
||||
{
|
||||
QDict *qdict;
|
||||
|
||||
g_assert(r);
|
||||
|
||||
qdict = qdict_get_qdict(r, "error");
|
||||
if (qdict) {
|
||||
return qdict_get_str(qdict, error_key);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static bool qtest_qom_check_error(QTestState *s, const char *path,
|
||||
const char *property, const char *error_msg,
|
||||
const char *error_msg_key)
|
||||
{
|
||||
QDict *r;
|
||||
bool b;
|
||||
|
||||
r = qtest_qmp(s, "{ 'execute': 'qom-get', 'arguments': "
|
||||
"{ 'path': %s, 'property': %s } }", path, property);
|
||||
b = g_str_equal(resp_get_error(r, error_msg_key), error_msg);
|
||||
qobject_unref(r);
|
||||
|
||||
return b;
|
||||
}
|
||||
|
||||
static void test_set_colocated_pins(const void *data)
|
||||
{
|
||||
QTestState *s = (QTestState *)data;
|
||||
|
||||
const char path[] = "/machine/soc/gpio";
|
||||
/*
|
||||
* gpioV4-7 occupy bits within a single 32-bit value, so we want to make
|
||||
* sure that modifying one doesn't affect the other.
|
||||
*/
|
||||
qtest_qom_set_bool(s, "/machine/soc/gpio", "gpioV4", true);
|
||||
qtest_qom_set_bool(s, "/machine/soc/gpio", "gpioV5", false);
|
||||
qtest_qom_set_bool(s, "/machine/soc/gpio", "gpioV6", true);
|
||||
qtest_qom_set_bool(s, "/machine/soc/gpio", "gpioV7", false);
|
||||
g_assert(qtest_qom_get_bool(s, "/machine/soc/gpio", "gpioV4"));
|
||||
g_assert(!qtest_qom_get_bool(s, "/machine/soc/gpio", "gpioV5"));
|
||||
g_assert(qtest_qom_get_bool(s, "/machine/soc/gpio", "gpioV6"));
|
||||
g_assert(!qtest_qom_get_bool(s, "/machine/soc/gpio", "gpioV7"));
|
||||
qtest_qom_set_bool(s, path, "gpioV4", true);
|
||||
qtest_qom_set_bool(s, path, "gpioV5", false);
|
||||
qtest_qom_set_bool(s, path, "gpioV6", true);
|
||||
qtest_qom_set_bool(s, path, "gpioV7", false);
|
||||
g_assert(qtest_qom_get_bool(s, path, "gpioV4"));
|
||||
g_assert(!qtest_qom_get_bool(s, path, "gpioV5"));
|
||||
g_assert(qtest_qom_get_bool(s, path, "gpioV6"));
|
||||
g_assert(!qtest_qom_get_bool(s, path, "gpioV7"));
|
||||
|
||||
/*
|
||||
* Testing the gpio-set[%d] properties, using individual gpio boolean
|
||||
* properties to do cross check.
|
||||
* We use gpioR4-7 for test, Setting them to be 0b1010.
|
||||
*/
|
||||
qtest_qom_set_uint32(s, path, "gpio-set[4]", 0x0);
|
||||
g_assert(qtest_qom_get_uint32(s, path, "gpio-set[4]") == 0x0);
|
||||
qtest_qom_set_uint32(s, path, "gpio-set[4]", 0xa000);
|
||||
g_assert(qtest_qom_get_uint32(s, path, "gpio-set[4]") == 0xa000);
|
||||
|
||||
g_assert(!qtest_qom_get_bool(s, path, "gpioR4"));
|
||||
g_assert(qtest_qom_get_bool(s, path, "gpioR5"));
|
||||
g_assert(!qtest_qom_get_bool(s, path, "gpioR6"));
|
||||
g_assert(qtest_qom_get_bool(s, path, "gpioR7"));
|
||||
|
||||
/*
|
||||
* Testing the invalid indexing, the response info should contain following
|
||||
* info:
|
||||
* {key: "class", value: "GenericError"}
|
||||
*
|
||||
* For pins, it should follow "gpio%2[A-Z]%1d" or "gpio%3[18A-E]%1d" format.
|
||||
*/
|
||||
const char error_msg[] = "GenericError";
|
||||
const char error_msg_key[] = "class";
|
||||
|
||||
g_assert(qtest_qom_check_error(s, path, "gpioR+1", error_msg,
|
||||
error_msg_key));
|
||||
g_assert(qtest_qom_check_error(s, path, "gpio-set[99]", error_msg,
|
||||
error_msg_key));
|
||||
g_assert(qtest_qom_check_error(s, path, "gpio-set[-3]", error_msg,
|
||||
error_msg_key));
|
||||
}
|
||||
|
||||
static void test_set_input_pins(const void *data)
|
||||
|
|
|
|||
|
|
@ -134,10 +134,10 @@ static void test_ast2600_evb(AspeedSMCTestData *data)
|
|||
"-drive file=%s,format=raw,if=mtd",
|
||||
data->tmp_path);
|
||||
|
||||
/* fmc cs0 with mx66u51235f flash */
|
||||
/* fmc cs0 with w25q512jv flash */
|
||||
data->flash_base = 0x20000000;
|
||||
data->spi_base = 0x1E620000;
|
||||
data->jedec_id = 0xc2253a;
|
||||
data->jedec_id = 0xef4020;
|
||||
data->cs = 0;
|
||||
data->node = "/machine/soc/fmc/ssi.0/child[0]";
|
||||
/* beyond 16MB */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue