The mlxcables tool allows users to access the cables and do the following:
- Query the cable and get its IDs
- Read specific addresses in the EEPROM
- Read a specific register by its name. Supported registers are received by the tool (depends on the cable type)
- Dump all the cable EEPROM bytes in RAW format
- Upgrade the FW image on the cable uC (Only on cables that support ISSU)
mlxcables Synopsis
[-d|--dev <DeviceName>] [-h|--help] [-v|--version] [-q|--query] [--DDM] [-r|--read] [--print_raw] [--dump] [-b|--bytes_line <bytesPerLine>] [-p|--page <pageNum>] [-o|--offset <pageOffset>] [-l|--length <length>] [-a|--address <address>] [-y|--yes] [--no] [--read_reg <Register>] [--read_all_regs] [--show_all_regs] [--customization <Customization_type>]
where:
-d|--dev <DeviceName> | Perform operation for specified cable |
-h|--help | Show this message and exit |
-v|--version | Show the executable version and exit |
-q|--query | Query cable info |
--DDM | Get cable DDM query |
-r|--read | Read from cable |
--print_raw | Print bytes in raw format |
--dump | Dump all cable pages in RAW format |
-b|--bytes_line <bytesPerLine> | Bytes per line in the raw print (multiples of 4, default: 4) |
-p|--page <pageNum> | Specific Page number to do the read/write operation |
-o|--offset <pageOffset> | Specific Page offset |
-l|--length <length> | Length of the needed data in bytes to read (default: 1 Byte) |
-a|--address <address> | Address (Replacement for page+offset) |
--read_reg <Register> | Read register from cable |
--read_all_regs | Read all registers from cable |
--show_all_regs | Show all registers in the cable |
--customization <customization_type> | Show cable specific customization |
Notes:
- For QSFP transceivers, the tool reads the address from I2C address of 0x50. For further information, please see spec SFF8636.
- For SFP transceivers, the tool reads from I2C address 0x50 and names it page 0. When reading from I2C address 0x51 the pages will be read as page <x+1>, for example:
- I2C address 0x51 page 0 will be referred in the tool as page 1.
- I2C address 0x51 page 1 will be referred in the tool as page 2. For further information, please see spec SFF8472.
Examples:
To read specific byte/s in the cable pages:
mlxcables -d mt4115_pciconf0_cable_0 -r -p 0 -o 165 -l 3 Page[0].Byte[165] = 0x00 Page[0].Byte[166] = 0x02 Page[0].Byte[167] = 0xc9
Another way to read from a specific page is to use the '--address <ADDR>' flag where ADDR=0x<PAGE><OFFSET>, for example to read the same bytes with -a:
mlxcables -d mt4115_pciconf0_cable_0 -r -a 0x00A5 -l 3 Page[0].Byte[165] = 0x00 Page[0].Byte[166] = 0x02 Page[0].Byte[167] = 0xc9
To read in raw format:
# mlxcables -d mt4115_pciconf0_cable_0 -r -p 0 -o 128 -l 12 --print_raw 128: 0d 8c 23 81 132: 00 00 00 00 136: 00 00 00 05
To control Bytes per line, use -b:
# mlxcables -d mt4115_pciconf0_cable_0 -r -p 0 -o 128 -l 12 --print_raw -b 8 128: 0d 8c 23 81 00 00 00 00 136: 00 00 00 05
To query the cable:
mlxcables -d mt4115_pciconf0_cable_0 -q Cable name : mt4115_pciconf0_cable_0 FW version : 2.2.550 FW Dev ID : 0x21 FW GW version : Legacy -------- Cable EEPROM -------- Identifier : QSFP+ (0dh) Technology : 1550 nm DFB (50h) Compliance : 40G Active Cable (XLPPI), 100G AOC or 25GAUI C2M AOC. Providing a worst BER of 10^(-12) or below Wavelength : 1550 nm OUI : 0x0002c9 Vendor : Mellanox Serial number : MT1602FT00022 Part number : MFS1200-E003 Revision : AB Temperature : 54 C Length : 3 m
Get the DDM query of the cable:
# mlxcables -d mt4115_pciconf0_cable_0 --DDM Cable DDM: ---------- Temperature : 37C Voltage : 3.3010V RX Power : -0.6712dBm TX Power : 0.8877dBm TX Bias : 6.7500mA ----- Flags ----- Temperature: Alarm high : 0 Warning high : 0 Warning low : 0 Alarm low : 0 Voltage: Alarm high : 0 Warning high : 0 Warning low : 0 Alarm low : 0 RX/TX Power and TX Bias: RX Power alarm high : 0 RX Power warning high: 0 RX Power warning low : 0 RX Power alarm low : 0 TX Power alarm high : 0 TX Power warning high: 0 TX Power warning low : 0 TX Power alarm low : 0 TX Bias alarm high : 0 TX Bias warning high : 0 TX Bias warning low : 0 TX Bias alarm low : 0 ----- Thresholds ----- Temperature high alarm threshold : 80C Temperature high warning threshold : 70C Temperature low warning threshold : 0C Temperature low alarm threshold : -10C Voltage high alarm threshold : 3.5000V Voltage high warning threshold: 3.4650V Voltage low warning threshold : 3.1350V Voltage low alarm threshold : 3.1000V RX Power high alarm threshold : 5.3999dBm RX Power high warn threshold : 2.4000dBm RX Power low warn threshold : -10.3012dBm RX Power low alarm threshold : -13.3068dBm TX Power high alarm threshold : 5.3999dBm TX Power high warn threshold : 2.4000dBm TX Power low warn threshold : -8.4013dBm TX Power low alarm threshold : -11.4026dBm TX Bias high alarm threshold : 8.5000mA TX Bias high warn threshold : 8.0000mA TX Bias low warn threshold : 6.0000mA TX Bias low alarm threshold : 5.4920mA
To read by register name:
Get the list of the supported registers.
mlxcables -d mt4115_pciconf0_cable_0 --show_all_regs Available registers per page: ==================================================== page00_high registers: ==================================================== identifier | ext_identifier | connector_type | .. .. .. vendor_oui | ..
Read the register with the register name you choose (e.g. vendor_oui, identifier).
mlxcables -d mt4115_pciconf0_cable_0 --read_reg vendor_oui vendor_oui = 0x0002c9 mlxcables -d mt4115_pciconf0_cable_0 --read_reg identifier identifier = 0x0d
To read all the Eeprom of the cable:
mlxcables -d mt4115_pciconf0_cable_0 --read_all_regs Available registers per page: ==================================================== page00_high registers: ==================================================== identifier | 0x0d ext_identifier | 0x06 connector_type | 0x02 .. .. .. vendor_oui | 0x0002c9 ..
This will print the same tables as "--show_all_regs" but with the data that was read.
To dump all the cable's pages in raw format:
# mlxcables -d mt4115_pciconf0_cable_0 --dump -b 16 +----------------------------------------+ | Page: 0x00 , Offset: 000, Length: 0x80 | +----------------------------------------+ 000: 0d 06 00 f0 00 00 00 00 00 00 00 00 00 00 00 00 016: 00 00 00 00 00 00 29 a7 00 00 80 7d 00 00 00 00 032: 00 00 37 fa 26 2a 33 68 1c 0c b3 f9 b2 76 c2 fc 048: c1 3e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 064: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 080: 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 096: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 00 112: 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +----------------------------------------+ | Page: 0x00 , Offset: 128, Length: 0x80 | +----------------------------------------+ 128: 0d cc 23 81 00 00 00 00 00 00 00 05 ff 00 00 00 144: 00 00 03 50 4d 65 6c 6c 61 6e 6f 78 20 20 20 20 160: 20 20 20 20 1f 00 02 c9 4d 46 53 31 32 30 30 2d 176: 45 30 30 33 20 20 20 20 41 43 79 18 27 10 46 be 192: 18 07 f5 96 4d 54 31 36 31 33 46 54 30 30 36 39 208: 36 20 20 20 31 36 30 32 32 32 00 00 00 00 67 a9 224: 36 30 33 46 4d 41 32 30 33 47 31 34 32 38 20 20 240: 00 00 00 00 00 00 00 00 00 00 01 00 10 00 00 00 +----------------------------------------+ | Page: 0x03 , Offset: 128, Length: 0x80 | +----------------------------------------+ 128: 50 00 f6 00 46 00 00 00 00 00 00 00 00 00 00 00 144: 88 b8 79 18 87 5a 7a 76 00 00 00 00 00 00 00 00 160: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 176: 87 71 01 d3 43 e2 03 a5 00 00 00 00 00 00 00 00 192: 87 71 02 d4 43 e2 05 a5 00 00 00 00 00 00 00 00 208: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 224: a7 03 00 00 00 00 00 00 00 00 00 00 77 77 11 11 240: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00