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