[dell/s6000]: Enable graceful reboot in S6000 (#6835)

The S6000 devices, the cold reboot is abrupt and it is likely to cause issues which will cause the device to land into EFI shell. Hence the platform reboot will happen after graceful unmount of all the filesystems as in S6100.

Moved the platform_reboot to platform_reboot_override and hooked it to the systemd shutdown services as in S6100
This commit is contained in:
rkdevi27 2021-02-25 01:30:24 +05:30 committed by Ying Xie
parent 40e445794b
commit 926572ee82
5 changed files with 58 additions and 63 deletions

View File

@ -1,63 +0,0 @@
#!/usr/bin/python3
import sys
import os
import struct
PORT_RES = '/dev/port'
NVRAM_RES = '/dev/nvram'
COLD_RESET = 0xE # Cold Reset
WARM_RESET = 0x6 # Warm Reset
RESET_REG = 0xCF9
def io_reg_write(resource, offset, val):
fd = os.open(resource, os.O_RDWR)
if(fd < 0):
print('file open failed %s" % resource')
return
if(os.lseek(fd, offset, os.SEEK_SET) != offset):
print('lseek failed on %s' % resource)
return
ret = os.write(fd, struct.pack('B', val))
if(ret != 1):
print('write failed %d' % ret)
return
os.close(fd)
def power_reset(val):
with open('/sys/devices/platform/dell-s6000-cpld.0/power_reset', 'w') as p:
p.write(str(int(val)) + '\n')
p.flush()
def gpio_direction(pin, direction):
kernpath = '/sys/class/gpio/gpio'+str(pin)+'/direction'
with open(('kernpath'), 'w') as p:
p.write(str(direction) + '\n')
p.flush()
def gpio_set(pin, value):
kernpath = '/sys/class/gpio/gpio'+str(pin)+'/value'
with open(('kernpath'), 'w') as p:
p.write(str(int(value)) + '\n')
p.flush()
def gpio_export(value):
with open('/sys/class/gpio/export', 'w') as p:
p.write(str(int(value)) + '\n')
p.flush()
if __name__ == "__main__":
retry_count = 0
io_reg_write(NVRAM_RES, 0x49, COLD_RESET)
while retry_count < 3:
if not os.path.isdir("/sys/class/gpio/gpio10"):
gpio_export(10)
gpio_direction("10", "out")
# Toggle GPIO10 pin (to reset MUX)
gpio_set("10", 1)
gpio_set("10", 0)
power_reset(1)
retry_count += 1
io_reg_write(PORT_RES, RESET_REG, COLD_RESET)

View File

@ -5,5 +5,8 @@ s6000/scripts/fancontrol.sh usr/local/bin
s6000/systemd/platform-modules-s6000.service etc/systemd/system
s6000/systemd/fancontrol.service etc/systemd/system
common/io_rd_wr.py usr/local/bin
s6000/scripts/platform_reboot_override usr/share/sonic/device/x86_64-dell_s6000_s1220-r0
s6000/scripts/platform_update_reboot_cause usr/share/sonic/device/x86_64-dell_s6000_s1220-r0
s6000/scripts/override.conf /etc/systemd/system/systemd-reboot.service.d
s6000/modules/sonic_platform-1.0-py2-none-any.whl usr/share/sonic/device/x86_64-dell_s6000_s1220-r0
s6000/modules/sonic_platform-1.0-py3-none-any.whl usr/share/sonic/device/x86_64-dell_s6000_s1220-r0

View File

@ -0,0 +1,3 @@
[Service]
ExecStart=
ExecStart=/usr/share/sonic/device/x86_64-dell_s6000_s1220-r0/platform_reboot_override

View File

@ -0,0 +1,27 @@
#!/usr/bin/python3
import os
import struct
PORT_RES = '/dev/port'
COLD_RESET = 0xE # Cold Reset
WARM_RESET = 0x6 # Warm Reset
RESET_REG = 0xCF9
def io_reg_write(resource, offset, val):
fd = os.open(resource, os.O_RDWR)
if(fd < 0):
print('file open failed %s" % resource')
return
if(os.lseek(fd, offset, os.SEEK_SET) != offset):
print('lseek failed on %s' % resource)
return
ret = os.write(fd, struct.pack('B', val))
if(ret != 1):
print('write failed %d' % ret)
return
os.close(fd)
if __name__ == "__main__":
io_reg_write(PORT_RES, RESET_REG, COLD_RESET)

View File

@ -0,0 +1,25 @@
#!/usr/bin/python3
import os
import struct
NVRAM_RES = '/dev/nvram'
COLD_RESET = 0xE # Cold Reset
WARM_RESET = 0x6 # Warm Reset
def io_reg_write(resource, offset, val):
fd = os.open(resource, os.O_RDWR)
if(fd < 0):
print('file open failed %s" % resource')
return
if(os.lseek(fd, offset, os.SEEK_SET) != offset):
print('lseek failed on %s' % resource)
return
ret = os.write(fd, struct.pack('B', val))
if(ret != 1):
print('write failed %d' % ret)
return
os.close(fd)
if __name__ == "__main__":
io_reg_write(NVRAM_RES, 0x49, COLD_RESET)