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:
Roy Lee 2018-02-15 11:10:37 +08:00 committed by lguohan
parent f6deaa22f7
commit 5576c11c12
7 changed files with 349 additions and 56 deletions

View File

@ -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

View 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)

View 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

View 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

View File

@ -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) \

View File

@ -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