Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 39 additions & 0 deletions platform/pddf/i2c/utils/pddfparse.py
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,10 @@ def create_non_pddf_i2c_device(self, dev, ops):
def create_temp_sensor_device(self, dev, ops):
return self.create_non_pddf_i2c_device(dev, ops)

def create_asic_temp_sensor_device(self, dev, ops):
# NO-OP
return [0]

def create_dpm_device(self, dev, ops):
return self.create_non_pddf_i2c_device(dev, ops)

Expand Down Expand Up @@ -560,6 +564,10 @@ def delete_non_pddf_i2c_device(self, dev, ops):
def delete_temp_sensor_device(self, dev, ops):
return self.delete_non_pddf_i2c_device(dev, ops)

def delete_asic_temp_sensor_device(self, dev, ops):
# NO-OP
return

def delete_dpm_device(self, dev, ops):
return self.delete_non_pddf_i2c_device(dev, ops)

Expand Down Expand Up @@ -783,6 +791,10 @@ def show_attr_temp_sensor_device(self, dev, ops):
ret.append(full_path)
return ret

def show_attr_asic_temp_sensor_device(self, dev, ops):
# NO-OP
return []

def show_attr_sysstatus_device(self, dev, ops):
ret = []
attr_name = ops['attr']
Expand Down Expand Up @@ -1006,6 +1018,9 @@ def show_fan_device(self, dev, ops):
def show_temp_sensor_device(self, dev, ops):
return

def show_asic_temp_sensor_device(self, dev, ops):
return

def show_sysstatus_device(self, dev, ops):
KEY = 'sysstatus'
if not KEY in self.sysfs_obj:
Expand Down Expand Up @@ -1200,6 +1215,16 @@ def validate_temp_sensor_device(self, dev, ops):
ret_val = "tempsensor success"
print(ret_val)

def validate_asic_temp_sensor_device(self, dev, ops):
dev_attribs = ['display_name', 'temp1_high_threshold', 'temp1_high_crit_threshold']
ret_val = "asic temp sensor failed"

if dev['dev_info']['device_type'] == "ASIC_TEMP_SENSOR":
for attr in dev['dev_attr'].keys():
if attr in dev_attribs:
ret_val = "asic temp sensor success"
print(ret_val)

def validate_fan_device(self, dev, ops):
ret_val = "fan failed"

Expand Down Expand Up @@ -1428,6 +1453,17 @@ def temp_sensor_parse(self, dev, ops):

return ret

def asic_temp_sensor_parse(self, dev, ops):
ret = []
ret = getattr(self, ops['cmd']+"_asic_temp_sensor_device")(dev, ops)
if ret:
if str(ret[0]).isdigit():
if ret[0] != 0:
# in case if 'create' functions
print("{}_asic_temp_sensor_device failed for {}".format(ops['cmd'], dev['dev_info']['device_name']))

return ret

def dpm_parse(self, dev, ops):
ret = []
ret = getattr(self, ops['cmd']+"_dpm_device")(dev, ops)
Expand Down Expand Up @@ -1707,6 +1743,9 @@ def dev_parse(self, dev, ops):
if attr['device_type'] == 'TEMP_SENSOR':
return self.temp_sensor_parse(dev, ops)

if attr['device_type'] == 'ASIC_TEMP_SENSOR':
return self.asic_temp_sensor_parse(dev, ops)

if attr['device_type'] == 'SFP' or attr['device_type'] == 'SFP+' or attr['device_type'] == 'SFP28' or \
attr['device_type'] == 'QSFP' or attr['device_type'] == 'QSFP+' or attr['device_type'] == 'QSFP28' or \
attr['device_type'] == 'QSFP-DD':
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
#############################################################################
# PDDF
#
# PDDF ASIC thermal class for monitoring ASIC temperature sensors
#############################################################################

try:
from sonic_platform_base.thermal_base import ThermalBase
from swsscommon.swsscommon import SonicV2Connector
except ImportError as e:
raise ImportError(str(e) + "- required module not found")

class PddfAsicThermal(ThermalBase):
"""PDDF ASIC Thermal class"""

ASIC_TEMP_INFO = "ASIC_TEMPERATURE_INFO"

def __init__(self, index, pddf_data=None):
self.thermal_index = index + 1
# The sensors are 0-indexed in the DB.
self.sensor_db_index = index
thermal_obj_name = "ASIC_TEMP{}".format(self.thermal_index)

thermal_obj = pddf_data.data[thermal_obj_name]

self.thermal_name = thermal_obj['dev_attr']['display_name']
self.high_threshold = thermal_obj['dev_attr']['temp1_high_threshold']
self.high_crit_threshold = thermal_obj['dev_attr']['temp1_high_crit_threshold']

def get_name(self):
return self.thermal_name

def get_model(self):
return "N/A"

def get_serial(self):
return "N/A"

def get_status(self):
return self.get_presence()

def get_presence(self):
# Check the DB for the sensor
db = SonicV2Connector()
db.connect(db.STATE_DB)
data_dict = db.get_all(db.STATE_DB, self.ASIC_TEMP_INFO)
return "temperature_{}".format(self.sensor_db_index) in data_dict

def get_temperature(self):
db = SonicV2Connector()
db.connect(db.STATE_DB)
data_dict = db.get_all(db.STATE_DB, self.ASIC_TEMP_INFO)
return float(data_dict["temperature_{}".format(self.sensor_db_index)])

def get_high_threshold(self):
return self.high_threshold

def get_high_critical_threshold(self):
return self.high_crit_threshold

def get_low_threshold(self):
raise NotImplementedError

def set_high_threshold(self, temperature):
raise NotImplementedError

def set_low_threshold(self, temperature):
raise NotImplementedError

def get_temp_label(self):
return None

def dump_sysfs(self):
return ''

def get_position_in_parent(self):
"""
Retrieves 1-based relative physical position in parent device.
Returns:
integer: The 1-based relative physical position in parent
device or -1 if cannot determine the position
"""
return self.thermal_index

def is_replaceable(self):
"""
Indicate whether Thermal is replaceable.
Returns:
bool: True if it is replaceable.
"""
# Usually thermal sensor is not replaceable
return False
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,12 @@
except ImportError as e:
current_sensor_present = False

asicthermal_present = True
try:
from sonic_platform.asic_thermal import AsicThermal
except ImportError as e:
asicthermal_present = False

class PddfChassis(ChassisBase):
"""
PDDF Generic Chassis class
Expand Down Expand Up @@ -94,6 +100,12 @@ def __init__(self, pddf_data=None, pddf_plugin_data=None):
current = CurrentSensor(i, self.pddf_obj, self.plugin_data)
self._current_sensor_list.append(current)

if asicthermal_present:
# ASIC Thermal
for i in range(self.platform_inventory['num_asic_temps']):
asicthermal = AsicThermal(i, self.pddf_obj)
self._thermal_list.append(asicthermal)


def get_name(self):
"""
Expand Down
Loading