[DellEMC] S5232 platform updates (#4360)
FPGA driver crash fix for stale buffer in i2c transfer LED firmware load issue fix. 10G port swapfix psu/sfp bug fixes to report correct states/status of hw
This commit is contained in:
parent
837c13fa63
commit
444cede11d
@ -31,5 +31,5 @@ Ethernet112 113,114,115,116 hundredGigE1/29 29 100000
|
|||||||
Ethernet116 117,118,119,120 hundredGigE1/30 30 100000
|
Ethernet116 117,118,119,120 hundredGigE1/30 30 100000
|
||||||
Ethernet120 121,122,123,124 hundredGigE1/31 31 100000
|
Ethernet120 121,122,123,124 hundredGigE1/31 31 100000
|
||||||
Ethernet124 125,126,127,128 hundredGigE1/32 32 100000
|
Ethernet124 125,126,127,128 hundredGigE1/32 32 100000
|
||||||
Ethernet128 128 tenGigE1/33 33 10000
|
Ethernet128 129 tenGigE1/33 33 10000
|
||||||
Ethernet129 129 tenGigE1/34 34 10000
|
Ethernet129 128 tenGigE1/34 34 10000
|
||||||
|
@ -0,0 +1,2 @@
|
|||||||
|
m0 load 0 0x0 /usr/share/sonic/hwsku/linkscan_led_fw.bin
|
||||||
|
m0 load 0 0x3800 /usr/share/sonic/hwsku/custom_led.bin
|
@ -542,3 +542,5 @@ dport_map_port_66=127
|
|||||||
dport_map_port_130=128
|
dport_map_port_130=128
|
||||||
|
|
||||||
mmu_init_config="TD3-DEFAULT-LOSSLESS-P3P4"
|
mmu_init_config="TD3-DEFAULT-LOSSLESS-P3P4"
|
||||||
|
sai_preinit_cmd_file=/usr/share/sonic/hwsku/sai_preinit_cmd.soc
|
||||||
|
|
||||||
|
@ -0,0 +1,2 @@
|
|||||||
|
m0 load 0 0x0 /usr/share/sonic/hwsku/linkscan_led_fw.bin
|
||||||
|
m0 load 0 0x3800 /usr/share/sonic/hwsku/custom_led.bin
|
@ -542,3 +542,4 @@ dport_map_port_66=127
|
|||||||
dport_map_port_130=128
|
dport_map_port_130=128
|
||||||
|
|
||||||
mmu_init_config="TD3-DEFAULT"
|
mmu_init_config="TD3-DEFAULT"
|
||||||
|
sai_preinit_cmd_file=/usr/share/sonic/hwsku/sai_preinit_cmd.soc
|
||||||
|
@ -0,0 +1,2 @@
|
|||||||
|
m0 load 0 0x0 /usr/share/sonic/hwsku/linkscan_led_fw.bin
|
||||||
|
m0 load 0 0x3800 /usr/share/sonic/hwsku/custom_led.bin
|
@ -615,3 +615,4 @@ dport_map_port_66=127
|
|||||||
dport_map_port_130=128
|
dport_map_port_130=128
|
||||||
|
|
||||||
mmu_init_config="TD3-DEFAULT"
|
mmu_init_config="TD3-DEFAULT"
|
||||||
|
sai_preinit_cmd_file=/usr/share/sonic/hwsku/sai_preinit_cmd.soc
|
||||||
|
@ -0,0 +1,2 @@
|
|||||||
|
m0 load 0 0x0 /usr/share/sonic/hwsku/linkscan_led_fw.bin
|
||||||
|
m0 load 0 0x3800 /usr/share/sonic/hwsku/custom_led.bin
|
@ -615,3 +615,4 @@ dport_map_port_66=127
|
|||||||
dport_map_port_130=128
|
dport_map_port_130=128
|
||||||
|
|
||||||
mmu_init_config="TD3-DEFAULT"
|
mmu_init_config="TD3-DEFAULT"
|
||||||
|
sai_preinit_cmd_file=/usr/share/sonic/hwsku/sai_preinit_cmd.soc
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
#
|
#
|
||||||
#
|
#
|
||||||
#Led0
|
#Led0
|
||||||
#led stop
|
led stop
|
||||||
m0 load 0 0x0 /usr/share/sonic/hwsku/linkscan_led_fw.bin
|
#m0 load 0 0x0 /usr/share/sonic/hwsku/linkscan_led_fw.bin
|
||||||
m0 load 0 0x3800 /usr/share/sonic/hwsku/custom_led.bin
|
m0 load 0 0x3800 /usr/share/sonic/hwsku/custom_led.bin
|
||||||
#led auto on
|
#led auto on
|
||||||
led start
|
led start
|
||||||
|
@ -11,12 +11,13 @@ import sys
|
|||||||
|
|
||||||
|
|
||||||
S5232F_MAX_PSUS = 2
|
S5232F_MAX_PSUS = 2
|
||||||
IPMI_PSU_DATA = "docker exec -it pmon ipmitool sdr list"
|
IPMI_PSU1_DATA = "docker exec -it pmon ipmitool raw 0x04 0x2d 0x31 | awk '{print substr($0,9,1)}'"
|
||||||
IPMI_PSU_DATA_DOCKER = "ipmitool sdr list"
|
IPMI_PSU1_DATA_DOCKER = "ipmitool raw 0x04 0x2d 0x31 | awk '{print substr($0,9,1)}'"
|
||||||
|
IPMI_PSU2_DATA = "docker exec -it pmon ipmitool raw 0x04 0x2d 0x32 | awk '{print substr($0,9,1)}'"
|
||||||
|
IPMI_PSU2_DATA_DOCKER = "ipmitool raw 0x04 0x2d 0x32 | awk '{print substr($0,9,1)}'"
|
||||||
PSU_PRESENCE = "PSU{0}_stat"
|
PSU_PRESENCE = "PSU{0}_stat"
|
||||||
# Use this for older firmware
|
# Use this for older firmware
|
||||||
# PSU_PRESENCE="PSU{0}_prsnt"
|
# PSU_PRESENCE="PSU{0}_prsnt"
|
||||||
ipmi_sdr_list = ""
|
|
||||||
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@ -42,30 +43,26 @@ class PsuUtil(PsuBase):
|
|||||||
def get_pmc_register(self, reg_name):
|
def get_pmc_register(self, reg_name):
|
||||||
|
|
||||||
status = 1
|
status = 1
|
||||||
global ipmi_sdr_list
|
ipmi_cmd_1 = IPMI_PSU1_DATA
|
||||||
ipmi_dev_node = "/dev/pmi0"
|
ipmi_cmd_2 = IPMI_PSU1_DATA
|
||||||
ipmi_cmd = IPMI_PSU_DATA
|
|
||||||
dockerenv = self.isDockerEnv()
|
dockerenv = self.isDockerEnv()
|
||||||
if dockerenv == True:
|
if dockerenv == True:
|
||||||
ipmi_cmd = IPMI_PSU_DATA_DOCKER
|
if index == 1:
|
||||||
|
status, ipmi_sdr_list = commands.getstatusoutput(IPMI_PSU1_DATA_DOCKER)
|
||||||
status, ipmi_sdr_list = commands.getstatusoutput(ipmi_cmd)
|
elif index == 2:
|
||||||
|
status, ipmi_sdr_list = commands.getstatusoutput(IPMI_PSU2_DATA_DOCKER)
|
||||||
|
else:
|
||||||
|
if index == 1:
|
||||||
|
status, ipmi_sdr_list = commands.getstatusoutput(IPMI_PSU1_DATA)
|
||||||
|
elif index == 2:
|
||||||
|
status, ipmi_sdr_list = commands.getstatusoutput(IPMI_PSU2_DATA)
|
||||||
|
|
||||||
if status:
|
if status:
|
||||||
logging.error('Failed to execute:' + ipmi_sdr_list)
|
logging.error('Failed to execute ipmitool')
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
for item in ipmi_sdr_list.split("\n"):
|
output = ipmi_sdr_list
|
||||||
if reg_name in item:
|
|
||||||
output = item.strip()
|
|
||||||
|
|
||||||
if not output:
|
|
||||||
print('\nFailed to fetch: ' + reg_name + ' sensor ')
|
|
||||||
sys.exit(0)
|
|
||||||
|
|
||||||
output = output.split('|')[1]
|
|
||||||
|
|
||||||
logging.basicConfig(level=logging.DEBUG)
|
|
||||||
return output
|
return output
|
||||||
|
|
||||||
def get_num_psus(self):
|
def get_num_psus(self):
|
||||||
@ -86,8 +83,26 @@ class PsuUtil(PsuBase):
|
|||||||
"""
|
"""
|
||||||
# Until psu_status is implemented this is hardcoded temporarily
|
# Until psu_status is implemented this is hardcoded temporarily
|
||||||
|
|
||||||
status = 1
|
psu_status = 'f'
|
||||||
return status
|
ret_status = 1
|
||||||
|
dockerenv = self.isDockerEnv()
|
||||||
|
if dockerenv == True:
|
||||||
|
if index == 1:
|
||||||
|
ret_status, ipmi_sdr_list = commands.getstatusoutput(IPMI_PSU1_DATA_DOCKER)
|
||||||
|
elif index == 2:
|
||||||
|
ret_status, ipmi_sdr_list = commands.getstatusoutput(IPMI_PSU2_DATA_DOCKER)
|
||||||
|
else:
|
||||||
|
if index == 1:
|
||||||
|
ret_status, ipmi_sdr_list = commands.getstatusoutput(IPMI_PSU1_DATA)
|
||||||
|
elif index == 2:
|
||||||
|
ret_status, ipmi_sdr_list = commands.getstatusoutput(IPMI_PSU2_DATA)
|
||||||
|
|
||||||
|
if ret_status:
|
||||||
|
logging.error('Failed to execute ipmitool : ')
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
|
psu_status = ipmi_sdr_list
|
||||||
|
return (not int(psu_status, 16) > 1)
|
||||||
|
|
||||||
def get_psu_presence(self, index):
|
def get_psu_presence(self, index):
|
||||||
"""
|
"""
|
||||||
@ -96,12 +111,23 @@ class PsuUtil(PsuBase):
|
|||||||
:param index: An integer, index of the PSU of which to query status
|
:param index: An integer, index of the PSU of which to query status
|
||||||
:return: Boolean, True if PSU is plugged, False if not
|
:return: Boolean, True if PSU is plugged, False if not
|
||||||
"""
|
"""
|
||||||
status = 0
|
psu_status = '0'
|
||||||
psu_reg_name = PSU_PRESENCE.format(index)
|
ret_status = 1
|
||||||
psu_status = int(self.get_pmc_register(psu_reg_name), 16)
|
dockerenv = self.isDockerEnv()
|
||||||
if (psu_status != 'ERR'):
|
if dockerenv == True:
|
||||||
# Check for PSU presence
|
if index == 1:
|
||||||
if (psu_status == 0x00):
|
ret_status, ipmi_sdr_list = commands.getstatusoutput(IPMI_PSU1_DATA_DOCKER)
|
||||||
status = 1
|
elif index == 2:
|
||||||
return status
|
ret_status, ipmi_sdr_list = commands.getstatusoutput(IPMI_PSU2_DATA_DOCKER)
|
||||||
|
else:
|
||||||
|
if index == 1:
|
||||||
|
ret_status, ipmi_sdr_list = commands.getstatusoutput(IPMI_PSU1_DATA)
|
||||||
|
elif index == 2:
|
||||||
|
ret_status, ipmi_sdr_list = commands.getstatusoutput(IPMI_PSU2_DATA)
|
||||||
|
|
||||||
|
if ret_status:
|
||||||
|
logging.error('Failed to execute ipmitool : ')
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
|
psu_status = ipmi_sdr_list
|
||||||
|
return (int(psu_status, 16) & 1)
|
||||||
|
@ -49,8 +49,8 @@ class SfpUtil(SfpUtilBase):
|
|||||||
"""Platform-specific SfpUtil class"""
|
"""Platform-specific SfpUtil class"""
|
||||||
|
|
||||||
PORT_START = 1
|
PORT_START = 1
|
||||||
PORT_END = 64
|
PORT_END = 34
|
||||||
PORTS_IN_BLOCK = 64
|
PORTS_IN_BLOCK = 32
|
||||||
|
|
||||||
BASE_RES_PATH = "/sys/bus/pci/devices/0000:04:00.0/resource0"
|
BASE_RES_PATH = "/sys/bus/pci/devices/0000:04:00.0/resource0"
|
||||||
|
|
||||||
@ -141,6 +141,11 @@ class SfpUtil(SfpUtilBase):
|
|||||||
# Mask off 4th bit for presence
|
# Mask off 4th bit for presence
|
||||||
mask = (1 << 4)
|
mask = (1 << 4)
|
||||||
|
|
||||||
|
# Mask off 1st bit for presence 33,34
|
||||||
|
if (port_num > 32):
|
||||||
|
mask = (1 << 0)
|
||||||
|
|
||||||
|
|
||||||
# ModPrsL is active low
|
# ModPrsL is active low
|
||||||
if reg_value & mask == 0:
|
if reg_value & mask == 0:
|
||||||
return True
|
return True
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
{
|
{
|
||||||
"skip_ledd": true
|
"skip_ledd": true,
|
||||||
|
"skip_thermalctld": true
|
||||||
}
|
}
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -22,11 +22,15 @@ S5232F_MAX_PSUS = 2
|
|||||||
IPMI_SENSOR_DATA = "ipmitool sdr list"
|
IPMI_SENSOR_DATA = "ipmitool sdr list"
|
||||||
IPMI_SENSOR_DUMP = "/tmp/sdr"
|
IPMI_SENSOR_DUMP = "/tmp/sdr"
|
||||||
|
|
||||||
FAN_PRESENCE = "FAN{0}_prsnt"
|
|
||||||
PSU_PRESENCE = "PSU{0}_stat"
|
PSU_PRESENCE = "PSU{0}_stat"
|
||||||
# Use this for older firmware
|
# Use this for older firmware
|
||||||
# PSU_PRESENCE="PSU{0}_prsnt"
|
# PSU_PRESENCE="PSU{0}_prsnt"
|
||||||
|
|
||||||
|
IPMI_FAN_PRESENCE = "ipmitool sensor get FAN{0}_prsnt"
|
||||||
|
IPMI_PSU1_DATA_DOCKER = "ipmitool raw 0x04 0x2d 0x31 | awk '{print substr($0,9,1)}'"
|
||||||
|
IPMI_PSU2_DATA_DOCKER = "ipmitool raw 0x04 0x2d 0x32 | awk '{print substr($0,9,1)}'"
|
||||||
|
IPMI_RAW_STORAGE_READ = "ipmitool raw 0x0a 0x11 {0} 0 0 0xa0"
|
||||||
|
IPMI_FRU = "ipmitool fru"
|
||||||
ipmi_sdr_list = ""
|
ipmi_sdr_list = ""
|
||||||
|
|
||||||
# Dump sensor registers
|
# Dump sensor registers
|
||||||
@ -40,9 +44,18 @@ def ipmi_sensor_dump():
|
|||||||
status, ipmi_sdr_list = commands.getstatusoutput(ipmi_cmd)
|
status, ipmi_sdr_list = commands.getstatusoutput(ipmi_cmd)
|
||||||
|
|
||||||
if status:
|
if status:
|
||||||
logging.error('Failed to execute:' + ipmi_sdr_list)
|
logging.error('Failed to execute: ' + ipmi_sdr_list)
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
|
# Fetch a Fan Status
|
||||||
|
|
||||||
|
def get_fan_status(fan_id):
|
||||||
|
ret_status, ipmi_cmd_ret = commands.getstatusoutput(IPMI_FAN_PRESENCE.format(fan_id))
|
||||||
|
if ret_status:
|
||||||
|
logging.error('Failed to execute : %s'%IPMI_FAN_PRESENCE.format(fan_id))
|
||||||
|
sys.exit(0)
|
||||||
|
return(' ' + ipmi_cmd_ret.splitlines()[5].strip(' ').strip('[]'))
|
||||||
|
|
||||||
# Fetch a BMC register
|
# Fetch a BMC register
|
||||||
|
|
||||||
|
|
||||||
@ -62,6 +75,35 @@ def get_pmc_register(reg_name):
|
|||||||
logging.basicConfig(level=logging.DEBUG)
|
logging.basicConfig(level=logging.DEBUG)
|
||||||
return output
|
return output
|
||||||
|
|
||||||
|
#Fetch FRU Data for given fruid
|
||||||
|
def get_psu_airflow(psu_id):
|
||||||
|
fru_id = 'PSU' + str(psu_id) + '_fru'
|
||||||
|
ret_status, ipmi_cmd_ret = commands.getstatusoutput(IPMI_FRU)
|
||||||
|
if ret_status:
|
||||||
|
logging.error('Failed to execute ipmitool: '+ IPMI_FRU)
|
||||||
|
sys.exit(0)
|
||||||
|
found_fru = False
|
||||||
|
for line in ipmi_cmd_ret.splitlines():
|
||||||
|
if line.startswith('FRU Device Description') and fru_id in line.split(':')[1] :
|
||||||
|
found_fru = True
|
||||||
|
if found_fru and line.startswith(' Board Product '):
|
||||||
|
return ' B2F' if 'PS/IO' in line else ' F2B'
|
||||||
|
return ''
|
||||||
|
|
||||||
|
# Fetch FRU on given offset
|
||||||
|
def fetch_raw_fru(dev_id, offset):
|
||||||
|
ret_status, ipmi_cmd_ret = commands.getstatusoutput(IPMI_RAW_STORAGE_READ.format(dev_id))
|
||||||
|
if ret_status:
|
||||||
|
logging.error('Failed to execute ipmitool :' + IPMI_RAW_STORAGE_READ.format(dev_id))
|
||||||
|
sys.exit(0)
|
||||||
|
return int((ipmi_cmd_ret.splitlines()[offset/16]).split(' ')[(offset%16+1)])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def get_fan_airflow(fan_id):
|
||||||
|
Airflow_Direction = [' F2B', ' B2F']
|
||||||
|
return Airflow_Direction[fetch_raw_fru(fan_id+2, 0x46)]
|
||||||
|
|
||||||
# Print the information for temperature sensors
|
# Print the information for temperature sensors
|
||||||
|
|
||||||
@ -93,7 +135,6 @@ print_temperature_sensors()
|
|||||||
def print_fan_tray(tray):
|
def print_fan_tray(tray):
|
||||||
|
|
||||||
Fan_Status = [' Normal', ' Abnormal']
|
Fan_Status = [' Normal', ' Abnormal']
|
||||||
Airflow_Direction = ['B2F', 'F2B']
|
|
||||||
|
|
||||||
print ' Fan Tray ' + str(tray) + ':'
|
print ' Fan Tray ' + str(tray) + ':'
|
||||||
|
|
||||||
@ -152,16 +193,62 @@ def print_fan_tray(tray):
|
|||||||
Fan_Status[fan1_status]
|
Fan_Status[fan1_status]
|
||||||
print ' Fan2 State: ',\
|
print ' Fan2 State: ',\
|
||||||
Fan_Status[fan2_status]
|
Fan_Status[fan2_status]
|
||||||
|
print ' Airflow: ',\
|
||||||
|
get_fan_airflow(tray)
|
||||||
|
|
||||||
|
|
||||||
print('\nFan Trays:')
|
print('\nFan Trays:')
|
||||||
|
|
||||||
for tray in range(1, S5232F_MAX_FAN_TRAYS + 1):
|
for tray in range(1, S5232F_MAX_FAN_TRAYS + 1):
|
||||||
fan_presence = FAN_PRESENCE.format(tray)
|
if (get_fan_status(tray) == ' Present'):
|
||||||
if (get_pmc_register(fan_presence)):
|
|
||||||
print_fan_tray(tray)
|
print_fan_tray(tray)
|
||||||
else:
|
else:
|
||||||
print '\n Fan Tray ' + str(tray + 1) + ': Not present'
|
print ' Fan Tray {}: NOT PRESENT'.format(str(tray))
|
||||||
|
|
||||||
|
def get_psu_presence(index):
|
||||||
|
"""
|
||||||
|
Retrieves the presence status of power supply unit (PSU) defined
|
||||||
|
by index <index>
|
||||||
|
:param index: An integer, index of the PSU of which to query status
|
||||||
|
:return: Boolean, True if PSU is plugged, False if not
|
||||||
|
"""
|
||||||
|
ret_status = 1
|
||||||
|
|
||||||
|
if index == 1:
|
||||||
|
ret_status, ipmi_cmd_ret = commands.getstatusoutput(IPMI_PSU1_DATA_DOCKER)
|
||||||
|
elif index == 2:
|
||||||
|
ret_status, ipmi_cmd_ret = commands.getstatusoutput(IPMI_PSU2_DATA_DOCKER)
|
||||||
|
|
||||||
|
if ret_status:
|
||||||
|
logging.error('Failed to execute ipmitool :' + IPMI_PSU1_DATA_DOCKER)
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
|
psu_status = ipmi_cmd_ret
|
||||||
|
return (int(psu_status, 16) & 1)
|
||||||
|
|
||||||
|
def get_psu_status(index):
|
||||||
|
"""
|
||||||
|
Retrieves the presence status of power supply unit (PSU) defined
|
||||||
|
by index <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
|
||||||
|
ret_status = 1
|
||||||
|
ipmi_cmd_ret = 'f'
|
||||||
|
|
||||||
|
if index == 1:
|
||||||
|
ret_status, ipmi_cmd_ret = commands.getstatusoutput(IPMI_PSU1_DATA_DOCKER)
|
||||||
|
elif index == 2:
|
||||||
|
ret_status, ipmi_cmd_ret = commands.getstatusoutput(IPMI_PSU2_DATA_DOCKER)
|
||||||
|
|
||||||
|
if ret_status:
|
||||||
|
logging.error('Failed to execute ipmitool : ' + IPMI_PSU2_DATA_DOCKER)
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
|
psu_status = ipmi_cmd_ret
|
||||||
|
|
||||||
|
return (not int(psu_status, 16) > 1)
|
||||||
|
|
||||||
|
|
||||||
# Print the information for PSU1, PSU2
|
# Print the information for PSU1, PSU2
|
||||||
@ -175,7 +262,6 @@ def print_psu(psu):
|
|||||||
PSU_FAN_AIR_FLOW_BIT = 0
|
PSU_FAN_AIR_FLOW_BIT = 0
|
||||||
Psu_Fan_Presence = ['Present', 'Absent']
|
Psu_Fan_Presence = ['Present', 'Absent']
|
||||||
Psu_Fan_Status = ['Normal', 'Abnormal']
|
Psu_Fan_Status = ['Normal', 'Abnormal']
|
||||||
Psu_Fan_Airflow = ['B2F', 'F2B']
|
|
||||||
|
|
||||||
# print ' Input: ', Psu_Input_Type[psu_input_type]
|
# print ' Input: ', Psu_Input_Type[psu_input_type]
|
||||||
# print ' Type: ', Psu_Type[psu_type]
|
# print ' Type: ', Psu_Type[psu_type]
|
||||||
@ -233,15 +319,19 @@ def print_psu(psu):
|
|||||||
get_pmc_register('PSU2_In_amp')
|
get_pmc_register('PSU2_In_amp')
|
||||||
print ' Output Current: ',\
|
print ' Output Current: ',\
|
||||||
get_pmc_register('PSU2_Out_amp')
|
get_pmc_register('PSU2_Out_amp')
|
||||||
|
print ' Airflow: ',\
|
||||||
|
get_psu_airflow(psu)
|
||||||
|
|
||||||
|
|
||||||
print('\nPSUs:')
|
print('\nPSUs:')
|
||||||
for psu in range(1, S5232F_MAX_PSUS + 1):
|
for psu in range(1, S5232F_MAX_PSUS + 1):
|
||||||
psu_presence = PSU_PRESENCE.format(psu)
|
#psu_presence = PSU_PRESENCE.format(psu)
|
||||||
if (get_pmc_register(psu_presence)):
|
if not get_psu_presence(psu):
|
||||||
print_psu(psu)
|
print ' PSU{}: NOT PRESENT'.format(psu)
|
||||||
|
elif not get_psu_status(psu) :
|
||||||
|
print ' PSU{}: NOT OK'.format(psu)
|
||||||
else:
|
else:
|
||||||
print '\n PSU ', psu, 'Not present'
|
print_psu(psu)
|
||||||
|
|
||||||
print '\n Total Power: ',\
|
print '\n Total Power: ',\
|
||||||
get_pmc_register('PSU_Total_watt')
|
get_pmc_register('PSU_Total_watt')
|
||||||
|
@ -113,6 +113,48 @@ switch_board_led_default() {
|
|||||||
resource="/sys/bus/pci/devices/0000:04:00.0/resource0"
|
resource="/sys/bus/pci/devices/0000:04:00.0/resource0"
|
||||||
python /usr/bin/pcisysfs.py --set --offset 0x24 --val 0x194 --res $resource > /dev/null 2>&1
|
python /usr/bin/pcisysfs.py --set --offset 0x24 --val 0x194 --res $resource > /dev/null 2>&1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Readout firmware version of the system and
|
||||||
|
# store in /var/log/firmware_versions
|
||||||
|
platform_firmware_versions() {
|
||||||
|
FIRMWARE_VERSION_FILE=/var/log/firmware_versions
|
||||||
|
rm -rf ${FIRMWARE_VERSION_FILE}
|
||||||
|
echo "BIOS: `dmidecode -s system-version `" > $FIRMWARE_VERSION_FILE
|
||||||
|
## Get FPGA version
|
||||||
|
r=`/usr/bin/pcisysfs.py --get --offset 0x00 --res /sys/bus/pci/devices/0000\:04\:00.0/resource0 | sed '1d; s/.*\(....\)$/\1/; s/\(..\{1\}\)/\1./'`
|
||||||
|
r_min=$(echo $r | sed 's/.*\(..\)$/0x\1/')
|
||||||
|
r_maj=$(echo $r | sed 's/^\(..\).*/0x\1/')
|
||||||
|
echo "FPGA: $((r_maj)).$((r_min))" >> $FIRMWARE_VERSION_FILE
|
||||||
|
|
||||||
|
## Get BMC Firmware Revision
|
||||||
|
r=`cat /sys/class/ipmi/ipmi0/device/bmc/firmware_revision`
|
||||||
|
echo "BMC: $r" >> $FIRMWARE_VERSION_FILE
|
||||||
|
|
||||||
|
#System CPLD 0x31 on i2c bus 601 ( physical FPGA I2C-2)
|
||||||
|
r_min=`/usr/sbin/i2cget -y 601 0x31 0x0 | sed ' s/.*\(0x..\)$/\1/'`
|
||||||
|
r_maj=`/usr/sbin/i2cget -y 601 0x31 0x1 | sed ' s/.*\(0x..\)$/\1/'`
|
||||||
|
echo "System CPLD: $((r_maj)).$((r_min))" >> $FIRMWARE_VERSION_FILE
|
||||||
|
|
||||||
|
#Slave CPLD 1 0x30 on i2c bus 600 ( physical FPGA I2C-1)
|
||||||
|
r_min=`/usr/sbin/i2cget -y 600 0x30 0x0 | sed ' s/.*\(0x..\)$/\1/'`
|
||||||
|
r_maj=`/usr/sbin/i2cget -y 600 0x30 0x1 | sed ' s/.*\(0x..\)$/\1/'`
|
||||||
|
echo "Slave CPLD 1: $((r_maj)).$((r_min))" >> $FIRMWARE_VERSION_FILE
|
||||||
|
|
||||||
|
#Slave CPLD 2 0x31 on i2c bus 600 ( physical FPGA I2C-1)
|
||||||
|
r_min=`/usr/sbin/i2cget -y 600 0x31 0x0 | sed ' s/.*\(0x..\)$/\1/'`
|
||||||
|
r_maj=`/usr/sbin/i2cget -y 600 0x31 0x1 | sed ' s/.*\(0x..\)$/\1/'`
|
||||||
|
echo "Slave CPLD 2: $((r_maj)).$((r_min))" >> $FIRMWARE_VERSION_FILE
|
||||||
|
|
||||||
|
#Slave CPLD 3 0x32 on i2c bus 600 ( physical FPGA I2C-1)
|
||||||
|
r_min=`/usr/sbin/i2cget -y 600 0x32 0x0 | sed ' s/.*\(0x..\)$/\1/'`
|
||||||
|
r_maj=`/usr/sbin/i2cget -y 600 0x32 0x1 | sed ' s/.*\(0x..\)$/\1/'`
|
||||||
|
echo "Slave CPLD 3: $((r_maj)).$((r_min))" >> $FIRMWARE_VERSION_FILE
|
||||||
|
|
||||||
|
#Slave CPLD 3 0x32 on i2c bus 600 ( physical FPGA I2C-1)
|
||||||
|
r_min=`/usr/sbin/i2cget -y 600 0x33 0x0 | sed ' s/.*\(0x..\)$/\1/'`
|
||||||
|
r_maj=`/usr/sbin/i2cget -y 600 0x33 0x1 | sed ' s/.*\(0x..\)$/\1/'`
|
||||||
|
echo "Slave CPLD 4: $((r_maj)).$((r_min))" >> $FIRMWARE_VERSION_FILE
|
||||||
|
}
|
||||||
init_devnum
|
init_devnum
|
||||||
|
|
||||||
if [ "$1" == "init" ]; then
|
if [ "$1" == "init" ]; then
|
||||||
@ -129,10 +171,12 @@ if [ "$1" == "init" ]; then
|
|||||||
switch_board_modsel
|
switch_board_modsel
|
||||||
switch_board_led_default
|
switch_board_led_default
|
||||||
python /usr/bin/qsfp_irq_enable.py
|
python /usr/bin/qsfp_irq_enable.py
|
||||||
|
platform_firmware_versions
|
||||||
|
|
||||||
elif [ "$1" == "deinit" ]; then
|
elif [ "$1" == "deinit" ]; then
|
||||||
sys_eeprom "delete_device"
|
sys_eeprom "delete_device"
|
||||||
switch_board_qsfp "delete_device"
|
switch_board_qsfp "delete_device"
|
||||||
|
switch_board_sfp "delete_device"
|
||||||
switch_board_qsfp_mux "delete_device"
|
switch_board_qsfp_mux "delete_device"
|
||||||
switch_board_sfp "delete_device"
|
switch_board_sfp "delete_device"
|
||||||
modprobe -r i2c-mux-pca954x
|
modprobe -r i2c-mux-pca954x
|
||||||
|
Loading…
Reference in New Issue
Block a user