[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 GitHub
parent 3abd2167bc
commit a37824ff0c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
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)