mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
Merge tag 'pull-aspeed-20250309' of https://github.com/legoater/qemu into staging
aspeed queue: * Updated Aspeed OpenBMC functional test images * Introduced functional tests for witherspoon and bletchley machines * Added support for Non-maskable Interrupt on AST2700 SoC * Fixed HW strapping on AST2700 SoC * Added AST2700 HACE support * Added AST2700 A1 SoC support * Intoduced new ast2700a1-evb machine # -----BEGIN PGP SIGNATURE----- # # iQIzBAABCAAdFiEEoPZlSPBIlev+awtgUaNDx8/77KEFAmfNnIUACgkQUaNDx8/7 # 7KFMGQ//YHvJV30PkI9CHO6Gbk3CmWftI9Dbjn7goghV/hArVThiq9fve3n2GxYJ # aKrpQZ3BK5SOvcp1zzSc2HrCxmzhy98TZfH2vqwqx3T7uqLDTGgo6xGRYT7+fuVn # SzQaxFJ5hG8LdR4GqDcuUlUVyjVM3ZGR8E/Guj6s6Um1gctZsjy7Z+CdAWDlXFWM # uJoI9EwbhdIWYWF6jJw3myOjMhXHNZs0IobvS7yzZ3DGX0o/P3jRxFYeS6P9lQDl # +TmZ/IRuZDMgA3N+jAyQfMjmlvtA0BygLUbrKTJXb6Bz0BhUjUVahOv6Mnq86yZh # glKCg9LB4BVZneTw5VSd3Tj6Lt/qNhhJjRlV+UYxWzZ0zmFNdkq08RRxKCmMbtYi # t4DsT7xGqfMK9JXEOIWa5REyP4i5llzKe173ml4wSi1Nro9hzZz5cgAKS+7Eabni # nCLhOi26hwkBUCqCKN2eTyRKqOtyftOiKGYog1EV4YtwbnfQS072h0FJz8H6Ibkt # n+twrO8NY31Y0JMzj0GksZ0JSlV/04mtuIpNMSqPizMN/VZPznqwCiaGADtips4f # DoJRtJyDaI/n0IlbtcRpcsrax0uQQEdClvFlcfOkSvkm1aZU2q7wwSKbyOkcnWgd # qnxkUqjHnQTlUSEOqjhtEcw7Bv6J7Mn5IwN0zKROIZp9ia+LZwI= # =O5Kv # -----END PGP SIGNATURE----- # gpg: Signature made Sun 09 Mar 2025 21:49:57 HKT # 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] # Primary key fingerprint: A0F6 6548 F048 95EB FE6B 0B60 51A3 43C7 CFFB ECA1 * tag 'pull-aspeed-20250309' of https://github.com/legoater/qemu: (46 commits) docs/specs: Add aspeed-intc tests/functional/aspeed: Add test case for AST2700 A1 tests/functional/aspeed: Update test ASPEED SDK v09.05 tests/functional/aspeed: Update temperature hwmon path tests/functional/aspeed: Introduce start_ast2700_test API hw/arm/aspeed_ast27x0: Sort the memmap table by mapping address hw/arm/aspeed: Add Machine Support for AST2700 A1 hw/arm/aspeed_ast27x0: Add SoC Support for AST2700 A1 hw/arm/aspeed_ast27x0: Support two levels of INTC controllers for AST2700 A1 hw/arm/aspeed_ast27x0: Define an Array of AspeedINTCState with Two Instances hw/arm/aspeed_ast27x0.c Support AST2700 A1 GIC Interrupt Mapping hw/misc/aspeed_scu: Add Support for AST2700/AST2750 A1 Silicon Revisions hw/intc/aspeed: Add Support for AST2700 INTCIO Controller hw/intc/aspeed: Add Support for Multi-Output IRQ Handling hw/intc/aspeed: Introduce IRQ handler function to reduce code duplication hw/intc/aspeed: Introduce AspeedINTCIRQ structure to save the irq index and register address hw/intc/aspeed: Refactor INTC to support separate input and output pin indices hw/intc/aspeed: Add support for multiple output pins in INTC hw/intc/aspeed: Rename num_ints to num_inpins for clarity hw/intc/aspeed: Support different memory region ops ... Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
@@ -0,0 +1,136 @@
|
||||
===========================
|
||||
ASPEED Interrupt Controller
|
||||
===========================
|
||||
|
||||
AST2700
|
||||
-------
|
||||
There are a total of 480 interrupt sources in AST2700. Due to the limitation of
|
||||
interrupt numbers of processors, the interrupts are merged every 32 sources for
|
||||
interrupt numbers greater than 127.
|
||||
|
||||
There are two levels of interrupt controllers, INTC (CPU Die) and INTCIO
|
||||
(I/O Die).
|
||||
|
||||
Interrupt Mapping
|
||||
-----------------
|
||||
- INTC: Handles interrupt sources 0 - 127 and integrates signals from INTCIO.
|
||||
- INTCIO: Handles interrupt sources 128 - 319 independently.
|
||||
|
||||
QEMU Support
|
||||
------------
|
||||
Currently, only GIC 192 to 201 are supported, and their source interrupts are
|
||||
from INTCIO and connected to INTC at input pin 0 and output pins 0 to 9 for
|
||||
GIC 192-201.
|
||||
|
||||
Design for GICINT 196
|
||||
---------------------
|
||||
The orgate has interrupt sources ranging from 0 to 31, with its output pin
|
||||
connected to INTCIO "T0 GICINT_196". The output pin is then connected to INTC
|
||||
"GIC_192_201" at bit 4, and its bit 4 output pin is connected to GIC 196.
|
||||
|
||||
INTC GIC_192_201 Output Pin Mapping
|
||||
-----------------------------------
|
||||
The design of INTC GIC_192_201 have 10 output pins, mapped as following:
|
||||
|
||||
==== ====
|
||||
Bit GIC
|
||||
==== ====
|
||||
0 192
|
||||
1 193
|
||||
2 194
|
||||
3 195
|
||||
4 196
|
||||
5 197
|
||||
6 198
|
||||
7 199
|
||||
8 200
|
||||
9 201
|
||||
==== ====
|
||||
|
||||
AST2700 A0
|
||||
----------
|
||||
It has only one INTC controller, and currently, only GIC 128-136 is supported.
|
||||
To support both AST2700 A1 and AST2700 A0, there are 10 OR gates in the INTC,
|
||||
with gates 1 to 9 supporting GIC 128-136.
|
||||
|
||||
Design for GICINT 132
|
||||
---------------------
|
||||
The orgate has interrupt sources ranging from 0 to 31, with its output pin
|
||||
connected to INTC. The output pin is then connected to GIC 132.
|
||||
|
||||
Block Diagram of GICINT 196 for AST2700 A1 and GICINT 132 for AST2700 A0
|
||||
------------------------------------------------------------------------
|
||||
|
||||
.. code-block::
|
||||
|
||||
|-------------------------------------------------------------------------------------------------------|
|
||||
| AST2700 A1 Design |
|
||||
| To GICINT196 |
|
||||
| |
|
||||
| ETH1 |-----------| |--------------------------| |--------------| |
|
||||
| -------->|0 | | INTCIO | | orgates[0] | |
|
||||
| ETH2 | 4| orgates[0]------>|inpin[0]-------->outpin[0]|------->| 0 | |
|
||||
| -------->|1 5| orgates[1]------>|inpin[1]-------->outpin[1]|------->| 1 | |
|
||||
| ETH3 | 6| orgates[2]------>|inpin[2]-------->outpin[2]|------->| 2 | |
|
||||
| -------->|2 19| orgates[3]------>|inpin[3]-------->outpin[3]|------->| 3 OR[0:9] |-----| |
|
||||
| UART0 | 20|-->orgates[4]------>|inpin[4]-------->outpin[4]|------->| 4 | | |
|
||||
| -------->|7 21| orgates[5]------>|inpin[5]-------->outpin[5]|------->| 5 | | |
|
||||
| UART1 | 22| orgates[6]------>|inpin[6]-------->outpin[6]|------->| 6 | | |
|
||||
| -------->|8 23| orgates[7]------>|inpin[7]-------->outpin[7]|------->| 7 | | |
|
||||
| UART2 | 24| orgates[8]------>|inpin[8]-------->outpin[8]|------->| 8 | | |
|
||||
| -------->|9 25| orgates[9]------>|inpin[9]-------->outpin[9]|------->| 9 | | |
|
||||
| UART3 | 26| |--------------------------| |--------------| | |
|
||||
| ---------|10 27| | |
|
||||
| UART5 | 28| | |
|
||||
| -------->|11 29| | |
|
||||
| UART6 | | | |
|
||||
| -------->|12 30| |-----------------------------------------------------------------------| |
|
||||
| UART7 | 31| | |
|
||||
| -------->|13 | | |
|
||||
| UART8 | OR[0:31] | | |------------------------------| |----------| |
|
||||
| -------->|14 | | | INTC | | GIC | |
|
||||
| UART9 | | | |inpin[0:0]--------->outpin[0] |---------->|192 | |
|
||||
| -------->|15 | | |inpin[0:1]--------->outpin[1] |---------->|193 | |
|
||||
| UART10 | | | |inpin[0:2]--------->outpin[2] |---------->|194 | |
|
||||
| -------->|16 | | |inpin[0:3]--------->outpin[3] |---------->|195 | |
|
||||
| UART11 | | |--------------> |inpin[0:4]--------->outpin[4] |---------->|196 | |
|
||||
| -------->|17 | |inpin[0:5]--------->outpin[5] |---------->|197 | |
|
||||
| UART12 | | |inpin[0:6]--------->outpin[6] |---------->|198 | |
|
||||
| -------->|18 | |inpin[0:7]--------->outpin[7] |---------->|199 | |
|
||||
| |-----------| |inpin[0:8]--------->outpin[8] |---------->|200 | |
|
||||
| |inpin[0:9]--------->outpin[9] |---------->|201 | |
|
||||
|-------------------------------------------------------------------------------------------------------|
|
||||
|-------------------------------------------------------------------------------------------------------|
|
||||
| ETH1 |-----------| orgates[1]------->|inpin[1]----------->outpin[10]|---------->|128 | |
|
||||
| -------->|0 | orgates[2]------->|inpin[2]----------->outpin[11]|---------->|129 | |
|
||||
| ETH2 | 4| orgates[3]------->|inpin[3]----------->outpin[12]|---------->|130 | |
|
||||
| -------->|1 5| orgates[4]------->|inpin[4]----------->outpin[13]|---------->|131 | |
|
||||
| ETH3 | 6|---->orgates[5]------->|inpin[5]----------->outpin[14]|---------->|132 | |
|
||||
| -------->|2 19| orgates[6]------->|inpin[6]----------->outpin[15]|---------->|133 | |
|
||||
| UART0 | 20| orgates[7]------->|inpin[7]----------->outpin[16]|---------->|134 | |
|
||||
| -------->|7 21| orgates[8]------->|inpin[8]----------->outpin[17]|---------->|135 | |
|
||||
| UART1 | 22| orgates[9]------->|inpin[9]----------->outpin[18]|---------->|136 | |
|
||||
| -------->|8 23| |------------------------------| |----------| |
|
||||
| UART2 | 24| |
|
||||
| -------->|9 25| AST2700 A0 Design |
|
||||
| UART3 | 26| |
|
||||
| -------->|10 27| |
|
||||
| UART5 | 28| |
|
||||
| -------->|11 29| GICINT132 |
|
||||
| UART6 | | |
|
||||
| -------->|12 30| |
|
||||
| UART7 | 31| |
|
||||
| -------->|13 | |
|
||||
| UART8 | OR[0:31] | |
|
||||
| -------->|14 | |
|
||||
| UART9 | | |
|
||||
| -------->|15 | |
|
||||
| UART10 | | |
|
||||
| -------->|16 | |
|
||||
| UART11 | | |
|
||||
| -------->|17 | |
|
||||
| UART12 | | |
|
||||
| -------->|18 | |
|
||||
| |-----------| |
|
||||
| |
|
||||
|-------------------------------------------------------------------------------------------------------|
|
||||
@@ -38,3 +38,4 @@ guest hardware that is specific to QEMU.
|
||||
rocker
|
||||
riscv-iommu
|
||||
riscv-aia
|
||||
aspeed-intc
|
||||
|
||||
+33
-6
@@ -181,8 +181,10 @@ struct AspeedMachineState {
|
||||
|
||||
#ifdef TARGET_AARCH64
|
||||
/* AST2700 evb hardware value */
|
||||
#define AST2700_EVB_HW_STRAP1 0x000000C0
|
||||
#define AST2700_EVB_HW_STRAP2 0x00000003
|
||||
/* SCU HW Strap1 */
|
||||
#define AST2700_EVB_HW_STRAP1 0x00000800
|
||||
/* SCUIO HW Strap1 */
|
||||
#define AST2700_EVB_HW_STRAP2 0x00000700
|
||||
#endif
|
||||
|
||||
/* Rainier hardware value: (QEMU prototype) */
|
||||
@@ -1671,12 +1673,13 @@ static void ast2700_evb_i2c_init(AspeedMachineState *bmc)
|
||||
TYPE_TMP105, 0x4d);
|
||||
}
|
||||
|
||||
static void aspeed_machine_ast2700_evb_class_init(ObjectClass *oc, void *data)
|
||||
static void aspeed_machine_ast2700a0_evb_class_init(ObjectClass *oc, void *data)
|
||||
{
|
||||
MachineClass *mc = MACHINE_CLASS(oc);
|
||||
AspeedMachineClass *amc = ASPEED_MACHINE_CLASS(oc);
|
||||
|
||||
mc->desc = "Aspeed AST2700 EVB (Cortex-A35)";
|
||||
mc->alias = "ast2700-evb";
|
||||
mc->desc = "Aspeed AST2700 A0 EVB (Cortex-A35)";
|
||||
amc->soc_name = "ast2700-a0";
|
||||
amc->hw_strap1 = AST2700_EVB_HW_STRAP1;
|
||||
amc->hw_strap2 = AST2700_EVB_HW_STRAP2;
|
||||
@@ -1690,6 +1693,26 @@ static void aspeed_machine_ast2700_evb_class_init(ObjectClass *oc, void *data)
|
||||
mc->default_ram_size = 1 * GiB;
|
||||
aspeed_machine_class_init_cpus_defaults(mc);
|
||||
}
|
||||
|
||||
static void aspeed_machine_ast2700a1_evb_class_init(ObjectClass *oc, void *data)
|
||||
{
|
||||
MachineClass *mc = MACHINE_CLASS(oc);
|
||||
AspeedMachineClass *amc = ASPEED_MACHINE_CLASS(oc);
|
||||
|
||||
mc->desc = "Aspeed AST2700 A1 EVB (Cortex-A35)";
|
||||
amc->soc_name = "ast2700-a1";
|
||||
amc->hw_strap1 = AST2700_EVB_HW_STRAP1;
|
||||
amc->hw_strap2 = AST2700_EVB_HW_STRAP2;
|
||||
amc->fmc_model = "w25q01jvq";
|
||||
amc->spi_model = "w25q512jv";
|
||||
amc->num_cs = 2;
|
||||
amc->macs_mask = ASPEED_MAC0_ON | ASPEED_MAC1_ON | ASPEED_MAC2_ON;
|
||||
amc->uart_default = ASPEED_DEV_UART12;
|
||||
amc->i2c_init = ast2700_evb_i2c_init;
|
||||
mc->auto_create_sdcard = true;
|
||||
mc->default_ram_size = 1 * GiB;
|
||||
aspeed_machine_class_init_cpus_defaults(mc);
|
||||
}
|
||||
#endif
|
||||
|
||||
static void aspeed_machine_qcom_dc_scm_v1_class_init(ObjectClass *oc,
|
||||
@@ -1815,9 +1838,13 @@ static const TypeInfo aspeed_machine_types[] = {
|
||||
.class_init = aspeed_minibmc_machine_ast1030_evb_class_init,
|
||||
#ifdef TARGET_AARCH64
|
||||
}, {
|
||||
.name = MACHINE_TYPE_NAME("ast2700-evb"),
|
||||
.name = MACHINE_TYPE_NAME("ast2700a0-evb"),
|
||||
.parent = TYPE_ASPEED_MACHINE,
|
||||
.class_init = aspeed_machine_ast2700_evb_class_init,
|
||||
.class_init = aspeed_machine_ast2700a0_evb_class_init,
|
||||
}, {
|
||||
.name = MACHINE_TYPE_NAME("ast2700a1-evb"),
|
||||
.parent = TYPE_ASPEED_MACHINE,
|
||||
.class_init = aspeed_machine_ast2700a1_evb_class_init,
|
||||
#endif
|
||||
}, {
|
||||
.name = TYPE_ASPEED_MACHINE,
|
||||
|
||||
@@ -116,7 +116,7 @@ static void aspeed_soc_ast1030_init(Object *obj)
|
||||
char typename[64];
|
||||
int i;
|
||||
|
||||
if (sscanf(sc->name, "%7s", socname) != 1) {
|
||||
if (sscanf(object_get_typename(obj), "%7s", socname) != 1) {
|
||||
g_assert_not_reached();
|
||||
}
|
||||
|
||||
@@ -428,7 +428,6 @@ static void aspeed_soc_ast1030_class_init(ObjectClass *klass, void *data)
|
||||
dc->user_creatable = false;
|
||||
dc->realize = aspeed_soc_ast1030_realize;
|
||||
|
||||
sc->name = "ast1030-a1";
|
||||
sc->valid_cpu_types = valid_cpu_types;
|
||||
sc->silicon_rev = AST1030_A1_SILICON_REV;
|
||||
sc->sram_size = 0xc0000;
|
||||
|
||||
@@ -151,7 +151,7 @@ static void aspeed_ast2400_soc_init(Object *obj)
|
||||
char socname[8];
|
||||
char typename[64];
|
||||
|
||||
if (sscanf(sc->name, "%7s", socname) != 1) {
|
||||
if (sscanf(object_get_typename(obj), "%7s", socname) != 1) {
|
||||
g_assert_not_reached();
|
||||
}
|
||||
|
||||
@@ -515,7 +515,6 @@ static void aspeed_soc_ast2400_class_init(ObjectClass *oc, void *data)
|
||||
/* Reason: Uses serial_hds and nd_table in realize() directly */
|
||||
dc->user_creatable = false;
|
||||
|
||||
sc->name = "ast2400-a1";
|
||||
sc->valid_cpu_types = valid_cpu_types;
|
||||
sc->silicon_rev = AST2400_A1_SILICON_REV;
|
||||
sc->sram_size = 0x8000;
|
||||
@@ -544,7 +543,6 @@ static void aspeed_soc_ast2500_class_init(ObjectClass *oc, void *data)
|
||||
/* Reason: Uses serial_hds and nd_table in realize() directly */
|
||||
dc->user_creatable = false;
|
||||
|
||||
sc->name = "ast2500-a1";
|
||||
sc->valid_cpu_types = valid_cpu_types;
|
||||
sc->silicon_rev = AST2500_A1_SILICON_REV;
|
||||
sc->sram_size = 0x9000;
|
||||
|
||||
@@ -157,7 +157,7 @@ static void aspeed_soc_ast2600_init(Object *obj)
|
||||
char socname[8];
|
||||
char typename[64];
|
||||
|
||||
if (sscanf(sc->name, "%7s", socname) != 1) {
|
||||
if (sscanf(object_get_typename(obj), "%7s", socname) != 1) {
|
||||
g_assert_not_reached();
|
||||
}
|
||||
|
||||
@@ -666,7 +666,6 @@ static void aspeed_soc_ast2600_class_init(ObjectClass *oc, void *data)
|
||||
/* Reason: The Aspeed SoC can only be instantiated from a board */
|
||||
dc->user_creatable = false;
|
||||
|
||||
sc->name = "ast2600-a3";
|
||||
sc->valid_cpu_types = valid_cpu_types;
|
||||
sc->silicon_rev = AST2600_A3_SILICON_REV;
|
||||
sc->sram_size = 0x16400;
|
||||
|
||||
+273
-98
File diff suppressed because it is too large
Load Diff
+501
-174
File diff suppressed because it is too large
Load Diff
+13
-12
@@ -80,18 +80,19 @@ aspeed_vic_update_irq(int flags) "Raising IRQ: %d"
|
||||
aspeed_vic_read(uint64_t offset, unsigned size, uint32_t value) "From 0x%" PRIx64 " of size %u: 0x%" PRIx32
|
||||
aspeed_vic_write(uint64_t offset, unsigned size, uint32_t data) "To 0x%" PRIx64 " of size %u: 0x%" PRIx32
|
||||
# aspeed_intc.c
|
||||
aspeed_intc_read(uint64_t offset, unsigned size, uint32_t value) "From 0x%" PRIx64 " of size %u: 0x%" PRIx32
|
||||
aspeed_intc_write(uint64_t offset, unsigned size, uint32_t data) "To 0x%" PRIx64 " of size %u: 0x%" PRIx32
|
||||
aspeed_intc_set_irq(int irq, int level) "Set IRQ %d: %d"
|
||||
aspeed_intc_clear_irq(int irq, int level) "Clear IRQ %d: %d"
|
||||
aspeed_intc_update_irq(int irq, int level) "Update IRQ: %d: %d"
|
||||
aspeed_intc_pending_irq(int irq, uint32_t value) "Pending IRQ: %d: 0x%x"
|
||||
aspeed_intc_trigger_irq(int irq, uint32_t value) "Trigger IRQ: %d: 0x%x"
|
||||
aspeed_intc_all_isr_done(int irq) "All source ISR execution are done: %d"
|
||||
aspeed_intc_enable(uint32_t value) "Enable: 0x%x"
|
||||
aspeed_intc_select(uint32_t value) "Select: 0x%x"
|
||||
aspeed_intc_mask(uint32_t change, uint32_t value) "Mask: 0x%x: 0x%x"
|
||||
aspeed_intc_unmask(uint32_t change, uint32_t value) "UnMask: 0x%x: 0x%x"
|
||||
aspeed_intc_read(const char *s, uint64_t offset, unsigned size, uint32_t value) "%s: From 0x%" PRIx64 " of size %u: 0x%" PRIx32
|
||||
aspeed_intc_write(const char *s, uint64_t offset, unsigned size, uint32_t data) "%s: To 0x%" PRIx64 " of size %u: 0x%" PRIx32
|
||||
aspeed_intc_set_irq(const char *s, int inpin_idx, int level) "%s: Set IRQ %d: %d"
|
||||
aspeed_intc_clear_irq(const char *s, int inpin_idx, int outpin_idx, int level) "%s: Clear IRQ %d-%d: %d"
|
||||
aspeed_intc_update_irq(const char *s, int inpin_idx, int outpin_idx, int level) "%s: Update IRQ: %d-%d: %d"
|
||||
aspeed_intc_pending_irq(const char *s, int inpin_idx, uint32_t value) "%s: Pending IRQ: %d: 0x%x"
|
||||
aspeed_intc_trigger_irq(const char *s, int inpin_idx, int outpin_idx, uint32_t value) "%s: Trigger IRQ: %d-%d: 0x%x"
|
||||
aspeed_intc_all_isr_done(const char *s, int inpin_idx) "%s: All source ISR execution are done: %d"
|
||||
aspeed_intc_enable(const char *s, uint32_t value) "%s: Enable: 0x%x"
|
||||
aspeed_intc_select(const char *s, uint32_t value) "%s: Select: 0x%x"
|
||||
aspeed_intc_mask(const char *s, uint32_t change, uint32_t value) "%s: Mask: 0x%x: 0x%x"
|
||||
aspeed_intc_unmask(const char *s, uint32_t change, uint32_t value) "%s: UnMask: 0x%x: 0x%x"
|
||||
aspeed_intc_all_isr_done_bit(const char *s, int inpin_idx, int bit) "%s: All source ISR execution are done from specific bit: %d-%d"
|
||||
|
||||
# arm_gic.c
|
||||
gic_enable_irq(int irq) "irq %d enabled"
|
||||
|
||||
+51
-4
@@ -59,6 +59,7 @@
|
||||
/* Other cmd bits */
|
||||
#define HASH_IRQ_EN BIT(9)
|
||||
#define HASH_SG_EN BIT(18)
|
||||
#define CRYPT_IRQ_EN BIT(12)
|
||||
/* Scatter-gather data list */
|
||||
#define SG_LIST_LEN_SIZE 4
|
||||
#define SG_LIST_LEN_MASK 0x0FFFFFFF
|
||||
@@ -75,9 +76,12 @@ static const struct {
|
||||
{ HASH_ALGO_SHA1, QCRYPTO_HASH_ALGO_SHA1 },
|
||||
{ HASH_ALGO_SHA224, QCRYPTO_HASH_ALGO_SHA224 },
|
||||
{ HASH_ALGO_SHA256, QCRYPTO_HASH_ALGO_SHA256 },
|
||||
{ HASH_ALGO_SHA512_SERIES | HASH_ALGO_SHA512_SHA512, QCRYPTO_HASH_ALGO_SHA512 },
|
||||
{ HASH_ALGO_SHA512_SERIES | HASH_ALGO_SHA512_SHA384, QCRYPTO_HASH_ALGO_SHA384 },
|
||||
{ HASH_ALGO_SHA512_SERIES | HASH_ALGO_SHA512_SHA256, QCRYPTO_HASH_ALGO_SHA256 },
|
||||
{ HASH_ALGO_SHA512_SERIES | HASH_ALGO_SHA512_SHA512,
|
||||
QCRYPTO_HASH_ALGO_SHA512 },
|
||||
{ HASH_ALGO_SHA512_SERIES | HASH_ALGO_SHA512_SHA384,
|
||||
QCRYPTO_HASH_ALGO_SHA384 },
|
||||
{ HASH_ALGO_SHA512_SERIES | HASH_ALGO_SHA512_SHA256,
|
||||
QCRYPTO_HASH_ALGO_SHA256 },
|
||||
};
|
||||
|
||||
static int hash_algo_lookup(uint32_t reg)
|
||||
@@ -201,7 +205,8 @@ static void do_hash_operation(AspeedHACEState *s, int algo, bool sg_mode,
|
||||
haddr = address_space_map(&s->dram_as, addr, &plen, false,
|
||||
MEMTXATTRS_UNSPECIFIED);
|
||||
if (haddr == NULL) {
|
||||
qemu_log_mask(LOG_GUEST_ERROR, "%s: qcrypto failed\n", __func__);
|
||||
qemu_log_mask(LOG_GUEST_ERROR,
|
||||
"%s: qcrypto failed\n", __func__);
|
||||
return;
|
||||
}
|
||||
iov[i].iov_base = haddr;
|
||||
@@ -339,6 +344,15 @@ static void aspeed_hace_write(void *opaque, hwaddr addr, uint64_t data,
|
||||
qemu_irq_lower(s->irq);
|
||||
}
|
||||
}
|
||||
if (ahc->raise_crypt_interrupt_workaround) {
|
||||
if (data & CRYPT_IRQ) {
|
||||
data &= ~CRYPT_IRQ;
|
||||
|
||||
if (s->regs[addr] & CRYPT_IRQ) {
|
||||
qemu_irq_lower(s->irq);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case R_HASH_SRC:
|
||||
data &= ahc->src_mask;
|
||||
@@ -384,6 +398,12 @@ static void aspeed_hace_write(void *opaque, hwaddr addr, uint64_t data,
|
||||
case R_CRYPT_CMD:
|
||||
qemu_log_mask(LOG_UNIMP, "%s: Crypt commands not implemented\n",
|
||||
__func__);
|
||||
if (ahc->raise_crypt_interrupt_workaround) {
|
||||
s->regs[R_STATUS] |= CRYPT_IRQ;
|
||||
if (data & CRYPT_IRQ_EN) {
|
||||
qemu_irq_raise(s->irq);
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -548,12 +568,39 @@ static const TypeInfo aspeed_ast1030_hace_info = {
|
||||
.class_init = aspeed_ast1030_hace_class_init,
|
||||
};
|
||||
|
||||
static void aspeed_ast2700_hace_class_init(ObjectClass *klass, void *data)
|
||||
{
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
AspeedHACEClass *ahc = ASPEED_HACE_CLASS(klass);
|
||||
|
||||
dc->desc = "AST2700 Hash and Crypto Engine";
|
||||
|
||||
ahc->src_mask = 0x7FFFFFFF;
|
||||
ahc->dest_mask = 0x7FFFFFF8;
|
||||
ahc->key_mask = 0x7FFFFFF8;
|
||||
ahc->hash_mask = 0x00147FFF;
|
||||
|
||||
/*
|
||||
* Currently, it does not support the CRYPT command. Instead, it only
|
||||
* sends an interrupt to notify the firmware that the crypt command
|
||||
* has completed. It is a temporary workaround.
|
||||
*/
|
||||
ahc->raise_crypt_interrupt_workaround = true;
|
||||
}
|
||||
|
||||
static const TypeInfo aspeed_ast2700_hace_info = {
|
||||
.name = TYPE_ASPEED_AST2700_HACE,
|
||||
.parent = TYPE_ASPEED_HACE,
|
||||
.class_init = aspeed_ast2700_hace_class_init,
|
||||
};
|
||||
|
||||
static void aspeed_hace_register_types(void)
|
||||
{
|
||||
type_register_static(&aspeed_ast2400_hace_info);
|
||||
type_register_static(&aspeed_ast2500_hace_info);
|
||||
type_register_static(&aspeed_ast2600_hace_info);
|
||||
type_register_static(&aspeed_ast1030_hace_info);
|
||||
type_register_static(&aspeed_ast2700_hace_info);
|
||||
type_register_static(&aspeed_hace_info);
|
||||
}
|
||||
|
||||
|
||||
@@ -157,6 +157,7 @@
|
||||
#define AST2700_SCU_FREQ_CNTR TO_REG(0x3b0)
|
||||
#define AST2700_SCU_CPU_SCRATCH_0 TO_REG(0x780)
|
||||
#define AST2700_SCU_CPU_SCRATCH_1 TO_REG(0x784)
|
||||
#define AST2700_SCU_VGA_SCRATCH_0 TO_REG(0x900)
|
||||
|
||||
#define AST2700_SCUIO_CLK_STOP_CTL_1 TO_REG(0x240)
|
||||
#define AST2700_SCUIO_CLK_STOP_CLR_1 TO_REG(0x244)
|
||||
@@ -559,6 +560,8 @@ static uint32_t aspeed_silicon_revs[] = {
|
||||
AST2700_A0_SILICON_REV,
|
||||
AST2720_A0_SILICON_REV,
|
||||
AST2750_A0_SILICON_REV,
|
||||
AST2700_A1_SILICON_REV,
|
||||
AST2750_A1_SILICON_REV,
|
||||
};
|
||||
|
||||
bool is_supported_silicon_rev(uint32_t silicon_rev)
|
||||
@@ -909,8 +912,6 @@ static const MemoryRegionOps aspeed_ast2700_scu_ops = {
|
||||
};
|
||||
|
||||
static const uint32_t ast2700_a0_resets[ASPEED_AST2700_SCU_NR_REGS] = {
|
||||
[AST2700_SILICON_REV] = AST2700_A0_SILICON_REV,
|
||||
[AST2700_HW_STRAP1] = 0x00000800,
|
||||
[AST2700_HW_STRAP1_CLR] = 0xFFF0FFF0,
|
||||
[AST2700_HW_STRAP1_LOCK] = 0x00000FFF,
|
||||
[AST2700_HW_STRAP1_SEC1] = 0x000000FF,
|
||||
@@ -930,6 +931,7 @@ static const uint32_t ast2700_a0_resets[ASPEED_AST2700_SCU_NR_REGS] = {
|
||||
[AST2700_SCU_FREQ_CNTR] = 0x000375eb,
|
||||
[AST2700_SCU_CPU_SCRATCH_0] = 0x00000000,
|
||||
[AST2700_SCU_CPU_SCRATCH_1] = 0x00000004,
|
||||
[AST2700_SCU_VGA_SCRATCH_0] = 0x00000040,
|
||||
};
|
||||
|
||||
static void aspeed_ast2700_scu_reset(DeviceState *dev)
|
||||
@@ -938,6 +940,8 @@ static void aspeed_ast2700_scu_reset(DeviceState *dev)
|
||||
AspeedSCUClass *asc = ASPEED_SCU_GET_CLASS(dev);
|
||||
|
||||
memcpy(s->regs, asc->resets, asc->nr_regs * 4);
|
||||
s->regs[AST2700_SILICON_REV] = s->silicon_rev;
|
||||
s->regs[AST2700_HW_STRAP1] = s->hw_strap1;
|
||||
}
|
||||
|
||||
static void aspeed_2700_scu_class_init(ObjectClass *klass, void *data)
|
||||
@@ -1030,8 +1034,6 @@ static const MemoryRegionOps aspeed_ast2700_scuio_ops = {
|
||||
};
|
||||
|
||||
static const uint32_t ast2700_a0_resets_io[ASPEED_AST2700_SCU_NR_REGS] = {
|
||||
[AST2700_SILICON_REV] = 0x06000003,
|
||||
[AST2700_HW_STRAP1] = 0x00000504,
|
||||
[AST2700_HW_STRAP1_CLR] = 0xFFF0FFF0,
|
||||
[AST2700_HW_STRAP1_LOCK] = 0x00000FFF,
|
||||
[AST2700_HW_STRAP1_SEC1] = 0x000000FF,
|
||||
|
||||
@@ -128,7 +128,7 @@ struct Aspeed27x0SoCState {
|
||||
AspeedSoCState parent;
|
||||
|
||||
ARMCPU cpu[ASPEED_CPUS_NUM];
|
||||
AspeedINTCState intc;
|
||||
AspeedINTCState intc[2];
|
||||
GICv3State gic;
|
||||
MemoryRegion dram_empty;
|
||||
};
|
||||
@@ -148,7 +148,6 @@ OBJECT_DECLARE_SIMPLE_TYPE(Aspeed10x0SoCState, ASPEED10X0_SOC)
|
||||
struct AspeedSoCClass {
|
||||
DeviceClass parent_class;
|
||||
|
||||
const char *name;
|
||||
/** valid_cpu_types: NULL terminated array of a single CPU type. */
|
||||
const char * const *valid_cpu_types;
|
||||
uint32_t silicon_rev;
|
||||
@@ -195,6 +194,7 @@ enum {
|
||||
ASPEED_DEV_EHCI2,
|
||||
ASPEED_DEV_VIC,
|
||||
ASPEED_DEV_INTC,
|
||||
ASPEED_DEV_INTCIO,
|
||||
ASPEED_DEV_SDMC,
|
||||
ASPEED_DEV_SCU,
|
||||
ASPEED_DEV_ADC,
|
||||
|
||||
@@ -14,10 +14,19 @@
|
||||
|
||||
#define TYPE_ASPEED_INTC "aspeed.intc"
|
||||
#define TYPE_ASPEED_2700_INTC TYPE_ASPEED_INTC "-ast2700"
|
||||
#define TYPE_ASPEED_2700_INTCIO TYPE_ASPEED_INTC "io-ast2700"
|
||||
OBJECT_DECLARE_TYPE(AspeedINTCState, AspeedINTCClass, ASPEED_INTC)
|
||||
|
||||
#define ASPEED_INTC_NR_REGS (0x2000 >> 2)
|
||||
#define ASPEED_INTC_NR_INTS 9
|
||||
#define ASPEED_INTC_MAX_INPINS 10
|
||||
#define ASPEED_INTC_MAX_OUTPINS 19
|
||||
|
||||
typedef struct AspeedINTCIRQ {
|
||||
int inpin_idx;
|
||||
int outpin_idx;
|
||||
int num_outpins;
|
||||
uint32_t enable_reg;
|
||||
uint32_t status_reg;
|
||||
} AspeedINTCIRQ;
|
||||
|
||||
struct AspeedINTCState {
|
||||
/*< private >*/
|
||||
@@ -25,20 +34,29 @@ struct AspeedINTCState {
|
||||
|
||||
/*< public >*/
|
||||
MemoryRegion iomem;
|
||||
uint32_t regs[ASPEED_INTC_NR_REGS];
|
||||
OrIRQState orgates[ASPEED_INTC_NR_INTS];
|
||||
qemu_irq output_pins[ASPEED_INTC_NR_INTS];
|
||||
MemoryRegion iomem_container;
|
||||
|
||||
uint32_t enable[ASPEED_INTC_NR_INTS];
|
||||
uint32_t mask[ASPEED_INTC_NR_INTS];
|
||||
uint32_t pending[ASPEED_INTC_NR_INTS];
|
||||
uint32_t *regs;
|
||||
OrIRQState orgates[ASPEED_INTC_MAX_INPINS];
|
||||
qemu_irq output_pins[ASPEED_INTC_MAX_OUTPINS];
|
||||
|
||||
uint32_t enable[ASPEED_INTC_MAX_INPINS];
|
||||
uint32_t mask[ASPEED_INTC_MAX_INPINS];
|
||||
uint32_t pending[ASPEED_INTC_MAX_INPINS];
|
||||
};
|
||||
|
||||
struct AspeedINTCClass {
|
||||
SysBusDeviceClass parent_class;
|
||||
|
||||
uint32_t num_lines;
|
||||
uint32_t num_ints;
|
||||
uint32_t num_inpins;
|
||||
uint32_t num_outpins;
|
||||
uint64_t mem_size;
|
||||
uint64_t nr_regs;
|
||||
uint64_t reg_offset;
|
||||
const MemoryRegionOps *reg_ops;
|
||||
const AspeedINTCIRQ *irq_table;
|
||||
int irq_table_count;
|
||||
};
|
||||
|
||||
#endif /* ASPEED_INTC_H */
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
#define TYPE_ASPEED_AST2500_HACE TYPE_ASPEED_HACE "-ast2500"
|
||||
#define TYPE_ASPEED_AST2600_HACE TYPE_ASPEED_HACE "-ast2600"
|
||||
#define TYPE_ASPEED_AST1030_HACE TYPE_ASPEED_HACE "-ast1030"
|
||||
#define TYPE_ASPEED_AST2700_HACE TYPE_ASPEED_HACE "-ast2700"
|
||||
|
||||
OBJECT_DECLARE_TYPE(AspeedHACEState, AspeedHACEClass, ASPEED_HACE)
|
||||
|
||||
@@ -49,6 +50,7 @@ struct AspeedHACEClass {
|
||||
uint32_t dest_mask;
|
||||
uint32_t key_mask;
|
||||
uint32_t hash_mask;
|
||||
bool raise_crypt_interrupt_workaround;
|
||||
};
|
||||
|
||||
#endif /* ASPEED_HACE_H */
|
||||
|
||||
@@ -54,6 +54,8 @@ struct AspeedSCUState {
|
||||
#define AST2700_A0_SILICON_REV 0x06000103U
|
||||
#define AST2720_A0_SILICON_REV 0x06000203U
|
||||
#define AST2750_A0_SILICON_REV 0x06000003U
|
||||
#define AST2700_A1_SILICON_REV 0x06010103U
|
||||
#define AST2750_A1_SILICON_REV 0x06010003U
|
||||
|
||||
#define ASPEED_IS_AST2500(si_rev) ((((si_rev) >> 24) & 0xff) == 0x04)
|
||||
|
||||
|
||||
+13
-11
@@ -7,21 +7,23 @@ from qemu_test import LinuxKernelTest
|
||||
|
||||
class AspeedTest(LinuxKernelTest):
|
||||
|
||||
def do_test_arm_aspeed(self, machine, image):
|
||||
def do_test_arm_aspeed_openbmc(self, machine, image, uboot='2019.04',
|
||||
cpu_id='0x0', soc='AST2500 rev A1'):
|
||||
hostname = machine.removesuffix('-bmc')
|
||||
|
||||
self.set_machine(machine)
|
||||
self.vm.set_console()
|
||||
self.vm.add_args('-drive', 'file=' + image + ',if=mtd,format=raw',
|
||||
'-net', 'nic', '-snapshot')
|
||||
self.vm.add_args('-drive', f'file={image},if=mtd,format=raw',
|
||||
'-snapshot')
|
||||
self.vm.launch()
|
||||
|
||||
self.wait_for_console_pattern("U-Boot 2016.07")
|
||||
self.wait_for_console_pattern("## Loading kernel from FIT Image at 20080000")
|
||||
self.wait_for_console_pattern("Starting kernel ...")
|
||||
self.wait_for_console_pattern("Booting Linux on physical CPU 0x0")
|
||||
self.wait_for_console_pattern(
|
||||
"aspeed-smc 1e620000.spi: read control register: 203b0641")
|
||||
self.wait_for_console_pattern("ftgmac100 1e660000.ethernet eth0: irq ")
|
||||
self.wait_for_console_pattern("systemd[1]: Set hostname to")
|
||||
self.wait_for_console_pattern(f'U-Boot {uboot}')
|
||||
self.wait_for_console_pattern('## Loading kernel from FIT Image')
|
||||
self.wait_for_console_pattern('Starting kernel ...')
|
||||
self.wait_for_console_pattern(f'Booting Linux on physical CPU {cpu_id}')
|
||||
self.wait_for_console_pattern(f'ASPEED {soc}')
|
||||
self.wait_for_console_pattern('/init as init process')
|
||||
self.wait_for_console_pattern(f'systemd[1]: Hostname set to <{hostname}>.')
|
||||
|
||||
def do_test_arm_aspeed_buildroot_start(self, image, cpu_id, pattern='Aspeed EVB'):
|
||||
self.require_netdev('user')
|
||||
|
||||
@@ -22,8 +22,10 @@ test_timeouts = {
|
||||
'acpi_bits' : 420,
|
||||
'arm_aspeed_palmetto' : 120,
|
||||
'arm_aspeed_romulus' : 120,
|
||||
'arm_aspeed_witherspoon' : 120,
|
||||
'arm_aspeed_ast2500' : 720,
|
||||
'arm_aspeed_ast2600' : 1200,
|
||||
'arm_aspeed_bletchley' : 120,
|
||||
'arm_aspeed_rainier' : 480,
|
||||
'arm_bpim2u' : 500,
|
||||
'arm_collie' : 180,
|
||||
@@ -104,8 +106,10 @@ tests_arm_system_thorough = [
|
||||
'arm_aspeed_ast1030',
|
||||
'arm_aspeed_palmetto',
|
||||
'arm_aspeed_romulus',
|
||||
'arm_aspeed_witherspoon',
|
||||
'arm_aspeed_ast2500',
|
||||
'arm_aspeed_ast2600',
|
||||
'arm_aspeed_bletchley',
|
||||
'arm_aspeed_rainier',
|
||||
'arm_bpim2u',
|
||||
'arm_canona1100',
|
||||
|
||||
@@ -27,37 +27,37 @@ class AST2x00MachineSDK(QemuSystemTest):
|
||||
wait_for_console_pattern(self, '## Loading kernel from FIT Image')
|
||||
wait_for_console_pattern(self, 'Starting kernel ...')
|
||||
|
||||
ASSET_SDK_V903_AST2700 = Asset(
|
||||
'https://github.com/AspeedTech-BMC/openbmc/releases/download/v09.03/ast2700-default-obmc.tar.gz',
|
||||
'91225f50d255e2905ba8d8e0c80b71b9d157c3609770c7a740cd786370d85a77')
|
||||
ASSET_SDK_V905_AST2700 = Asset(
|
||||
'https://github.com/AspeedTech-BMC/openbmc/releases/download/v09.05/ast2700-a0-default-obmc.tar.gz',
|
||||
'cfbbd1cce72f2a3b73b9080c41eecdadebb7077fba4f7806d72ac99f3e84b74a')
|
||||
|
||||
def test_aarch64_ast2700_evb_sdk_v09_03(self):
|
||||
self.set_machine('ast2700-evb')
|
||||
|
||||
self.archive_extract(self.ASSET_SDK_V903_AST2700)
|
||||
ASSET_SDK_V905_AST2700A1 = Asset(
|
||||
'https://github.com/AspeedTech-BMC/openbmc/releases/download/v09.05/ast2700-default-obmc.tar.gz',
|
||||
'c1f4496aec06743c812a6e9a1a18d032f34d62f3ddb6956e924fef62aa2046a5')
|
||||
|
||||
def start_ast2700_test(self, name):
|
||||
num_cpu = 4
|
||||
uboot_size = os.path.getsize(self.scratch_file('ast2700-default',
|
||||
uboot_size = os.path.getsize(self.scratch_file(name,
|
||||
'u-boot-nodtb.bin'))
|
||||
uboot_dtb_load_addr = hex(0x400000000 + uboot_size)
|
||||
|
||||
load_images_list = [
|
||||
{
|
||||
'addr': '0x400000000',
|
||||
'file': self.scratch_file('ast2700-default',
|
||||
'file': self.scratch_file(name,
|
||||
'u-boot-nodtb.bin')
|
||||
},
|
||||
{
|
||||
'addr': str(uboot_dtb_load_addr),
|
||||
'file': self.scratch_file('ast2700-default', 'u-boot.dtb')
|
||||
'file': self.scratch_file(name, 'u-boot.dtb')
|
||||
},
|
||||
{
|
||||
'addr': '0x430000000',
|
||||
'file': self.scratch_file('ast2700-default', 'bl31.bin')
|
||||
'file': self.scratch_file(name, 'bl31.bin')
|
||||
},
|
||||
{
|
||||
'addr': '0x430080000',
|
||||
'file': self.scratch_file('ast2700-default', 'optee',
|
||||
'file': self.scratch_file(name, 'optee',
|
||||
'tee-raw.bin')
|
||||
}
|
||||
]
|
||||
@@ -76,23 +76,34 @@ class AST2x00MachineSDK(QemuSystemTest):
|
||||
self.vm.add_args('-device',
|
||||
'tmp105,bus=aspeed.i2c.bus.1,address=0x4d,id=tmp-test')
|
||||
self.do_test_aarch64_aspeed_sdk_start(
|
||||
self.scratch_file('ast2700-default', 'image-bmc'))
|
||||
self.scratch_file(name, 'image-bmc'))
|
||||
|
||||
wait_for_console_pattern(self, 'ast2700-default login:')
|
||||
wait_for_console_pattern(self, f'{name} login:')
|
||||
|
||||
exec_command_and_wait_for_pattern(self, 'root', 'Password:')
|
||||
exec_command_and_wait_for_pattern(self,
|
||||
'0penBmc', 'root@ast2700-default:~#')
|
||||
exec_command_and_wait_for_pattern(self, '0penBmc', f'root@{name}:~#')
|
||||
|
||||
exec_command_and_wait_for_pattern(self,
|
||||
'echo lm75 0x4d > /sys/class/i2c-dev/i2c-1/device/new_device ',
|
||||
'i2c i2c-1: new_device: Instantiated device lm75 at 0x4d');
|
||||
exec_command_and_wait_for_pattern(self,
|
||||
'cat /sys/class/hwmon/hwmon20/temp1_input', '0')
|
||||
'cat /sys/bus/i2c/devices/1-004d/hwmon/hwmon*/temp1_input', '0')
|
||||
self.vm.cmd('qom-set', path='/machine/peripheral/tmp-test',
|
||||
property='temperature', value=18000)
|
||||
exec_command_and_wait_for_pattern(self,
|
||||
'cat /sys/class/hwmon/hwmon20/temp1_input', '18000')
|
||||
'cat /sys/bus/i2c/devices/1-004d/hwmon/hwmon*/temp1_input', '18000')
|
||||
|
||||
def test_aarch64_ast2700_evb_sdk_v09_05(self):
|
||||
self.set_machine('ast2700-evb')
|
||||
|
||||
self.archive_extract(self.ASSET_SDK_V905_AST2700)
|
||||
self.start_ast2700_test('ast2700-a0-default')
|
||||
|
||||
def test_aarch64_ast2700a1_evb_sdk_v09_05(self):
|
||||
self.set_machine('ast2700a1-evb')
|
||||
|
||||
self.archive_extract(self.ASSET_SDK_V905_AST2700A1)
|
||||
self.start_ast2700_test('ast2700-default')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
# Functional test that boots the ASPEED machines
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
from qemu_test import Asset
|
||||
from aspeed import AspeedTest
|
||||
|
||||
|
||||
class BletchleyMachine(AspeedTest):
|
||||
|
||||
ASSET_BLETCHLEY_FLASH = Asset(
|
||||
'https://github.com/legoater/qemu-aspeed-boot/raw/master/images/bletchley-bmc/openbmc-20250128071329/obmc-phosphor-image-bletchley-20250128071329.static.mtd.xz',
|
||||
'db21d04d47d7bb2a276f59d308614b4dfb70b9c7c81facbbca40a3977a2d8844');
|
||||
|
||||
def test_arm_ast2600_bletchley_openbmc(self):
|
||||
image_path = self.uncompress(self.ASSET_BLETCHLEY_FLASH)
|
||||
|
||||
self.do_test_arm_aspeed_openbmc('bletchley-bmc', image=image_path,
|
||||
uboot='2019.04', cpu_id='0xf00',
|
||||
soc='AST2600 rev A3');
|
||||
|
||||
if __name__ == '__main__':
|
||||
AspeedTest.main()
|
||||
@@ -7,18 +7,19 @@
|
||||
from qemu_test import Asset
|
||||
from aspeed import AspeedTest
|
||||
|
||||
|
||||
class PalmettoMachine(AspeedTest):
|
||||
|
||||
ASSET_PALMETTO_FLASH = Asset(
|
||||
('https://github.com/openbmc/openbmc/releases/download/2.9.0/'
|
||||
'obmc-phosphor-image-palmetto.static.mtd'),
|
||||
'3e13bbbc28e424865dc42f35ad672b10f2e82cdb11846bb28fa625b48beafd0d');
|
||||
'https://github.com/legoater/qemu-aspeed-boot/raw/master/images/palmetto-bmc/openbmc-20250128071432/obmc-phosphor-image-palmetto-20250128071432.static.mtd',
|
||||
'bce7c392eec75c707a91cfc8fad7ca9a69d7e4f10df936930d65c1cb9897ac81');
|
||||
|
||||
def test_arm_ast2400_palmetto_openbmc_v2_9_0(self):
|
||||
def test_arm_ast2400_palmetto_openbmc(self):
|
||||
image_path = self.ASSET_PALMETTO_FLASH.fetch()
|
||||
|
||||
self.do_test_arm_aspeed('palmetto-bmc', image_path)
|
||||
|
||||
self.do_test_arm_aspeed_openbmc('palmetto-bmc', image=image_path,
|
||||
uboot='2019.04', cpu_id='0x0',
|
||||
soc='AST2400 rev A1');
|
||||
|
||||
if __name__ == '__main__':
|
||||
AspeedTest.main()
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user