mlxcables - Cables Tool
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)
[-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