[201911][DellEMC] Fix abrupt reboot in S6000 (#6909)

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.
This commit is contained in:
rkdevi27 2021-03-31 04:44:45 +05:30 committed by GitHub
parent e1eb1bda59
commit 47011a8e2c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 57 additions and 56 deletions

View File

@ -1,56 +0,0 @@
#!/usr/bin/python
import sys
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)
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__":
io_reg_write(NVRAM_RES, 0x49, COLD_RESET)
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)

View File

@ -5,4 +5,7 @@ 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

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,26 @@
#!/usr/bin/python
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/python
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)