New model as7312 54x (#1339)
* Update sonic-platform-modules-accton to lastest Signed-off-by: roylee123 <roy_lee@accton.com> * Install sonic-platform-common package in platform-monitor docker for ledd (#1330) * Install sonic-platform-common package in platform-monitor docker for ledd * Specify Python wheel dependencies in docker-platform-monitor.mk; Remove explicit specifications from Dockerfile.j2 * [7312_54x] Add plug-in files. Signed-off-by: roylee123 <roy_lee@accton.com> * [as7312-54x] Update i2c related drivers after tested on R0B model. Signed-off-by: roylee123 <roy_lee@accton.com> * Add as7312-54x driver package. Signed-off-by: roylee123 <roy_lee@accton.com> * [as7312-54x] Add index to port_config.ini for mmaping port with single lane. Validate sfputil.py and mark unsupported for lp mode. Signed-off-by: roylee123 <roy_lee@accton.com> * [as7312-54x] Change for R01 HW board. Signed-off-by: roylee123 <roy_lee@accton.com> * [as7312-54x] recovered for the lint corrected not suitable for python. Signed-off-by: roylee123 <roy_lee@accton.com> * Remove debug printing. Signed-off-by: roylee123 <roy_lee@accton.com> * [platform] as7312-32x, update for util.py recovered. Signed-off-by: roylee123 <roy_lee@accton.com> * [platform] Accton: merged the commit by Polly Hsu. Change platform modules to depend on 3.16.0-5-amdn64 kernel. Signed-off-by: roylee123 <roy_lee@accton.com> * [Device] As7312-54x, update for correct I2C addresses for sfp and psu. Signed-off-by: roy_lee <roy_lee@accton.com> * [Platform] as7312-54x, pushed submodule to new i2c drivers and script. Signed-off-by: roy_lee <roy_lee@accton.com> * resolved PR New model as7312 54x #1339 merge conflicts on sfputil.py. Signed-off-by: roy_lee <roy_lee@accton.com>
This commit is contained in:
parent
f6deaa22f7
commit
5576c11c12
@ -1,55 +1,55 @@
|
||||
# name lanes alias
|
||||
Ethernet0 41 twentyfiveGigE1
|
||||
Ethernet1 42 twentyfiveGigE2
|
||||
Ethernet2 43 twentyfiveGigE3
|
||||
Ethernet3 44 twentyfiveGigE4
|
||||
Ethernet4 49 twentyfiveGigE5
|
||||
Ethernet5 50 twentyfiveGigE6
|
||||
Ethernet6 51 twentyfiveGigE7
|
||||
Ethernet7 52 twentyfiveGigE8
|
||||
Ethernet8 53 twentyfiveGigE9
|
||||
Ethernet9 54 twentyfiveGigE10
|
||||
Ethernet10 55 twentyfiveGigE11
|
||||
Ethernet11 56 twentyfiveGigE12
|
||||
Ethernet12 65 twentyfiveGigE13
|
||||
Ethernet13 66 twentyfiveGigE14
|
||||
Ethernet14 67 twentyfiveGigE15
|
||||
Ethernet15 68 twentyfiveGigE16
|
||||
Ethernet16 33 twentyfiveGigE17
|
||||
Ethernet17 34 twentyfiveGigE18
|
||||
Ethernet18 35 twentyfiveGigE19
|
||||
Ethernet19 36 twentyfiveGigE20
|
||||
Ethernet20 37 twentyfiveGigE21
|
||||
Ethernet21 38 twentyfiveGigE22
|
||||
Ethernet22 39 twentyfiveGigE23
|
||||
Ethernet23 40 twentyfiveGigE24
|
||||
Ethernet24 69 twentyfiveGigE25
|
||||
Ethernet25 70 twentyfiveGigE26
|
||||
Ethernet26 71 twentyfiveGigE27
|
||||
Ethernet27 72 twentyfiveGigE28
|
||||
Ethernet28 81 twentyfiveGigE29
|
||||
Ethernet29 82 twentyfiveGigE30
|
||||
Ethernet30 83 twentyfiveGigE31
|
||||
Ethernet31 84 twentyfiveGigE32
|
||||
Ethernet32 85 twentyfiveGigE33
|
||||
Ethernet33 86 twentyfiveGigE34
|
||||
Ethernet34 87 twentyfiveGigE35
|
||||
Ethernet35 88 twentyfiveGigE36
|
||||
Ethernet36 97 twentyfiveGigE37
|
||||
Ethernet37 98 twentyfiveGigE38
|
||||
Ethernet38 99 twentyfiveGigE39
|
||||
Ethernet39 100 twentyfiveGigE40
|
||||
Ethernet40 101 twentyfiveGigE41
|
||||
Ethernet41 102 twentyfiveGigE42
|
||||
Ethernet42 103 twentyfiveGigE43
|
||||
Ethernet43 104 twentyfiveGigE44
|
||||
Ethernet44 105 twentyfiveGigE45
|
||||
Ethernet45 106 twentyfiveGigE46
|
||||
Ethernet46 107 twentyfiveGigE47
|
||||
Ethernet47 108 twentyfiveGigE48
|
||||
Ethernet48 5,6,7,8 hundredGigE49
|
||||
Ethernet52 1,2,3,4 hundredGigE50
|
||||
Ethernet56 109,110,111,112 hundredGigE51
|
||||
Ethernet60 21,22,23,24 hundredGigE52
|
||||
Ethernet64 9,10,11,12 hundredGigE53
|
||||
Ethernet68 117,118,119,120 hundredGigE54
|
||||
# name lanes alias index
|
||||
Ethernet0 41 twentyfiveGigE1 0
|
||||
Ethernet1 42 twentyfiveGigE2 1
|
||||
Ethernet2 43 twentyfiveGigE3 2
|
||||
Ethernet3 44 twentyfiveGigE4 3
|
||||
Ethernet4 49 twentyfiveGigE5 4
|
||||
Ethernet5 50 twentyfiveGigE6 5
|
||||
Ethernet6 51 twentyfiveGigE7 6
|
||||
Ethernet7 52 twentyfiveGigE8 7
|
||||
Ethernet8 53 twentyfiveGigE9 8
|
||||
Ethernet9 54 twentyfiveGigE10 9
|
||||
Ethernet10 55 twentyfiveGigE11 10
|
||||
Ethernet11 56 twentyfiveGigE12 11
|
||||
Ethernet12 65 twentyfiveGigE13 12
|
||||
Ethernet13 66 twentyfiveGigE14 13
|
||||
Ethernet14 67 twentyfiveGigE15 14
|
||||
Ethernet15 68 twentyfiveGigE16 15
|
||||
Ethernet16 33 twentyfiveGigE17 16
|
||||
Ethernet17 34 twentyfiveGigE18 17
|
||||
Ethernet18 35 twentyfiveGigE19 18
|
||||
Ethernet19 36 twentyfiveGigE20 19
|
||||
Ethernet20 37 twentyfiveGigE21 20
|
||||
Ethernet21 38 twentyfiveGigE22 21
|
||||
Ethernet22 39 twentyfiveGigE23 22
|
||||
Ethernet23 40 twentyfiveGigE24 23
|
||||
Ethernet24 69 twentyfiveGigE25 24
|
||||
Ethernet25 70 twentyfiveGigE26 25
|
||||
Ethernet26 71 twentyfiveGigE27 26
|
||||
Ethernet27 72 twentyfiveGigE28 27
|
||||
Ethernet28 81 twentyfiveGigE29 28
|
||||
Ethernet29 82 twentyfiveGigE30 29
|
||||
Ethernet30 83 twentyfiveGigE31 30
|
||||
Ethernet31 84 twentyfiveGigE32 31
|
||||
Ethernet32 85 twentyfiveGigE33 32
|
||||
Ethernet33 86 twentyfiveGigE34 33
|
||||
Ethernet34 87 twentyfiveGigE35 34
|
||||
Ethernet35 88 twentyfiveGigE36 35
|
||||
Ethernet36 97 twentyfiveGigE37 36
|
||||
Ethernet37 98 twentyfiveGigE38 37
|
||||
Ethernet38 99 twentyfiveGigE39 38
|
||||
Ethernet39 100 twentyfiveGigE40 39
|
||||
Ethernet40 101 twentyfiveGigE41 40
|
||||
Ethernet41 102 twentyfiveGigE42 41
|
||||
Ethernet42 103 twentyfiveGigE43 42
|
||||
Ethernet43 104 twentyfiveGigE44 43
|
||||
Ethernet44 105 twentyfiveGigE45 44
|
||||
Ethernet45 106 twentyfiveGigE46 45
|
||||
Ethernet46 107 twentyfiveGigE47 46
|
||||
Ethernet47 108 twentyfiveGigE48 47
|
||||
Ethernet48 5,6,7,8 hundredGigE49 48
|
||||
Ethernet52 1,2,3,4 hundredGigE50 52
|
||||
Ethernet56 109,110,111,112 hundredGigE51 56
|
||||
Ethernet60 21,22,23,24 hundredGigE52 60
|
||||
Ethernet64 9,10,11,12 hundredGigE53 64
|
||||
Ethernet68 117,118,119,120 hundredGigE54 68
|
||||
|
24
device/accton/x86_64-accton_as7312_54x-r0/plugins/eeprom.py
Normal file
24
device/accton/x86_64-accton_as7312_54x-r0/plugins/eeprom.py
Normal file
@ -0,0 +1,24 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
try:
|
||||
import exceptions
|
||||
import binascii
|
||||
import time
|
||||
import optparse
|
||||
import warnings
|
||||
import os
|
||||
import sys
|
||||
from sonic_eeprom import eeprom_base
|
||||
from sonic_eeprom import eeprom_tlvinfo
|
||||
import subprocess
|
||||
except ImportError, e:
|
||||
raise ImportError (str(e) + "- required module not found")
|
||||
|
||||
class board(eeprom_tlvinfo.TlvInfoDecoder):
|
||||
_TLV_INFO_MAX_LEN = 256
|
||||
def __init__(self, name, path, cpld_root, ro):
|
||||
self.eeprom_path = "/sys/bus/i2c/devices/1-0057/eeprom"
|
||||
#Two i2c buses might get flipped order, check them both.
|
||||
if not os.path.exists(self.eeprom_path):
|
||||
self.eeprom_path = "/sys/bus/i2c/devices/0-0057/eeprom"
|
||||
super(board, self).__init__(self.eeprom_path, 0, '', True)
|
61
device/accton/x86_64-accton_as7312_54x-r0/plugins/psuutil.py
Normal file
61
device/accton/x86_64-accton_as7312_54x-r0/plugins/psuutil.py
Normal file
@ -0,0 +1,61 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
#############################################################################
|
||||
# Accton
|
||||
#
|
||||
# Module contains an implementation of SONiC PSU Base API and
|
||||
# provides the PSUs status which are available in the platform
|
||||
#
|
||||
#############################################################################
|
||||
|
||||
import os.path
|
||||
|
||||
try:
|
||||
from sonic_psu.psu_base import PsuBase
|
||||
except ImportError as e:
|
||||
raise ImportError (str(e) + "- required module not found")
|
||||
|
||||
class PsuUtil(PsuBase):
|
||||
"""Platform-specific PSUutil class"""
|
||||
|
||||
def __init__(self):
|
||||
PsuBase.__init__(self)
|
||||
|
||||
self.psu_path = "/sys/bus/i2c/devices/"
|
||||
self.psu_presence = "/psu_present"
|
||||
self.psu_oper_status = "/psu_power_good"
|
||||
self.psu_mapping = {
|
||||
2: "11-0053",
|
||||
1: "10-0050",
|
||||
}
|
||||
|
||||
def get_num_psus(self):
|
||||
return len(self.psu_mapping)
|
||||
|
||||
def get_psu_status(self, index):
|
||||
if index is None:
|
||||
return False
|
||||
|
||||
status = 0
|
||||
node = self.psu_path + self.psu_mapping[index]+self.psu_oper_status
|
||||
try:
|
||||
with open(node, 'r') as power_status:
|
||||
status = int(power_status.read())
|
||||
except IOError:
|
||||
return False
|
||||
|
||||
return status == 1
|
||||
|
||||
def get_psu_presence(self, index):
|
||||
if index is None:
|
||||
return False
|
||||
|
||||
status = 0
|
||||
node = self.psu_path + self.psu_mapping[index] + self.psu_presence
|
||||
try:
|
||||
with open(node, 'r') as presence_status:
|
||||
status = int(presence_status.read())
|
||||
except IOError:
|
||||
return False
|
||||
|
||||
return status == 1
|
202
device/accton/x86_64-accton_as7312_54x-r0/plugins/sfputil.py
Normal file
202
device/accton/x86_64-accton_as7312_54x-r0/plugins/sfputil.py
Normal file
@ -0,0 +1,202 @@
|
||||
# sfputil.py
|
||||
#
|
||||
# Platform-specific SFP transceiver interface for SONiC
|
||||
#
|
||||
|
||||
try:
|
||||
import time
|
||||
from sonic_sfp.sfputilbase import SfpUtilBase
|
||||
except ImportError as e:
|
||||
raise ImportError("%s - required module not found" % str(e))
|
||||
|
||||
|
||||
class SfpUtil(SfpUtilBase):
|
||||
"""Platform-specific SfpUtil class"""
|
||||
|
||||
PORT_START = 0
|
||||
PORT_END = 71
|
||||
PORTS_IN_BLOCK = 72
|
||||
QSFP_PORT_START = 48
|
||||
QSFP_PORT_END = 72
|
||||
|
||||
BASE_VAL_PATH = "/sys/class/i2c-adapter/i2c-{0}/{1}-0050/"
|
||||
|
||||
_port_to_is_present = {}
|
||||
_port_to_lp_mode = {}
|
||||
|
||||
_port_to_eeprom_mapping = {}
|
||||
_cpld_mapping = {
|
||||
0: "4-0060",
|
||||
1: "5-0062",
|
||||
2: "6-0064",
|
||||
}
|
||||
_port_to_i2c_mapping = {
|
||||
0: 18,
|
||||
1: 19,
|
||||
2: 20,
|
||||
3: 21,
|
||||
4: 22,
|
||||
5: 23,
|
||||
6: 24,
|
||||
7: 25,
|
||||
8: 26,
|
||||
9: 27,
|
||||
10: 28,
|
||||
11: 29,
|
||||
12: 30,
|
||||
13: 31,
|
||||
14: 32,
|
||||
15: 33,
|
||||
16: 34,
|
||||
17: 35,
|
||||
18: 36,
|
||||
19: 37,
|
||||
20: 38,
|
||||
21: 39,
|
||||
22: 40,
|
||||
23: 41,
|
||||
24: 42,
|
||||
25: 43,
|
||||
26: 44,
|
||||
27: 45,
|
||||
28: 46,
|
||||
29: 47,
|
||||
30: 48,
|
||||
31: 49,
|
||||
32: 50,
|
||||
33: 51,
|
||||
34: 52,
|
||||
35: 53,
|
||||
36: 54,
|
||||
37: 55,
|
||||
38: 56,
|
||||
39: 57,
|
||||
40: 58,
|
||||
41: 59,
|
||||
42: 60,
|
||||
43: 61,
|
||||
44: 62,
|
||||
45: 63,
|
||||
46: 64,
|
||||
47: 65,
|
||||
48: 66, #QSFP49
|
||||
49: 66,
|
||||
50: 66,
|
||||
51: 66,
|
||||
52: 67, #QSFP50
|
||||
53: 67,
|
||||
54: 67,
|
||||
55: 67,
|
||||
56: 68, #QSFP51
|
||||
57: 68,
|
||||
58: 68,
|
||||
59: 68,
|
||||
60: 69, #QSFP52
|
||||
61: 69,
|
||||
62: 69,
|
||||
63: 69,
|
||||
64: 70, #QSFP53
|
||||
65: 70,
|
||||
66: 70,
|
||||
67: 70,
|
||||
68: 71, #QSFP54
|
||||
69: 71,
|
||||
70: 71,
|
||||
71: 71,
|
||||
}
|
||||
|
||||
@property
|
||||
def port_start(self):
|
||||
return self.PORT_START
|
||||
|
||||
@property
|
||||
def port_end(self):
|
||||
return self.PORT_END
|
||||
|
||||
@property
|
||||
def qsfp_port_start(self):
|
||||
return self.QSFP_PORT_START
|
||||
|
||||
@property
|
||||
def qsfp_port_end(self):
|
||||
return self.QSFP_PORT_END
|
||||
|
||||
@property
|
||||
def qsfp_ports(self):
|
||||
return range(self.QSFP_PORT_START, self.PORTS_IN_BLOCK + 1)
|
||||
|
||||
@property
|
||||
def port_to_eeprom_mapping(self):
|
||||
return self._port_to_eeprom_mapping
|
||||
|
||||
def __init__(self):
|
||||
eeprom_path = '/sys/bus/i2c/devices/{0}-0050/eeprom'
|
||||
for x in range(0, self.port_end+1):
|
||||
self.port_to_eeprom_mapping[x] = eeprom_path.format(
|
||||
self._port_to_i2c_mapping[x])
|
||||
|
||||
SfpUtilBase.__init__(self)
|
||||
|
||||
def get_presence(self, port_num):
|
||||
# Check for invalid port_num
|
||||
if port_num < self.port_start or port_num > self.port_end:
|
||||
return False
|
||||
|
||||
# For cage 0~23 and 48~51 are at cpld2, others are at cpld3.
|
||||
# For port 48~51 are QSFP, here presumed they are all broken-out to 4 lanes.
|
||||
cage_num = port_num
|
||||
cpld_i = 1
|
||||
if (port_num > 23):
|
||||
cpld_i = 2
|
||||
|
||||
if (port_num >= self.QSFP_PORT_START):
|
||||
cpld_i = 1
|
||||
cage_num = (port_num - self.QSFP_PORT_START)/4
|
||||
cage_num = cage_num + self.QSFP_PORT_START
|
||||
if (cage_num >= 52):
|
||||
cpld_i = 2
|
||||
|
||||
cpld_ps = self._cpld_mapping[cpld_i]
|
||||
path = "/sys/bus/i2c/devices/{0}/module_present_{1}"
|
||||
port_ps = path.format(cpld_ps, cage_num+1)
|
||||
|
||||
try:
|
||||
val_file = open(port_ps)
|
||||
except IOError as e:
|
||||
print "Error: unable to open file: %s" % str(e)
|
||||
return False
|
||||
|
||||
content = val_file.readline().rstrip()
|
||||
val_file.close()
|
||||
|
||||
# content is a string, either "0" or "1"
|
||||
if content == "1":
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
def get_low_power_mode(self, port_num):
|
||||
raise NotImplementedError
|
||||
|
||||
def set_low_power_mode(self, port_num, lpmode):
|
||||
raise NotImplementedError
|
||||
|
||||
def reset(self, port_num):
|
||||
if port_num < self.qsfp_port_start or port_num > self.qsfp_port_end:
|
||||
return False
|
||||
|
||||
|
||||
path = "/sys/bus/i2c/devices/5-0062/module_reset_{0}"
|
||||
port_ps = path.format(port_num+1)
|
||||
try:
|
||||
reg_file = open(port_ps, 'w')
|
||||
except IOError as e:
|
||||
print "Error: unable to open file: %s" % str(e)
|
||||
return False
|
||||
|
||||
reg_value = '1'
|
||||
|
||||
reg_file.write(reg_value)
|
||||
reg_file.close()
|
||||
|
||||
return True
|
@ -16,6 +16,7 @@ $(SONIC_ONE_IMAGE)_LAZY_INSTALLS += $(DELL_S6000_PLATFORM_MODULE) \
|
||||
$(ACCTON_AS5712_54X_PLATFORM_MODULE) \
|
||||
$(ACCTON_AS7816_64X_PLATFORM_MODULE) \
|
||||
$(ACCTON_AS7716_32X_PLATFORM_MODULE) \
|
||||
$(ACCTON_AS7312_54X_PLATFORM_MODULE) \
|
||||
$(INVENTEC_D7032Q28B_PLATFORM_MODULE) \
|
||||
$(INVENTEC_D7054Q28B_PLATFORM_MODULE) \
|
||||
$(CEL_DX010_PLATFORM_MODULE) \
|
||||
|
@ -4,11 +4,13 @@ ACCTON_AS7712_32X_PLATFORM_MODULE_VERSION = 1.1
|
||||
ACCTON_AS5712_54X_PLATFORM_MODULE_VERSION = 1.1
|
||||
ACCTON_AS7816_64X_PLATFORM_MODULE_VERSION = 1.1
|
||||
ACCTON_AS7716_32X_PLATFORM_MODULE_VERSION = 1.1
|
||||
ACCTON_AS7312_54X_PLATFORM_MODULE_VERSION = 1.1
|
||||
|
||||
export ACCTON_AS7712_32X_PLATFORM_MODULE_VERSION
|
||||
export ACCTON_AS5712_54X_PLATFORM_MODULE_VERSION
|
||||
export ACCTON_AS7816_64X_PLATFORM_MODULE_VERSION
|
||||
export ACCTON_AS7716_32X_PLATFORM_MODULE_VERSION
|
||||
export ACCTON_AS7312_54X_PLATFORM_MODULE_VERSION
|
||||
|
||||
ACCTON_AS7712_32X_PLATFORM_MODULE = sonic-platform-accton-as7712-32x_$(ACCTON_AS7712_32X_PLATFORM_MODULE_VERSION)_amd64.deb
|
||||
$(ACCTON_AS7712_32X_PLATFORM_MODULE)_SRC_PATH = $(PLATFORM_PATH)/sonic-platform-modules-accton
|
||||
@ -28,3 +30,6 @@ ACCTON_AS7716_32X_PLATFORM_MODULE = sonic-platform-accton-as7716-32x_$(ACCTON_AS
|
||||
$(ACCTON_AS7716_32X_PLATFORM_MODULE)_PLATFORM = x86_64-accton_as7716_32x-r0
|
||||
$(eval $(call add_extra_package,$(ACCTON_AS7712_32X_PLATFORM_MODULE),$(ACCTON_AS7716_32X_PLATFORM_MODULE)))
|
||||
|
||||
ACCTON_AS7312_54X_PLATFORM_MODULE = sonic-platform-accton-as7312-54x_$(ACCTON_AS7312_54X_PLATFORM_MODULE_VERSION)_amd64.deb
|
||||
$(ACCTON_AS7312_54X_PLATFORM_MODULE)_PLATFORM = x86_64-accton_as7312_54x-r0
|
||||
$(eval $(call add_extra_package,$(ACCTON_AS7712_32X_PLATFORM_MODULE),$(ACCTON_AS7312_54X_PLATFORM_MODULE)))
|
||||
|
@ -1 +1 @@
|
||||
Subproject commit bb561272116e1664d4e6f819e452ac3ec5154484
|
||||
Subproject commit 5c48c84b0f3f5ee8b44f02ff3e0c3d1ad2169066
|
Loading…
Reference in New Issue
Block a user