diff --git a/build_debian.sh b/build_debian.sh
index 767dd7b83b79..80e33621e901 100755
--- a/build_debian.sh
+++ b/build_debian.sh
@@ -226,7 +226,8 @@ sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y in
hping3 \
python-scapy \
tcptraceroute \
- mtr-tiny
+ mtr-tiny \
+ ipmitool
sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y download \
grub-pc-bin
diff --git a/device/celestica/x86_64-cel_silverstone-r0/Silverstone/port_config.ini b/device/celestica/x86_64-cel_silverstone-r0/Silverstone/port_config.ini
new file mode 100644
index 000000000000..b1884a846279
--- /dev/null
+++ b/device/celestica/x86_64-cel_silverstone-r0/Silverstone/port_config.ini
@@ -0,0 +1,35 @@
+# name lanes alias index
+Ethernet0 89,90,91,92,93,94,95,96 QSFPDD1 1
+Ethernet4 81,82,83,84,85,86,87,88 QSFPDD2 2
+Ethernet8 105,106,107,108,109,110,111,112 QSFPDD3 3
+Ethernet12 97,98,99,100,101,102,103,104 QSFPDD4 4
+Ethernet16 137,138,139,140,141,142,143,144 QSFPDD5 5
+Ethernet20 129,130,131,132,133,134,135,136 QSFPDD6 6
+Ethernet24 169,170,171,172,173,174,175,176 QSFPDD7 7
+Ethernet28 161,162,163,164,165,166,167,168 QSFPDD8 8
+Ethernet32 201,202,203,204,205,206,207,208 QSFPDD9 9
+Ethernet36 193,194,195,196,197,198,199,200 QSFPDD10 10
+Ethernet40 233,234,235,236,237,238,239,240 QSFPDD11 11
+Ethernet44 225,226,227,228,229,230,231,232 QSFPDD12 12
+Ethernet48 73,74,75,76,77,78,79,80 QSFPDD13 13
+Ethernet52 65,66,67,68,69,70,71,72 QSFPDD14 14
+Ethernet56 121,122,123,124,125,126,127,128 QSFPDD15 15
+Ethernet60 113,114,115,116,117,118,119,120 QSFPDD16 16
+Ethernet64 9,10,11,12,13,14,15,16 QSFPDD17 17
+Ethernet68 1,2,3,4,5,6,7,8 QSFPDD18 18
+Ethernet72 57,58,59,60,61,62,63,64 QSFPDD19 19
+Ethernet76 49,50,51,52,53,54,55,56 QSFPDD20 20
+Ethernet80 153,154,155,156,157,158,159,160 QSFPDD21 21
+Ethernet84 145,146,147,148,149,150,151,152 QSFPDD22 22
+Ethernet88 185,186,187,188,189,190,191,192 QSFPDD23 23
+Ethernet92 177,178,179,180,181,182,183,184 QSFPDD24 24
+Ethernet96 217,218,219,220,221,222,223,224 QSFPDD25 25
+Ethernet100 209,210,211,212,213,214,215,216 QSFPDD26 26
+Ethernet104 249,250,251,252,253,254,255,256 QSFPDD27 27
+Ethernet108 241,242,243,244,245,246,247,248 QSFPDD28 28
+Ethernet112 25,26,27,28,29,30,31,32 QSFPDD29 29
+Ethernet116 17,18,19,20,21,22,23,24 QSFPDD30 30
+Ethernet120 41,42,43,44,45,46,47,48 QSFPDD31 31
+Ethernet124 33,34,35,36,37,38,39,40 QSFPDD32 32
+Ethernet125 257 SFP1 33
+Ethernet126 258 SFP2 34
diff --git a/device/celestica/x86_64-cel_silverstone-r0/Silverstone/sai.profile b/device/celestica/x86_64-cel_silverstone-r0/Silverstone/sai.profile
new file mode 100644
index 000000000000..cac058f90701
--- /dev/null
+++ b/device/celestica/x86_64-cel_silverstone-r0/Silverstone/sai.profile
@@ -0,0 +1 @@
+SAI_INIT_CONFIG_FILE=/usr/share/sonic/platform/td3-questone_2-48x25G_8x100G.config.bcm
diff --git a/device/celestica/x86_64-cel_silverstone-r0/installer.conf b/device/celestica/x86_64-cel_silverstone-r0/installer.conf
new file mode 100644
index 000000000000..5e62742c11bf
--- /dev/null
+++ b/device/celestica/x86_64-cel_silverstone-r0/installer.conf
@@ -0,0 +1 @@
+CONSOLE_SPEED=115200
diff --git a/device/celestica/x86_64-cel_silverstone-r0/led_proc_init.soc b/device/celestica/x86_64-cel_silverstone-r0/led_proc_init.soc
new file mode 100644
index 000000000000..b01d62353ff2
--- /dev/null
+++ b/device/celestica/x86_64-cel_silverstone-r0/led_proc_init.soc
@@ -0,0 +1,12 @@
+#Enable all ports
+sleep 6
+port all en=1
+#sleep 6
+#linkscan 250000; port xe,ce linkscan=on
+
+#Load LED
+#m0 load 0 0x0 /usr/share/sonic/platform/linkscan_led_fw.bin
+#m0 load 0 0x3800 /usr/share/sonic/platform/custom_led.bin
+#led auto on; led start
+
+
diff --git a/device/celestica/x86_64-cel_silverstone-r0/minigraph.xml b/device/celestica/x86_64-cel_silverstone-r0/minigraph.xml
new file mode 100644
index 000000000000..b1ef13437062
--- /dev/null
+++ b/device/celestica/x86_64-cel_silverstone-r0/minigraph.xml
@@ -0,0 +1,974 @@
+
+
+
+
+
+ ARISTA01T0
+ 10.0.0.33
+ sonic
+ 10.0.0.32
+ 1
+ 180
+ 60
+
+
+ sonic
+ 10.0.0.0
+ ARISTA01T2
+ 10.0.0.1
+ 1
+ 180
+ 60
+
+
+ ARISTA02T0
+ 10.0.0.35
+ sonic
+ 10.0.0.34
+ 1
+ 180
+ 60
+
+
+ sonic
+ 10.0.0.2
+ ARISTA02T2
+ 10.0.0.3
+ 1
+ 180
+ 60
+
+
+ ARISTA03T0
+ 10.0.0.37
+ sonic
+ 10.0.0.36
+ 1
+ 180
+ 60
+
+
+ sonic
+ 10.0.0.4
+ ARISTA03T2
+ 10.0.0.5
+ 1
+ 180
+ 60
+
+
+ ARISTA04T0
+ 10.0.0.39
+ sonic
+ 10.0.0.38
+ 1
+ 180
+ 60
+
+
+ sonic
+ 10.0.0.6
+ ARISTA04T2
+ 10.0.0.7
+ 1
+ 180
+ 60
+
+
+ ARISTA05T0
+ 10.0.0.41
+ sonic
+ 10.0.0.40
+ 1
+ 180
+ 60
+
+
+ sonic
+ 10.0.0.8
+ ARISTA05T2
+ 10.0.0.9
+ 1
+ 180
+ 60
+
+
+ ARISTA06T0
+ 10.0.0.43
+ sonic
+ 10.0.0.42
+ 1
+ 180
+ 60
+
+
+ sonic
+ 10.0.0.10
+ ARISTA06T2
+ 10.0.0.11
+ 1
+ 180
+ 60
+
+
+ ARISTA07T0
+ 10.0.0.45
+ sonic
+ 10.0.0.44
+ 1
+ 180
+ 60
+
+
+ sonic
+ 10.0.0.12
+ ARISTA07T2
+ 10.0.0.13
+ 1
+ 180
+ 60
+
+
+ ARISTA08T0
+ 10.0.0.47
+ sonic
+ 10.0.0.46
+ 1
+ 180
+ 60
+
+
+ sonic
+ 10.0.0.14
+ ARISTA08T2
+ 10.0.0.15
+ 1
+ 180
+ 60
+
+
+ ARISTA09T0
+ 10.0.0.49
+ sonic
+ 10.0.0.48
+ 1
+ 180
+ 60
+
+
+ sonic
+ 10.0.0.16
+ ARISTA09T2
+ 10.0.0.17
+ 1
+ 180
+ 60
+
+
+ ARISTA10T0
+ 10.0.0.51
+ sonic
+ 10.0.0.50
+ 1
+ 180
+ 60
+
+
+ sonic
+ 10.0.0.18
+ ARISTA10T2
+ 10.0.0.19
+ 1
+ 180
+ 60
+
+
+ ARISTA11T0
+ 10.0.0.53
+ sonic
+ 10.0.0.52
+ 1
+ 180
+ 60
+
+
+ sonic
+ 10.0.0.20
+ ARISTA11T2
+ 10.0.0.21
+ 1
+ 180
+ 60
+
+
+ ARISTA12T0
+ 10.0.0.55
+ sonic
+ 10.0.0.54
+ 1
+ 180
+ 60
+
+
+ sonic
+ 10.0.0.22
+ ARISTA12T2
+ 10.0.0.23
+ 1
+ 180
+ 60
+
+
+ ARISTA13T0
+ 10.0.0.57
+ sonic
+ 10.0.0.56
+ 1
+ 180
+ 60
+
+
+ sonic
+ 10.0.0.24
+ ARISTA13T2
+ 10.0.0.25
+ 1
+ 180
+ 60
+
+
+ ARISTA14T0
+ 10.0.0.59
+ sonic
+ 10.0.0.58
+ 1
+ 180
+ 60
+
+
+ sonic
+ 10.0.0.26
+ ARISTA14T2
+ 10.0.0.27
+ 1
+ 180
+ 60
+
+
+ ARISTA15T0
+ 10.0.0.61
+ sonic
+ 10.0.0.60
+ 1
+ 180
+ 60
+
+
+ sonic
+ 10.0.0.28
+ ARISTA15T2
+ 10.0.0.29
+ 1
+ 180
+ 60
+
+
+ ARISTA16T0
+ 10.0.0.63
+ sonic
+ 10.0.0.62
+ 1
+ 180
+ 60
+
+
+ sonic
+ 10.0.0.30
+ ARISTA16T2
+ 10.0.0.31
+ 1
+ 180
+ 60
+
+
+
+
+ 65100
+ sonic
+
+
+ 10.0.0.33
+
+
+
+
+ 10.0.0.1
+
+
+
+
+ 10.0.0.35
+
+
+
+
+ 10.0.0.3
+
+
+
+
+ 10.0.0.37
+
+
+
+
+ 10.0.0.5
+
+
+
+
+ 10.0.0.39
+
+
+
+
+ 10.0.0.7
+
+
+
+
+ 10.0.0.41
+
+
+
+
+ 10.0.0.9
+
+
+
+
+ 10.0.0.43
+
+
+
+
+ 10.0.0.11
+
+
+
+
+ 10.0.0.45
+
+
+
+
+ 10.0.0.13
+
+
+
+
+ 10.0.0.47
+
+
+
+
+ 10.0.0.15
+
+
+
+
+ 10.0.0.49
+
+
+
+
+ 10.0.0.17
+
+
+
+
+ 10.0.0.51
+
+
+
+
+ 10.0.0.19
+
+
+
+
+ 10.0.0.53
+
+
+
+
+ 10.0.0.21
+
+
+
+
+ 10.0.0.55
+
+
+
+
+ 10.0.0.23
+
+
+
+
+ 10.0.0.57
+
+
+
+
+ 10.0.0.25
+
+
+
+
+ 10.0.0.59
+
+
+
+
+ 10.0.0.27
+
+
+
+
+ 10.0.0.61
+
+
+
+
+ 10.0.0.29
+
+
+
+
+ 10.0.0.63
+
+
+
+
+ 10.0.0.31
+
+
+
+
+
+
+
+ 64001
+ ARISTA01T0
+
+
+
+ 65200
+ ARISTA01T2
+
+
+
+ 64002
+ ARISTA02T0
+
+
+
+ 65200
+ ARISTA02T2
+
+
+
+ 64003
+ ARISTA03T0
+
+
+
+ 65200
+ ARISTA03T2
+
+
+
+ 64004
+ ARISTA04T0
+
+
+
+ 65200
+ ARISTA04T2
+
+
+
+ 64005
+ ARISTA05T0
+
+
+
+ 65200
+ ARISTA05T2
+
+
+
+ 64006
+ ARISTA06T0
+
+
+
+ 65200
+ ARISTA06T2
+
+
+
+ 64007
+ ARISTA07T0
+
+
+
+ 65200
+ ARISTA07T2
+
+
+
+ 64008
+ ARISTA08T0
+
+
+
+ 65200
+ ARISTA08T2
+
+
+
+ 64009
+ ARISTA09T0
+
+
+
+ 65200
+ ARISTA09T2
+
+
+
+ 64010
+ ARISTA10T0
+
+
+
+ 65200
+ ARISTA10T2
+
+
+
+ 64011
+ ARISTA11T0
+
+
+
+ 65200
+ ARISTA11T2
+
+
+
+ 64012
+ ARISTA12T0
+
+
+
+ 65200
+ ARISTA12T2
+
+
+
+ 64013
+ ARISTA13T0
+
+
+
+ 65200
+ ARISTA13T2
+
+
+
+ 64014
+ ARISTA14T0
+
+
+
+ 65200
+ ARISTA14T2
+
+
+
+ 64015
+ ARISTA15T0
+
+
+
+ 65200
+ ARISTA15T2
+
+
+
+ 64016
+ ARISTA16T0
+
+
+
+ 65200
+ ARISTA16T2
+
+
+
+
+
+
+
+
+
+ HostIP
+ Loopback0
+
+ 10.1.0.32/32
+
+ 10.1.0.32/32
+
+
+
+
+
+
+
+ sonic
+
+
+
+
+
+ SFP1
+ 10.0.0.0/31
+
+
+
+ SFP2
+ 10.0.0.2/31
+
+
+
+ SFP3
+ 10.0.0.4/31
+
+
+
+ SFP4
+ 10.0.0.6/31
+
+
+
+ SFP5
+ 10.0.0.8/31
+
+
+
+ SFP6
+ 10.0.0.10/31
+
+
+
+ SFP7
+ 10.0.0.12/31
+
+
+
+ SFP8
+ 10.0.0.14/31
+
+
+
+ SFP9
+ 10.0.0.16/31
+
+
+
+ SFP10
+ 10.0.0.18/31
+
+
+
+ SFP11
+ 10.0.0.20/31
+
+
+
+ SFP12
+ 10.0.0.22/31
+
+
+
+ SFP13
+ 10.0.0.24/31
+
+
+
+ SFP14
+ 10.0.0.26/31
+
+
+
+ SFP15
+ 10.0.0.28/31
+
+
+
+ SFP16
+ 10.0.0.30/31
+
+
+
+ SFP17
+ 10.0.0.32/31
+
+
+
+ SFP18
+ 10.0.0.34/31
+
+
+
+ SFP19
+ 10.0.0.36/31
+
+
+
+ SFP20
+ 10.0.0.38/31
+
+
+
+ SFP21
+ 10.0.0.40/31
+
+
+
+ SFP22
+ 10.0.0.42/31
+
+
+
+ SFP23
+ 10.0.0.44/31
+
+
+
+ SFP24
+ 10.0.0.46/31
+
+
+
+ SFP25
+ 10.0.0.48/31
+
+
+
+ SFP26
+ 10.0.0.50/31
+
+
+
+ SFP27
+ 10.0.0.52/31
+
+
+
+ SFP28
+ 10.0.0.54/31
+
+
+
+ SFP29
+ 10.0.0.56/31
+
+
+
+ SFP30
+ 10.0.0.58/31
+
+
+
+ SFP31
+ 10.0.0.60/31
+
+
+
+ SFP32
+ 10.0.0.62/31
+
+
+
+ SFP33
+ 10.0.0.64/31
+
+
+
+ SFP34
+ 10.0.0.66/31
+
+
+
+ SFP35
+ 10.0.0.68/31
+
+
+
+ SFP36
+ 10.0.0.70/31
+
+
+
+ SFP37
+ 10.0.0.72/31
+
+
+
+ SFP38
+ 10.0.0.74/31
+
+
+
+ SFP39
+ 10.0.0.76/31
+
+
+
+ SFP40
+ 10.0.0.78/31
+
+
+
+ SFP41
+ 10.0.0.80/31
+
+
+
+ SFP42
+ 10.0.0.82/31
+
+
+
+ SFP43
+ 10.0.0.84/31
+
+
+
+ SFP44
+ 10.0.0.86/31
+
+
+
+ SFP45
+ 10.0.0.88/31
+
+
+
+ SFP46
+ 10.0.0.90/31
+
+
+
+ SFP47
+ 10.0.0.92/31
+
+
+
+ SFP48
+ 10.0.0.94/31
+
+
+
+ QSFP1
+ 10.0.0.96/31
+
+
+
+ QSFP2
+ 10.0.0.98/31
+
+
+
+ QSFP3
+ 10.0.0.100/31
+
+
+
+ QSFP4
+ 10.0.0.102/31
+
+
+
+ QSFP5
+ 10.0.0.104/31
+
+
+
+ QSFP6
+ 10.0.0.106/31
+
+
+
+ QSFP7
+ 10.0.0.108/31
+
+
+
+ QSFP8
+ 10.0.0.110/31
+
+
+
+
+
+
+
+
+
+
+
+
+ sonic
+ Silverstone
+
+
+
+
+
+
+ sonic
+
+
+ DhcpResources
+
+
+
+
+ NtpResources
+
+ 0.debian.pool.ntp.org;1.debian.pool.ntp.org;2.debian.pool.ntp.org;3.debian.pool.ntp.org
+
+
+ SyslogResources
+
+
+
+
+ ErspanDestinationIpv4
+
+ 2.2.2.2
+
+
+
+
+
+
+ sonic
+ Silverstone
+
diff --git a/device/celestica/x86_64-cel_silverstone-r0/plugins/eeprom.py b/device/celestica/x86_64-cel_silverstone-r0/plugins/eeprom.py
new file mode 100644
index 000000000000..2f7e57acdd67
--- /dev/null
+++ b/device/celestica/x86_64-cel_silverstone-r0/plugins/eeprom.py
@@ -0,0 +1,22 @@
+#!/usr/bin/env python
+
+#############################################################################
+# Celestica DX010
+#
+# Platform and model specific eeprom subclass, inherits from the base class,
+# and provides the followings:
+# - the eeprom format definition
+# - specific encoder/decoder if there is special need
+#############################################################################
+
+try:
+ from sonic_eeprom import eeprom_tlvinfo
+except ImportError, e:
+ raise ImportError(str(e) + "- required module not found")
+
+
+class board(eeprom_tlvinfo.TlvInfoDecoder):
+
+ def __init__(self, name, path, cpld_root, ro):
+ self.eeprom_path = "/sys/class/i2c-adapter/i2c-0/0-0056/eeprom"
+ super(board, self).__init__(self.eeprom_path, 0, '', True)
diff --git a/device/celestica/x86_64-cel_silverstone-r0/plugins/psuutil.py b/device/celestica/x86_64-cel_silverstone-r0/plugins/psuutil.py
new file mode 100644
index 000000000000..5eccaf7fdd26
--- /dev/null
+++ b/device/celestica/x86_64-cel_silverstone-r0/plugins/psuutil.py
@@ -0,0 +1,77 @@
+#!/usr/bin/env python
+
+import os.path
+import subprocess
+import sys
+import re
+
+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)
+
+ def run_command(self, command):
+ proc = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE)
+ (out, err) = proc.communicate()
+
+ if proc.returncode != 0:
+ sys.exit(proc.returncode)
+
+ return out
+
+ def find_value(self, grep_string):
+ return re.findall("[-+]?\d*\.\d+|\d+", grep_string)
+
+ def get_num_psus(self):
+ """
+ Retrieves the number of PSUs available on the device
+ :return: An integer, the number of PSUs available on the device
+ """
+ return 2
+
+ def get_psu_status(self, index):
+ """
+ Retrieves the oprational status of power supply unit (PSU) defined
+ by 1-based index
+ :param index: An integer, 1-based index of the PSU of which to query status
+ :return: Boolean, True if PSU is operating properly, False if PSU is faulty
+ """
+ if index is None:
+ return False
+
+ ''' L index = 1 , R index = 2
+ Power status is active hight
+ '''
+ res = self.run_command('ipmitool raw 0x3a 0x0c 0x00 0x02 0x60')
+ status = int(res,16) & 0x3
+ if index == 1:
+ return (status >> 1) & 1
+ else:
+ return status & 1
+
+ def get_psu_presence(self, index):
+ """
+ Retrieves the presence status of power supply unit (PSU) defined
+ by 1-based index
+ :param index: An integer, 1-based index of the PSU of which to query status
+ :return: Boolean, True if PSU is plugged, False if not
+ """
+ if index is None:
+ return False
+
+ ''' L index = 1 , R index = 2
+ Presence status is active Low
+ '''
+ res = self.run_command('ipmitool raw 0x3a 0x0c 0x00 0x02 0x60')
+ status = int(res,16) & 0xc
+ if index == 1:
+ return not((status >> 3) & 1)
+ else:
+ return not((status >> 2) & 1)
diff --git a/device/celestica/x86_64-cel_silverstone-r0/plugins/sfputil.py b/device/celestica/x86_64-cel_silverstone-r0/plugins/sfputil.py
new file mode 100644
index 000000000000..abd7fa4409b1
--- /dev/null
+++ b/device/celestica/x86_64-cel_silverstone-r0/plugins/sfputil.py
@@ -0,0 +1,164 @@
+#!/usr/bin/env python
+#
+# 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 = 1
+ PORT_END = 34
+ QSFP_PORT_START = 1
+ QSFP_PORT_END = 32
+
+ EEPROM_OFFSET = 10
+
+ BASE_SFF_PATH = "/sys/devices/platform/AS58128.switchboard/SFF/"
+
+ _port_name = ""
+ _port_to_eeprom_mapping = {}
+
+ @property
+ def port_start(self):
+ return self.PORT_START
+
+ @property
+ def port_end(self):
+ return self.PORT_END
+
+ @property
+ def qsfp_ports(self):
+ return range(self.QSFP_PORT_START, self.QSFP_PORT_END + 1)
+
+ @property
+ def port_to_eeprom_mapping(self):
+ return self._port_to_eeprom_mapping
+
+ def get_port_name(self, port_num):
+ if port_num <= self.QSFP_PORT_END:
+ self._port_name = "QSFP" + str(port_num)
+ else:
+ self._port_name = "SFP" + str(port_num - self.QSFP_PORT_END)
+ return self._port_name
+
+ def __init__(self):
+ # Override port_to_eeprom_mapping for class initialization
+ eeprom_path = '/sys/bus/i2c/devices/i2c-{0}/{0}-0050/eeprom'
+
+ for x in range(self.PORT_START, self.PORT_END + 1):
+ self.port_to_eeprom_mapping[x] = eeprom_path.format(
+ x + self.EEPROM_OFFSET - 1)
+ 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
+
+ sysfs_filename = "sfp_modabs"
+ port_name = self.get_port_name(port_num)
+ if port_num in self.qsfp_ports:
+ sysfs_filename = "qsfp_modprs"
+ try:
+
+ reg_file = open(self.BASE_SFF_PATH +
+ port_name + "/" + sysfs_filename)
+
+ except IOError as e:
+ print "Error: unable to open file: %s" % str(e)
+ return False
+
+ # Read status
+ content = reg_file.readline().rstrip()
+ reg_value = int(content)
+
+ # ModPrsL is active low
+ if reg_value == 0:
+ return True
+
+ return False
+
+ def get_low_power_mode(self, port_num):
+ # Check for invalid QSFP port_num
+ if port_num < self.port_start or port_num > self.port_end or port_num > self.QSFP_PORT_END:
+ return False
+
+ try:
+ port_name = self.get_port_name(port_num)
+ reg_file = open(self.BASE_SFF_PATH + port_name + "/qsfp_lpmode")
+ except IOError as e:
+ print "Error: unable to open file: %s" % str(e)
+ return False
+
+ # Read status
+ content = reg_file.readline().rstrip()
+ reg_value = int(content, 16)
+ # ModPrsL is active low
+ if reg_value == 0:
+ return False
+
+ return True
+
+ def set_low_power_mode(self, port_num, lpmode):
+ # Check for invalid QSFP port_num
+ if port_num < self.port_start or port_num > self.port_end or port_num > self.QSFP_PORT_END:
+ return False
+
+ try:
+ port_name = self.get_port_name(port_num)
+ reg_file = open(self.BASE_SFF_PATH +
+ port_name + "/qsfp_lpmode", "r+")
+ except IOError as e:
+ print "Error: unable to open file: %s" % str(e)
+ return False
+
+ content = hex(lpmode)
+
+ reg_file.seek(0)
+ reg_file.write(content)
+ reg_file.close()
+
+ return True
+
+ def reset(self, port_num):
+ # Check for invalid QSFP port_num
+ if port_num < self.port_start or port_num > self.port_end or port_num > self.QSFP_PORT_END:
+ return False
+
+ try:
+ port_name = self.get_port_name(port_num)
+ reg_file = open(self.BASE_SFF_PATH +
+ port_name + "/qsfp_reset", "w")
+ except IOError as e:
+ print "Error: unable to open file: %s" % str(e)
+ return False
+
+ # Convert our register value back to a hex string and write back
+ reg_file.seek(0)
+ reg_file.write(hex(0))
+ reg_file.close()
+
+ # Sleep 1 second to allow it to settle
+ time.sleep(1)
+
+ # Flip the bit back high and write back to the register to take port
+ # out of reset
+ try:
+ reg_file = open(self.BASE_SFF_PATH +
+ port_name + "/qsfp_reset", "w")
+ except IOError as e:
+ print "Error: unable to open file: %s" % str(e)
+ return False
+
+ reg_file.seek(0)
+ reg_file.write(hex(1))
+ reg_file.close()
+
+ return True
diff --git a/platform/broadcom/one-image.mk b/platform/broadcom/one-image.mk
index 001d7486101e..8675fedaa455 100755
--- a/platform/broadcom/one-image.mk
+++ b/platform/broadcom/one-image.mk
@@ -22,6 +22,7 @@ $(SONIC_ONE_IMAGE)_LAZY_INSTALLS += $(DELL_S6000_PLATFORM_MODULE) \
$(INVENTEC_D7032Q28B_PLATFORM_MODULE) \
$(INVENTEC_D7054Q28B_PLATFORM_MODULE) \
$(CEL_DX010_PLATFORM_MODULE) \
+ $(CEL_SILVERSTONE_PLATFORM_MODULE) \
$(DELTA_AG9032V1_PLATFORM_MODULE) \
$(DELTA_AG9064_PLATFORM_MODULE) \
$(DELTA_AG5648_PLATFORM_MODULE) \
diff --git a/platform/broadcom/platform-modules-cel.mk b/platform/broadcom/platform-modules-cel.mk
index 96cb59144fa5..39bd7e38cf52 100644
--- a/platform/broadcom/platform-modules-cel.mk
+++ b/platform/broadcom/platform-modules-cel.mk
@@ -1,11 +1,17 @@
-# Celestica DX010 Platform modules
+# Celestica Platform modules
-CEL_DX010_PLATFORM_MODULE_VERSION = 0.8
+CEL_DX010_PLATFORM_MODULE_VERSION = 1.0
+CEL_SILVERSTONE_PLATFORM_MODULE_VERSION = 1.0
export CEL_DX010_PLATFORM_MODULE_VERSION
+export CEL_SILVERSTONE_PLATFORM_MODULE_VERSION
CEL_DX010_PLATFORM_MODULE = platform-modules-dx010_$(CEL_DX010_PLATFORM_MODULE_VERSION)_amd64.deb
$(CEL_DX010_PLATFORM_MODULE)_SRC_PATH = $(PLATFORM_PATH)/sonic-platform-modules-cel
$(CEL_DX010_PLATFORM_MODULE)_DEPENDS += $(LINUX_HEADERS) $(LINUX_HEADERS_COMMON)
$(CEL_DX010_PLATFORM_MODULE)_PLATFORM = x86_64-cel_seastone-r0
SONIC_DPKG_DEBS += $(CEL_DX010_PLATFORM_MODULE)
+
+CEL_SILVERSTONE_PLATFORM_MODULE = platform-modules-silverstone_$(CEL_SILVERSTONE_PLATFORM_MODULE_VERSION)_amd64.deb
+$(CEL_SILVERSTONE_PLATFORM_MODULE)_PLATFORM = x86_64-cel_silverstone-r0
+$(eval $(call add_extra_package,$(CEL_DX010_PLATFORM_MODULE),$(CEL_SILVERSTONE_PLATFORM_MODULE)))
diff --git a/platform/broadcom/sonic-platform-modules-cel b/platform/broadcom/sonic-platform-modules-cel
index 5ec0c5e5d4fe..feb1bdd6c683 160000
--- a/platform/broadcom/sonic-platform-modules-cel
+++ b/platform/broadcom/sonic-platform-modules-cel
@@ -1 +1 @@
-Subproject commit 5ec0c5e5d4fe8f2ec1ab5a6abefa7d168a81ca98
+Subproject commit feb1bdd6c6838dfdf67b52f69a2e675b4e6e81f6