On Thu, Oct 15, 2026 at 01:58:00PM +0200, Emmanuel Blot via wrote:
> 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
>
>
Reviewed-by: Jamin Lin <[email protected]>