Commit 121181ca6e for qemu.org
commit 121181ca6e73f35670f3b9e29f07922d55ddf9e1
Author: Patrick Williams <patrick@stwcx.xyz>
Date: Wed Dec 17 14:11:34 2025 -0500
hw/arm/aspeed: catalina: add GB200 FRU EEPROM
Use ipmitool/frugen tool to generate a GB200 image based on a
sanitized set of data from a real device EEPROM.
Signed-off-by: Patrick Williams <patrick@stwcx.xyz>
Reviewed-by: Cédric Le Goater <clg@redhat.com>
Link: https://lore.kernel.org/qemu-devel/20251217-catalina-eeproms-v1-7-dc7b276efd57@stwcx.xyz
Signed-off-by: Cédric Le Goater <clg@redhat.com>
diff --git a/hw/arm/aspeed_ast2600_catalina.c b/hw/arm/aspeed_ast2600_catalina.c
index 4cfde870af..4dd72c615d 100644
--- a/hw/arm/aspeed_ast2600_catalina.c
+++ b/hw/arm/aspeed_ast2600_catalina.c
@@ -265,6 +265,45 @@ static const uint8_t hdd_eeprom[] = {
};
static const size_t hdd_eeprom_len = sizeof(hdd_eeprom);
+/*
+ * GB200 CPU/GPU Board FRU data. Generated with frugen.
+ *
+ * {
+ * "board": {
+ * "mfg": "NVIDIA",
+ * "pname": "PG548 (QEMU)",
+ * "pn": "000-00000-0000-000",
+ * "serial": "0000000000000",
+ * "date": "01/12/2025 00:00",
+ * "custom": ["Version: A", "Rework:"]
+ * },
+ * "product": {
+ * "mfg": "NVIDIA",
+ * "pname": "GB200 1CPU:1GPU Board PC",
+ * "pn": "100-00000-0000-001",
+ * "ver": "E01",
+ * "serial": "1000000000001",
+ * "atag": "QEMU"
+ * }
+ * }
+ */
+static const uint8_t gb200_eeprom[] = {
+ 0x01, 0x00, 0x00, 0x01, 0x0a, 0x00, 0x00, 0xf4, 0x01, 0x09, 0x19, 0x8c,
+ 0x19, 0xf0, 0x85, 0xae, 0x9d, 0x92, 0x69, 0x08, 0x89, 0xf0, 0x59, 0x51,
+ 0x18, 0x80, 0xc4, 0x65, 0x5b, 0x27, 0x8a, 0x10, 0x04, 0x41, 0x10, 0x04,
+ 0x41, 0x10, 0x04, 0x41, 0x10, 0x8e, 0x10, 0x04, 0x35, 0x10, 0x04, 0x41,
+ 0x50, 0x03, 0x41, 0x10, 0xd4, 0x40, 0x10, 0x04, 0xc0, 0xca, 0x56, 0x65,
+ 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x41, 0xc7, 0x52, 0x65, 0x77,
+ 0x6f, 0x72, 0x6b, 0x3a, 0xc1, 0x00, 0x00, 0x37, 0x01, 0x09, 0x19, 0x85,
+ 0xae, 0x9d, 0x92, 0x69, 0x08, 0xd8, 0x47, 0x42, 0x32, 0x30, 0x30, 0x20,
+ 0x31, 0x43, 0x50, 0x55, 0x3a, 0x31, 0x47, 0x50, 0x55, 0x20, 0x42, 0x6f,
+ 0x61, 0x72, 0x64, 0x20, 0x50, 0x43, 0x8e, 0x11, 0x04, 0x35, 0x10, 0x04,
+ 0x41, 0x50, 0x03, 0x41, 0x10, 0xd4, 0x40, 0x50, 0x04, 0x83, 0x25, 0x14,
+ 0x01, 0x8a, 0x11, 0x04, 0x41, 0x10, 0x04, 0x41, 0x10, 0x04, 0x41, 0x11,
+ 0x83, 0x71, 0xd9, 0xd6, 0xc0, 0xc1, 0x00, 0x17
+};
+static const size_t gb200_eeprom_len = sizeof(gb200_eeprom);
+
static void catalina_bmc_i2c_init(AspeedMachineState *bmc)
{
/* Reference from v6.16-rc2 aspeed-bmc-facebook-catalina.dts */
@@ -403,11 +442,13 @@ static void catalina_bmc_i2c_init(AspeedMachineState *bmc)
/* &i2c12 */
/* eeprom@50 */
- at24c_eeprom_init(i2c[12], 0x50, 8 * KiB);
+ at24c_eeprom_init_rom(i2c[12], 0x50, 8 * KiB,
+ gb200_eeprom, gb200_eeprom_len);
/* &i2c13 */
/* eeprom@50 */
- at24c_eeprom_init(i2c[13], 0x50, 8 * KiB);
+ at24c_eeprom_init_rom(i2c[13], 0x50, 8 * KiB,
+ gb200_eeprom, gb200_eeprom_len);
/* eeprom@54 */
at24c_eeprom_init(i2c[13], 0x54, 256);
/* eeprom@55 */