Back 24 of the 27 FRU EEPROMs with images read from hardware, so guest
firmware can identify the boards, the compute and management modules,
the network adapters, the I/O mezzanines and the drive backplanes
instead of finding them blank. Two EEPROMs were erased on the sampled
chassis and one was absent, so those three stay blank.

The drive backplane and I/O mezzanine helpers each serve two instances
carrying different images, so both now take a descriptor naming the
EEPROMs they install.

The content is sanitized: part and serial numbers masked, dates fixed,
asset tags replaced, distinct originals kept distinct. Several images
carry OEM MultiRecords whose contents are undocumented; the records are
kept and their bodies zeroed.

Signed-off-by: Emmanuel Blot <[email protected]>
---
 hw/arm/aspeed_ast2600_clemente.c | 974 +++++++++++++++++++++++++++++++++++++--
 1 file changed, 948 insertions(+), 26 deletions(-)

diff --git a/hw/arm/aspeed_ast2600_clemente.c b/hw/arm/aspeed_ast2600_clemente.c
index bf5a13bc49..7937097c5b 100644
--- a/hw/arm/aspeed_ast2600_clemente.c
+++ b/hw/arm/aspeed_ast2600_clemente.c
@@ -32,34 +32,937 @@
 #define CLEMENTE_BMC_HW_STRAP2 0x00000800
 #define CLEMENTE_BMC_RAM_SIZE (2 * GiB)
 
