Tested on jammy, package version was 1.6.9-2ubuntu0.22.04.1 Following command is executed on a Xilinx Kria KV260 Device ``` sudo ipmi-fru --fru-file=/sys/devices/platform/axi/ff030000.i2c/i2c-1/1-0050/eeprom --interpret-oem-data --debug ``` Output as following: ``` FRU Inventory From File: /sys/devices/platform/axi/ff030000.i2c/i2c-1/1-0050/eeprom ===================================================== Common Header ===================================================== [ HEX DUMP ..... ] = HEX[ 8B] [ 01h 00h 00h 01h 00h 0Dh 00h F1h ] ===================================================== Common Header ===================================================== [ 1h] = format_version[ 4b] [ 0h] = reserved[ 4b] [ 0h] = internal_use_area_starting_offset[ 8b] [ 0h] = chassis_info_area_starting_offset[ 8b] [ 1h] = board_info_area_starting_offset[ 8b] [ 0h] = product_info_area_starting_offset[ 8b] [ Dh] = multirecord_area_starting_offset[ 8b] [ 0h] = pad[ 8b] [ F1h] = checksum[ 8b] ===================================================== Board Info Header ===================================================== [ 1h] = format_version[ 4b] [ 0h] = reserved[ 4b] [ Ch] = info_area_length[ 8b] ===================================================== Board Info Area ===================================================== [ HEX DUMP ..... ] = HEX[96B] [ 01h 0Ch 00h 66h C3h D3h C6h 58h ] [ 49h 4Ch 49h 4Eh 58h D0h 53h 4Dh ] [ 4Bh 2Dh 4Bh 32h 36h 2Dh 58h 43h ] [ 4Ch 32h 47h 00h 00h 00h D0h 58h ] [ 46h 4Ch 31h 54h 33h 31h 48h 31h ] [ 46h 49h 43h 00h 00h 00h 00h C9h ] [ 35h 30h 35h 37h 2Dh 30h 31h 20h ] [ 20h 01h 00h C8h 31h 00h 00h 00h ] [ 00h 00h 00h 00h 08h 10h EEh 00h ] [ 00h 00h 00h 00h 00h 10h D8h 89h ] [ DDh EEh 30h FDh 44h F3h B1h C0h ] [ 5Eh D7h 0Ch 6Ah E3h 44h C1h 33h ] FRU Board Manufacturing Date/Time: 05/21/22 - 13:58:00 ===================================================== Type/Length Field Header ===================================================== [ HEX DUMP ..... ] = HEX[ 1B] [ C6h ] FRU Board Manufacturer: XILINX ===================================================== Type/Length Field Header ===================================================== [ HEX DUMP ..... ] = HEX[ 1B] [ D0h ] FRU Board Product Name: SMK-K26-XCL2G ===================================================== Type/Length Field Header ===================================================== [ HEX DUMP ..... ] = HEX[ 1B] [ D0h ] FRU Board Serial Number: XFL1T31H1FIC ===================================================== Type/Length Field Header ===================================================== [ HEX DUMP ..... ] = HEX[ 1B] [ C9h ] FRU Board Part Number: 5057-01 ===================================================== Type/Length Field Header ===================================================== [ HEX DUMP ..... ] = HEX[ 1B] [ 01h ] FRU FRU File ID: 00h ===================================================== Type/Length Field Header ===================================================== [ HEX DUMP ..... ] = HEX[ 1B] [ C8h ] FRU Board Custom Info: 1 ===================================================== Type/Length Field Header ===================================================== [ HEX DUMP ..... ] = HEX[ 1B] [ 08h ] FRU Board Custom Info: 10h EEh 00h 00h 00h 00h 00h 00h ===================================================== Type/Length Field Header ===================================================== [ HEX DUMP ..... ] = HEX[ 1B] [ 10h ] FRU Board Custom Info: D8h 89h DDh EEh 30h FDh 44h F3h B1h C0h 5Eh D7h 0Ch 6Ah E3h 44h ===================================================== MultiRecord Header ===================================================== [ HEX DUMP ..... ] = HEX[ 5B] [ 02h 02h 0Dh 0Ch E3h ] ===================================================== MultiRecord Header ===================================================== [ 2h] = record_type_id[ 8b] [ 2h] = record_format_version[ 4b] [ 0h] = reserved[ 3b] [ 0h] = end_of_list[ 1b] [ Dh] = record_length[ 8b] [ Ch] = record_checksum[ 8b] [ E3h] = header_checksum[ 8b] ===================================================== MultiRecord ===================================================== [ HEX DUMP ..... ] = HEX[13B] [ 01h F4h 01h C2h 01h 26h 02h 64h ] [ 00h 00h 00h A0h 0Fh ] ===================================================== FRU DC Load ===================================================== [ 1h] = output_number[ 4b] [ 0h] = reserved[ 4b] [ 1F4h] = nominal_voltage[16b] [ 1C2h] = specd_minimum_voltage[16b] [ 226h] = specd_maximum_voltage[16b] [ 64h] = specd_ripple_and_noise_pk_pk[16b] [ 0h] = minimum_current_load[16b] [ FA0h] = maximum_current_load[16b] FRU DC Load Output Number: 1 FRU DC Load Nominal Voltage: 5000 mV FRU DC Load Spec'd Minimum Voltage: 4500 mV FRU DC Load Spec'd Maximum Voltage: 5500 mV FRU DC Load Spec'd Ripple and Noise pk-pk: 100 mV FRU DC Load Minimum Current Load: 0 mA FRU DC Load Maximum Current Load: 4000 mA ===================================================== MultiRecord Header ===================================================== [ HEX DUMP ..... ] = HEX[ 5B] [ 02h 02h 0Dh 0Ch E3h ] ===================================================== MultiRecord Header ===================================================== [ 2h] = record_type_id[ 8b] [ 2h] = record_format_version[ 4b] [ 0h] = reserved[ 3b] [ 0h] = end_of_list[ 1b] [ Dh] = record_length[ 8b] [ Ch] = record_checksum[ 8b] [ E3h] = header_checksum[ 8b] ===================================================== MultiRecord Header ===================================================== [ HEX DUMP ..... ] = HEX[ 5B] [ D2h 02h 0Ah 02h 20h ] ===================================================== MultiRecord Header ===================================================== [ D2h] = record_type_id[ 8b] [ 2h] = record_format_version[ 4b] [ 0h] = reserved[ 3b] [ 0h] = end_of_list[ 1b] [ Ah] = record_length[ 8b] [ 2h] = record_checksum[ 8b] [ 20h] = header_checksum[ 8b] ===================================================== MultiRecord ===================================================== [ HEX DUMP ..... ] = HEX[10B] [ DAh 10h 00h 31h 00h 0Ah 35h 0Fh ] [ 25h 70h ] ===================================================== FRU OEM Record ===================================================== [ 10DAh] = manufacturer_id[24b] [ 70250F350A0031h] = oem_data[56b] FRU OEM Manufacturer ID: Xilinx, Inc. (10DAh) ===================================================== MultiRecord Header ===================================================== [ HEX DUMP ..... ] = HEX[ 5B] [ D2h 02h 0Ah 02h 20h ] ===================================================== MultiRecord Header ===================================================== [ D2h] = record_type_id[ 8b] [ 2h] = record_format_version[ 4b] [ 0h] = reserved[ 3b] [ 0h] = end_of_list[ 1b] [ Ah] = record_length[ 8b] [ 2h] = record_checksum[ 8b] [ 20h] = header_checksum[ 8b] FRU OEM MAC Version: DUT - MAC (31h) FRU OEM MAC ID 0: 00:0a:35:0f:25:70 ===================================================== MultiRecord Header ===================================================== [ HEX DUMP ..... ] = HEX[ 5B] [ D2h 02h 0Ah 02h 20h ] ===================================================== MultiRecord Header ===================================================== [ D2h] = record_type_id[ 8b] [ 2h] = record_format_version[ 4b] [ 0h] = reserved[ 3b] [ 0h] = end_of_list[ 1b] [ Ah] = record_length[ 8b] [ 2h] = record_checksum[ 8b] [ 20h] = header_checksum[ 8b] ===================================================== MultiRecord Header ===================================================== [ HEX DUMP ..... ] = HEX[ 5B] [ FFh FFh FFh FFh FFh ] FRU Error: multirecord area checksum invalid ===================================================== MultiRecord Header ===================================================== [ HEX DUMP ..... ] = HEX[ 5B] [ FFh FFh FFh FFh FFh ] ipmi_fru_next: multirecord area checksum invalid ``` You will see some checksum invalid messages, I asked this to the vendor and they said this is expected in some devices in field. So parsing is working as expected. Verified in jammy, will do same test for kinetic and lunar as well.