[DellEMC] S6100 Reboot cause determining CPU reset in fast-reboot (#8024)
Why I did it Added a check in determining CPU reset in fast-/warm-reboot in their respective platform plugin. Introducing reboot plugin for "reboot" command to handle its own platform plugin. How I did it On branch s6100_fast_warm_check Changes to be committed: (use "git reset HEAD ..." to unstage) modified: ../../debian/platform-modules-s6100.install modified: ../scripts/fast-reboot_plugin modified: ../scripts/platform_reboot_override new file: ../scripts/reboot_plugin modified: ../scripts/track_reboot_reason.sh modified: chassis.py How to verify it Triggered cold-reset inside fast-reboot to test out the reboot-cause 2.0 API.
This commit is contained in:
parent
81ab2f1bbb
commit
e5a64463fd
@ -10,6 +10,7 @@ s6100/scripts/platform_reboot_override usr/share/sonic/device/x86_64-dell_s6100_
|
||||
s6100/scripts/fast-reboot_plugin usr/share/sonic/device/x86_64-dell_s6100_c2538-r0
|
||||
s6100/scripts/track_reboot_reason.sh usr/share/sonic/device/x86_64-dell_s6100_c2538-r0
|
||||
s6100/scripts/warm-reboot_plugin usr/share/sonic/device/x86_64-dell_s6100_c2538-r0
|
||||
s6100/scripts/reboot_plugin usr/share/sonic/device/x86_64-dell_s6100_c2538-r0
|
||||
s6100/scripts/ssd-fw-upgrade usr/share/sonic/device/x86_64-dell_s6100_c2538-r0
|
||||
s6100/scripts/override.conf /etc/systemd/system/systemd-reboot.service.d
|
||||
common/dell_lpc_mon.sh usr/local/bin
|
||||
|
@ -4,4 +4,8 @@ if [[ -d /sys/devices/platform/SMF.512/hwmon/ ]]; then
|
||||
cd /sys/devices/platform/SMF.512/hwmon/*
|
||||
echo 0xcc > mb_poweron_reason
|
||||
fi
|
||||
|
||||
io_rd_wr.py --set --val 40 --offset 0x131
|
||||
io_rd_wr.py --set --val 06 --offset 210; io_rd_wr.py --set --val 0B --offset 211; io_rd_wr.py --set --val aa --offset 213
|
||||
|
||||
/usr/local/bin/s6100_i2c_enumeration.sh deinit & > /dev/null
|
||||
|
@ -7,8 +7,8 @@ PORT_RES = '/dev/port'
|
||||
|
||||
|
||||
def log_software_reboot():
|
||||
# Run plugin script which will track the cli triggered reboot, fastboot, warmboot
|
||||
res = subprocess.check_output(['/usr/share/sonic/device/x86_64-dell_s6100_c2538-r0/fast-reboot_plugin'])
|
||||
# Run plugin script which will track the cli triggered reboot
|
||||
res = subprocess.check_output(['/usr/share/sonic/device/x86_64-dell_s6100_c2538-r0/reboot_plugin'])
|
||||
return
|
||||
|
||||
def ssd_hdparm_upgrade():
|
||||
|
@ -0,0 +1,8 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [[ -d /sys/devices/platform/SMF.512/hwmon/ ]]; then
|
||||
cd /sys/devices/platform/SMF.512/hwmon/*
|
||||
echo 0xcc > mb_poweron_reason
|
||||
fi
|
||||
|
||||
/usr/local/bin/s6100_i2c_enumeration.sh deinit & > /dev/null
|
@ -131,7 +131,29 @@ _is_unknown_reset(){
|
||||
mb_poweron_reason=$(cat $MAILBOX_POWERON_REASON)
|
||||
echo "Unknown POR: $curr_poweron_reason RST: $curr_reset_reason MBR: $mb_poweron_reason" > $REBOOT_CAUSE_FILE
|
||||
fi
|
||||
|
||||
|
||||
}
|
||||
|
||||
_is_software_reboot(){
|
||||
SMF_STATUS=`io_rd_wr.py --set --val 06 --offset 210; io_rd_wr.py --set --val 0B --offset 211; io_rd_wr.py --get --offset 212`
|
||||
SMF_STATUS=$(echo "$SMF_STATUS" | awk '{print $NF}')
|
||||
|
||||
CPLD_STATUS=`io_rd_wr.py --get --offset 0x131`
|
||||
CPLD_STATUS=$(echo "$CPLD_STATUS" | awk '{print $NF}')
|
||||
|
||||
if [[ $SMF_STATUS == "aa" ]]; then
|
||||
if [[ $CPLD_STATUS != "40" ]]; then
|
||||
# Cold reset happened; Resetting the registers
|
||||
io_rd_wr.py --set --val ff --offset 0x131
|
||||
io_rd_wr.py --set --val 06 --offset 210; io_rd_wr.py --set --val 0B --offset 211; io_rd_wr.py --set --val ff --offset 213
|
||||
echo 0x88 > $MAILBOX_POWERON_REASON
|
||||
else
|
||||
io_rd_wr.py --set --val 06 --offset 210; io_rd_wr.py --set --val 0B --offset 211; io_rd_wr.py --set --val ff --offset 213
|
||||
echo 0xaa > $MAILBOX_POWERON_REASON
|
||||
fi
|
||||
else
|
||||
echo 0xaa > $MAILBOX_POWERON_REASON
|
||||
fi
|
||||
}
|
||||
|
||||
update_mailbox_register(){
|
||||
@ -162,7 +184,7 @@ update_mailbox_register(){
|
||||
&& [[ $SMF_FPGA_VERSION_MAJOR -ge 1 ]] && [[ $SMF_FPGA_VERSION_MINOR -ge 4 ]]; then
|
||||
|
||||
if [[ $reason = "cc" ]]; then
|
||||
echo 0xaa > $MAILBOX_POWERON_REASON
|
||||
_is_software_reboot
|
||||
elif [[ $SMF_RESET = "11" ]]; then
|
||||
echo 0xee > $MAILBOX_POWERON_REASON
|
||||
elif [[ $SMF_RESET = "33" ]]; then
|
||||
@ -185,7 +207,7 @@ update_mailbox_register(){
|
||||
elif [[ $is_wd_reboot = 1 ]] && [[ $reason != "cc" ]]; then
|
||||
echo 0xdd > $MAILBOX_POWERON_REASON
|
||||
elif [[ $reason = "cc" ]]; then
|
||||
echo 0xaa > $MAILBOX_POWERON_REASON
|
||||
_is_software_reboot
|
||||
else
|
||||
_is_unknown_reset $is_thermal_reboot
|
||||
echo 0x99 > $MAILBOX_POWERON_REASON
|
||||
|
@ -99,6 +99,7 @@ class Chassis(ChassisBase):
|
||||
def _get_reboot_reason_smf_register(self):
|
||||
# In S6100, mb_poweron_reason register will
|
||||
# Returns 0xaa or 0xcc on software reload
|
||||
# Returns 0x88 on cold-reboot happened during software reload
|
||||
# Returns 0xff or 0xbb on power-cycle
|
||||
# Returns 0xdd on Watchdog
|
||||
# Returns 0xee on Thermal Shutdown
|
||||
@ -257,6 +258,8 @@ class Chassis(ChassisBase):
|
||||
return (ChassisBase.REBOOT_CAUSE_POWER_LOSS, None)
|
||||
elif ((smf_mb_reg_reason == 0xaa) or (smf_mb_reg_reason == 0xcc)):
|
||||
return (ChassisBase.REBOOT_CAUSE_NON_HARDWARE, None)
|
||||
elif (smf_mb_reg_reason == 0x88):
|
||||
return (ChassisBase.REBOOT_CAUSE_HARDWARE_OTHER, "CPU Reset")
|
||||
elif (smf_mb_reg_reason == 0xdd):
|
||||
return (ChassisBase.REBOOT_CAUSE_WATCHDOG, None)
|
||||
elif (smf_mb_reg_reason == 0xee):
|
||||
|
Loading…
Reference in New Issue
Block a user