diff --git a/.gitmodules b/.gitmodules
index 7aa9fa333b..0946020d42 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -74,3 +74,6 @@
[submodule "platform/p4/SAI-P4-BM"]
path = platform/p4/SAI-P4-BM
url = https://github.com/Mellanox/SAI-P4-BM.git
+[submodule "platform/barefoot/sonic-platform-modules-ingrasys"]
+ path = platform/barefoot/sonic-platform-modules-ingrasys
+ url = https://github.com/Ingrasys-sonic/sonic-platform-modules-ingrasys-barefoot.git
diff --git a/device/ingrasys/x86_64-ingrasys_s9180_32x-r0/INGRASYS-S9180-32X/port_config.ini b/device/ingrasys/x86_64-ingrasys_s9180_32x-r0/INGRASYS-S9180-32X/port_config.ini
new file mode 100644
index 0000000000..855a020119
--- /dev/null
+++ b/device/ingrasys/x86_64-ingrasys_s9180_32x-r0/INGRASYS-S9180-32X/port_config.ini
@@ -0,0 +1,33 @@
+# name lanes alias speed autoneg fec index
+Ethernet0 0,1,2,3 Ethernet0 100000 0 0 0
+Ethernet4 4,5,6,7 Ethernet4 100000 0 0 1
+Ethernet8 8,9,10,11 Ethernet8 100000 0 0 2
+Ethernet12 12,13,14,15 Ethernet12 100000 0 0 3
+Ethernet16 16,17,18,19 Ethernet16 100000 0 0 4
+Ethernet20 20,21,22,23 Ethernet20 100000 0 0 5
+Ethernet24 24,25,26,27 Ethernet24 100000 0 0 6
+Ethernet28 28,29,30,31 Ethernet28 100000 0 0 7
+Ethernet32 32,33,34,35 Ethernet32 100000 0 0 8
+Ethernet36 36,37,38,39 Ethernet36 100000 0 0 9
+Ethernet40 40,41,42,43 Ethernet40 100000 0 0 10
+Ethernet44 44,45,46,47 Ethernet44 100000 0 0 11
+Ethernet48 48,49,50,51 Ethernet48 100000 0 0 12
+Ethernet52 52,53,54,55 Ethernet52 100000 0 0 13
+Ethernet56 56,57,58,59 Ethernet56 100000 0 0 14
+Ethernet60 60,61,62,63 Ethernet60 100000 0 0 15
+Ethernet64 64,65,66,67 Ethernet64 100000 0 0 16
+Ethernet68 68,69,70,71 Ethernet68 100000 0 0 17
+Ethernet72 72,73,74,75 Ethernet72 100000 0 0 18
+Ethernet76 76,77,78,79 Ethernet76 100000 0 0 19
+Ethernet80 80,81,82,83 Ethernet80 100000 0 0 20
+Ethernet84 84,85,86,87 Ethernet84 100000 0 0 21
+Ethernet88 88,89,90,91 Ethernet88 100000 0 0 22
+Ethernet92 92,93,94,95 Ethernet92 100000 0 0 23
+Ethernet96 96,97,98,99 Ethernet96 100000 0 0 24
+Ethernet100 100,101,102,103 Ethernet100 100000 0 0 25
+Ethernet104 104,105,106,107 Ethernet104 100000 0 0 26
+Ethernet108 108,109,110,111 Ethernet108 100000 0 0 27
+Ethernet112 112,113,114,115 Ethernet112 100000 0 0 28
+Ethernet116 116,117,118,119 Ethernet116 100000 0 0 29
+Ethernet120 120,121,122,123 Ethernet120 100000 0 0 30
+Ethernet124 124,125,126,127 Ethernet124 100000 0 0 31
diff --git a/device/ingrasys/x86_64-ingrasys_s9180_32x-r0/INGRASYS-S9180-32X/switch-sai.conf b/device/ingrasys/x86_64-ingrasys_s9180_32x-r0/INGRASYS-S9180-32X/switch-sai.conf
new file mode 100644
index 0000000000..4f316bb9e5
--- /dev/null
+++ b/device/ingrasys/x86_64-ingrasys_s9180_32x-r0/INGRASYS-S9180-32X/switch-sai.conf
@@ -0,0 +1,33 @@
+{
+ "chip_list": [
+ {
+ "id": "asic-0",
+ "chip_family": "Tofino",
+ "instance": 0,
+ "pcie_sysfs_prefix": "/sys/devices/pci0000:00/0000:00:03.0/0000:05:00.0",
+ "pcie_domain": 0,
+ "pcie_bus": 5,
+ "pcie_fn": 0,
+ "pcie_dev": 0,
+ "pcie_int_mode": 1,
+ "sds_fw_path": "share/tofino_sds_fw/avago/firmware"
+ }
+ ],
+ "instance": 0,
+ "p4_program_list": [
+ {
+ "id": "pgm-0",
+ "instance": 0,
+ "path": "switch",
+ "program-name": "switch",
+ "pd": "lib/tofinopd/switch/libpd.so",
+ "pd-thrift": "lib/tofinopd/switch/libpdthrift.so",
+ "table-config": "share/tofinopd/switch/context.json",
+ "tofino-bin": "share/tofinopd/switch/tofino.bin",
+ "switchapi": "lib/libswitchapi.so",
+ "switchsai": "lib/libswitchsai.so",
+ "agent0": "lib/platform/x86_64-ingrasys_s9180_32x-r0/libpltfm_mgr.so",
+ "switchapi_port_add": false
+ }
+ ]
+}
diff --git a/device/ingrasys/x86_64-ingrasys_s9180_32x-r0/fancontrol b/device/ingrasys/x86_64-ingrasys_s9180_32x-r0/fancontrol
new file mode 100644
index 0000000000..dc303afac0
--- /dev/null
+++ b/device/ingrasys/x86_64-ingrasys_s9180_32x-r0/fancontrol
@@ -0,0 +1,12 @@
+# Configuration file generated by pwmconfig, changes will be lost
+INTERVAL=10
+DEVPATH=hwmon1=devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-56/56-002f
+DEVNAME=hwmon1=w83795adg
+FCTEMPS=hwmon1/device/pwm2=hwmon2/temp2_input hwmon1/device/pwm1=hwmon2/temp2_input
+FCFANS=hwmon1/device/pwm2=hwmon1/device/fan8_input hwmon1/device/pwm2=hwmon1/device/fan7_input hwmon1/device/pwm2=hwmon1/device/fan6_input hwmon1/device/pwm2=hwmon1/device/fan5_input hwmon1/device/pwm1=hwmon1/device/fan4_input hwmon1/device/pwm1=hwmon1/device/fan3_input hwmon1/device/pwm1=hwmon1/device/fan2_input hwmon1/device/pwm1=hwmon1/device/fan1_input
+# TODO: check the temp value with HW after board ready
+MINTEMP=hwmon1/device/pwm2=20 hwmon1/device/pwm1=20
+MAXTEMP=hwmon1/device/pwm2=60 hwmon1/device/pwm1=60
+MINSTART=hwmon1/device/pwm2=75 hwmon1/device/pwm1=75
+MINSTOP=hwmon1/device/pwm2=22 hwmon1/device/pwm1=22
+
diff --git a/device/ingrasys/x86_64-ingrasys_s9180_32x-r0/installer.conf b/device/ingrasys/x86_64-ingrasys_s9180_32x-r0/installer.conf
new file mode 100644
index 0000000000..925a32fc0c
--- /dev/null
+++ b/device/ingrasys/x86_64-ingrasys_s9180_32x-r0/installer.conf
@@ -0,0 +1,3 @@
+CONSOLE_PORT=0x3f8
+CONSOLE_DEV=0
+CONSOLE_SPEED=115200
diff --git a/device/ingrasys/x86_64-ingrasys_s9180_32x-r0/minigraph.xml b/device/ingrasys/x86_64-ingrasys_s9180_32x-r0/minigraph.xml
new file mode 100644
index 0000000000..e2d151e6ec
--- /dev/null
+++ b/device/ingrasys/x86_64-ingrasys_s9180_32x-r0/minigraph.xml
@@ -0,0 +1,151 @@
+
+
+
+
+
+ OCPSCH0104001MS
+ 10.10.1.26
+ OCPSCH01040GGLF
+ 10.10.1.25
+ 1
+ 10
+ 3
+
+
+ OCPSCH0104002MS
+ 10.10.2.26
+ OCPSCH01040GGLF
+ 10.10.2.25
+ 1
+ 10
+ 3
+
+
+
+
+ 64536
+ OCPSCH01040GGLF
+
+
+ 10.10.1.26
+
+
+
+
+ 10.10.2.26
+
+
+
+
+
+
+
+ 64542
+ OCPSCH0104001MS
+
+
+
+ 64543
+ OCPSCH0104002MS
+
+
+
+
+
+
+
+
+
+ HostIP
+ Loopback0
+
+ 100.0.0.9/32
+
+ 100.0.0.9/32
+
+
+
+
+
+
+
+ OCPSCH01040GGLF
+
+
+
+
+
+ Ethernet0
+ 10.10.1.25/30
+
+
+
+ Ethernet4
+ 10.10.2.25/30
+
+
+
+
+
+
+
+
+
+
+
+ 40000
+ DeviceInterfaceLink
+ OCPSCH0104001MS
+ Ethernet24
+ OCPSCH01040GGLF
+ Ethernet0
+
+
+ 40000
+ DeviceInterfaceLink
+ OCPSCH0104002MS
+ Ethernet24
+ OCPSCH01040GGLF
+ Ethernet4
+
+
+
+
+ OCPSCH01040GGLF
+ INGRASYS-S9180-32X
+
+
+
+
+
+
+ OCPSCH01040GGLF
+
+
+ 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
+
+
+
+
+
+
+ OCPSCH01040GGLF
+ INGRASYS-S9180-32X
+
diff --git a/device/ingrasys/x86_64-ingrasys_s9180_32x-r0/plugins/eeprom.py b/device/ingrasys/x86_64-ingrasys_s9180_32x-r0/plugins/eeprom.py
new file mode 100644
index 0000000000..d1270eeffb
--- /dev/null
+++ b/device/ingrasys/x86_64-ingrasys_s9180_32x-r0/plugins/eeprom.py
@@ -0,0 +1,22 @@
+#!/usr/bin/env python
+
+#############################################################################
+# Ingrasys S9180-32X
+#
+# 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-0055/eeprom"
+ super(board, self).__init__(self.eeprom_path, 0, '', True)
diff --git a/device/ingrasys/x86_64-ingrasys_s9180_32x-r0/plugins/psuutil.py b/device/ingrasys/x86_64-ingrasys_s9180_32x-r0/plugins/psuutil.py
new file mode 100644
index 0000000000..8a71938826
--- /dev/null
+++ b/device/ingrasys/x86_64-ingrasys_s9180_32x-r0/plugins/psuutil.py
@@ -0,0 +1,90 @@
+#
+# psuutil.py
+# Platform-specific PSU status interface for SONiC
+#
+
+
+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"""
+
+ SYS_GPIO_DIR = "/sys/class/gpio/"
+
+ def __init__(self):
+ PsuBase.__init__(self)
+
+
+ # Get sysfs attribute
+ def get_attr_value(self, attr_path):
+
+ retval = 'ERR'
+ if (not os.path.isfile(attr_path)):
+ return retval
+
+ try:
+ with open(attr_path, 'r') as fd:
+ retval = fd.read()
+ except Exception as error:
+ logging.error("Unable to open ", attr_path, " file !")
+
+ retval = retval.rstrip('\r\n')
+ return retval
+
+ 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
+ """
+ MAX_PSUS = 2
+ return MAX_PSUS
+
+ def get_psu_status(self, index):
+ """
+ Retrieves the oprational status of power supply unit (PSU) defined
+ by index
+ :param index: An integer, index of the PSU of which to query status
+ :return: Boolean, True if PSU is operating properly, False if PSU is\
+ faulty
+ """
+ status = 0
+ gpio_path = [ 'gpio99/value', 'gpio96/value' ]
+ attr_path = self.SYS_GPIO_DIR + gpio_path[index-1]
+
+ attr_value = self.get_attr_value(attr_path)
+
+ if (attr_value != 'ERR'):
+ attr_value = int(attr_value, 10)
+ # Check for PSU status
+ if (attr_value == 1):
+ status = 1
+
+ return status
+
+ def get_psu_presence(self, index):
+ """
+ Retrieves the presence status of power supply unit (PSU) defined
+ by index
+ :param index: An integer, index of the PSU of which to query status
+ :return: Boolean, True if PSU is plugged, False if not
+ """
+ status = 0
+ gpio_path = [ 'gpio100/value', 'gpio97/value' ]
+ attr_path = self.SYS_GPIO_DIR + gpio_path[index-1]
+
+ attr_value = self.get_attr_value(attr_path)
+
+ if (attr_value != 'ERR'):
+ attr_value = int(attr_value, 10)
+ # Check for PSU status
+ if (attr_value == 1):
+ status = 1
+
+ return status
+
diff --git a/device/ingrasys/x86_64-ingrasys_s9180_32x-r0/plugins/sfputil.py b/device/ingrasys/x86_64-ingrasys_s9180_32x-r0/plugins/sfputil.py
new file mode 100644
index 0000000000..e0f85a9811
--- /dev/null
+++ b/device/ingrasys/x86_64-ingrasys_s9180_32x-r0/plugins/sfputil.py
@@ -0,0 +1,290 @@
+# 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 = 33
+ SFP_PORT_START = 32
+ PORTS_IN_BLOCK = 34
+
+ BASE_DIR_PATH = "/sys/class/gpio/gpio{0}/direction"
+ BASE_VAL_PATH = "/sys/class/gpio/gpio{0}/value"
+
+ _port_to_eeprom_mapping = {}
+ port_to_i2c_mapping = {
+ 0: 10,
+ 1: 9,
+ 2: 12,
+ 3: 11,
+ 4: 14,
+ 5: 13,
+ 6: 16,
+ 7: 15,
+ 8: 18,
+ 9: 17,
+ 10: 20,
+ 11: 19,
+ 12: 22,
+ 13: 21,
+ 14: 24,
+ 15: 23,
+ 16: 26,
+ 17: 25,
+ 18: 28,
+ 19: 27,
+ 20: 30,
+ 21: 29,
+ 22: 32,
+ 23: 31,
+ 24: 34,
+ 25: 33,
+ 26: 36,
+ 27: 35,
+ 28: 38,
+ 29: 37,
+ 30: 40,
+ 31: 39,
+ 32: 45,
+ 33: 46
+ }
+
+ abs_to_gpio_mapping = {
+ 0: 241,
+ 1: 240,
+ 2: 243,
+ 3: 242,
+ 4: 245,
+ 5: 244,
+ 6: 247,
+ 7: 246,
+ 8: 249,
+ 9: 248,
+ 10: 251,
+ 11: 250,
+ 12: 253,
+ 13: 252,
+ 14: 255,
+ 15: 254,
+ 16: 225,
+ 17: 224,
+ 18: 227,
+ 19: 226,
+ 20: 229,
+ 21: 228,
+ 22: 231,
+ 23: 230,
+ 24: 233,
+ 25: 232,
+ 26: 235,
+ 27: 234,
+ 28: 237,
+ 29: 236,
+ 30: 239,
+ 31: 238,
+ 32: 177,
+ 33: 176
+ }
+
+ lpmode_to_gpio_mapping = {
+ 0: 161,
+ 1: 160,
+ 2: 163,
+ 3: 162,
+ 4: 165,
+ 5: 164,
+ 6: 167,
+ 7: 166,
+ 8: 169,
+ 9: 168,
+ 10: 171,
+ 11: 170,
+ 12: 173,
+ 13: 172,
+ 14: 175,
+ 15: 174,
+ 16: 145,
+ 17: 144,
+ 18: 147,
+ 19: 146,
+ 20: 149,
+ 21: 148,
+ 22: 151,
+ 23: 150,
+ 24: 153,
+ 25: 152,
+ 26: 155,
+ 27: 154,
+ 28: 157,
+ 29: 156,
+ 30: 159,
+ 31: 158
+ }
+
+ reset_to_gpio_mapping = {
+ 0: 129,
+ 1: 128,
+ 2: 131,
+ 3: 130,
+ 4: 133,
+ 5: 132,
+ 6: 135,
+ 7: 134,
+ 8: 137,
+ 9: 136,
+ 10: 139,
+ 11: 138,
+ 12: 141,
+ 13: 140,
+ 14: 143,
+ 15: 142,
+ 16: 113,
+ 17: 112,
+ 18: 115,
+ 19: 114,
+ 20: 117,
+ 21: 116,
+ 22: 119,
+ 23: 118,
+ 24: 121,
+ 25: 120,
+ 26: 123,
+ 27: 122,
+ 28: 125,
+ 29: 124,
+ 30: 127,
+ 31: 126
+ }
+
+ @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(0, self.PORTS_IN_BLOCK + 1)
+
+ @property
+ def port_to_eeprom_mapping(self):
+ return self._port_to_eeprom_mapping
+ @property
+ def sfp_port_start(self):
+ return self.SFP_PORT_START
+
+ def __init__(self):
+ # Override port_to_eeprom_mapping for class initialization
+ eeprom_path = "/sys/class/i2c-adapter/i2c-{0}/{0}-0050/eeprom"
+
+ for x in range(self.port_start, self.port_end + 1):
+ port_eeprom_path = eeprom_path.format(self.port_to_i2c_mapping[x])
+ self.port_to_eeprom_mapping[x] = port_eeprom_path
+
+ 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
+
+ try:
+ abs_device_file = self.BASE_VAL_PATH.format(
+ self.abs_to_gpio_mapping[port_num])
+ val_file = open(abs_device_file)
+ 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):
+ # Check for invalid port_num
+ if port_num < self.port_start or port_num > self.sfp_port_start: # TBD
+ return False
+
+ try:
+ lpmode_val_device_file = self.BASE_VAL_PATH.format(
+ self.lpmode_to_gpio_mapping[port_num])
+ val_file = open(lpmode_val_device_file)
+ 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 set_low_power_mode(self, port_num, lpmode):
+ # Check for invalid port_num
+ if port_num < self.port_start or port_num > self.sfp_port_start: # TBD
+ return False
+
+ try:
+ lpmode_val_device_file = self.BASE_VAL_PATH.format(
+ self.lpmode_to_gpio_mapping[port_num])
+ val_file = open(lpmode_val_device_file, "w")
+ except IOError as e:
+ print "Error: unable to open file: %s" % str(e)
+ return False
+
+ val_file.write("1" if lpmode is True else "0")
+ val_file.close()
+
+ return True
+
+ def reset(self, port_num):
+ # Check for invalid port_num
+ if port_num < self.port_start or port_num > self.sfp_port_start: # TBD
+ return False
+
+ try:
+ reset_val_device_file = self.BASE_VAL_PATH.format(
+ self.reset_to_gpio_mapping[port_num])
+ val_file = open(reset_val_device_file, "w")
+ except IOError as e:
+ print "Error: unable to open file: %s" % str(e)
+ return False
+
+ val_file.write("1")
+ val_file.close()
+
+ # Sleep 1 second to allow it to settle
+ time.sleep(1)
+
+ try:
+ reset_val_device_file = self.BASE_VAL_PATH.format(
+ self.reset_to_gpio_mapping[port_num])
+ val_file = open(reset_val_device_file, "w")
+ except IOError as e:
+ print "Error: unable to open file: %s" % str(e)
+ return False
+
+ val_file.write("0")
+ val_file.close()
+
+ return True
diff --git a/device/ingrasys/x86_64-ingrasys_s9180_32x-r0/sensors.conf b/device/ingrasys/x86_64-ingrasys_s9180_32x-r0/sensors.conf
new file mode 100644
index 0000000000..eb5a5b4b69
--- /dev/null
+++ b/device/ingrasys/x86_64-ingrasys_s9180_32x-r0/sensors.conf
@@ -0,0 +1,76 @@
+# libsensors configuration file
+chip "i350bb-*"
+ ignore loc1
+
+chip "jc42-*"
+ label temp1 "DIMM Temp"
+ set temp1_max 50
+ set temp1_crit 85
+
+bus "i2c-0" "I2C I801"
+chip "tmp75-i2c-*-4f"
+ label temp1 "CPU Board Temp"
+ set temp1_max 50
+
+bus "i2c-41" "i2c-7-switch (chan_id 0)"
+chip "tmp75-i2c-*-48"
+ label temp1 "Near PSU1"
+ set temp1_max 50
+chip "tmp75-i2c-*-4a"
+ label temp1 "Rear MAC"
+ set temp1_max 50
+chip "tmp75-i2c-*-4b"
+ label temp1 "Near Port 32"
+ set temp1_max 50
+chip "tmp75-i2c-*-4d"
+ label temp1 "Near PSU2"
+ set temp1_max 50
+chip "lm86-i2c-*-4c"
+ label temp1 "Front MAC"
+ label temp2 "ASIC Core Temp"
+ set temp1_min 20
+ set temp1_max 65
+ set temp1_crit 70
+ set temp2_min 20
+ set temp2_max 70
+ set temp2_crit 80
+
+bus "i2c-56" "i2c-0-mux (chan_id 7)"
+chip "w83795adg-*"
+ label in0 "0.9V"
+ set in0_max 0.927
+ set in0_min 0.873
+ label in1 "0.86V"
+ set in1_max 0.877
+ set in1_min 0.843
+ ignore in2
+ ignore in3
+ ignore in4
+ ignore in5
+ ignore in6
+ ignore in7
+ label in12 "2.5V"
+ #compute in12 (2*4*@)/10, @-(2*4*@/10)
+ compute in12 @/(1+(3/10)), @*(1+(3/10))
+ set in12_max 2.625
+ set in12_min 2.375
+ # in12 and in13 are the same source
+ ignore in13
+ ignore in14
+ ignore in15
+ ignore in16
+ label fan1 "FANTRAY 1-A"
+ label fan2 "FANTRAY 1-B"
+ label fan3 "FANTRAY 2-A"
+ label fan4 "FANTRAY 2-B"
+ label fan5 "FANTRAY 3-A"
+ label fan6 "FANTRAY 3-B"
+ label fan7 "FANTRAY 4-A"
+ label fan8 "FANTRAY 4-B"
+ ignore temp1
+ ignore temp2
+ ignore temp3
+ ignore temp4
+ ignore temp5
+ ignore temp6
+ ignore intrusion0
diff --git a/platform/barefoot/bfn-platform-ingrasys.mk b/platform/barefoot/bfn-platform-ingrasys.mk
new file mode 100644
index 0000000000..a85d69baab
--- /dev/null
+++ b/platform/barefoot/bfn-platform-ingrasys.mk
@@ -0,0 +1,5 @@
+BFN_INGRASYS_PLATFORM = bfnplatform-ingrasys_1.0.0_amd64.deb
+$(BFN_INGRASYS_PLATFORM)_URL = "https://github.com/Ingrasys-sonic/packages/raw/master/lib/bfnplatform-ingrasys_1.0.0_amd64.deb"
+
+SONIC_ONLINE_DEBS += $(BFN_INGRASYS_PLATFORM) # $(BFN_SAI_DEV)
+$(BFN_SAI_DEV)_DEPENDS += $(BFN_INGRASYS_PLATFORM)
diff --git a/platform/barefoot/bfn-sai.mk b/platform/barefoot/bfn-sai.mk
index 48c5b431df..4ee0312bfc 100644
--- a/platform/barefoot/bfn-sai.mk
+++ b/platform/barefoot/bfn-sai.mk
@@ -1,5 +1,5 @@
BFN_SAI = bfnsdk_1.0.0_amd64.deb
-$(BFN_SAI)_URL = "https://github.com/barefootnetworks/sonic-release-pkgs/raw/rel_7_0/bfnsdk_1.0.0_amd64.deb"
+$(BFN_SAI)_URL = "https://github.com/Ingrasys-sonic/packages/raw/master/sai/bfnsdk_1.0.0_amd64.deb"
SONIC_ONLINE_DEBS += $(BFN_SAI) # $(BFN_SAI_DEV)
$(BFN_SAI_DEV)_DEPENDS += $(BFN_SAI)
diff --git a/platform/barefoot/one-image.mk b/platform/barefoot/one-image.mk
index 8dc12e9fa8..5da028dbe6 100644
--- a/platform/barefoot/one-image.mk
+++ b/platform/barefoot/one-image.mk
@@ -6,5 +6,6 @@ $(SONIC_ONE_IMAGE)_IMAGE_TYPE = onie
$(SONIC_ONE_IMAGE)_INSTALLS += $(BFN_PLATFORM_MODULE)
$(SONIC_ONE_IMAGE)_INSTALLS += $(BFN_MONTARA_PLATFORM_MODULE)
$(SONIC_ONE_IMAGE)_INSTALLS += $(WNC_OSW1800_PLATFORM_MODULE)
+$(SONIC_ONE_IMAGE)_INSTALLS += $(INGRASYS_S9180_32X_PLATFORM_MODULE)
$(SONIC_ONE_IMAGE)_DOCKERS += $(SONIC_INSTALL_DOCKER_IMAGES)
SONIC_INSTALLERS += $(SONIC_ONE_IMAGE)
diff --git a/platform/barefoot/platform-modules-ingrasys.mk b/platform/barefoot/platform-modules-ingrasys.mk
new file mode 100644
index 0000000000..7204adb7e0
--- /dev/null
+++ b/platform/barefoot/platform-modules-ingrasys.mk
@@ -0,0 +1,11 @@
+# Ingrasys S9180-32X Platform modules
+
+INGRASYS_S9180_32X_PLATFORM_MODULE_VERSION = 1.1.0
+
+export INGRASYS_S9180_32X_PLATFORM_MODULE_VERSION
+
+INGRASYS_S9180_32X_PLATFORM_MODULE = sonic-platform-ingrasys-s9180-32x_$(INGRASYS_S9180_32X_PLATFORM_MODULE_VERSION)_amd64.deb
+$(INGRASYS_S9180_32X_PLATFORM_MODULE)_SRC_PATH = $(PLATFORM_PATH)/sonic-platform-modules-ingrasys
+$(INGRASYS_S9180_32X_PLATFORM_MODULE)_DEPENDS += $(LINUX_HEADERS) $(LINUX_HEADERS_COMMON)
+$(INGRASYS_S9180_32X_PLATFORM_MODULE)_PLATFORM = x86_64-ingrasys_s9180_32x-r0
+SONIC_DPKG_DEBS += $(INGRASYS_S9180_32X_PLATFORM_MODULE)
diff --git a/platform/barefoot/rules.mk b/platform/barefoot/rules.mk
index 33d43d7950..f10952dfad 100644
--- a/platform/barefoot/rules.mk
+++ b/platform/barefoot/rules.mk
@@ -1,6 +1,7 @@
include $(PLATFORM_PATH)/platform-modules-bfn.mk
include $(PLATFORM_PATH)/platform-modules-bfn-montara.mk
include $(PLATFORM_PATH)/platform-modules-wnc-osw1800.mk
+include $(PLATFORM_PATH)/platform-modules-ingrasys.mk
include $(PLATFORM_PATH)/bfn-sai.mk
include $(PLATFORM_PATH)/docker-syncd-bfn.mk
include $(PLATFORM_PATH)/docker-syncd-bfn-rpc.mk
@@ -11,12 +12,12 @@ include $(PLATFORM_PATH)/python-saithrift.mk
include $(PLATFORM_PATH)/docker-ptf-bfn.mk
include $(PLATFORM_PATH)/bfn-platform.mk
include $(PLATFORM_PATH)/bfn-platform-wnc.mk
-
+include $(PLATFORM_PATH)/bfn-platform-ingrasys.mk
SONIC_ALL += $(SONIC_ONE_IMAGE) \
$(DOCKER_FPM)
# Inject sai into sairedis
-$(LIBSAIREDIS)_DEPENDS += $(BFN_SAI) $(WNC_OSW1800_PLATFORM) $(BFN_PLATFORM) #$(LIBSAITHRIFT_DEV_BFN)
+$(LIBSAIREDIS)_DEPENDS += $(BFN_SAI) $(WNC_OSW1800_PLATFORM) $(BFN_INGRASYS_PLATFORM) $(BFN_PLATFORM) #$(LIBSAITHRIFT_DEV_BFN)
# Runtime dependency on sai is set only for syncd
-$(SYNCD)_RDEPENDS += $(BFN_SAI) $(WNC_OSW1800_PLATFORM) $(BFN_PLATFORM)
+$(SYNCD)_RDEPENDS += $(BFN_SAI) $(WNC_OSW1800_PLATFORM) $(BFN_INGRASYS_PLATFORM) $(BFN_PLATFORM)
diff --git a/platform/barefoot/sonic-platform-modules-ingrasys b/platform/barefoot/sonic-platform-modules-ingrasys
new file mode 160000
index 0000000000..c165fddbb8
--- /dev/null
+++ b/platform/barefoot/sonic-platform-modules-ingrasys
@@ -0,0 +1 @@
+Subproject commit c165fddbb8da8bb11efc3c6952cb98949f2cdc87