[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:
parent
a9d2bf37e1
commit
d53df059d4
@ -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):
|
||||||
|
@ -0,0 +1 @@
|
|||||||
|
../../x86_64-mlnx_msn2700-r0/ACS-MSN2700/buffers.json.j2
|
@ -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 %}
|
@ -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 %}
|
@ -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
|
@ -0,0 +1 @@
|
|||||||
|
../../x86_64-mlnx_msn2700-r0/ACS-MSN2700/port_config.ini
|
1
device/mellanox/x86_64-mlnx_msn3700-r0/ACS-MSN3700/qos.json.j2
Symbolic link
1
device/mellanox/x86_64-mlnx_msn3700-r0/ACS-MSN3700/qos.json.j2
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../x86_64-mlnx_msn2700-r0/ACS-MSN2700/qos.json.j2
|
@ -0,0 +1 @@
|
|||||||
|
SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/sai_3700.xml
|
243
device/mellanox/x86_64-mlnx_msn3700-r0/ACS-MSN3700/sai_3700.xml
Normal file
243
device/mellanox/x86_64-mlnx_msn3700-r0/ACS-MSN3700/sai_3700.xml
Normal 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>
|
1
device/mellanox/x86_64-mlnx_msn3700-r0/default_sku
Normal file
1
device/mellanox/x86_64-mlnx_msn3700-r0/default_sku
Normal file
@ -0,0 +1 @@
|
|||||||
|
ACS-MSN3700 t1
|
1
device/mellanox/x86_64-mlnx_msn3700-r0/platform_reboot
Symbolic link
1
device/mellanox/x86_64-mlnx_msn3700-r0/platform_reboot
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../x86_64-mlnx_msn2700-r0/platform_reboot
|
1
device/mellanox/x86_64-mlnx_msn3700-r0/plugins/eeprom.py
Symbolic link
1
device/mellanox/x86_64-mlnx_msn3700-r0/plugins/eeprom.py
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../x86_64-mlnx_msn2700-r0/plugins/eeprom.py
|
1
device/mellanox/x86_64-mlnx_msn3700-r0/plugins/psuutil.py
Symbolic link
1
device/mellanox/x86_64-mlnx_msn3700-r0/plugins/psuutil.py
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../x86_64-mlnx_msn2700-r0/plugins/psuutil.py
|
1
device/mellanox/x86_64-mlnx_msn3700-r0/plugins/sfplpmget.py
Symbolic link
1
device/mellanox/x86_64-mlnx_msn3700-r0/plugins/sfplpmget.py
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../x86_64-mlnx_msn2700-r0/plugins/sfplpmget.py
|
1
device/mellanox/x86_64-mlnx_msn3700-r0/plugins/sfplpmset.py
Symbolic link
1
device/mellanox/x86_64-mlnx_msn3700-r0/plugins/sfplpmset.py
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../x86_64-mlnx_msn2700-r0/plugins/sfplpmset.py
|
1
device/mellanox/x86_64-mlnx_msn3700-r0/plugins/sfpreset.py
Symbolic link
1
device/mellanox/x86_64-mlnx_msn3700-r0/plugins/sfpreset.py
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../x86_64-mlnx_msn2700-r0/plugins/sfpreset.py
|
1
device/mellanox/x86_64-mlnx_msn3700-r0/plugins/sfputil.py
Symbolic link
1
device/mellanox/x86_64-mlnx_msn3700-r0/plugins/sfputil.py
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../x86_64-mlnx_msn2700-r0/plugins/sfputil.py
|
89
device/mellanox/x86_64-mlnx_msn3700-r0/sensors.conf
Normal file
89
device/mellanox/x86_64-mlnx_msn3700-r0/sensors.conf
Normal 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
|
@ -0,0 +1 @@
|
|||||||
|
../../x86_64-mlnx_msn2700-r0/ACS-MSN2700/buffers.json.j2
|
@ -0,0 +1 @@
|
|||||||
|
../../x86_64-mlnx_msn3700-r0/ACS-MSN3700/buffers_defaults_t0.j2
|
@ -0,0 +1 @@
|
|||||||
|
../../x86_64-mlnx_msn3700-r0/ACS-MSN3700/buffers_defaults_t1.j2
|
@ -0,0 +1 @@
|
|||||||
|
../../x86_64-mlnx_msn3700-r0/ACS-MSN3700/pg_profile_lookup.ini
|
@ -0,0 +1 @@
|
|||||||
|
../../x86_64-mlnx_msn2700-r0/ACS-MSN2700/port_config.ini
|
1
device/mellanox/x86_64-mlnx_msn3700c-r0/ACS-MSN3700C/qos.json.j2
Symbolic link
1
device/mellanox/x86_64-mlnx_msn3700c-r0/ACS-MSN3700C/qos.json.j2
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../x86_64-mlnx_msn2700-r0/ACS-MSN2700/qos.json.j2
|
@ -0,0 +1 @@
|
|||||||
|
SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/sai_3700c.xml
|
@ -0,0 +1 @@
|
|||||||
|
../../x86_64-mlnx_msn3700-r0/ACS-MSN3700/sai_3700.xml
|
1
device/mellanox/x86_64-mlnx_msn3700c-r0/default_sku
Normal file
1
device/mellanox/x86_64-mlnx_msn3700c-r0/default_sku
Normal file
@ -0,0 +1 @@
|
|||||||
|
ACS-MSN3700C t1
|
1
device/mellanox/x86_64-mlnx_msn3700c-r0/platform_reboot
Symbolic link
1
device/mellanox/x86_64-mlnx_msn3700c-r0/platform_reboot
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../x86_64-mlnx_msn2700-r0/platform_reboot
|
1
device/mellanox/x86_64-mlnx_msn3700c-r0/plugins/eeprom.py
Symbolic link
1
device/mellanox/x86_64-mlnx_msn3700c-r0/plugins/eeprom.py
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../x86_64-mlnx_msn2700-r0/plugins/eeprom.py
|
1
device/mellanox/x86_64-mlnx_msn3700c-r0/plugins/psuutil.py
Symbolic link
1
device/mellanox/x86_64-mlnx_msn3700c-r0/plugins/psuutil.py
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../x86_64-mlnx_msn2700-r0/plugins/psuutil.py
|
1
device/mellanox/x86_64-mlnx_msn3700c-r0/plugins/sfplpmget.py
Symbolic link
1
device/mellanox/x86_64-mlnx_msn3700c-r0/plugins/sfplpmget.py
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../x86_64-mlnx_msn2700-r0/plugins/sfplpmget.py
|
1
device/mellanox/x86_64-mlnx_msn3700c-r0/plugins/sfplpmset.py
Symbolic link
1
device/mellanox/x86_64-mlnx_msn3700c-r0/plugins/sfplpmset.py
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../x86_64-mlnx_msn2700-r0/plugins/sfplpmset.py
|
1
device/mellanox/x86_64-mlnx_msn3700c-r0/plugins/sfpreset.py
Symbolic link
1
device/mellanox/x86_64-mlnx_msn3700c-r0/plugins/sfpreset.py
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../x86_64-mlnx_msn2700-r0/plugins/sfpreset.py
|
1
device/mellanox/x86_64-mlnx_msn3700c-r0/plugins/sfputil.py
Symbolic link
1
device/mellanox/x86_64-mlnx_msn3700c-r0/plugins/sfputil.py
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../x86_64-mlnx_msn2700-r0/plugins/sfputil.py
|
89
device/mellanox/x86_64-mlnx_msn3700c-r0/sensors.conf
Normal file
89
device/mellanox/x86_64-mlnx_msn3700c-r0/sensors.conf
Normal 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
|
@ -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
|
||||||
|
@ -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
|
@ -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
|
||||||
|
|
||||||
|
@ -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"
|
||||||
|
|
||||||
if [ ! -z "${_FW_FILE}" ]; then
|
local -r _ASIC_TYPE="$(GetAsicType)"
|
||||||
if [ ! -f "${_FW_FILE}" ]; then
|
if [[ "${_ASIC_TYPE}" = "${UNKN_ASIC}" ]]; then
|
||||||
echo "No such file: ${_FW_FILE}"
|
ExitFailure "failed to detect ASIC type"
|
||||||
exit "${EXIT_ERROR}"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
RunCmd "${QUERY_CMD} -i ${_FW_FILE}" > "${QUERY_FILE}"
|
if [ ! -z "${_FS_MOUNTPOINT}" ]; then
|
||||||
|
local -r _FW_FILE="${_FS_MOUNTPOINT}/${FW_FILE_MAP[$_ASIC_TYPE]}"
|
||||||
|
|
||||||
|
if [ ! -f "${_FW_FILE}" ]; then
|
||||||
|
ExitFailure "no such file: ${_FW_FILE}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
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"
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user