[devices]: Added new SN3700/SN3700C Mellanox platforms (#2548)

* [mlnx-msn3700]: Added MSN3700 platform.

Signed-off-by: Nazarii Hnydyn <nazariig@mellanox.com>

* [mlnx-msn3700]: Upgrade FW burn: use ASIC auto detect.

Signed-off-by: Nazarii Hnydyn <nazariig@mellanox.com>

* [mlnx-msn3700]: Updated HW-MGMT/FW/MFT/SAI/SDK.

Signed-off-by: Nazarii Hnydyn <nazariig@mellanox.com>

* [mlnx-msn3700]: Added MSN3700C platform.

Signed-off-by: Nazarii Hnydyn <nazariig@mellanox.com>
This commit is contained in:
Nazarii Hnydyn 2019-02-14 09:08:04 +02:00 committed by lguohan
parent a9d2bf37e1
commit d53df059d4
43 changed files with 810 additions and 48 deletions

View File

@ -22,7 +22,7 @@ GET_HWSKU_CMD = "sonic-cfggen -d -v DEVICE_METADATA.localhost.hwsku"
# magic code defnition for port number, qsfp port position of each hwsku # magic code defnition for port number, qsfp port position of each hwsku
# port_position_tuple = (PORT_START, QSFP_PORT_START, PORT_END, PORT_IN_BLOCK, EEPROM_OFFSET) # port_position_tuple = (PORT_START, QSFP_PORT_START, PORT_END, PORT_IN_BLOCK, EEPROM_OFFSET)
hwsku_dict = {'ACS-MSN2700': 0, "LS-SN2700":0, 'ACS-MSN2740': 0, 'ACS-MSN2100': 1, 'ACS-MSN2410': 2, 'ACS-MSN2010': 3, } hwsku_dict = {'ACS-MSN2700': 0, "LS-SN2700":0, 'ACS-MSN2740': 0, 'ACS-MSN2100': 1, 'ACS-MSN2410': 2, 'ACS-MSN2010': 3, 'ACS-MSN3700': 0, 'ACS-MSN3700C': 0}
port_position_tuple_list = [(0, 0, 31, 32, 1), (0, 0, 15, 16, 1), (0, 48, 55, 56, 1),(0, 18, 21, 22, 1)] port_position_tuple_list = [(0, 0, 31, 32, 1), (0, 0, 15, 16, 1), (0, 48, 55, 56, 1),(0, 18, 21, 22, 1)]
class SfpUtil(SfpUtilBase): class SfpUtil(SfpUtilBase):

View File

@ -0,0 +1 @@
../../x86_64-mlnx_msn2700-r0/ACS-MSN2700/buffers.json.j2

View File

@ -0,0 +1,91 @@
{% set default_cable = '5m' %}
{% set ingress_lossless_pool_size = '8224768' %}
{% set ingress_lossy_pool_size = '8224768' %}
{% set egress_lossless_pool_size = '41943024' %}
{% set egress_lossy_pool_size = '8224768' %}
{%- macro generate_port_lists(PORT_ALL) %}
{# Generate list of ports #}
{%- for port_idx in range(0, 32) %}
{%- if PORT_ALL.append("Ethernet%d" % (port_idx)) %}{%- endif %}
{%- endfor %}
{%- endmacro %}
{%- macro generate_buffer_pool_and_profiles() %}
"BUFFER_POOL": {
"ingress_lossless_pool": {
"size": "{{ ingress_lossless_pool_size }}",
"type": "ingress",
"mode": "dynamic"
},
"ingress_lossy_pool": {
"size": "{{ ingress_lossy_pool_size }}",
"type": "ingress",
"mode": "dynamic"
},
"egress_lossless_pool": {
"size": "{{ egress_lossless_pool_size }}",
"type": "egress",
"mode": "dynamic"
},
"egress_lossy_pool": {
"size": "{{ egress_lossy_pool_size }}",
"type": "egress",
"mode": "dynamic"
}
},
"BUFFER_PROFILE": {
"ingress_lossless_profile": {
"pool":"[BUFFER_POOL|ingress_lossless_pool]",
"size":"0",
"dynamic_th":"0"
},
"ingress_lossy_profile": {
"pool":"[BUFFER_POOL|ingress_lossy_pool]",
"size":"0",
"dynamic_th":"3"
},
"egress_lossless_profile": {
"pool":"[BUFFER_POOL|egress_lossless_pool]",
"size":"0",
"dynamic_th":"7"
},
"egress_lossy_profile": {
"pool":"[BUFFER_POOL|egress_lossy_pool]",
"size":"4096",
"dynamic_th":"3"
},
"q_lossy_profile": {
"pool":"[BUFFER_POOL|egress_lossy_pool]",
"size":"0",
"dynamic_th":"3"
}
},
{%- endmacro %}
{%- macro generate_profile_lists(port_names) %}
"BUFFER_PORT_INGRESS_PROFILE_LIST": {
"{{ port_names }}": {
"profile_list" : "[BUFFER_PROFILE|ingress_lossless_profile],[BUFFER_PROFILE|ingress_lossy_profile]"
}
},
"BUFFER_PORT_EGRESS_PROFILE_LIST": {
"{{ port_names }}": {
"profile_list" : "[BUFFER_PROFILE|egress_lossless_profile],[BUFFER_PROFILE|egress_lossy_profile]"
}
}
{%- endmacro %}
{%- macro generate_queue_buffers(port_names) %}
"BUFFER_QUEUE": {
"{{ port_names }}|3-4": {
"profile" : "[BUFFER_PROFILE|egress_lossless_profile]"
},
"{{ port_names }}|0-1": {
"profile" : "[BUFFER_PROFILE|q_lossy_profile]"
},
"{{ port_names }}|5": {
"profile" : "[BUFFER_PROFILE|q_lossy_profile]"
}
}
{%- endmacro %}

View File

@ -0,0 +1,91 @@
{% set default_cable = '5m' %}
{% set ingress_lossless_pool_size = '12042240' %}
{% set ingress_lossy_pool_size = '12042240' %}
{% set egress_lossless_pool_size = '41943024' %}
{% set egress_lossy_pool_size = '12042240' %}
{%- macro generate_port_lists(PORT_ALL) %}
{# Generate list of ports #}
{%- for port_idx in range(0, 32) %}
{%- if PORT_ALL.append("Ethernet%d" % (port_idx)) %}{%- endif %}
{%- endfor %}
{%- endmacro %}
{%- macro generate_buffer_pool_and_profiles() %}
"BUFFER_POOL": {
"ingress_lossless_pool": {
"size": "{{ ingress_lossless_pool_size }}",
"type": "ingress",
"mode": "dynamic"
},
"ingress_lossy_pool": {
"size": "{{ ingress_lossy_pool_size }}",
"type": "ingress",
"mode": "dynamic"
},
"egress_lossless_pool": {
"size": "{{ egress_lossless_pool_size }}",
"type": "egress",
"mode": "dynamic"
},
"egress_lossy_pool": {
"size": "{{ egress_lossy_pool_size }}",
"type": "egress",
"mode": "dynamic"
}
},
"BUFFER_PROFILE": {
"ingress_lossless_profile": {
"pool":"[BUFFER_POOL|ingress_lossless_pool]",
"size":"0",
"dynamic_th":"0"
},
"ingress_lossy_profile": {
"pool":"[BUFFER_POOL|ingress_lossy_pool]",
"size":"0",
"dynamic_th":"3"
},
"egress_lossless_profile": {
"pool":"[BUFFER_POOL|egress_lossless_pool]",
"size":"0",
"dynamic_th":"7"
},
"egress_lossy_profile": {
"pool":"[BUFFER_POOL|egress_lossy_pool]",
"size":"4096",
"dynamic_th":"3"
},
"q_lossy_profile": {
"pool":"[BUFFER_POOL|egress_lossy_pool]",
"size":"0",
"dynamic_th":"3"
}
},
{%- endmacro %}
{%- macro generate_profile_lists(port_names) %}
"BUFFER_PORT_INGRESS_PROFILE_LIST": {
"{{ port_names }}": {
"profile_list" : "[BUFFER_PROFILE|ingress_lossless_profile],[BUFFER_PROFILE|ingress_lossy_profile]"
}
},
"BUFFER_PORT_EGRESS_PROFILE_LIST": {
"{{ port_names }}": {
"profile_list" : "[BUFFER_PROFILE|egress_lossless_profile],[BUFFER_PROFILE|egress_lossy_profile]"
}
}
{%- endmacro %}
{%- macro generate_queue_buffers(port_names) %}
"BUFFER_QUEUE": {
"{{ port_names }}|3-4": {
"profile" : "[BUFFER_PROFILE|egress_lossless_profile]"
},
"{{ port_names }}|0-1": {
"profile" : "[BUFFER_PROFILE|q_lossy_profile]"
},
"{{ port_names }}|5": {
"profile" : "[BUFFER_PROFILE|q_lossy_profile]"
}
}
{%- endmacro %}

View File

@ -0,0 +1,22 @@
# speed cable size xon xoff threshold
1000 5m 35840 18432 17408 0
10000 5m 36864 18432 18432 0
25000 5m 36864 18432 18432 0
40000 5m 36864 18432 18432 0
50000 5m 37888 18432 19456 0
100000 5m 38912 18432 20480 0
200000 5m 41984 18432 23552 0
1000 40m 36864 18432 18432 0
10000 40m 38912 18432 20480 0
25000 40m 41984 18432 23552 0
40000 40m 45056 18432 26624 0
50000 40m 47104 18432 28672 0
100000 40m 59392 18432 40960 0
200000 40m 81920 18432 63488 0
1000 300m 37888 18432 19456 0
10000 300m 53248 18432 34816 0
25000 300m 78848 18432 60416 0
40000 300m 104448 18432 86016 0
50000 300m 121856 18432 103424 0
100000 300m 206848 18432 188416 0
200000 300m 376832 18432 358400 0

View File

@ -0,0 +1 @@
../../x86_64-mlnx_msn2700-r0/ACS-MSN2700/port_config.ini

View File

@ -0,0 +1 @@
../../x86_64-mlnx_msn2700-r0/ACS-MSN2700/qos.json.j2

View File

@ -0,0 +1 @@
SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/sai_3700.xml

View File

@ -0,0 +1,243 @@
<?xml version="1.0"?>
<root>
<platform_info type="3700">
<!-- Device MAC address -->
<device-mac-address>00:02:03:04:05:00</device-mac-address>
<!-- Number of ports in the following port list -->
<number-of-physical-ports>32</number-of-physical-ports>
<!-- List of ports in the device -->
<ports-list>
<port-info>
<local-port>1</local-port>
<width>4</width>
<module>16</module>
<!-- 0 none, 1=2, 2=4, 3=2,4 -->
<breakout-modes>3</breakout-modes>
<!-- (BITMASK) 2 - 1Gb , 16 - 10Gb , 32 - 40Gb , 384 - 50Gb , 1536 - 100Gb , 4096 - 200Gb -->
<port-speed>1536</port-speed>
</port-info>
<port-info>
<local-port>5</local-port>
<width>4</width>
<module>17</module>
<breakout-modes>3</breakout-modes>
<port-speed>1536</port-speed>
</port-info>
<port-info>
<local-port>9</local-port>
<width>4</width>
<module>18</module>
<breakout-modes>3</breakout-modes>
<port-speed>1536</port-speed>
</port-info>
<port-info>
<local-port>13</local-port>
<width>4</width>
<module>19</module>
<breakout-modes>3</breakout-modes>
<port-speed>1536</port-speed>
</port-info>
<port-info>
<local-port>17</local-port>
<width>4</width>
<module>20</module>
<breakout-modes>3</breakout-modes>
<port-speed>1536</port-speed>
</port-info>
<port-info>
<local-port>21</local-port>
<width>4</width>
<module>21</module>
<breakout-modes>3</breakout-modes>
<port-speed>1536</port-speed>
</port-info>
<port-info>
<local-port>25</local-port>
<width>4</width>
<module>22</module>
<breakout-modes>3</breakout-modes>
<port-speed>1536</port-speed>
</port-info>
<port-info>
<local-port>29</local-port>
<width>4</width>
<module>23</module>
<breakout-modes>3</breakout-modes>
<port-speed>1536</port-speed>
</port-info>
<port-info>
<local-port>33</local-port>
<width>4</width>
<module>14</module>
<breakout-modes>3</breakout-modes>
<port-speed>1536</port-speed>
</port-info>
<port-info>
<local-port>37</local-port>
<width>4</width>
<module>15</module>
<breakout-modes>3</breakout-modes>
<port-speed>1536</port-speed>
</port-info>
<port-info>
<local-port>41</local-port>
<width>4</width>
<module>12</module>
<breakout-modes>3</breakout-modes>
<port-speed>1536</port-speed>
</port-info>
<port-info>
<local-port>45</local-port>
<width>4</width>
<module>13</module>
<breakout-modes>3</breakout-modes>
<port-speed>1536</port-speed>
</port-info>
<port-info>
<local-port>49</local-port>
<width>4</width>
<module>10</module>
<breakout-modes>3</breakout-modes>
<port-speed>1536</port-speed>
</port-info>
<port-info>
<local-port>53</local-port>
<width>4</width>
<module>11</module>
<breakout-modes>3</breakout-modes>
<port-speed>1536</port-speed>
</port-info>
<port-info>
<local-port>57</local-port>
<width>4</width>
<module>8</module>
<breakout-modes>3</breakout-modes>
<port-speed>1536</port-speed>
</port-info>
<port-info>
<local-port>61</local-port>
<width>4</width>
<module>9</module>
<breakout-modes>3</breakout-modes>
<port-speed>1536</port-speed>
</port-info>
<port-info>
<local-port>65</local-port>
<width>4</width>
<module>30</module>
<breakout-modes>3</breakout-modes>
<port-speed>1536</port-speed>
</port-info>
<port-info>
<local-port>69</local-port>
<width>4</width>
<module>31</module>
<breakout-modes>3</breakout-modes>
<port-speed>1536</port-speed>
</port-info>
<port-info>
<local-port>73</local-port>
<width>4</width>
<module>28</module>
<breakout-modes>3</breakout-modes>
<port-speed>1536</port-speed>
</port-info>
<port-info>
<local-port>77</local-port>
<width>4</width>
<module>29</module>
<breakout-modes>3</breakout-modes>
<port-speed>1536</port-speed>
</port-info>
<port-info>
<local-port>81</local-port>
<width>4</width>
<module>26</module>
<breakout-modes>3</breakout-modes>
<port-speed>1536</port-speed>
</port-info>
<port-info>
<local-port>85</local-port>
<width>4</width>
<module>27</module>
<breakout-modes>3</breakout-modes>
<port-speed>1536</port-speed>
</port-info>
<port-info>
<local-port>89</local-port>
<width>4</width>
<module>24</module>
<breakout-modes>3</breakout-modes>
<port-speed>1536</port-speed>
</port-info>
<port-info>
<local-port>93</local-port>
<width>4</width>
<module>25</module>
<breakout-modes>3</breakout-modes>
<port-speed>1536</port-speed>
</port-info>
<port-info>
<local-port>97</local-port>
<width>4</width>
<module>0</module>
<breakout-modes>3</breakout-modes>
<port-speed>1536</port-speed>
</port-info>
<port-info>
<local-port>101</local-port>
<width>4</width>
<module>1</module>
<breakout-modes>3</breakout-modes>
<port-speed>1536</port-speed>
</port-info>
<port-info>
<local-port>105</local-port>
<width>4</width>
<module>2</module>
<breakout-modes>3</breakout-modes>
<port-speed>1536</port-speed>
</port-info>
<port-info>
<local-port>109</local-port>
<width>4</width>
<module>3</module>
<breakout-modes>3</breakout-modes>
<port-speed>1536</port-speed>
</port-info>
<port-info>
<local-port>113</local-port>
<width>4</width>
<module>4</module>
<breakout-modes>3</breakout-modes>
<port-speed>1536</port-speed>
</port-info>
<port-info>
<local-port>117</local-port>
<width>4</width>
<module>5</module>
<breakout-modes>3</breakout-modes>
<port-speed>1536</port-speed>
</port-info>
<port-info>
<local-port>121</local-port>
<width>4</width>
<module>6</module>
<breakout-modes>3</breakout-modes>
<port-speed>1536</port-speed>
</port-info>
<port-info>
<local-port>125</local-port>
<width>4</width>
<module>7</module>
<breakout-modes>3</breakout-modes>
<port-speed>1536</port-speed>
</port-info>
</ports-list>
</platform_info>
</root>

View File

@ -0,0 +1 @@
ACS-MSN3700 t1

View File

@ -0,0 +1 @@
../x86_64-mlnx_msn2700-r0/platform_reboot

View File

@ -0,0 +1 @@
../../x86_64-mlnx_msn2700-r0/plugins/eeprom.py

View File

@ -0,0 +1 @@
../../x86_64-mlnx_msn2700-r0/plugins/psuutil.py

View File

@ -0,0 +1 @@
../../x86_64-mlnx_msn2700-r0/plugins/sfplpmget.py

View File

@ -0,0 +1 @@
../../x86_64-mlnx_msn2700-r0/plugins/sfplpmset.py

View File

@ -0,0 +1 @@
../../x86_64-mlnx_msn2700-r0/plugins/sfpreset.py

View File

@ -0,0 +1 @@
../../x86_64-mlnx_msn2700-r0/plugins/sfputil.py

View File

@ -0,0 +1,89 @@
################################################################################
# Copyright (c) 2019 Mellanox Technologies
#
# Platform specific sensors config for MSN3700
################################################################################
# Temperature sensors
bus "i2c-2" "i2c-1-mux (chan_id 1)"
chip "mlxsw-i2c-*-48"
label temp1 "Ambient ASIC Temp"
bus "i2c-7" "i2c-1-mux (chan_id 6)"
chip "tmp102-i2c-*-49"
label temp1 "Ambient Fan Side Temp (air intake)"
chip "tmp102-i2c-*-4a"
label temp1 "Ambient Port Side Temp (air exhaust)"
# Power controllers
bus "i2c-5" "i2c-1-mux (chan_id 4)"
chip "tps53679-i2c-*-70"
label in1 "PMIC-1 PSU 12V Rail (in)"
label in2 "PMIC-1 ASIC 0.8V VCORE Rail (out)"
label in3 "PMIC-1 ASIC 1.2V Rail (out)"
label temp1 "PMIC-1 Temp 1"
label temp2 "PMIC-1 Temp 2"
label power1 "PMIC-1 ASIC 0.8V VCORE Rail Pwr (out)"
label power2 "PMIC-1 ASIC 1.2V Rail Pwr (out)"
label curr1 "PMIC-1 ASIC 0.8V VCORE Rail Curr (out)"
label curr2 "PMIC-1 ASIC 1.2V Rail Curr (out)"
chip "tps53679-i2c-*-71"
label in1 "PMIC-2 PSU 12V Rail (in)"
label in2 "PMIC-2 ASIC 3.3V Rail (out)"
label in3 "PMIC-2 ASIC 1.8V Rail (out)"
label temp1 "PMIC-2 Temp 1"
label temp2 "PMIC-2 Temp 2"
label power1 "PMIC-2 ASIC 3.3V Rail Pwr (out)"
label power2 "PMIC-2 ASIC 1.8V Rail Pwr (out)"
label curr1 "PMIC-2 ASIC 3.3V Rail Curr (out)"
label curr2 "PMIC-2 ASIC 1.8V Rail Curr (out)"
# Power supplies
bus "i2c-4" "i2c-1-mux (chan_id 3)"
chip "dps460-i2c-*-58"
label in1 "PSU-1 220V Rail (in)"
ignore in2
label in3 "PSU-1 12V Rail (out)"
label fan1 "PSU-1 Fan 1"
ignore fan2
ignore fan3
label temp1 "PSU-1 Temp 1"
label temp2 "PSU-1 Temp 2"
label temp3 "PSU-1 Temp 3"
label power1 "PSU-1 220V Rail Pwr (in)"
label power2 "PSU-1 12V Rail Pwr (out)"
label curr1 "PSU-1 220V Rail Curr (in)"
label curr2 "PSU-1 12V Rail Curr (out)"
chip "dps460-i2c-*-59"
label in1 "PSU-2 220V Rail (in)"
ignore in2
label in3 "PSU-2 12V Rail (out)"
label fan1 "PSU-2 Fan 1"
ignore fan2
ignore fan3
label temp1 "PSU-2 Temp 1"
label temp2 "PSU-2 Temp 2"
label temp3 "PSU-2 Temp 3"
label power1 "PSU-2 220V Rail Pwr (in)"
label power2 "PSU-2 12V Rail Pwr (out)"
label curr1 "PSU-2 220V Rail Curr (in)"
label curr2 "PSU-2 12V Rail Curr (out)"
# Chassis fans
chip "mlxreg_fan-isa-*"
label fan1 "Chassis Fan Drawer-1 Tach 1"
label fan2 "Chassis Fan Drawer-1 Tach 2"
label fan3 "Chassis Fan Drawer-2 Tach 1"
label fan4 "Chassis Fan Drawer-2 Tach 2"
label fan5 "Chassis Fan Drawer-3 Tach 1"
label fan6 "Chassis Fan Drawer-3 Tach 2"
label fan7 "Chassis Fan Drawer-4 Tach 1"
label fan8 "Chassis Fan Drawer-4 Tach 2"
label fan9 "Chassis Fan Drawer-5 Tach 1"
label fan10 "Chassis Fan Drawer-5 Tach 2"
label fan11 "Chassis Fan Drawer-6 Tach 1"
label fan12 "Chassis Fan Drawer-6 Tach 2"
# Miscellaneous
chip "*-virtual-*"
ignore temp1

View File

@ -0,0 +1 @@
../../x86_64-mlnx_msn2700-r0/ACS-MSN2700/buffers.json.j2

View File

@ -0,0 +1 @@
../../x86_64-mlnx_msn3700-r0/ACS-MSN3700/buffers_defaults_t0.j2

View File

@ -0,0 +1 @@
../../x86_64-mlnx_msn3700-r0/ACS-MSN3700/buffers_defaults_t1.j2

View File

@ -0,0 +1 @@
../../x86_64-mlnx_msn3700-r0/ACS-MSN3700/pg_profile_lookup.ini

View File

@ -0,0 +1 @@
../../x86_64-mlnx_msn2700-r0/ACS-MSN2700/port_config.ini

View File

@ -0,0 +1 @@
../../x86_64-mlnx_msn2700-r0/ACS-MSN2700/qos.json.j2

View File

@ -0,0 +1 @@
SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/sai_3700c.xml

View File

@ -0,0 +1 @@
../../x86_64-mlnx_msn3700-r0/ACS-MSN3700/sai_3700.xml

View File

@ -0,0 +1 @@
ACS-MSN3700C t1

View File

@ -0,0 +1 @@
../x86_64-mlnx_msn2700-r0/platform_reboot

View File

@ -0,0 +1 @@
../../x86_64-mlnx_msn2700-r0/plugins/eeprom.py

View File

@ -0,0 +1 @@
../../x86_64-mlnx_msn2700-r0/plugins/psuutil.py

View File

@ -0,0 +1 @@
../../x86_64-mlnx_msn2700-r0/plugins/sfplpmget.py

View File

@ -0,0 +1 @@
../../x86_64-mlnx_msn2700-r0/plugins/sfplpmset.py

View File

@ -0,0 +1 @@
../../x86_64-mlnx_msn2700-r0/plugins/sfpreset.py

View File

@ -0,0 +1 @@
../../x86_64-mlnx_msn2700-r0/plugins/sfputil.py

View File

@ -0,0 +1,89 @@
################################################################################
# Copyright (c) 2019 Mellanox Technologies
#
# Platform specific sensors config for MSN3700C
################################################################################
# Temperature sensors
bus "i2c-2" "i2c-1-mux (chan_id 1)"
chip "mlxsw-i2c-*-48"
label temp1 "Ambient ASIC Temp"
bus "i2c-7" "i2c-1-mux (chan_id 6)"
chip "tmp102-i2c-*-49"
label temp1 "Ambient Fan Side Temp (air intake)"
chip "tmp102-i2c-*-4a"
label temp1 "Ambient Port Side Temp (air exhaust)"
# Power controllers
bus "i2c-5" "i2c-1-mux (chan_id 4)"
chip "tps53679-i2c-*-70"
label in1 "PMIC-1 PSU 12V Rail (in)"
label in2 "PMIC-1 ASIC 0.8V VCORE Rail (out)"
label in3 "PMIC-1 ASIC 1.2V Rail (out)"
label temp1 "PMIC-1 Temp 1"
label temp2 "PMIC-1 Temp 2"
label power1 "PMIC-1 ASIC 0.8V VCORE Rail Pwr (out)"
label power2 "PMIC-1 ASIC 1.2V Rail Pwr (out)"
label curr1 "PMIC-1 ASIC 0.8V VCORE Rail Curr (out)"
label curr2 "PMIC-1 ASIC 1.2V Rail Curr (out)"
chip "tps53679-i2c-*-71"
label in1 "PMIC-2 PSU 12V Rail (in)"
label in2 "PMIC-2 ASIC 3.3V Rail (out)"
label in3 "PMIC-2 ASIC 1.8V Rail (out)"
label temp1 "PMIC-2 Temp 1"
label temp2 "PMIC-2 Temp 2"
label power1 "PMIC-2 ASIC 3.3V Rail Pwr (out)"
label power2 "PMIC-2 ASIC 1.8V Rail Pwr (out)"
label curr1 "PMIC-2 ASIC 3.3V Rail Curr (out)"
label curr2 "PMIC-2 ASIC 1.8V Rail Curr (out)"
# Power supplies
bus "i2c-4" "i2c-1-mux (chan_id 3)"
chip "dps460-i2c-*-58"
label in1 "PSU-1 220V Rail (in)"
ignore in2
label in3 "PSU-1 12V Rail (out)"
label fan1 "PSU-1 Fan 1"
ignore fan2
ignore fan3
label temp1 "PSU-1 Temp 1"
label temp2 "PSU-1 Temp 2"
label temp3 "PSU-1 Temp 3"
label power1 "PSU-1 220V Rail Pwr (in)"
label power2 "PSU-1 12V Rail Pwr (out)"
label curr1 "PSU-1 220V Rail Curr (in)"
label curr2 "PSU-1 12V Rail Curr (out)"
chip "dps460-i2c-*-59"
label in1 "PSU-2 220V Rail (in)"
ignore in2
label in3 "PSU-2 12V Rail (out)"
label fan1 "PSU-2 Fan 1"
ignore fan2
ignore fan3
label temp1 "PSU-2 Temp 1"
label temp2 "PSU-2 Temp 2"
label temp3 "PSU-2 Temp 3"
label power1 "PSU-2 220V Rail Pwr (in)"
label power2 "PSU-2 12V Rail Pwr (out)"
label curr1 "PSU-2 220V Rail Curr (in)"
label curr2 "PSU-2 12V Rail Curr (out)"
# Chassis fans
chip "mlxreg_fan-isa-*"
label fan1 "Chassis Fan Drawer-1 Tach 1"
label fan2 "Chassis Fan Drawer-1 Tach 2"
label fan3 "Chassis Fan Drawer-2 Tach 1"
label fan4 "Chassis Fan Drawer-2 Tach 2"
label fan5 "Chassis Fan Drawer-3 Tach 1"
label fan6 "Chassis Fan Drawer-3 Tach 2"
label fan7 "Chassis Fan Drawer-4 Tach 1"
label fan8 "Chassis Fan Drawer-4 Tach 2"
ignore fan9
ignore fan10
ignore fan11
ignore fan12
# Miscellaneous
chip "*-virtual-*"
ignore temp1

View File

@ -314,7 +314,8 @@ sudo cp {{src}} $FILESYSTEM_ROOT/{{dst}}
{% if sonic_asic_platform == "mellanox" %} {% if sonic_asic_platform == "mellanox" %}
sudo mkdir -p $FILESYSTEM_ROOT/etc/mlnx/ sudo mkdir -p $FILESYSTEM_ROOT/etc/mlnx/
sudo cp target/files/$MLNX_FW_FILE $FILESYSTEM_ROOT/etc/mlnx/fw-SPC.mfa sudo cp target/files/$MLNX_SPC_FW_FILE $FILESYSTEM_ROOT/etc/mlnx/fw-SPC.mfa
sudo cp target/files/$MLNX_SPC2_FW_FILE $FILESYSTEM_ROOT/etc/mlnx/fw-SPC2.mfa
sudo cp target/files/$ISSU_VERSION_FILE $FILESYSTEM_ROOT/etc/mlnx/issu-version sudo cp target/files/$ISSU_VERSION_FILE $FILESYSTEM_ROOT/etc/mlnx/issu-version
sudo cp target/files/$MLNX_FFB_SCRIPT $FILESYSTEM_ROOT/usr/bin/mlnx-ffb.sh sudo cp target/files/$MLNX_FFB_SCRIPT $FILESYSTEM_ROOT/usr/bin/mlnx-ffb.sh
j2 platform/mellanox/mlnx-fw-upgrade.j2 | sudo tee $FILESYSTEM_ROOT/usr/bin/mlnx-fw-upgrade.sh j2 platform/mellanox/mlnx-fw-upgrade.j2 | sudo tee $FILESYSTEM_ROOT/usr/bin/mlnx-fw-upgrade.sh

View File

@ -1,9 +1,17 @@
# mellanox firmware # mellanox firmware
MLNX_FW_VERSION = 13.1910.0906 MLNX_SPC_FW_VERSION = 13.1910.0906
MLNX_FW_FILE = fw-SPC-rel-$(subst .,_,$(MLNX_FW_VERSION))-EVB.mfa MLNX_SPC_FW_FILE = fw-SPC-rel-$(subst .,_,$(MLNX_SPC_FW_VERSION))-EVB.mfa
$(MLNX_FW_FILE)_URL = $(MLNX_SDK_BASE_URL)/$(MLNX_FW_FILE) $(MLNX_SPC_FW_FILE)_URL = $(MLNX_SDK_BASE_URL)/$(MLNX_SPC_FW_FILE)
SONIC_ONLINE_FILES += $(MLNX_FW_FILE) SONIC_ONLINE_FILES += $(MLNX_SPC_FW_FILE)
export MLNX_FW_VERSION MLNX_SPC2_FW_VERSION = 29.1961.0006
export MLNX_FW_FILE MLNX_SPC2_FW_FILE = fw-SPC2-rel-$(subst .,_,$(MLNX_SPC2_FW_VERSION))-EVB.mfa
$(MLNX_SPC2_FW_FILE)_URL = $(MLNX_SDK_BASE_URL)/$(MLNX_SPC2_FW_FILE)
SONIC_ONLINE_FILES += $(MLNX_SPC2_FW_FILE)
export MLNX_SPC_FW_VERSION
export MLNX_SPC_FW_FILE
export MLNX_SPC2_FW_VERSION
export MLNX_SPC2_FW_FILE

@ -1 +1 @@
Subproject commit 344e81942c02c279db03c3aba40db4142dc6817d Subproject commit f58710c8f348fdaefdafbefeb0261ccac3b85f24

View File

@ -1,7 +1,7 @@
# Mellanox SAI # Mellanox SAI
MFT_VERSION = 4.9.0 MFT_VERSION = 4.11.0
MFT_REVISION = 38 MFT_REVISION = 65
export MFT_VERSION MFT_REVISION export MFT_VERSION MFT_REVISION

View File

@ -4,39 +4,65 @@ declare -r SCRIPT_NAME="$(basename "$0")"
declare -r SCRIPT_PATH="$(readlink -f "$0")" declare -r SCRIPT_PATH="$(readlink -f "$0")"
declare -r SCRIPT_DIR="$(dirname "$SCRIPT_PATH")" declare -r SCRIPT_DIR="$(dirname "$SCRIPT_PATH")"
declare -r YES_PARAM="yes"
declare -r NO_PARAM="no"
declare -r VERBOSE_ERROR="1"
declare -r VERBOSE_WARNING="2"
declare -r VERBOSE_NOTICE="3"
declare -r VERBOSE_INFO="4"
declare -r VERBOSE_MAX="${VERBOSE_INFO}"
declare -r VERBOSE_MIN="${VERBOSE_ERROR}"
declare -r EXIT_SUCCESS="0" declare -r EXIT_SUCCESS="0"
declare -r EXIT_ERROR="1" declare -r EXIT_FAILURE="1"
declare -r QUERY_CMD="mlxfwmanager --query" declare -r QUERY_CMD="mlxfwmanager --query"
declare -r BURN_CMD="mlxfwmanager -u -f -y" declare -r BURN_CMD="mlxfwmanager -u -f -y"
declare -r FW_FILE="/etc/mlnx/fw-SPC.mfa" declare -r QUERY_FILE="/tmp/mlxfwmanager-query.log"
declare -r QUERY_FILE="/tmp/mlnxfwmanager-query.txt"
declare -r FW_REQUIRED="{{ MLNX_FW_VERSION }}" declare -r SPC1_ASIC="spc1"
declare -r SPC2_ASIC="spc2"
declare -r UNKN_ASIC="unknown"
IMAGE_UPGRADE="no" declare -rA FW_FILE_MAP=( \
[$SPC1_ASIC]="/etc/mlnx/fw-SPC.mfa" \
[$SPC2_ASIC]="/etc/mlnx/fw-SPC2.mfa" \
)
declare -rA FW_REQUIRED_MAP=( \
[$SPC1_ASIC]="{{ MLNX_SPC_FW_VERSION }}" \
[$SPC2_ASIC]="{{ MLNX_SPC2_FW_VERSION }}" \
)
IMAGE_UPGRADE="${NO_PARAM}"
VERBOSE_LEVEL="${VERBOSE_MIN}"
function PrintHelp() { function PrintHelp() {
echo echo
echo "Usage: ./${SCRIPT_NAME} [OPTIONS]" echo "Usage: ./${SCRIPT_NAME} [OPTIONS]"
echo echo
echo "OPTIONS:" echo "OPTIONS:"
echo " -u, --upgrade Upgrade MLNX ASIC firmware using next boot image (useful after SONiC-To-SONiC update)" echo " -u, --upgrade Upgrade ASIC firmware using next boot image (useful after SONiC-To-SONiC update)"
echo " -v, --verbose Verbose mode"
echo " -h, --help Print help" echo " -h, --help Print help"
echo echo
echo "Examples:" echo "Examples:"
echo " ./${SCRIPT_NAME}" echo " ./${SCRIPT_NAME} --verbose"
echo " ./${SCRIPT_NAME} --upgrade" echo " ./${SCRIPT_NAME} --upgrade"
echo " ./${SCRIPT_NAME} --help" echo " ./${SCRIPT_NAME} --help"
echo echo
} }
function ParseArguments() { function ParseArguments() {
while [ $# -ge 1 ]; do while [ "$#" -ge "1" ]; do
case "$1" in case "$1" in
-u|--upgrade) -u|--upgrade)
IMAGE_UPGRADE="yes" IMAGE_UPGRADE="${YES_PARAM}"
;;
-v|--verbose)
VERBOSE_LEVEL="${VERBOSE_MAX}"
;; ;;
-h|--help) -h|--help)
PrintHelp PrintHelp
@ -47,65 +73,138 @@ function ParseArguments() {
done done
} }
function LogError() {
if [[ "${VERBOSE_LEVEL}" -ge "${VERBOSE_ERROR}" ]]; then
echo "ERROR: $*"
fi
}
function LogWarning() {
if [[ "${VERBOSE_LEVEL}" -ge "${VERBOSE_WARNING}" ]]; then
echo "WARNING: $*"
fi
}
function LogNotice() {
if [[ "${VERBOSE_LEVEL}" -ge "${VERBOSE_NOTICE}" ]]; then
echo "NOTICE: $*"
fi
}
function LogInfo() {
if [[ "${VERBOSE_LEVEL}" -ge "${VERBOSE_INFO}" ]]; then
echo "INFO: $*"
fi
}
function ExitFailure() {
if [[ "${VERBOSE_LEVEL}" -ge "${VERBOSE_ERROR}" ]]; then
echo
LogError "$@"
echo
fi
exit "${EXIT_FAILURE}"
}
function ExitSuccess() {
if [[ "${VERBOSE_LEVEL}" -ge "${VERBOSE_INFO}" ]]; then
echo
LogInfo "$@"
echo
fi
exit "${EXIT_SUCCESS}"
}
function WaitForDevice() { function WaitForDevice() {
local -i QUERY_RETRY_COUNT_MAX="10" local -i QUERY_RETRY_COUNT_MAX="10"
local -i QUERY_RETRY_COUNT="0" local -i QUERY_RETRY_COUNT="0"
${QUERY_CMD} > /dev/null ${QUERY_CMD} > /dev/null
while [[ ("${QUERY_RETRY_COUNT}" -lt "${QUERY_RETRY_COUNT_MAX}") && ("$?" -ne "0") ]]; do while [[ ("${QUERY_RETRY_COUNT}" -lt "${QUERY_RETRY_COUNT_MAX}") && ("$?" -ne "${EXIT_SUCCESS}") ]]; do
sleep 1s sleep 1s
((QUERY_RETRY_COUNT++)) ((QUERY_RETRY_COUNT++))
${QUERY_CMD} > /dev/null ${QUERY_CMD} > /dev/null
done done
} }
function GetAsicType() {
local -r VENDOR_ID="15b3"
local -r SPC1_PRODUCT_ID="cb84"
local -r SPC2_PRODUCT_ID="cf6c"
if lspci -n | grep "${VENDOR_ID}:${SPC1_PRODUCT_ID}" &>/dev/null; then
echo "${SPC1_ASIC}"
exit "${EXIT_SUCCESS}"
elif lspci -n | grep "${VENDOR_ID}:${SPC2_PRODUCT_ID}" &>/dev/null; then
echo "${SPC2_ASIC}"
exit "${EXIT_SUCCESS}"
fi
echo "${UNKN_ASIC}"
exit "${EXIT_FAILURE}"
}
function RunCmd() { function RunCmd() {
$1 local ERROR_CODE="${EXIT_SUCCESS}"
if [[ $? != 0 ]]; then
echo "Command failed: cmd=$1, errno=$?" if [[ "${VERBOSE_LEVEL}" -eq "${VERBOSE_MAX}" ]]; then
exit "${EXIT_ERROR}" eval "$@"
else
eval "$@" &>/dev/null
fi
ERROR_CODE="$?"
if [[ "${ERROR_CODE}" != "${EXIT_SUCCESS}" ]]; then
ExitFailure "command failed: $@"
fi fi
} }
function UpgradeFW() { function UpgradeFW() {
local _FW_FILE="$1" local -r _FS_MOUNTPOINT="$1"
local -r _ASIC_TYPE="$(GetAsicType)"
if [[ "${_ASIC_TYPE}" = "${UNKN_ASIC}" ]]; then
ExitFailure "failed to detect ASIC type"
fi
if [ ! -z "${_FS_MOUNTPOINT}" ]; then
local -r _FW_FILE="${_FS_MOUNTPOINT}/${FW_FILE_MAP[$_ASIC_TYPE]}"
if [ ! -z "${_FW_FILE}" ]; then
if [ ! -f "${_FW_FILE}" ]; then if [ ! -f "${_FW_FILE}" ]; then
echo "No such file: ${_FW_FILE}" ExitFailure "no such file: ${_FW_FILE}"
exit "${EXIT_ERROR}"
fi fi
RunCmd "${QUERY_CMD} -i ${_FW_FILE}" > "${QUERY_FILE}" RunCmd "${QUERY_CMD} -i ${_FW_FILE} -L ${QUERY_FILE}" &>/dev/null
local -r _FW_INFO="$(grep FW ${QUERY_FILE})" local -r _FW_INFO="$(grep FW ${QUERY_FILE})"
local -r _FW_CURRENT="$(echo ${_FW_INFO} | cut -f2 -d' ')" local -r _FW_CURRENT="$(echo ${_FW_INFO} | cut -f2 -d' ')"
local -r _FW_AVAILABLE="$(echo ${_FW_INFO} | cut -f3 -d' ')" local -r _FW_AVAILABLE="$(echo ${_FW_INFO} | cut -f3 -d' ')"
else else
RunCmd "${QUERY_CMD}" > "${QUERY_FILE}" local -r _FW_FILE="${FW_FILE_MAP[$_ASIC_TYPE]}"
RunCmd "${QUERY_CMD} -L ${QUERY_FILE}" &>/dev/null
local -r _FW_INFO="$(grep FW ${QUERY_FILE})" local -r _FW_INFO="$(grep FW ${QUERY_FILE})"
local -r _FW_CURRENT="$(echo ${_FW_INFO} | cut -f2 -d' ')" local -r _FW_CURRENT="$(echo ${_FW_INFO} | cut -f2 -d' ')"
local -r _FW_AVAILABLE="${FW_REQUIRED}" local -r _FW_AVAILABLE="${FW_REQUIRED_MAP[$_ASIC_TYPE]}"
_FW_FILE="${FW_FILE}"
fi fi
if [[ -z "${_FW_CURRENT}" ]]; then if [[ -z "${_FW_CURRENT}" ]]; then
echo "Could not retreive current FW version" ExitFailure "could not retreive current FW version"
exit "${EXIT_ERROR}"
fi fi
if [[ -z "${_FW_AVAILABLE}" ]]; then if [[ -z "${_FW_AVAILABLE}" ]]; then
echo "Could not retreive available FW version" ExitFailure "could not retreive available FW version"
exit "${EXIT_ERROR}"
fi fi
if [[ "${_FW_CURRENT}" == "${_FW_AVAILABLE}" ]]; then if [[ "${_FW_CURRENT}" == "${_FW_AVAILABLE}" ]]; then
echo "Mellanox firmware is up to date" ExitSuccess "firmware is up to date"
else else
echo "Mellanox firmware upgrade is required. Installing compatible version..." LogNotice "firmware upgrade is required. Installing compatible version..."
RunCmd "${BURN_CMD} -i ${_FW_FILE}" RunCmd "${BURN_CMD} -i ${_FW_FILE}"
fi fi
} }
@ -118,12 +217,12 @@ function UpgradeFWFromImage() {
local -r _FS_MOUNTPOINT="/tmp/image-${_NEXT_SONIC_IMAGE#SONiC-OS-}-fs" local -r _FS_MOUNTPOINT="/tmp/image-${_NEXT_SONIC_IMAGE#SONiC-OS-}-fs"
if [[ "${_CURRENT_SONIC_IMAGE}" == "${_NEXT_SONIC_IMAGE}" ]]; then if [[ "${_CURRENT_SONIC_IMAGE}" == "${_NEXT_SONIC_IMAGE}" ]]; then
echo "Mellanox firmware is up to date" ExitSuccess "firmware is up to date"
else else
mkdir -p "${_FS_MOUNTPOINT}" mkdir -p "${_FS_MOUNTPOINT}"
mount -t squashfs "${_FS_PATH}" "${_FS_MOUNTPOINT}" mount -t squashfs "${_FS_PATH}" "${_FS_MOUNTPOINT}"
UpgradeFW "${_FS_MOUNTPOINT}/etc/mlnx/fw-SPC.mfa" UpgradeFW "${_FS_MOUNTPOINT}"
umount -rf "${_FS_MOUNTPOINT}" umount -rf "${_FS_MOUNTPOINT}"
rm -rf "${_FS_MOUNTPOINT}" rm -rf "${_FS_MOUNTPOINT}"
@ -134,10 +233,10 @@ ParseArguments "$@"
WaitForDevice WaitForDevice
if [ "${IMAGE_UPGRADE}" != "yes" ]; then if [ "${IMAGE_UPGRADE}" != "${YES_PARAM}" ]; then
UpgradeFW UpgradeFW
else else
UpgradeFWFromImage UpgradeFWFromImage
fi fi
exit "${EXIT_SUCCESS}" ExitSuccess "firmware upgrade is completed"

View File

@ -1,7 +1,7 @@
# Mellanox SAI # Mellanox SAI
MLNX_SAI_VERSION = SAIRel1.13.3-master MLNX_SAI_VERSION = SAIRel1.13.4-master
MLNX_SAI_REVISION = 7cc737246fce514372cf8fd447360c5f11e7c8b9 MLNX_SAI_REVISION = 079a5aebf184d707847a4e2aa1cfb502e1def32a
export MLNX_SAI_VERSION MLNX_SAI_REVISION export MLNX_SAI_VERSION MLNX_SAI_REVISION

View File

@ -5,5 +5,5 @@ $(SONIC_ONE_IMAGE)_MACHINE = mellanox
$(SONIC_ONE_IMAGE)_IMAGE_TYPE = onie $(SONIC_ONE_IMAGE)_IMAGE_TYPE = onie
$(SONIC_ONE_IMAGE)_INSTALLS += $(SX_KERNEL) $(KERNEL_MFT) $(MFT_OEM) $(MFT) $(MLNX_HW_MANAGEMENT) $(SONIC_ONE_IMAGE)_INSTALLS += $(SX_KERNEL) $(KERNEL_MFT) $(MFT_OEM) $(MFT) $(MLNX_HW_MANAGEMENT)
$(SONIC_ONE_IMAGE)_DOCKERS += $(SONIC_INSTALL_DOCKER_IMAGES) $(SONIC_ONE_IMAGE)_DOCKERS += $(SONIC_INSTALL_DOCKER_IMAGES)
$(SONIC_ONE_IMAGE)_FILES += $(MLNX_FW_FILE) $(MLNX_FFB_SCRIPT) $(ISSU_VERSION_FILE) $(SONIC_ONE_IMAGE)_FILES += $(MLNX_SPC_FW_FILE) $(MLNX_SPC2_FW_FILE) $(MLNX_FFB_SCRIPT) $(ISSU_VERSION_FILE)
SONIC_INSTALLERS += $(SONIC_ONE_IMAGE) SONIC_INSTALLERS += $(SONIC_ONE_IMAGE)

View File

@ -1,5 +1,6 @@
MLNX_SDK_BASE_URL = https://github.com/Mellanox/SAI-Implementation/raw/e791ebf6e88933da35aa4bf11dda57655322bae5/sdk MLNX_SDK_BASE_URL = https://github.com/Mellanox/SAI-Implementation/raw/079a5aebf184d707847a4e2aa1cfb502e1def32a/sdk
MLNX_SDK_VERSION = 4.3.0134 MLNX_SDK_VERSION = 4.3.0134
MLNX_SDK_RDEBS += $(APPLIBS) $(IPROUTE2_MLNX) $(SX_ACL_RM) $(SX_COMPLIB) \ MLNX_SDK_RDEBS += $(APPLIBS) $(IPROUTE2_MLNX) $(SX_ACL_RM) $(SX_COMPLIB) \
$(SX_EXAMPLES) $(SX_GEN_UTILS) $(SX_SCEW) $(SX_SDN_HAL) \ $(SX_EXAMPLES) $(SX_GEN_UTILS) $(SX_SCEW) $(SX_SDN_HAL) \
$(SXD_LIBS) $(TESTX) $(SXD_LIBS) $(TESTX)