[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:
parent
e1eb1bda59
commit
47011a8e2c
@ -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)
|
@ -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
|
||||
|
@ -0,0 +1,3 @@
|
||||
[Service]
|
||||
ExecStart=
|
||||
ExecStart=/usr/share/sonic/device/x86_64-dell_s6000_s1220-r0/platform_reboot_override
|
@ -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)
|
@ -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)
|
Loading…
Reference in New Issue
Block a user