#!/usr/bin/python import sys import os import subprocess import struct PORT_RES = '/dev/port' POWER_CYCLE = '/tmp/powercycle' def portio_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__": # power-cycle the switch if os.path.exists(POWER_CYCLE): print "CPLD upgrade detected. Power-cycling the unit.." os.system('io_rd_wr.py --set --val 05 --offset 210; io_rd_wr.py --set --val 00 --offset 211; io_rd_wr.py --set --val 03 --offset 213') subprocess.check_output(['/usr/share/sonic/device/x86_64-dell_s6100_c2538-r0/fast-reboot_plugin']) portio_reg_write(PORT_RES, 0xcf9, 0xe)