+/*
+ * FRU images read back from hardware and sanitized: part and serial
+ * numbers are masked, manufacturing dates fixed and asset tags replaced,
+ * so the layout stays faithful while the identifying data is not real.
+ *
+ * Names are kept as programmed. The Board Info Area names the board, the
+ * Product Info Area the system it is installed in, so the boards sourced
+ * from a third party name their own vendor rather than the platform.
+ */
+
+/*
+ * FRU: i2c1 @0x50 (PDB)
+ *   Board mfg:       Ingrasys
+ *   Board product:   Clemente PDB PVT2
+ *   Board part:      0A00AA000-001-A
+ *   Board serial:    0A00AA00A0000A001
+ *   Board mfg date:  2026-01-01T00:00:00Z
+ *   Board file ID:   FRU Ver. 0.05A
+ *   Product mfg:     Ingrasys
+ *   Product name:    CI-Clemente
+ *   Product part:    0A00A0A00-001-A
+ *   Product version: PVT2
+ *   Product serial:  0AAA00000001
+ *   Product asset:   QEMU
+ */
+static const uint8_t fru_1_0050[] = {
+    0x01, 0x00, 0x00, 0x01, 0x0c, 0x00, 0x00, 0xf2, 0x01, 0x0b, 0x19, 0xc0,
+    0xc6, 0xf0, 0xc8, 0x49, 0x6e, 0x67, 0x72, 0x61, 0x73, 0x79, 0x73, 0xd1,
+    0x43, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x65, 0x20, 0x50, 0x44, 0x42,
+    0x20, 0x50, 0x56, 0x54, 0x32, 0xd1, 0x30, 0x41, 0x30, 0x30, 0x41, 0x41,
+    0x30, 0x30, 0x41, 0x30, 0x30, 0x30, 0x30, 0x41, 0x30, 0x30, 0x31, 0xcf,
+    0x30, 0x41, 0x30, 0x30, 0x41, 0x41, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30,
+    0x31, 0x2d, 0x41, 0xce, 0x46, 0x52, 0x55, 0x20, 0x56, 0x65, 0x72, 0x2e,
+    0x20, 0x30, 0x2e, 0x30, 0x35, 0x41, 0xc1, 0x00, 0x00, 0x00, 0x00, 0xbd,
+    0x01, 0x09, 0x19, 0xc8, 0x49, 0x6e, 0x67, 0x72, 0x61, 0x73, 0x79, 0x73,
+    0xcb, 0x43, 0x49, 0x2d, 0x43, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x65,
+    0xcf, 0x30, 0x41, 0x30, 0x30, 0x41, 0x30, 0x41, 0x30, 0x30, 0x2d, 0x30,
+    0x30, 0x31, 0x2d, 0x41, 0xc4, 0x50, 0x56, 0x54, 0x32, 0xcc, 0x30, 0x41,
+    0x41, 0x41, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0xc4, 0x51,
+    0x45, 0x4d, 0x55, 0xc0, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89,
+};
+
+/*
+ * FRU: i2c9 @0x50 (SCM)
+ *   Board mfg:       Ingrasys
+ *   Board product:   Clemente SCM PVT2
+ *   Board part:      0A00AA000-002-A
+ *   Board serial:    0A00AA00A000002AA
+ *   Board mfg date:  2026-01-01T00:00:00Z
+ *   Board file ID:   FRU Ver. 0.05A
+ *   Product mfg:     Ingrasys
+ *   Product name:    CI-Clemente
+ *   Product part:    0A00A0A00-001-A
+ *   Product version: PVT2
+ *   Product serial:  0AAA00000001
+ *   Product asset:   QEMU
+ */
+static const uint8_t fru_9_0050[] = {
+    0x01, 0x00, 0x00, 0x01, 0x0c, 0x00, 0x00, 0xf2, 0x01, 0x0b, 0x19, 0xc0,
+    0xc6, 0xf0, 0xc8, 0x49, 0x6e, 0x67, 0x72, 0x61, 0x73, 0x79, 0x73, 0xd1,
+    0x43, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x65, 0x20, 0x53, 0x43, 0x4d,
+    0x20, 0x50, 0x56, 0x54, 0x32, 0xd1, 0x30, 0x41, 0x30, 0x30, 0x41, 0x41,
+    0x30, 0x30, 0x41, 0x30, 0x30, 0x30, 0x30, 0x30, 0x32, 0x41, 0x41, 0xcf,
+    0x30, 0x41, 0x30, 0x30, 0x41, 0x41, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30,
+    0x32, 0x2d, 0x41, 0xce, 0x46, 0x52, 0x55, 0x20, 0x56, 0x65, 0x72, 0x2e,
+    0x20, 0x30, 0x2e, 0x30, 0x35, 0x41, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x9d,
+    0x01, 0x09, 0x00, 0xc8, 0x49, 0x6e, 0x67, 0x72, 0x61, 0x73, 0x79, 0x73,
+    0xcb, 0x43, 0x49, 0x2d, 0x43, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x65,
+    0xcf, 0x30, 0x41, 0x30, 0x30, 0x41, 0x30, 0x41, 0x30, 0x30, 0x2d, 0x30,
+    0x30, 0x31, 0x2d, 0x41, 0xc4, 0x50, 0x56, 0x54, 0x32, 0xcc, 0x30, 0x41,
+    0x41, 0x41, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0xc4, 0x51,
+    0x45, 0x4d, 0x55, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62,
+};
+
+/*
+ * FRU: i2c9 @0x56 (BSM)
+ *   Board mfg:       Ingrasys
+ *   Board product:   BMC Storage Module PVT2
+ *   Board part:      0A00AAA00-003-A
+ *   Board serial:    0A00AAA0A0000A003
+ *   Board mfg date:  2026-01-01T00:00:00Z
+ *   Board file ID:   FRU Ver. 0.05A
+ *   Product mfg:     Ingrasys
+ *   Product name:    CI-Clemente
+ *   Product part:    0A00A0A00-001-A
+ *   Product version: PVT2
+ *   Product serial:  0AAA00000001
+ *   Product asset:   QEMU
+ */
+static const uint8_t fru_9_0056[] = {
+    0x01, 0x00, 0x00, 0x01, 0x0d, 0x00, 0x00, 0xf1, 0x01, 0x0c, 0x19, 0xc0,
+    0xc6, 0xf0, 0xc8, 0x49, 0x6e, 0x67, 0x72, 0x61, 0x73, 0x79, 0x73, 0xd7,
+    0x42, 0x4d, 0x43, 0x20, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x20,
+    0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x50, 0x56, 0x54, 0x32, 0xd1,
+    0x30, 0x41, 0x30, 0x30, 0x41, 0x41, 0x41, 0x30, 0x41, 0x30, 0x30, 0x30,
+    0x30, 0x41, 0x30, 0x30, 0x33, 0xcf, 0x30, 0x41, 0x30, 0x30, 0x41, 0x41,
+    0x41, 0x30, 0x30, 0x2d, 0x30, 0x30, 0x33, 0x2d, 0x41, 0xce, 0x46, 0x52,
+    0x55, 0x20, 0x56, 0x65, 0x72, 0x2e, 0x20, 0x30, 0x2e, 0x30, 0x35, 0x41,
+    0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x01, 0x09, 0x00, 0xc8,
+    0x49, 0x6e, 0x67, 0x72, 0x61, 0x73, 0x79, 0x73, 0xcb, 0x43, 0x49, 0x2d,
+    0x43, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x65, 0xcf, 0x30, 0x41, 0x30,
+    0x30, 0x41, 0x30, 0x41, 0x30, 0x30, 0x2d, 0x30, 0x30, 0x31, 0x2d, 0x41,
+    0xc4, 0x50, 0x56, 0x54, 0x32, 0xcc, 0x30, 0x41, 0x41, 0x41, 0x30, 0x30,
+    0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0xc4, 0x51, 0x45, 0x4d, 0x55, 0xc1,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62,
+};
+
+/*
+ * FRU: i2c10 @0x50 (OCP NIC0)
+ *   Board mfg:       Nvidia
+ *   Board product:   Nvidia ConnectX-7 OCP3.0
+ *   Board part:      AA00004AAA-AAAA_AA
+ *   Board serial:    AA0000A004AA
+ *   Board mfg date:  2026-01-01T00:00:00Z
+ *   Board file ID:   FRU Ver 0.01
+ *   Product mfg:     Nvidia
+ *   Product name:    Nvidia ConnectX-7 OCP3.0
+ *   Product part:    AA00002AAA-AAAA_AA
+ *   Product version: A2
+ *   Product serial:  AA0000A002AA
+ *   Product asset:   QEMU
+ *   OEM records:     1 (53 bytes, zeroed)
+ */
+static const uint8_t fru_10_0050[] = {
+    0x01, 0x00, 0x00, 0x01, 0x0e, 0x1c, 0x00, 0xd4, 0x01, 0x0d, 0x19, 0xc0,
+    0xc6, 0xf0, 0xc6, 0x4e, 0x76, 0x69, 0x64, 0x69, 0x61, 0xd8, 0x4e, 0x76,
+    0x69, 0x64, 0x69, 0x61, 0x20, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74,
+    0x58, 0x2d, 0x37, 0x20, 0x4f, 0x43, 0x50, 0x33, 0x2e, 0x30, 0xd8, 0x41,
+    0x41, 0x30, 0x30, 0x30, 0x30, 0x41, 0x30, 0x30, 0x34, 0x41, 0x41, 0x20,
+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xd5,
+    0x41, 0x41, 0x30, 0x30, 0x30, 0x30, 0x34, 0x41, 0x41, 0x41, 0x2d, 0x41,
+    0x41, 0x41, 0x41, 0x5f, 0x41, 0x41, 0x20, 0x20, 0x20, 0xcc, 0x46, 0x52,
+    0x55, 0x20, 0x56, 0x65, 0x72, 0x20, 0x30, 0x2e, 0x30, 0x31, 0xc1, 0x00,
+    0x00, 0x00, 0x00, 0xbf, 0x01, 0x0e, 0x19, 0xc6, 0x4e, 0x76, 0x69, 0x64,
+    0x69, 0x61, 0xd8, 0x4e, 0x76, 0x69, 0x64, 0x69, 0x61, 0x20, 0x43, 0x6f,
+    0x6e, 0x6e, 0x65, 0x63, 0x74, 0x58, 0x2d, 0x37, 0x20, 0x4f, 0x43, 0x50,
+    0x33, 0x2e, 0x30, 0xd5, 0x41, 0x41, 0x30, 0x30, 0x30, 0x30, 0x32, 0x41,
+    0x41, 0x41, 0x2d, 0x41, 0x41, 0x41, 0x41, 0x5f, 0x41, 0x41, 0x20, 0x20,
+    0x20, 0xd3, 0x41, 0x32, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xd8, 0x41, 0x41,
+    0x30, 0x30, 0x30, 0x30, 0x41, 0x30, 0x30, 0x32, 0x41, 0x41, 0x20, 0x20,
+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xc4, 0x51,
+    0x45, 0x4d, 0x55, 0xc0, 0xc1, 0x00, 0x00, 0xfb, 0xc0, 0x82, 0x35, 0x00,
+    0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+/*
+ * FRU: i2c12 @0x50 (HPM 1)
+ *   Board mfg:       NVIDIA
+ *   Board product:   PG548
+ *   Board part:      000-0A000-0000-A05
+ *   Board serial:    0000000000005
+ *   Board mfg date:  2026-01-01T00:00:00Z
+ *   Product mfg:     NVIDIA
+ *   Product name:    GB300 1CPU:2GPU Board PC
+ *   Product part:    000-0A000-0000-003
+ *   Product version: C07
+ *   Product serial:  0000000000003
+ *   Product asset:   QEMU
+ */
+static const uint8_t fru_12_0050[] = {
+    0x01, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0xf6, 0x01, 0x07, 0x19, 0xc0,
+    0xc6, 0xf0, 0xc6, 0x4e, 0x56, 0x49, 0x44, 0x49, 0x41, 0xc5, 0x50, 0x47,
+    0x35, 0x34, 0x38, 0xcd, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+    0x30, 0x30, 0x30, 0x30, 0x35, 0xd2, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x41,
+    0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, 0x30, 0x30, 0x2d, 0x41, 0x30, 0x35,
+    0xc0, 0xc1, 0x00, 0xd8, 0x01, 0x0c, 0x19, 0xc6, 0x4e, 0x56, 0x49, 0x44,
+    0x49, 0x41, 0xd8, 0x47, 0x42, 0x33, 0x30, 0x30, 0x20, 0x31, 0x43, 0x50,
+    0x55, 0x3a, 0x32, 0x47, 0x50, 0x55, 0x20, 0x42, 0x6f, 0x61, 0x72, 0x64,
+    0x20, 0x50, 0x43, 0xd2, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x41, 0x30, 0x30,
+    0x30, 0x2d, 0x30, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, 0x33, 0xc3, 0x43,
+    0x30, 0x37, 0xcd, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+    0x30, 0x30, 0x30, 0x33, 0xc4, 0x51, 0x45, 0x4d, 0x55, 0xcc, 0x46, 0x52,
+    0x55, 0x5f, 0x56, 0x65, 0x72, 0x5f, 0x30, 0x2e, 0x30, 0x33, 0xc1, 0x00,
+    0x00, 0x00, 0x00, 0x0d,
+};
+
+/*
+ * FRU: i2c12 @0x54 (CBC 2)
+ *   Chassis type:    Blade Enclosure
+ *   Chassis part:    000-00000-0000-001
+ *   Chassis serial:  000AAAA000001
+ *   Board mfg:       Nvidia
+ *   Board product:   18x1RU CBL Cartridge
+ *   Board part:      000-0000-006
+ *   Board serial:    0000000000006
+ *   Board mfg date:  2026-01-01T00:00:00Z
+ *   Board file ID:   HS33172S03
+ *   Product name:    18x1RU CBL Cartridge
+ *   Product part:    000-00000-0000-004
+ *   Product version: E.4
+ *   Product serial:  0000000000004
+ *   Product asset:   QEMU
+ */
+static const uint8_t fru_12_0054[] = {
+    0x01, 0x00, 0x01, 0x07, 0x11, 0x00, 0x00, 0xe6, 0x01, 0x06, 0x1d, 0xd2,
+    0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30,
+    0x30, 0x30, 0x2d, 0x30, 0x30, 0x31, 0xcd, 0x30, 0x30, 0x30, 0x41, 0x41,
+    0x41, 0x41, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x08, 0x02, 0x00, 0x03,
+    0x02, 0x80, 0x12, 0x02, 0x00, 0xc1, 0x00, 0xcc, 0x01, 0x0a, 0x19, 0xc0,
+    0xc6, 0xf0, 0xc6, 0x4e, 0x76, 0x69, 0x64, 0x69, 0x61, 0xd4, 0x31, 0x38,
+    0x78, 0x31, 0x52, 0x55, 0x20, 0x43, 0x42, 0x4c, 0x20, 0x43, 0x61, 0x72,
+    0x74, 0x72, 0x69, 0x64, 0x67, 0x65, 0xcd, 0x30, 0x30, 0x30, 0x30, 0x30,
+    0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x36, 0xcc, 0x30, 0x30, 0x30,
+    0x2d, 0x30, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, 0x36, 0xca, 0x48, 0x53,
+    0x33, 0x33, 0x31, 0x37, 0x32, 0x53, 0x30, 0x33, 0xc1, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0xe7, 0x01, 0x0a, 0x19, 0xc0, 0xd4, 0x31, 0x38, 0x78,
+    0x31, 0x52, 0x55, 0x20, 0x43, 0x42, 0x4c, 0x20, 0x43, 0x61, 0x72, 0x74,
+    0x72, 0x69, 0x64, 0x67, 0x65, 0xd2, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30,
+    0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, 0x34,
+    0xc3, 0x45, 0x2e, 0x34, 0xcd, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+    0x30, 0x30, 0x30, 0x30, 0x30, 0x34, 0xc4, 0x51, 0x45, 0x4d, 0x55, 0xca,
+    0x48, 0x53, 0x33, 0x33, 0x31, 0x37, 0x32, 0x53, 0x30, 0x33, 0xc1, 0x39,
+};
+
+/*
+ * FRU: i2c12 @0x55 (CBC 3)
+ *   Chassis type:    Blade Enclosure
+ *   Chassis part:    000-00000-0000-001
+ *   Chassis serial:  000AAAA000001
+ *   Board mfg:       Nvidia
+ *   Board product:   18x1RU CBL Cartridge
+ *   Board part:      000-0000-006
+ *   Board serial:    0000000000007
+ *   Board mfg date:  2026-01-01T00:00:00Z
+ *   Board file ID:   HS33172S03
+ *   Product name:    18x1RU CBL Cartridge
+ *   Product part:    000-00000-0000-004
+ *   Product version: E.4
+ *   Product serial:  0000000000005
+ *   Product asset:   QEMU
+ */
+static const uint8_t fru_12_0055[] = {
+    0x01, 0x00, 0x01, 0x07, 0x11, 0x00, 0x00, 0xe6, 0x01, 0x06, 0x1d, 0xd2,
+    0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30,
+    0x30, 0x30, 0x2d, 0x30, 0x30, 0x31, 0xcd, 0x30, 0x30, 0x30, 0x41, 0x41,
+    0x41, 0x41, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x08, 0x02, 0x00, 0x03,
+    0x02, 0x80, 0x12, 0x02, 0x00, 0xc1, 0x00, 0xcc, 0x01, 0x0a, 0x19, 0xc0,
+    0xc6, 0xf0, 0xc6, 0x4e, 0x76, 0x69, 0x64, 0x69, 0x61, 0xd4, 0x31, 0x38,
+    0x78, 0x31, 0x52, 0x55, 0x20, 0x43, 0x42, 0x4c, 0x20, 0x43, 0x61, 0x72,
+    0x74, 0x72, 0x69, 0x64, 0x67, 0x65, 0xcd, 0x30, 0x30, 0x30, 0x30, 0x30,
+    0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x37, 0xcc, 0x30, 0x30, 0x30,
+    0x2d, 0x30, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, 0x36, 0xca, 0x48, 0x53,
+    0x33, 0x33, 0x31, 0x37, 0x32, 0x53, 0x30, 0x33, 0xc1, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0xe6, 0x01, 0x0a, 0x19, 0xc0, 0xd4, 0x31, 0x38, 0x78,
+    0x31, 0x52, 0x55, 0x20, 0x43, 0x42, 0x4c, 0x20, 0x43, 0x61, 0x72, 0x74,
+    0x72, 0x69, 0x64, 0x67, 0x65, 0xd2, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30,
+    0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, 0x34,
+    0xc3, 0x45, 0x2e, 0x34, 0xcd, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+    0x30, 0x30, 0x30, 0x30, 0x30, 0x35, 0xc4, 0x51, 0x45, 0x4d, 0x55, 0xca,
+    0x48, 0x53, 0x33, 0x33, 0x31, 0x37, 0x32, 0x53, 0x30, 0x33, 0xc1, 0x38,
+};
+
+/*
+ * FRU: i2c13 @0x50 (HPM)
+ *   Board mfg:       NVIDIA
+ *   Board product:   PG548
+ *   Board part:      000-0A000-0000-A05
+ *   Board serial:    0000000000008
+ *   Board mfg date:  2026-01-01T00:00:00Z
+ *   Product mfg:     NVIDIA
+ *   Product name:    GB300 1CPU:2GPU Board PC
+ *   Product part:    000-0A000-0000-003
+ *   Product version: C07
+ *   Product serial:  0000000000006
+ *   Product asset:   QEMU
+ */
+static const uint8_t fru_13_0050[] = {
+    0x01, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0xf6, 0x01, 0x07, 0x19, 0xc0,
+    0xc6, 0xf0, 0xc6, 0x4e, 0x56, 0x49, 0x44, 0x49, 0x41, 0xc5, 0x50, 0x47,
+    0x35, 0x34, 0x38, 0xcd, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+    0x30, 0x30, 0x30, 0x30, 0x38, 0xd2, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x41,
+    0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, 0x30, 0x30, 0x2d, 0x41, 0x30, 0x35,
+    0xc0, 0xc1, 0x00, 0xd5, 0x01, 0x0c, 0x19, 0xc6, 0x4e, 0x56, 0x49, 0x44,
+    0x49, 0x41, 0xd8, 0x47, 0x42, 0x33, 0x30, 0x30, 0x20, 0x31, 0x43, 0x50,
+    0x55, 0x3a, 0x32, 0x47, 0x50, 0x55, 0x20, 0x42, 0x6f, 0x61, 0x72, 0x64,
+    0x20, 0x50, 0x43, 0xd2, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x41, 0x30, 0x30,
+    0x30, 0x2d, 0x30, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, 0x33, 0xc3, 0x43,
+    0x30, 0x37, 0xcd, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+    0x30, 0x30, 0x30, 0x36, 0xc4, 0x51, 0x45, 0x4d, 0x55, 0xcc, 0x46, 0x52,
+    0x55, 0x5f, 0x56, 0x65, 0x72, 0x5f, 0x30, 0x2e, 0x30, 0x33, 0xc1, 0x00,
+    0x00, 0x00, 0x00, 0x0a,
+};
+
+/*
+ * FRU: i2c13 @0x54 (CBC 0)
+ *   Chassis type:    Blade Enclosure
+ *   Chassis part:    000-00000-0000-001
+ *   Chassis serial:  000AAAA000001
+ *   Board mfg:       Nvidia
+ *   Board product:   18x1RU CBL Cartridge
+ *   Board part:      000-0000-006
+ *   Board serial:    0000000000009
+ *   Board mfg date:  2026-01-01T00:00:00Z
+ *   Board file ID:   HS33172S03
+ *   Product name:    18x1RU CBL Cartridge
+ *   Product part:    000-00000-0000-004
+ *   Product version: E.4
+ *   Product serial:  0000000000007
+ *   Product asset:   QEMU
+ */
+static const uint8_t fru_13_0054[] = {
+    0x01, 0x00, 0x01, 0x07, 0x11, 0x00, 0x00, 0xe6, 0x01, 0x06, 0x1d, 0xd2,
+    0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30,
+    0x30, 0x30, 0x2d, 0x30, 0x30, 0x31, 0xcd, 0x30, 0x30, 0x30, 0x41, 0x41,
+    0x41, 0x41, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x08, 0x02, 0x00, 0x03,
+    0x02, 0x80, 0x12, 0x02, 0x00, 0xc1, 0x00, 0xcc, 0x01, 0x0a, 0x19, 0xc0,
+    0xc6, 0xf0, 0xc6, 0x4e, 0x76, 0x69, 0x64, 0x69, 0x61, 0xd4, 0x31, 0x38,
+    0x78, 0x31, 0x52, 0x55, 0x20, 0x43, 0x42, 0x4c, 0x20, 0x43, 0x61, 0x72,
+    0x74, 0x72, 0x69, 0x64, 0x67, 0x65, 0xcd, 0x30, 0x30, 0x30, 0x30, 0x30,
+    0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x39, 0xcc, 0x30, 0x30, 0x30,
+    0x2d, 0x30, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, 0x36, 0xca, 0x48, 0x53,
+    0x33, 0x33, 0x31, 0x37, 0x32, 0x53, 0x30, 0x33, 0xc1, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0xe4, 0x01, 0x0a, 0x19, 0xc0, 0xd4, 0x31, 0x38, 0x78,
+    0x31, 0x52, 0x55, 0x20, 0x43, 0x42, 0x4c, 0x20, 0x43, 0x61, 0x72, 0x74,
+    0x72, 0x69, 0x64, 0x67, 0x65, 0xd2, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30,
+    0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, 0x34,
+    0xc3, 0x45, 0x2e, 0x34, 0xcd, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+    0x30, 0x30, 0x30, 0x30, 0x30, 0x37, 0xc4, 0x51, 0x45, 0x4d, 0x55, 0xca,
+    0x48, 0x53, 0x33, 0x33, 0x31, 0x37, 0x32, 0x53, 0x30, 0x33, 0xc1, 0x36,
+};
+
+/*
+ * FRU: i2c13 @0x55 (CBC 1)
+ *   Chassis type:    Blade Enclosure
+ *   Chassis part:    000-00000-0000-001
+ *   Chassis serial:  000AAAA000001
+ *   Board mfg:       Nvidia
+ *   Board product:   18x1RU CBL Cartridge
+ *   Board part:      000-0000-006
+ *   Board serial:    0000000000010
+ *   Board mfg date:  2026-01-01T00:00:00Z
+ *   Board file ID:   HS33172S03
+ *   Product name:    18x1RU CBL Cartridge
+ *   Product part:    000-00000-0000-004
+ *   Product version: E.4
+ *   Product serial:  0000000000008
+ *   Product asset:   QEMU
+ */
+static const uint8_t fru_13_0055[] = {
+    0x01, 0x00, 0x01, 0x07, 0x11, 0x00, 0x00, 0xe6, 0x01, 0x06, 0x1d, 0xd2,
+    0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30,
+    0x30, 0x30, 0x2d, 0x30, 0x30, 0x31, 0xcd, 0x30, 0x30, 0x30, 0x41, 0x41,
+    0x41, 0x41, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x08, 0x02, 0x00, 0x03,
+    0x02, 0x80, 0x15, 0x01, 0x00, 0xc1, 0x00, 0xca, 0x01, 0x0a, 0x19, 0xc0,
+    0xc6, 0xf0, 0xc6, 0x4e, 0x76, 0x69, 0x64, 0x69, 0x61, 0xd4, 0x31, 0x38,
+    0x78, 0x31, 0x52, 0x55, 0x20, 0x43, 0x42, 0x4c, 0x20, 0x43, 0x61, 0x72,
+    0x74, 0x72, 0x69, 0x64, 0x67, 0x65, 0xcd, 0x30, 0x30, 0x30, 0x30, 0x30,
+    0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x30, 0xcc, 0x30, 0x30, 0x30,
+    0x2d, 0x30, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, 0x36, 0xca, 0x48, 0x53,
+    0x33, 0x33, 0x31, 0x37, 0x32, 0x53, 0x30, 0x33, 0xc1, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0xec, 0x01, 0x0a, 0x19, 0xc0, 0xd4, 0x31, 0x38, 0x78,
+    0x31, 0x52, 0x55, 0x20, 0x43, 0x42, 0x4c, 0x20, 0x43, 0x61, 0x72, 0x74,
+    0x72, 0x69, 0x64, 0x67, 0x65, 0xd2, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30,
+    0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, 0x34,
+    0xc3, 0x45, 0x2e, 0x34, 0xcd, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+    0x30, 0x30, 0x30, 0x30, 0x30, 0x38, 0xc4, 0x51, 0x45, 0x4d, 0x55, 0xca,
+    0x48, 0x53, 0x33, 0x33, 0x31, 0x37, 0x32, 0x53, 0x30, 0x33, 0xc1, 0x35,
+};
+
+/*
+ * FRU: i2c13 @0x57 (HMC)
+ *   Board mfg:       NVIDIA
+ *   Board product:   P4764-A02
+ *   Board part:      000-00000-0000-007
+ *   Board serial:    0000000000011
+ *   Board mfg date:  2026-01-01T00:00:00Z
+ *   Product mfg:     NVIDIA
+ *   Product name:    HMC for GB200 NVL72
+ *   Product part:    000-00000-0000-005
+ *   Product version: A1
+ *   Product serial:  0000000000009
+ *   Product asset:   QEMU
+ */
+static const uint8_t fru_13_0057[] = {
+    0x01, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xf5, 0x01, 0x08, 0x19, 0xc0,
+    0xc6, 0xf0, 0xc6, 0x4e, 0x56, 0x49, 0x44, 0x49, 0x41, 0xc9, 0x50, 0x34,
+    0x37, 0x36, 0x34, 0x2d, 0x41, 0x30, 0x32, 0xcd, 0x30, 0x30, 0x30, 0x30,
+    0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x31, 0xd2, 0x30, 0x30,
+    0x30, 0x2d, 0x30, 0x30, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, 0x30, 0x30,
+    0x2d, 0x30, 0x30, 0x37, 0xc0, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x39,
+    0x01, 0x0b, 0x19, 0xc6, 0x4e, 0x56, 0x49, 0x44, 0x49, 0x41, 0xd3, 0x48,
+    0x4d, 0x43, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x47, 0x42, 0x32, 0x30, 0x30,
+    0x20, 0x4e, 0x56, 0x4c, 0x37, 0x32, 0xd2, 0x30, 0x30, 0x30, 0x2d, 0x30,
+    0x30, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30,
+    0x35, 0xc2, 0x41, 0x31, 0xcd, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+    0x30, 0x30, 0x30, 0x30, 0x30, 0x39, 0xc4, 0x51, 0x45, 0x4d, 0x55, 0xcc,
+    0x46, 0x52, 0x55, 0x5f, 0x56, 0x65, 0x72, 0x5f, 0x30, 0x2e, 0x30, 0x32,
+    0xc1, 0x00, 0x00, 0xcb,
+};
+
+/*
+ * FRU: i2c15 @0x52 (OCP NIC1)
+ *   Board mfg:       Nvidia
+ *   Board product:   Nvidia ConnectX-7 OCP3.0
+ *   Board part:      AA00004AAA-AAAA_AA
+ *   Board serial:    AA0000A0012A
+ *   Board mfg date:  2026-01-01T00:00:00Z
+ *   Board file ID:   FRU Ver 0.01
+ *   Product mfg:     Nvidia
+ *   Product name:    Nvidia ConnectX-7 OCP3.0
+ *   Product part:    AA00002AAA-AAAA_AA
+ *   Product version: A2
+ *   Product serial:  AA0000A0010A
+ *   Product asset:   QEMU
+ *   OEM records:     1 (53 bytes, zeroed)
+ */
+static const uint8_t fru_15_0052[] = {
+    0x01, 0x00, 0x00, 0x01, 0x0e, 0x1c, 0x00, 0xd4, 0x01, 0x0d, 0x19, 0xc0,
+    0xc6, 0xf0, 0xc6, 0x4e, 0x76, 0x69, 0x64, 0x69, 0x61, 0xd8, 0x4e, 0x76,
+    0x69, 0x64, 0x69, 0x61, 0x20, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74,
+    0x58, 0x2d, 0x37, 0x20, 0x4f, 0x43, 0x50, 0x33, 0x2e, 0x30, 0xd8, 0x41,
+    0x41, 0x30, 0x30, 0x30, 0x30, 0x41, 0x30, 0x30, 0x31, 0x32, 0x41, 0x20,
+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xd5,
+    0x41, 0x41, 0x30, 0x30, 0x30, 0x30, 0x34, 0x41, 0x41, 0x41, 0x2d, 0x41,
+    0x41, 0x41, 0x41, 0x5f, 0x41, 0x41, 0x20, 0x20, 0x20, 0xcc, 0x46, 0x52,
+    0x55, 0x20, 0x56, 0x65, 0x72, 0x20, 0x30, 0x2e, 0x30, 0x31, 0xc1, 0x00,
+    0x00, 0x00, 0x00, 0xd1, 0x01, 0x0e, 0x19, 0xc6, 0x4e, 0x76, 0x69, 0x64,
+    0x69, 0x61, 0xd8, 0x4e, 0x76, 0x69, 0x64, 0x69, 0x61, 0x20, 0x43, 0x6f,
+    0x6e, 0x6e, 0x65, 0x63, 0x74, 0x58, 0x2d, 0x37, 0x20, 0x4f, 0x43, 0x50,
+    0x33, 0x2e, 0x30, 0xd5, 0x41, 0x41, 0x30, 0x30, 0x30, 0x30, 0x32, 0x41,
+    0x41, 0x41, 0x2d, 0x41, 0x41, 0x41, 0x41, 0x5f, 0x41, 0x41, 0x20, 0x20,
+    0x20, 0xd3, 0x41, 0x32, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xd8, 0x41, 0x41,
+    0x30, 0x30, 0x30, 0x30, 0x41, 0x30, 0x30, 0x31, 0x30, 0x41, 0x20, 0x20,
+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xc4, 0x51,
+    0x45, 0x4d, 0x55, 0xc0, 0xc1, 0x00, 0x00, 0x0d, 0xc0, 0x82, 0x35, 0x00,
+    0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+/*
+ * FRU: i2c21 @0x54 (interposer)
+ *   Board mfg:       Ingrasys
+ *   Board product:   Clemente Interposer PVT2
+ *   Board part:      0A00AA000-008-A
+ *   Board serial:    0A00AA00A0001A3AA
+ *   Board mfg date:  2026-01-01T00:00:00Z
+ *   Board file ID:   FRU Ver. 0.05A
+ *   Product mfg:     Ingrasys
+ *   Product name:    CI-Clemente
+ *   Product part:    0A00A0A00-001-A
+ *   Product version: PVT2
+ *   Product serial:  0AAA00000001
+ *   Product asset:   QEMU
+ */
+static const uint8_t fru_21_0054[] = {
+    0x01, 0x00, 0x00, 0x01, 0x0d, 0x00, 0x00, 0xf1, 0x01, 0x0c, 0x19, 0xc0,
+    0xc6, 0xf0, 0xc8, 0x49, 0x6e, 0x67, 0x72, 0x61, 0x73, 0x79, 0x73, 0xd8,
+    0x43, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x65, 0x20, 0x49, 0x6e, 0x74,
+    0x65, 0x72, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x20, 0x50, 0x56, 0x54, 0x32,
+    0xd1, 0x30, 0x41, 0x30, 0x30, 0x41, 0x41, 0x30, 0x30, 0x41, 0x30, 0x30,
+    0x30, 0x31, 0x41, 0x33, 0x41, 0x41, 0xcf, 0x30, 0x41, 0x30, 0x30, 0x41,
+    0x41, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, 0x38, 0x2d, 0x41, 0xce, 0x46,
+    0x52, 0x55, 0x20, 0x56, 0x65, 0x72, 0x2e, 0x20, 0x30, 0x2e, 0x30, 0x35,
+    0x41, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x01, 0x09, 0x00, 0xc8,
+    0x49, 0x6e, 0x67, 0x72, 0x61, 0x73, 0x79, 0x73, 0xcb, 0x43, 0x49, 0x2d,
+    0x43, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x65, 0xcf, 0x30, 0x41, 0x30,
+    0x30, 0x41, 0x30, 0x41, 0x30, 0x30, 0x2d, 0x30, 0x30, 0x31, 0x2d, 0x41,
+    0xc4, 0x50, 0x56, 0x54, 0x32, 0xcc, 0x30, 0x41, 0x41, 0x41, 0x30, 0x30,
+    0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0xc4, 0x51, 0x45, 0x4d, 0x55, 0xc1,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62,
+};
+
+/*
+ * FRU: i2c23 @0x51 (FIO)
+ *   Board mfg:       Ingrasys
+ *   Board product:   Clemente FIO PVT2
+ *   Board part:      0A00A0A00-009-A
+ *   Board serial:    0A00A0A0A0000A14A
+ *   Board mfg date:  2026-01-01T00:00:00Z
+ *   Board file ID:   FRU Ver. 0.05A
+ *   Product mfg:     Ingrasys
+ *   Product name:    CI-Clemente
+ *   Product part:    0A00A0A00-001-A
+ *   Product version: PVT2
+ *   Product serial:  0AAA00000001
+ *   Product asset:   QEMU
+ */
+static const uint8_t fru_23_0051[] = {
+    0x01, 0x00, 0x00, 0x01, 0x0c, 0x00, 0x00, 0xf2, 0x01, 0x0b, 0x19, 0xc0,
+    0xc6, 0xf0, 0xc8, 0x49, 0x6e, 0x67, 0x72, 0x61, 0x73, 0x79, 0x73, 0xd1,
+    0x43, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x65, 0x20, 0x46, 0x49, 0x4f,
+    0x20, 0x50, 0x56, 0x54, 0x32, 0xd1, 0x30, 0x41, 0x30, 0x30, 0x41, 0x30,
+    0x41, 0x30, 0x41, 0x30, 0x30, 0x30, 0x30, 0x41, 0x31, 0x34, 0x41, 0xcf,
+    0x30, 0x41, 0x30, 0x30, 0x41, 0x30, 0x41, 0x30, 0x30, 0x2d, 0x30, 0x30,
+    0x39, 0x2d, 0x41, 0xce, 0x46, 0x52, 0x55, 0x20, 0x56, 0x65, 0x72, 0x2e,
+    0x20, 0x30, 0x2e, 0x30, 0x35, 0x41, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x98,
+    0x01, 0x09, 0x00, 0xc8, 0x49, 0x6e, 0x67, 0x72, 0x61, 0x73, 0x79, 0x73,
+    0xcb, 0x43, 0x49, 0x2d, 0x43, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x65,
+    0xcf, 0x30, 0x41, 0x30, 0x30, 0x41, 0x30, 0x41, 0x30, 0x30, 0x2d, 0x30,
+    0x30, 0x31, 0x2d, 0x41, 0xc4, 0x50, 0x56, 0x54, 0x32, 0xcc, 0x30, 0x41,
+    0x41, 0x41, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0xc4, 0x51,
+    0x45, 0x4d, 0x55, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62,
+};
+
+/*
+ * FRU: i2c25 @0x56 (E1.S backplane 0)
+ *   Board mfg:       Ingrasys
+ *   Board product:   Clemente E1.S BP PVT2
+ *   Board part:      0A00AA000-010-A
+ *   Board serial:    0A00AA00A0001A5AA
+ *   Board mfg date:  2026-01-01T00:00:00Z
+ *   Board file ID:   FRU Ver. 0.05A
+ *   Product mfg:     Ingrasys
+ *   Product name:    CI-Clemente
+ *   Product part:    0A00A0A00-001-A
+ *   Product version: PVT2
+ *   Product serial:  0AAA00000001
+ *   Product asset:   QEMU
+ */
+static const uint8_t fru_25_0056[] = {
+    0x01, 0x00, 0x00, 0x01, 0x0c, 0x00, 0x00, 0xf2, 0x01, 0x0b, 0x19, 0xc0,
+    0xc6, 0xf0, 0xc8, 0x49, 0x6e, 0x67, 0x72, 0x61, 0x73, 0x79, 0x73, 0xd5,
+    0x43, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x65, 0x20, 0x45, 0x31, 0x2e,
+    0x53, 0x20, 0x42, 0x50, 0x20, 0x50, 0x56, 0x54, 0x32, 0xd1, 0x30, 0x41,
+    0x30, 0x30, 0x41, 0x41, 0x30, 0x30, 0x41, 0x30, 0x30, 0x30, 0x31, 0x41,
+    0x35, 0x41, 0x41, 0xcf, 0x30, 0x41, 0x30, 0x30, 0x41, 0x41, 0x30, 0x30,
+    0x30, 0x2d, 0x30, 0x31, 0x30, 0x2d, 0x41, 0xce, 0x46, 0x52, 0x55, 0x20,
+    0x56, 0x65, 0x72, 0x2e, 0x20, 0x30, 0x2e, 0x30, 0x35, 0x41, 0xc1, 0xbf,
+    0x01, 0x09, 0x00, 0xc8, 0x49, 0x6e, 0x67, 0x72, 0x61, 0x73, 0x79, 0x73,
+    0xcb, 0x43, 0x49, 0x2d, 0x43, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x65,
+    0xcf, 0x30, 0x41, 0x30, 0x30, 0x41, 0x30, 0x41, 0x30, 0x30, 0x2d, 0x30,
+    0x30, 0x31, 0x2d, 0x41, 0xc4, 0x50, 0x56, 0x54, 0x32, 0xcc, 0x30, 0x41,
+    0x41, 0x41, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0xc4, 0x51,
+    0x45, 0x4d, 0x55, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62,
+};
+
+/*
+ * FRU: i2c29 @0x50 (IO mezzanine 0)
+ *   Board mfg:       Nvidia
+ *   Board product:   ConnectX-8 800GE 2P NIC
+ *   Board part:      000-0A00A-A1AA-AA1
+ *   Board serial:    AA0000001AA6
+ *   Board mfg date:  2026-01-01T00:00:00Z
+ *   Board file ID:   FRU Ver 0.01
+ *   Product mfg:     Nvidia
+ *   Product name:    ConnectX-8 800GE 2P NIC
+ *   Product part:    000-0A00A-A0AA-AA6
+ *   Product version: A1
+ *   Product serial:  AA0000001AA1
+ *   Product asset:   QEMU
+ *   OEM records:     1 (25 bytes, zeroed)
+ */
+static const uint8_t fru_29_0050[] = {
+    0x01, 0x00, 0x00, 0x01, 0x15, 0x2a, 0x00, 0xbf, 0x01, 0x14, 0x19, 0xc0,
+    0xc6, 0xf0, 0xd9, 0x4e, 0x76, 0x69, 0x64, 0x69, 0x61, 0x20, 0x20, 0x20,
+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+    0x20, 0x20, 0x20, 0x20, 0xf2, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74,
+    0x58, 0x2d, 0x38, 0x20, 0x38, 0x30, 0x30, 0x47, 0x45, 0x20, 0x32, 0x50,
+    0x20, 0x4e, 0x49, 0x43, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xdd, 0x41, 0x41, 0x30, 0x30,
+    0x30, 0x30, 0x30, 0x30, 0x31, 0x41, 0x41, 0x36, 0x20, 0x20, 0x20, 0x20,
+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+    0x20, 0xdd, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x41, 0x30, 0x30, 0x41, 0x2d,
+    0x41, 0x31, 0x41, 0x41, 0x2d, 0x41, 0x41, 0x31, 0x20, 0x20, 0x20, 0x20,
+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xcc, 0x46, 0x52, 0x55, 0x20,
+    0x56, 0x65, 0x72, 0x20, 0x30, 0x2e, 0x30, 0x31, 0xc1, 0x00, 0x00, 0xd4,
+    0x01, 0x15, 0x19, 0xd9, 0x4e, 0x76, 0x69, 0x64, 0x69, 0x61, 0x20, 0x20,
+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+    0x20, 0x20, 0x20, 0x20, 0x20, 0xf2, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63,
+    0x74, 0x58, 0x2d, 0x38, 0x20, 0x38, 0x30, 0x30, 0x47, 0x45, 0x20, 0x32,
+    0x50, 0x20, 0x4e, 0x49, 0x43, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xdd, 0x30, 0x30, 0x30,
+    0x2d, 0x30, 0x41, 0x30, 0x30, 0x41, 0x2d, 0x41, 0x30, 0x41, 0x41, 0x2d,
+    0x41, 0x41, 0x36, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+    0x20, 0x20, 0xc7, 0x41, 0x31, 0x20, 0x20, 0x20, 0x20, 0x20, 0xdd, 0x41,
+    0x41, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x41, 0x41, 0x31, 0x20,
+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+    0x20, 0x20, 0x20, 0x20, 0xc4, 0x51, 0x45, 0x4d, 0x55, 0xcc, 0x46, 0x52,
+    0x55, 0x20, 0x56, 0x65, 0x72, 0x20, 0x30, 0x2e, 0x30, 0x31, 0xc1, 0x75,
+    0xd0, 0x82, 0x19, 0x00, 0x95, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+/*
+ * FRU: i2c29 @0x52 (IO mezzanine 0 OSFP)
+ *   Board mfg:       Ingrasys
+ *   Board product:   Clemente OSFP PVT2
+ *   Board part:      0A00AAA00-012-A
+ *   Board serial:    0A00AAA0A000017AA
+ *   Board mfg date:  2026-01-01T00:00:00Z
+ *   Board file ID:   FRU Ver. 0.05A
+ *   Product mfg:     Ingrasys
+ *   Product name:    CI-Clemente
+ *   Product part:    0A00A0A00-001-A
+ *   Product version: PVT2
+ *   Product serial:  0AAA00000001
+ *   Product asset:   QEMU
+ */
+static const uint8_t fru_29_0052[] = {
+    0x01, 0x00, 0x00, 0x01, 0x0c, 0x00, 0x00, 0xf2, 0x01, 0x0b, 0x19, 0xc0,
+    0xc6, 0xf0, 0xc8, 0x49, 0x6e, 0x67, 0x72, 0x61, 0x73, 0x79, 0x73, 0xd2,
+    0x43, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x65, 0x20, 0x4f, 0x53, 0x46,
+    0x50, 0x20, 0x50, 0x56, 0x54, 0x32, 0xd1, 0x30, 0x41, 0x30, 0x30, 0x41,
+    0x41, 0x41, 0x30, 0x41, 0x30, 0x30, 0x30, 0x30, 0x31, 0x37, 0x41, 0x41,
+    0xcf, 0x30, 0x41, 0x30, 0x30, 0x41, 0x41, 0x41, 0x30, 0x30, 0x2d, 0x30,
+    0x31, 0x32, 0x2d, 0x41, 0xce, 0x46, 0x52, 0x55, 0x20, 0x56, 0x65, 0x72,
+    0x2e, 0x20, 0x30, 0x2e, 0x30, 0x35, 0x41, 0xc1, 0x00, 0x00, 0x00, 0x1e,
+    0x01, 0x09, 0x00, 0xc8, 0x49, 0x6e, 0x67, 0x72, 0x61, 0x73, 0x79, 0x73,
+    0xcb, 0x43, 0x49, 0x2d, 0x43, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x65,
+    0xcf, 0x30, 0x41, 0x30, 0x30, 0x41, 0x30, 0x41, 0x30, 0x30, 0x2d, 0x30,
+    0x30, 0x31, 0x2d, 0x41, 0xc4, 0x50, 0x56, 0x54, 0x32, 0xcc, 0x30, 0x41,
+    0x41, 0x41, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0xc4, 0x51,
+    0x45, 0x4d, 0x55, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62,
+};
+
+/*
+ * FRU: i2c37 @0x56 (E1.S backplane 1)
+ *   Board mfg:       Ingrasys
+ *   Board product:   Clemente E1.S BP PVT2
+ *   Board part:      0A00AA000-010-A
+ *   Board serial:    0A00AA00A0001A8AA
+ *   Board mfg date:  2026-01-01T00:00:00Z
+ *   Board file ID:   FRU Ver. 0.05A
+ *   Product mfg:     Ingrasys
+ *   Product name:    CI-Clemente
+ *   Product part:    0A00A0A00-001-A
+ *   Product version: PVT2
+ *   Product serial:  0AAA00000001
+ *   Product asset:   QEMU
+ */
+static const uint8_t fru_37_0056[] = {
+    0x01, 0x00, 0x00, 0x01, 0x0c, 0x00, 0x00, 0xf2, 0x01, 0x0b, 0x19, 0xc0,
+    0xc6, 0xf0, 0xc8, 0x49, 0x6e, 0x67, 0x72, 0x61, 0x73, 0x79, 0x73, 0xd5,
+    0x43, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x65, 0x20, 0x45, 0x31, 0x2e,
+    0x53, 0x20, 0x42, 0x50, 0x20, 0x50, 0x56, 0x54, 0x32, 0xd1, 0x30, 0x41,
+    0x30, 0x30, 0x41, 0x41, 0x30, 0x30, 0x41, 0x30, 0x30, 0x30, 0x31, 0x41,
+    0x38, 0x41, 0x41, 0xcf, 0x30, 0x41, 0x30, 0x30, 0x41, 0x41, 0x30, 0x30,
+    0x30, 0x2d, 0x30, 0x31, 0x30, 0x2d, 0x41, 0xce, 0x46, 0x52, 0x55, 0x20,
+    0x56, 0x65, 0x72, 0x2e, 0x20, 0x30, 0x2e, 0x30, 0x35, 0x41, 0xc1, 0xbc,
+    0x01, 0x09, 0x00, 0xc8, 0x49, 0x6e, 0x67, 0x72, 0x61, 0x73, 0x79, 0x73,
+    0xcb, 0x43, 0x49, 0x2d, 0x43, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x65,
+    0xcf, 0x30, 0x41, 0x30, 0x30, 0x41, 0x30, 0x41, 0x30, 0x30, 0x2d, 0x30,
+    0x30, 0x31, 0x2d, 0x41, 0xc4, 0x50, 0x56, 0x54, 0x32, 0xcc, 0x30, 0x41,
+    0x41, 0x41, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0xc4, 0x51,
+    0x45, 0x4d, 0x55, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62,
+};
+
+/*
+ * FRU: i2c41 @0x50 (IO mezzanine 1)
+ *   Board mfg:       Nvidia
+ *   Board product:   ConnectX-8 800GE 2P NIC
+ *   Board part:      000-0A00A-A1AA-AA1
+ *   Board serial:    AA0000019AAA
+ *   Board mfg date:  2026-01-01T00:00:00Z
+ *   Board file ID:   FRU Ver 0.01
+ *   Product mfg:     Nvidia
+ *   Product name:    ConnectX-8 800GE 2P NIC
+ *   Product part:    000-0A00A-A0AA-AA6
+ *   Product version: A1
+ *   Product serial:  AA0000012AAA
+ *   Product asset:   QEMU
+ *   OEM records:     1 (25 bytes, zeroed)
+ */
+static const uint8_t fru_41_0050[] = {
+    0x01, 0x00, 0x00, 0x01, 0x15, 0x2a, 0x00, 0xbf, 0x01, 0x14, 0x19, 0xc0,
+    0xc6, 0xf0, 0xd9, 0x4e, 0x76, 0x69, 0x64, 0x69, 0x61, 0x20, 0x20, 0x20,
+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+    0x20, 0x20, 0x20, 0x20, 0xf2, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74,
+    0x58, 0x2d, 0x38, 0x20, 0x38, 0x30, 0x30, 0x47, 0x45, 0x20, 0x32, 0x50,
+    0x20, 0x4e, 0x49, 0x43, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xdd, 0x41, 0x41, 0x30, 0x30,
+    0x30, 0x30, 0x30, 0x31, 0x39, 0x41, 0x41, 0x41, 0x20, 0x20, 0x20, 0x20,
+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+    0x20, 0xdd, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x41, 0x30, 0x30, 0x41, 0x2d,
+    0x41, 0x31, 0x41, 0x41, 0x2d, 0x41, 0x41, 0x31, 0x20, 0x20, 0x20, 0x20,
+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xcc, 0x46, 0x52, 0x55, 0x20,
+    0x56, 0x65, 0x72, 0x20, 0x30, 0x2e, 0x30, 0x31, 0xc1, 0x00, 0x00, 0xc0,
+    0x01, 0x15, 0x19, 0xd9, 0x4e, 0x76, 0x69, 0x64, 0x69, 0x61, 0x20, 0x20,
+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+    0x20, 0x20, 0x20, 0x20, 0x20, 0xf2, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63,
+    0x74, 0x58, 0x2d, 0x38, 0x20, 0x38, 0x30, 0x30, 0x47, 0x45, 0x20, 0x32,
+    0x50, 0x20, 0x4e, 0x49, 0x43, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xdd, 0x30, 0x30, 0x30,
+    0x2d, 0x30, 0x41, 0x30, 0x30, 0x41, 0x2d, 0x41, 0x30, 0x41, 0x41, 0x2d,
+    0x41, 0x41, 0x36, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+    0x20, 0x20, 0xc7, 0x41, 0x31, 0x20, 0x20, 0x20, 0x20, 0x20, 0xdd, 0x41,
+    0x41, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x32, 0x41, 0x41, 0x41, 0x20,
+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+    0x20, 0x20, 0x20, 0x20, 0xc4, 0x51, 0x45, 0x4d, 0x55, 0xcc, 0x46, 0x52,
+    0x55, 0x20, 0x56, 0x65, 0x72, 0x20, 0x30, 0x2e, 0x30, 0x31, 0xc1, 0x63,
+    0xd0, 0x82, 0x19, 0x00, 0x95, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+/*
+ * FRU: i2c45 @0x53 (boot drive)
+ *   Product mfg:     Samsung
+ *   Product name:    PM9D3a
+ *   Product part:    AAAA00A0AAAA-07AAA
+ *   Product version:
+ *   Product serial:  A0AAAA0A000013
+ *   OEM records:     3 (91 bytes, zeroed)
+ */
+static const uint8_t fru_45_0053[] = {
+    0x01, 0x00, 0x00, 0x00, 0x01, 0x0f, 0x00, 0xef, 0x01, 0x0e, 0x19, 0xc8,
+    0x53, 0x61, 0x6d, 0x73, 0x75, 0x6e, 0x67, 0x00, 0xd8, 0x50, 0x4d, 0x39,
+    0x44, 0x33, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0x41, 0x41,
+    0x41, 0x41, 0x30, 0x30, 0x41, 0x30, 0x41, 0x41, 0x41, 0x41, 0x2d, 0x30,
+    0x37, 0x41, 0x41, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0xc2, 0x00, 0x00, 0xd4, 0x41, 0x30, 0x41, 0x41, 0x41, 0x41,
+    0x30, 0x41, 0x30, 0x30, 0x30, 0x30, 0x31, 0x33, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33,
+    0x0b, 0x02, 0x3b, 0x00, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x0c, 0x02, 0x0b, 0x00, 0xe7, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x82, 0x15, 0x00,
+    0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+/*
+ * FRU: i2c48 @0x53 (E1.S backplane 0 drive 0)
+ *   Product mfg:     Samsung
+ *   Product name:    PM9D3a
+ *   Product part:    AAAA00A0AAAA-08AAA
+ *   Product version:
+ *   Product serial:  A0A0AA0A000014
+ *   OEM records:     3 (91 bytes, zeroed)
+ */
+static const uint8_t fru_48_0053[] = {
+    0x01, 0x00, 0x00, 0x00, 0x01, 0x0f, 0x00, 0xef, 0x01, 0x0e, 0x19, 0xc8,
+    0x53, 0x61, 0x6d, 0x73, 0x75, 0x6e, 0x67, 0x00, 0xd8, 0x50, 0x4d, 0x39,
+    0x44, 0x33, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0x41, 0x41,
+    0x41, 0x41, 0x30, 0x30, 0x41, 0x30, 0x41, 0x41, 0x41, 0x41, 0x2d, 0x30,
+    0x38, 0x41, 0x41, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0xc2, 0x00, 0x00, 0xd4, 0x41, 0x30, 0x41, 0x30, 0x41, 0x41,
+    0x30, 0x41, 0x30, 0x30, 0x30, 0x30, 0x31, 0x34, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42,
+    0x0b, 0x02, 0x3b, 0x00, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x0c, 0x02, 0x0b, 0x00, 0xe7, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x82, 0x15, 0x00,
+    0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+/*
+ * FRU: i2c50 @0x53 (E1.S backplane 0 drive 2)
+ *   Product mfg:     Samsung
+ *   Product name:    PM9D3a
+ *   Product part:    AAAA00A0AAAA-08AAA
+ *   Product version:
+ *   Product serial:  A0A0AA0A000015
+ *   OEM records:     3 (91 bytes, zeroed)
+ */
+static const uint8_t fru_50_0053[] = {
+    0x01, 0x00, 0x00, 0x00, 0x01, 0x0f, 0x00, 0xef, 0x01, 0x0e, 0x19, 0xc8,
+    0x53, 0x61, 0x6d, 0x73, 0x75, 0x6e, 0x67, 0x00, 0xd8, 0x50, 0x4d, 0x39,
+    0x44, 0x33, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0x41, 0x41,
+    0x41, 0x41, 0x30, 0x30, 0x41, 0x30, 0x41, 0x41, 0x41, 0x41, 0x2d, 0x30,
+    0x38, 0x41, 0x41, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0xc2, 0x00, 0x00, 0xd4, 0x41, 0x30, 0x41, 0x30, 0x41, 0x41,
+    0x30, 0x41, 0x30, 0x30, 0x30, 0x30, 0x31, 0x35, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41,
+    0x0b, 0x02, 0x3b, 0x00, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x0c, 0x02, 0x0b, 0x00, 0xe7, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x82, 0x15, 0x00,
+    0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+/*
+ * FRU: i2c52 @0x53 (E1.S backplane 1 drive 0)
+ *   Product mfg:     Samsung
+ *   Product name:    PM9D3a
+ *   Product part:    AAAA00A0AAAA-08AAA
+ *   Product version:
+ *   Product serial:  A0A0AA0A000016
+ *   OEM records:     3 (91 bytes, zeroed)
+ */
+static const uint8_t fru_52_0053[] = {
+    0x01, 0x00, 0x00, 0x00, 0x01, 0x0f, 0x00, 0xef, 0x01, 0x0e, 0x19, 0xc8,
+    0x53, 0x61, 0x6d, 0x73, 0x75, 0x6e, 0x67, 0x00, 0xd8, 0x50, 0x4d, 0x39,
+    0x44, 0x33, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0x41, 0x41,
+    0x41, 0x41, 0x30, 0x30, 0x41, 0x30, 0x41, 0x41, 0x41, 0x41, 0x2d, 0x30,
+    0x38, 0x41, 0x41, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0xc2, 0x00, 0x00, 0xd4, 0x41, 0x30, 0x41, 0x30, 0x41, 0x41,
+    0x30, 0x41, 0x30, 0x30, 0x30, 0x30, 0x31, 0x36, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
+    0x0b, 0x02, 0x3b, 0x00, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x0c, 0x02, 0x0b, 0x00, 0xe7, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x82, 0x15, 0x00,
+    0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+/*
+ * FRU: i2c54 @0x53 (E1.S backplane 1 drive 2)
+ *   Product mfg:     Samsung
+ *   Product name:    PM9D3a
+ *   Product part:    AAAA00A0AAAA-08AAA
+ *   Product version:
+ *   Product serial:  A0A0AA0A000017
+ *   OEM records:     3 (91 bytes, zeroed)
+ */
+static const uint8_t fru_54_0053[] = {
+    0x01, 0x00, 0x00, 0x00, 0x01, 0x0f, 0x00, 0xef, 0x01, 0x0e, 0x19, 0xc8,
+    0x53, 0x61, 0x6d, 0x73, 0x75, 0x6e, 0x67, 0x00, 0xd8, 0x50, 0x4d, 0x39,
+    0x44, 0x33, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0x41, 0x41,
+    0x41, 0x41, 0x30, 0x30, 0x41, 0x30, 0x41, 0x41, 0x41, 0x41, 0x2d, 0x30,
+    0x38, 0x41, 0x41, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0xc2, 0x00, 0x00, 0xd4, 0x41, 0x30, 0x41, 0x30, 0x41, 0x41,
+    0x30, 0x41, 0x30, 0x30, 0x30, 0x30, 0x31, 0x37, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f,
+    0x0b, 0x02, 0x3b, 0x00, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x0c, 0x02, 0x0b, 0x00, 0xe7, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x82, 0x15, 0x00,
+    0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+typedef struct ClementeFru {
+    const uint8_t *data;
+    size_t size;
+} ClementeFru;
+
+/* The images an E1.S backplane needs: its own FRU and its two drives. */
+typedef struct ClementeE1sFru {
+    ClementeFru backplane;   /* @0x56 */
+    ClementeFru drive0;      /* mux channel 0 @0x53 */
+    ClementeFru drive2;      /* mux channel 2 @0x53 */
+} ClementeE1sFru;
+
+static const ClementeE1sFru clemente_e1s_fru[] = {
+    {
+        .backplane = { fru_25_0056, sizeof(fru_25_0056) },
+        .drive0    = { fru_48_0053, sizeof(fru_48_0053) },
+        .drive2    = { fru_50_0053, sizeof(fru_50_0053) },
+    },
+    {
+        .backplane = { fru_37_0056, sizeof(fru_37_0056) },
+        .drive0    = { fru_52_0053, sizeof(fru_52_0053) },
+        .drive2    = { fru_54_0053, sizeof(fru_54_0053) },
+    },
+};
+
+/* The images an IO mezzanine needs: its own FRU and the OSFP one. */
+typedef struct ClementeIoMezzFru {
+    ClementeFru mezzanine;   /* @0x50 */
+    ClementeFru osfp;        /* @0x52 */
+} ClementeIoMezzFru;
+
+static const ClementeIoMezzFru clemente_io_mezz_fru[] = {
+    {
+        .mezzanine = { fru_29_0050, sizeof(fru_29_0050) },
+        .osfp      = { fru_29_0052, sizeof(fru_29_0052) },
+    },
+    {
+        .mezzanine = { fru_41_0050, sizeof(fru_41_0050) },
+        /* the OSFP FRU was absent from the sampled chassis */
+    },
+};
+
 /*
  * E1.S backplane hanging off a PCA9546 channel: an FRU EEPROM plus a
  * second PCA9546 fronting per-drive NVMe SSD FRU EEPROMs.
  */
-static void clemente_e1s_backplane_init(I2CBus *bus)
+static void clemente_e1s_backplane_init(I2CBus *bus,
+                                        const ClementeE1sFru *fru)
 {
     /* eeprom@56 - atmel,24c128 */
-    at24c_eeprom_init(bus, 0x56, 16 * KiB);
+    at24c_eeprom_init_rom(bus, 0x56, 16 * KiB,
+                          fru->backplane.data, fru->backplane.size);
 
     /* i2c-mux@74 - PCA9546 */
     I2CSlave *mux = i2c_slave_create_simple(bus, TYPE_PCA9546, 0x74);
     /* eeprom@53 - atmel,24c02, channels 0 and 2 */
-    at24c_eeprom_init(pca954x_i2c_get_bus(mux, 0), 0x53, 256);
-    at24c_eeprom_init(pca954x_i2c_get_bus(mux, 2), 0x53, 256);
+    at24c_eeprom_init_rom(pca954x_i2c_get_bus(mux, 0), 0x53, 256,
+                          fru->drive0.data, fru->drive0.size);
+    at24c_eeprom_init_rom(pca954x_i2c_get_bus(mux, 2), 0x53, 256,
+                          fru->drive2.data, fru->drive2.size);
 }
 
 /*
  * IO Mezzanine hanging off a PCA9546 channel: an I/O expander plus the
  * mezzanine and OSFP FRU EEPROMs.
  */
-static void clemente_io_mezz_init(I2CBus *bus, uint8_t exp_addr)
+static void clemente_io_mezz_init(I2CBus *bus, uint8_t exp_addr,
+                                  const ClementeIoMezzFru *fru)
 {
     /* gpio@20/21 - nxp,pca9535 */
     i2c_slave_create_simple(bus, TYPE_PCA9535, exp_addr);
     /* eeprom@50 - atmel,24c64 (mezzanine FRU) */
-    at24c_eeprom_init(bus, 0x50, 8 * KiB);
+    at24c_eeprom_init_rom(bus, 0x50, 8 * KiB,
+                          fru->mezzanine.data, fru->mezzanine.size);
     /* eeprom@52 - atmel,24c128 (OSFP FRU) */
-    at24c_eeprom_init(bus, 0x52, 16 * KiB);
+    at24c_eeprom_init_rom(bus, 0x52, 16 * KiB,
+                          fru->osfp.data, fru->osfp.size);
 }
 
 static void clemente_bmc_i2c_init(AspeedMachineState *bmc)
@@ -78,12 +981,14 @@ static void clemente_bmc_i2c_init(AspeedMachineState *bmc)
     /* i2c-mux@71 (PCA9546) */
     i2c_mux = i2c_slave_create_simple(i2c[0], TYPE_PCA9546, 0x71);
     /* channel 1 - HDD FRU eeprom@56 and E1.S backplane */
-    clemente_e1s_backplane_init(pca954x_i2c_get_bus(i2c_mux, 1));
+    clemente_e1s_backplane_init(pca954x_i2c_get_bus(i2c_mux, 1),
+                                &clemente_e1s_fru[0]);
 
     /* i2c-mux@72 (PCA9546) */
     i2c_mux = i2c_slave_create_simple(i2c[0], TYPE_PCA9546, 0x72);
     /* channel 1 - IO Mezz 0 (io_expander7 @20) */
-    clemente_io_mezz_init(pca954x_i2c_get_bus(i2c_mux, 1), 0x20);
+    clemente_io_mezz_init(pca954x_i2c_get_bus(i2c_mux, 1), 0x20,
+                          &clemente_io_mezz_fru[0]);
 
     /* i2c-mux@73 (PCA9546) - channels empty */
     i2c_slave_create_simple(i2c[0], TYPE_PCA9546, 0x73);
@@ -91,17 +996,20 @@ static void clemente_bmc_i2c_init(AspeedMachineState *bmc)
     /* i2c-mux@75 (PCA9546) */
     i2c_mux = i2c_slave_create_simple(i2c[0], TYPE_PCA9546, 0x75);
     /* channel 1 - HDD FRU eeprom@56 and E1.S backplane */
-    clemente_e1s_backplane_init(pca954x_i2c_get_bus(i2c_mux, 1));
+    clemente_e1s_backplane_init(pca954x_i2c_get_bus(i2c_mux, 1),
+                                &clemente_e1s_fru[1]);
 
     /* i2c-mux@76 (PCA9546) */
     i2c_mux = i2c_slave_create_simple(i2c[0], TYPE_PCA9546, 0x76);
     /* channel 1 - IO Mezz 1 (io_expander8 @21) */
-    clemente_io_mezz_init(pca954x_i2c_get_bus(i2c_mux, 1), 0x21);
+    clemente_io_mezz_init(pca954x_i2c_get_bus(i2c_mux, 1), 0x21,
+                          &clemente_io_mezz_fru[1]);
 
     /* i2c-mux@77 (PCA9546) */
     i2c_mux = i2c_slave_create_simple(i2c[0], TYPE_PCA9546, 0x77);
     /* channel 1 - boot drive FRU eeprom@53 */
-    at24c_eeprom_init(pca954x_i2c_get_bus(i2c_mux, 1), 0x53, 256);
+    at24c_eeprom_init_rom(pca954x_i2c_get_bus(i2c_mux, 1), 0x53, 256,
+                          fru_45_0053, sizeof(fru_45_0053));
 
     /* &i2c1 */
     /* power-monitor@12/14 - ti,lm5066i (no model) */
@@ -110,7 +1018,8 @@ static void clemente_bmc_i2c_init(AspeedMachineState *bmc)
     /* temperature-sensor@4e - ti,tmp1075 */
     i2c_slave_create_simple(i2c[1], TYPE_TMP1075, 0x4e);
     /* eeprom@50 - atmel,24c02 (PDB FRU) */
-    at24c_eeprom_init(i2c[1], 0x50, 256);
+    at24c_eeprom_init_rom(i2c[1], 0x50, 256, fru_1_0050,
+                          sizeof(fru_1_0050));
     /* vrm@60/61 - renesas,raa228004 (no model) */
     /* i2c-mux@70 (PCA9548) - interposer */
     i2c_mux = i2c_slave_create_simple(i2c[1], TYPE_PCA9548, 0x70);
@@ -118,7 +1027,8 @@ static void clemente_bmc_i2c_init(AspeedMachineState *bmc)
     /* temperature-sensor@4f - ti,tmp75 */
     i2c_slave_create_simple(pca954x_i2c_get_bus(i2c_mux, 5), TYPE_TMP75, 0x4f);
     /* eeprom@54 - atmel,24c64 */
-    at24c_eeprom_init(pca954x_i2c_get_bus(i2c_mux, 5), 0x54, 8 * KiB);
+    at24c_eeprom_init_rom(pca954x_i2c_get_bus(i2c_mux, 5), 0x54,
+                          8 * KiB, fru_21_0054, sizeof(fru_21_0054));
     /* channel 6 - io_expander5 gpio@27 - nxp,pca9554 */
     i2c_slave_create_simple(pca954x_i2c_get_bus(i2c_mux, 6),
                             TYPE_PCA9554, 0x27);
@@ -126,7 +1036,8 @@ static void clemente_bmc_i2c_init(AspeedMachineState *bmc)
     /* temperature-sensor@4b - ti,tmp75 */
     i2c_slave_create_simple(pca954x_i2c_get_bus(i2c_mux, 7), TYPE_TMP75, 0x4b);
     /* eeprom@51 - atmel,24c64 */
-    at24c_eeprom_init(pca954x_i2c_get_bus(i2c_mux, 7), 0x51, 8 * KiB);
+    at24c_eeprom_init_rom(pca954x_i2c_get_bus(i2c_mux, 7), 0x51,
+                          8 * KiB, fru_23_0051, sizeof(fru_23_0051));
 
     /* &i2c2 */
     /* gpio@20/21/27 - nxp,pca9555 */
@@ -156,35 +1067,45 @@ static void clemente_bmc_i2c_init(AspeedMachineState 
*bmc)
     /* gpio@4f - nxp,pca9555 */
     i2c_slave_create_simple(i2c[9], TYPE_PCA9555, 0x4f);
     /* eeprom@50 - atmel,24c64 (SCM FRU) */
-    at24c_eeprom_init(i2c[9], 0x50, 8 * KiB);
+    at24c_eeprom_init_rom(i2c[9], 0x50, 8 * KiB, fru_9_0050,
+                          sizeof(fru_9_0050));
     /* eeprom@56 - atmel,24c64 (BSM FRU) */
-    at24c_eeprom_init(i2c[9], 0x56, 8 * KiB);
+    at24c_eeprom_init_rom(i2c[9], 0x56, 8 * KiB, fru_9_0056,
+                          sizeof(fru_9_0056));
 
     /* &i2c10 */
     /* mctp@10 - mctp-i2c-controller (no model) */
     /* temperature-sensor@1f - ti,tmp421 (OCP NIC0) */
     i2c_slave_create_simple(i2c[10], TYPE_TMP421, 0x1f);
     /* eeprom@50 - atmel,24c64 (OCP NIC0 FRU) */
-    at24c_eeprom_init(i2c[10], 0x50, 8 * KiB);
+    at24c_eeprom_init_rom(i2c[10], 0x50, 8 * KiB, fru_10_0050,
+                          sizeof(fru_10_0050));
 
     /* &i2c11 */
     /* ssif-bmc@10 - ssif-bmc (no model) */
 
     /* &i2c12 */
     /* eeprom@50 - atmel,24c64 (HPM 1 FRU) */
-    at24c_eeprom_init(i2c[12], 0x50, 8 * KiB);
+    at24c_eeprom_init_rom(i2c[12], 0x50, 8 * KiB, fru_12_0050,
+                          sizeof(fru_12_0050));
     /* eeprom@54/55 - atmel,24c02 (CBC 2/3 FRU) */
-    at24c_eeprom_init(i2c[12], 0x54, 256);
-    at24c_eeprom_init(i2c[12], 0x55, 256);
+    at24c_eeprom_init_rom(i2c[12], 0x54, 256, fru_12_0054,
+                          sizeof(fru_12_0054));
+    at24c_eeprom_init_rom(i2c[12], 0x55, 256, fru_12_0055,
+                          sizeof(fru_12_0055));
 
     /* &i2c13 */
     /* eeprom@50 - atmel,24c64 (HPM FRU) */
-    at24c_eeprom_init(i2c[13], 0x50, 8 * KiB);
+    at24c_eeprom_init_rom(i2c[13], 0x50, 8 * KiB, fru_13_0050,
+                          sizeof(fru_13_0050));
     /* eeprom@54/55 - atmel,24c02 (CBC 0/1 FRU) */
-    at24c_eeprom_init(i2c[13], 0x54, 256);
-    at24c_eeprom_init(i2c[13], 0x55, 256);
+    at24c_eeprom_init_rom(i2c[13], 0x54, 256, fru_13_0054,
+                          sizeof(fru_13_0054));
+    at24c_eeprom_init_rom(i2c[13], 0x55, 256, fru_13_0055,
+                          sizeof(fru_13_0055));
     /* eeprom@57 - atmel,24c02 (HMC FRU) */
-    at24c_eeprom_init(i2c[13], 0x57, 256);
+    at24c_eeprom_init_rom(i2c[13], 0x57, 256, fru_13_0057,
+                          sizeof(fru_13_0057));
 
     /* &i2c14 */
     /* gpio@10/11/12/13/14 - nxp,pca9555 (PDB CPLD) */
@@ -199,7 +1120,8 @@ static void clemente_bmc_i2c_init(AspeedMachineState *bmc)
     /* temperature-sensor@1f - ti,tmp421 (OCP NIC1) */
     i2c_slave_create_simple(i2c[15], TYPE_TMP421, 0x1f);
     /* eeprom@52 - atmel,24c64 (OCP NIC1 FRU) */
-    at24c_eeprom_init(i2c[15], 0x52, 8 * KiB);
+    at24c_eeprom_init_rom(i2c[15], 0x52, 8 * KiB, fru_15_0052,
+                          sizeof(fru_15_0052));
 }
 
 static void aspeed_machine_clemente_class_init(ObjectClass *oc,

-- 
2.53.0-Meta


Reply via email to