hw/arm/aspeed: anacapa: add FRU EEPROM data

Use frugen to generate FRU data for the following components: HPM MB,
R-PDB, L-PDB, SCM, BSM, R Bridge Board, L Bridge Board, and HPM board
ID.

Signed-off-by: William de Abreu Pinho <williamdapinho@gmail.com>
Reviewed-by: Cédric Le Goater <clg@redhat.com>
Link: https://lore.kernel.org/qemu-devel/20260519-add-anacapa-machine-v3-3-56c23993a20a@gmail.com
Signed-off-by: Cédric Le Goater <clg@redhat.com>
This commit is contained in:
William de Abreu Pinho
2026-05-19 10:48:40 -07:00
committed by Cédric Le Goater
parent dc238e34f2
commit f89ca1b3f6

View File

@@ -20,6 +20,207 @@
#define ANACAPA_BMC_HW_STRAP2 0x00000000
#define ANACAPA_BMC_RAM_SIZE ASPEED_RAM_SIZE(2 * GiB)
/*
* "Anacapa HPM (MB)" FRU data. Generated with frugen.
*
* {
* "board": { "mfg": "Inventec", "pname": "Anacapa QEMU MB EVT2",
* "pn": "00000000000", "serial": "00000000000000" },
* "product": { "mfg": "Inventec", "pname": "CI-Anacapa",
* "pn": "10000000001", "ver": "MP",
* "serial": "10000000000000", "atag": "QEMU" }
* }
*/
static const uint8_t hpm_eeprom[] = {
0x01, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0xf6, 0x01, 0x07, 0x19, 0xb4,
0xa4, 0xf2, 0xc8, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x65, 0x63, 0xd4,
0x41, 0x6e, 0x61, 0x63, 0x61, 0x70, 0x61, 0x20, 0x51, 0x45, 0x4d, 0x55,
0x20, 0x4d, 0x42, 0x20, 0x45, 0x56, 0x54, 0x32, 0x47, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xc0,
0xc1, 0x00, 0x00, 0xb8, 0x01, 0x06, 0x19, 0xc8, 0x49, 0x6e, 0x76, 0x65,
0x6e, 0x74, 0x65, 0x63, 0xca, 0x43, 0x49, 0x2d, 0x41, 0x6e, 0x61, 0x63,
0x61, 0x70, 0x61, 0x46, 0x10, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x82, 0x2d,
0x0c, 0x47, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x71, 0xd9,
0xd6, 0xc0, 0xc1, 0x0e
};
static const size_t hpm_eeprom_len = sizeof(hpm_eeprom);
/*
* "Anacapa R-PDB" FRU data. Generated with frugen.
*
* {
* "board": { "mfg": "Inventec", "pname": "Anacapa QEMU RPDB",
* "pn": "00000000000", "serial": "00000000000000" },
* "product": { "mfg": "Inventec", "pname": "CI-Anacapa",
* "pn": "10000000001", "ver": "MP",
* "serial": "10000000000000", "atag": "QEMU" }
* }
*/
static const uint8_t rpdb_eeprom[] = {
0x01, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0xf6, 0x01, 0x07, 0x19, 0x41,
0x2d, 0xf2, 0xc8, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x65, 0x63, 0xd1,
0x41, 0x6e, 0x61, 0x63, 0x61, 0x70, 0x61, 0x20, 0x51, 0x45, 0x4d, 0x55,
0x20, 0x52, 0x50, 0x44, 0x42, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xc0, 0xc1, 0x00, 0x00,
0x00, 0x00, 0x00, 0x4d, 0x01, 0x06, 0x19, 0xc8, 0x49, 0x6e, 0x76, 0x65,
0x6e, 0x74, 0x65, 0x63, 0xca, 0x43, 0x49, 0x2d, 0x41, 0x6e, 0x61, 0x63,
0x61, 0x70, 0x61, 0x46, 0x10, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x82, 0x2d,
0x0c, 0x47, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x71, 0xd9,
0xd6, 0xc0, 0xc1, 0x0e
};
static const size_t rpdb_eeprom_len = sizeof(rpdb_eeprom);
/*
* "Anacapa L-PDB" FRU data. Generated with frugen.
*
* {
* "board": { "mfg": "Inventec", "pname": "Anacapa QEMU LPDB",
* "pn": "00000000000", "serial": "00000000000000" },
* "product": { "mfg": "Inventec", "pname": "CI-Anacapa",
* "pn": "10000000001", "ver": "MP",
* "serial": "10000000000000", "atag": "QEMU" }
* }
*/
static const uint8_t lpdb_eeprom[] = {
0x01, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0xf6, 0x01, 0x07, 0x19, 0x41,
0x2d, 0xf2, 0xc8, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x65, 0x63, 0xd1,
0x41, 0x6e, 0x61, 0x63, 0x61, 0x70, 0x61, 0x20, 0x51, 0x45, 0x4d, 0x55,
0x20, 0x4c, 0x50, 0x44, 0x42, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xc0, 0xc1, 0x00, 0x00,
0x00, 0x00, 0x00, 0x53, 0x01, 0x06, 0x19, 0xc8, 0x49, 0x6e, 0x76, 0x65,
0x6e, 0x74, 0x65, 0x63, 0xca, 0x43, 0x49, 0x2d, 0x41, 0x6e, 0x61, 0x63,
0x61, 0x70, 0x61, 0x46, 0x10, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x82, 0x2d,
0x0c, 0x47, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x71, 0xd9,
0xd6, 0xc0, 0xc1, 0x0e
};
static const size_t lpdb_eeprom_len = sizeof(lpdb_eeprom);
/*
* "Anacapa SCM" FRU data. Generated with frugen.
*
* {
* "board": { "mfg": "Quanta", "pname": "Anacapa SCM",
* "pn": "00000000000", "serial": "00000000000000" },
* "product": { "mfg": "Quanta", "pname": "CI-Anacapa",
* "pn": "10000000001", "ver": "MP",
* "serial": "10000000000000", "atag": "QEMU" }
* }
*/
static const uint8_t scm_eeprom[] = {
0x01, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0xf7, 0x01, 0x06, 0x19, 0x41,
0x2d, 0xf2, 0xc6, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x61, 0xcb, 0x41, 0x6e,
0x61, 0x63, 0x61, 0x70, 0x61, 0x20, 0x53, 0x43, 0x4d, 0x47, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a,
0xc0, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc5, 0x01, 0x06, 0x19, 0xc6,
0x51, 0x75, 0x61, 0x6e, 0x74, 0x61, 0xca, 0x43, 0x49, 0x2d, 0x41, 0x6e,
0x61, 0x63, 0x61, 0x70, 0x61, 0x46, 0x10, 0x00, 0x00, 0x00, 0x00, 0x1a,
0x82, 0x2d, 0x0c, 0x47, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83,
0x71, 0xd9, 0xd6, 0xc0, 0xc1, 0x00, 0x00, 0xe2
};
static const size_t scm_eeprom_len = sizeof(scm_eeprom);
/*
* "Anacapa BMC Storage Module" FRU data. Generated with frugen.
*
* {
* "board": { "mfg": "Quanta", "pname": "Anacapa BMC Storage Module",
* "pn": "00000000000", "serial": "00000000000000" },
* "product": { "mfg": "Quanta", "pname": "CI-Anacapa",
* "pn": "10000000001", "ver": "MP",
* "serial": "10000000000000", "atag": "QEMU" }
* }
*/
static const uint8_t bsm_eeprom[] = {
0x01, 0x00, 0x00, 0x01, 0x0a, 0x00, 0x00, 0xf4, 0x01, 0x09, 0x00, 0x00,
0x00, 0x00, 0xc6, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x61, 0xda, 0x41, 0x6e,
0x61, 0x63, 0x61, 0x70, 0x61, 0x20, 0x42, 0x4d, 0x43, 0x20, 0x53, 0x74,
0x6f, 0x72, 0x61, 0x67, 0x65, 0x20, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65,
0xce, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
0x30, 0x30, 0x30, 0xcb, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
0x30, 0x30, 0x30, 0xc0, 0xc1, 0x00, 0x00, 0x10, 0x01, 0x08, 0x00, 0xc6,
0x51, 0x75, 0x61, 0x6e, 0x74, 0x61, 0xca, 0x43, 0x49, 0x2d, 0x41, 0x6e,
0x61, 0x63, 0x61, 0x70, 0x61, 0xcb, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30,
0x30, 0x30, 0x30, 0x30, 0x31, 0xc2, 0x4d, 0x50, 0xce, 0x31, 0x30, 0x30,
0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0xc4,
0x51, 0x45, 0x4d, 0x55, 0xc0, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77,
};
static const size_t bsm_eeprom_len = sizeof(bsm_eeprom);
/*
* "Anacapa R Bridge Board" FRU data. Generated with frugen.
*
* {
* "board": { "mfg": "Inventec", "pname": "Anacapa QEMU RBB EVT2",
* "pn": "00000000000", "serial": "00000000000000" },
* "product": { "mfg": "Inventec", "pname": "CI-Anacapa",
* "pn": "10000000001", "ver": "MP",
* "serial": "10000000000000", "atag": "QEMU" }
* }
*/
static const uint8_t rbb_eeprom[] = {
0x01, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0xf6, 0x01, 0x07, 0x19, 0xb4,
0xa4, 0xf2, 0xc8, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x65, 0x63, 0xd5,
0x41, 0x6e, 0x61, 0x63, 0x61, 0x70, 0x61, 0x20, 0x51, 0x45, 0x4d, 0x55,
0x20, 0x52, 0x42, 0x42, 0x20, 0x45, 0x56, 0x54, 0x32, 0x47, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a,
0xc0, 0xc1, 0x00, 0x70, 0x01, 0x06, 0x19, 0xc8, 0x49, 0x6e, 0x76, 0x65,
0x6e, 0x74, 0x65, 0x63, 0xca, 0x43, 0x49, 0x2d, 0x41, 0x6e, 0x61, 0x63,
0x61, 0x70, 0x61, 0x46, 0x10, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x82, 0x2d,
0x0c, 0x47, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x71, 0xd9,
0xd6, 0xc0, 0xc1, 0x0e
};
static const size_t rbb_eeprom_len = sizeof(rbb_eeprom);
/*
* "Anacapa L Bridge Board" FRU data. Generated with frugen.
*
* {
* "board": { "mfg": "Inventec", "pname": "Anacapa QEMU LBB EVT2",
* "pn": "00000000000", "serial": "00000000000000" },
* "product": { "mfg": "Inventec", "pname": "CI-Anacapa",
* "pn": "10000000001", "ver": "MP",
* "serial": "10000000000000", "atag": "QEMU" }
* }
*/
static const uint8_t lbb_eeprom[] = {
0x01, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0xf6, 0x01, 0x07, 0x19, 0xb4,
0xa4, 0xf2, 0xc8, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x65, 0x63, 0xd5,
0x41, 0x6e, 0x61, 0x63, 0x61, 0x70, 0x61, 0x20, 0x51, 0x45, 0x4d, 0x55,
0x20, 0x4c, 0x42, 0x42, 0x20, 0x45, 0x56, 0x54, 0x32, 0x47, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a,
0xc0, 0xc1, 0x00, 0x76, 0x01, 0x06, 0x19, 0xc8, 0x49, 0x6e, 0x76, 0x65,
0x6e, 0x74, 0x65, 0x63, 0xca, 0x43, 0x49, 0x2d, 0x41, 0x6e, 0x61, 0x63,
0x61, 0x70, 0x61, 0x46, 0x10, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x82, 0x2d,
0x0c, 0x47, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x71, 0xd9,
0xd6, 0xc0, 0xc1, 0x0e
};
static const size_t lbb_eeprom_len = sizeof(lbb_eeprom);
/*
* "Anacapa HPM BRD ID" FRU data. Generated with frugen.
*
* {
* "board": { "mfg": "Inventec", "pname": "Anacapa HPM BRD ID",
* "pn": "00000000000", "serial": "00000000000000" },
* "product": { "mfg": "Inventec", "pname": "CI-Anacapa",
* "pn": "10000000001", "ver": "MP",
* "serial": "10000000000000", "atag": "QEMU" }
* }
*/
static const uint8_t hpm_brd_id_eeprom[] = {
0x01, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0xf6, 0x01, 0x07, 0x19, 0x41,
0x2d, 0xf2, 0xc8, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x65, 0x63, 0xd2,
0x41, 0x6e, 0x61, 0x63, 0x61, 0x70, 0x61, 0x20, 0x48, 0x50, 0x4d, 0x20,
0x42, 0x52, 0x44, 0x20, 0x49, 0x44, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xc0, 0xc1, 0x00,
0x00, 0x00, 0x00, 0x42, 0x01, 0x06, 0x19, 0xc8, 0x49, 0x6e, 0x76, 0x65,
0x6e, 0x74, 0x65, 0x63, 0xca, 0x43, 0x49, 0x2d, 0x41, 0x6e, 0x61, 0x63,
0x61, 0x70, 0x61, 0x46, 0x10, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x82, 0x2d,
0x0c, 0x47, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x71, 0xd9,
0xd6, 0xc0, 0xc1, 0x0e
};
static const size_t hpm_brd_id_eeprom_len = sizeof(hpm_brd_id_eeprom);
static void anacapa_bmc_i2c_init(AspeedMachineState *bmc)
{
/* Reference: aspeed-bmc-facebook-anacapa.dts */
@@ -50,7 +251,8 @@ static void anacapa_bmc_i2c_init(AspeedMachineState *bmc)
/* &i2c6 */
/* eeprom@50 */
at24c_eeprom_init(i2c[6], 0x50, 32 * KiB);
at24c_eeprom_init_rom(i2c[6], 0x50, 32 * KiB,
hpm_eeprom, hpm_eeprom_len);
/* &i2c8 */
/* i2c-mux@72 (PCA9546) */
@@ -65,7 +267,8 @@ static void anacapa_bmc_i2c_init(AspeedMachineState *bmc)
i2c_slave_create_simple(pca954x_i2c_get_bus(i2c_mux, 0),
TYPE_PCA9552, 0x24);
/* eeprom@50 */
at24c_eeprom_init(pca954x_i2c_get_bus(i2c_mux, 0), 0x50, 16 * KiB);
at24c_eeprom_init_rom(pca954x_i2c_get_bus(i2c_mux, 0), 0x50, 16 * KiB,
rpdb_eeprom, rpdb_eeprom_len);
/* i2c8mux ch1 */
/* pca9555@22 */
@@ -75,13 +278,16 @@ static void anacapa_bmc_i2c_init(AspeedMachineState *bmc)
i2c_slave_create_simple(pca954x_i2c_get_bus(i2c_mux, 1),
TYPE_PCA9552, 0x24);
/* eeprom@50 */
at24c_eeprom_init(pca954x_i2c_get_bus(i2c_mux, 1), 0x50, 16 * KiB);
at24c_eeprom_init_rom(pca954x_i2c_get_bus(i2c_mux, 1), 0x50, 16 * KiB,
lpdb_eeprom, lpdb_eeprom_len);
/* &i2c9 */
/* eeprom@50 */
at24c_eeprom_init(i2c[9], 0x50, 16 * KiB);
at24c_eeprom_init_rom(i2c[9], 0x50, 16 * KiB,
scm_eeprom, scm_eeprom_len);
/* eeprom@56 */
at24c_eeprom_init(i2c[9], 0x56, 8 * KiB);
at24c_eeprom_init_rom(i2c[9], 0x56, 8 * KiB,
bsm_eeprom, bsm_eeprom_len);
/* &i2c10 */
/* i2c-mux@71 (PCA9548) */
@@ -92,7 +298,8 @@ static void anacapa_bmc_i2c_init(AspeedMachineState *bmc)
i2c_slave_create_simple(pca954x_i2c_get_bus(i2c_mux, 5),
TYPE_PCA9552, 0x22);
/* eeprom@52 */
at24c_eeprom_init(pca954x_i2c_get_bus(i2c_mux, 5), 0x52, 32 * KiB);
at24c_eeprom_init_rom(pca954x_i2c_get_bus(i2c_mux, 5), 0x52, 32 * KiB,
rbb_eeprom, rbb_eeprom_len);
/* &i2c11 */
/* i2c-mux@71 (PCA9548) */
@@ -105,7 +312,8 @@ static void anacapa_bmc_i2c_init(AspeedMachineState *bmc)
i2c_slave_create_simple(pca954x_i2c_get_bus(i2c_mux, 5),
TYPE_PCA9552, 0x22);
/* eeprom@52 */
at24c_eeprom_init(pca954x_i2c_get_bus(i2c_mux, 5), 0x52, 32 * KiB);
at24c_eeprom_init_rom(pca954x_i2c_get_bus(i2c_mux, 5), 0x52, 32 * KiB,
lbb_eeprom, lbb_eeprom_len);
/* &i2c13 */
/* i2c-mux@70 (PCA9548) */
@@ -116,7 +324,8 @@ static void anacapa_bmc_i2c_init(AspeedMachineState *bmc)
/* i2c13mux ch4 */
/* eeprom@51 */
at24c_eeprom_init(pca954x_i2c_get_bus(i2c_mux, 4), 0x51, 32 * KiB);
at24c_eeprom_init_rom(pca954x_i2c_get_bus(i2c_mux, 4), 0x51, 32 * KiB,
hpm_brd_id_eeprom, hpm_brd_id_eeprom_len);
/* i2c13mux ch7 */
/* nfc@28 — no model */