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
Last updated: