diff --git a/platform/broadcom/sonic-platform-modules-accton/as5712-54x/utils/accton_as5712_util.py b/platform/broadcom/sonic-platform-modules-accton/as5712-54x/utils/accton_as5712_util.py index 71927f933b92..ff5d883f1fe8 100755 --- a/platform/broadcom/sonic-platform-modules-accton/as5712-54x/utils/accton_as5712_util.py +++ b/platform/broadcom/sonic-platform-modules-accton/as5712-54x/utils/accton_as5712_util.py @@ -80,7 +80,6 @@ 'sfp': ['sfp_is_present ', 'sfp_tx_disable']} QSFP_START = 48 -I2C_BUS_ORDER = -1 sfp_map = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, @@ -241,13 +240,12 @@ def log_os_system(cmd, show): return status, output def driver_inserted(): - ret, lsmod = log_os_system("lsmod| grep accton", 0) + ret, lsmod = log_os_system("ls /sys/module/ | grep accton", 0) logging.info('mods:'+lsmod) - if len(lsmod) ==0: + if not lsmod: return False - kos = [ 'depmod -ae', 'modprobe i2c_dev', @@ -263,10 +261,10 @@ def driver_inserted(): def driver_install(): global FORCE for i in range(0,len(kos)): - status, output = log_os_system(kos[i], 1) - if status: + ret = log_os_system(kos[i], 1) + if ret[0]: if FORCE == 0: - return status + return ret[0] return 0 def driver_uninstall(): @@ -282,10 +280,10 @@ def driver_uninstall(): #Change to removing commands rm = rm.replace("modprobe", "modprobe -rq") rm = rm.replace("insmod", "rmmod") - status, output = log_os_system(rm, 1) - if status: + ret = log_os_system(rm, 1) + if ret[0]: if FORCE == 0: - return status + return ret[0] return 0 @@ -293,34 +291,23 @@ def driver_uninstall(): def i2c_order_check(): # i2c bus 0 and 1 might be installed in different order. # Here check if 0x70 is exist @ i2c-0 - tmp = "echo pca9548 0x70 > /sys/bus/i2c/devices/i2c-1/new_device" - log_os_system(tmp, 0) - if not device_exist(): + tmp = "i2cget -y -f 0 0x70" + ret = log_os_system(tmp, 0) + if not ret[0]: order = 1 else: order = 0 - tmp = "echo 0x70 > /sys/bus/i2c/devices/i2c-1/delete_device" - log_os_system(tmp, 0) + m = "[%s]Detected I2C_BUS_ORDER:%d" % (os.path.basename(__file__), order) + my_log(m) return order -def update_i2c_order(): - global I2C_BUS_ORDER - - order = i2c_order_check() - I2C_BUS_ORDER = order - print "[%s]Detected I2C_BUS_ORDER:%d" % (os.path.basename(__file__), I2C_BUS_ORDER) - def get_i2c_order(): - global I2C_BUS_ORDER - if I2C_BUS_ORDER < 0: - update_i2c_order() + return i2c_order_check() def device_install(): global FORCE - global I2C_BUS_ORDER - update_i2c_order() - order = I2C_BUS_ORDER + order = get_i2c_order() # if 0x76 is not exist @i2c-0, use reversed bus order if order: for i in range(0,len(mknod2)): @@ -344,7 +331,7 @@ def device_install(): print output if FORCE == 0: return status - + for i in range(0,len(sfp_map)): if i < QSFP_START: status, output =log_os_system("echo optoe2 0x50 > /sys/bus/i2c/devices/i2c-"+str(sfp_map[i])+"/new_device", 1) @@ -359,7 +346,7 @@ def device_install(): print output if FORCE == 0: return status - + return def device_uninstall(): @@ -372,8 +359,8 @@ def device_uninstall(): print output if FORCE == 0: return status - status, output = log_os_system("ls /sys/bus/i2c/devices/1-0070", 0) - order = 0 if (status == 0) else 1 + + order = get_i2c_order() if order == 0: nodelist = mknod else: @@ -526,19 +513,15 @@ def show_eeprom(index): def get_cpld_path(index): - global I2C_BUS_ORDER - - if I2C_BUS_ORDER < 0: - get_i2c_order() - - if I2C_BUS_ORDER !=0 : + order = get_i2c_order() + if order !=0 : return port_cpld_path[index].replace("0-", "1-") else: return port_cpld_path[index] def cpld_path_of_port(port_index): if port_index < 1 and port_index > DEVICE_NO['sfp']: - return None + return None if port_index < 25: return get_cpld_path(0) else: @@ -550,7 +533,7 @@ def get_path_sfp_tx_dis(port_index): return False, '' else: dev = cpld_p+"module_tx_disable_"+str(port_index) - return True, dev + return True, dev def get_path_sfp_presence(port_index): cpld_p = cpld_path_of_port(port_index) @@ -558,7 +541,7 @@ def get_path_sfp_presence(port_index): return False, '' else: dev = cpld_p+"module_present_"+str(port_index) - return True, dev + return True, dev def set_device(args): @@ -579,9 +562,9 @@ def set_device(args): #print ALL_DEVICE['led'] for i in range(0,len(ALL_DEVICE['led'])): for k in (ALL_DEVICE['led']['led'+str(i+1)]): - ret, log = log_os_system("echo "+args[1]+" >"+k, 1) - if ret: - return ret + ret[0] = log_os_system("echo "+args[1]+" >"+k, 1) + if ret[0]: + return ret[0] elif args[0]=='fan': if int(args[1])>100: show_set_help() @@ -616,8 +599,8 @@ def set_device(args): if ret == False: return False else: - ret, log = log_os_system("echo "+args[2]+" >"+ dev, 1) - return ret + ret = log_os_system("echo "+args[2]+" >"+ dev, 1) + return ret[0] return #get digits inside a string. @@ -635,7 +618,7 @@ def print_1_device_traversal(i, j, k): return func+"="+log+" " else: return func+"="+"X"+" " - + def device_traversal(): if system_ready()==False: print("System's not ready.") @@ -659,18 +642,18 @@ def device_traversal(): if ret == False: continue log = print_1_device_traversal(i, j, k) - print log, + print log, if k.find('present')!= -1: ret, k = get_path_sfp_presence(port_index) if ret == False: continue log = print_1_device_traversal(i, j, k) - print log, - + print log, + else: for k in (ALL_DEVICE[i][j]): log = print_1_device_traversal(i, j, k) - print log, + print log, print print("----------------------------------------------------------------") @@ -679,9 +662,9 @@ def device_traversal(): return def device_exist(): - ret1, log = log_os_system("ls "+i2c_prefix+"*0070", 0) - ret2, log = log_os_system("ls "+i2c_prefix+"i2c-2", 0) - return not(ret1 or ret2) + ret1 = log_os_system("ls "+i2c_prefix+"*0070", 0) + ret2 = log_os_system("ls "+i2c_prefix+"i2c-2", 0) + return not(ret1[0] or ret2[0]) if __name__ == "__main__": main() diff --git a/platform/broadcom/sonic-platform-modules-accton/as5812-54x/utils/accton_as5812_util.py b/platform/broadcom/sonic-platform-modules-accton/as5812-54x/utils/accton_as5812_util.py index 35ae80f5385d..be4b5a450c19 100755 --- a/platform/broadcom/sonic-platform-modules-accton/as5812-54x/utils/accton_as5812_util.py +++ b/platform/broadcom/sonic-platform-modules-accton/as5812-54x/utils/accton_as5812_util.py @@ -80,7 +80,6 @@ 'sfp': ['sfp_is_present ', 'sfp_tx_disable']} QSFP_START = 48 -I2C_BUS_ORDER = -1 sfp_map = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, @@ -241,7 +240,7 @@ def log_os_system(cmd, show): return status, output def driver_inserted(): - ret, lsmod = log_os_system("lsmod| grep accton", 0) + ret, lsmod = log_os_system("ls /sys/module | grep accton", 0) logging.info('mods:'+lsmod) if len(lsmod) ==0: return False @@ -293,34 +292,23 @@ def driver_uninstall(): def i2c_order_check(): # i2c bus 0 and 1 might be installed in different order. # Here check if 0x70 is exist @ i2c-0 - tmp = "echo pca9548 0x70 > /sys/bus/i2c/devices/i2c-1/new_device" - log_os_system(tmp, 0) - if not device_exist(): + tmp = "i2cget -y -f 0 0x70" + ret = log_os_system(tmp, 0) + if not ret[0]: order = 1 else: order = 0 - tmp = "echo 0x70 > /sys/bus/i2c/devices/i2c-1/delete_device" - log_os_system(tmp, 0) + m = "[%s]Detected I2C_BUS_ORDER:%d" % (os.path.basename(__file__), order) + my_log(m) return order -def update_i2c_order(): - global I2C_BUS_ORDER - - order = i2c_order_check() - I2C_BUS_ORDER = order - print "[%s]Detected I2C_BUS_ORDER:%d" % (os.path.basename(__file__), I2C_BUS_ORDER) - def get_i2c_order(): - global I2C_BUS_ORDER - if I2C_BUS_ORDER < 0: - update_i2c_order() + return i2c_order_check() def device_install(): global FORCE - global I2C_BUS_ORDER - update_i2c_order() - order = I2C_BUS_ORDER + order = get_i2c_order() # if 0x76 is not exist @i2c-0, use reversed bus order if order: for i in range(0,len(mknod2)): @@ -344,7 +332,7 @@ def device_install(): print output if FORCE == 0: return status - + for i in range(0,len(sfp_map)): if i < QSFP_START: status, output =log_os_system("echo optoe2 0x50 > /sys/bus/i2c/devices/i2c-"+str(sfp_map[i])+"/new_device", 1) @@ -359,7 +347,7 @@ def device_install(): print output if FORCE == 0: return status - + return def device_uninstall(): @@ -372,8 +360,8 @@ def device_uninstall(): print output if FORCE == 0: return status - status, output = log_os_system("ls /sys/bus/i2c/devices/1-0070", 0) - order = 0 if (status == 0) else 1 + + order = get_i2c_order() if order == 0: nodelist = mknod else: @@ -526,19 +514,15 @@ def show_eeprom(index): def get_cpld_path(index): - global I2C_BUS_ORDER - - if I2C_BUS_ORDER < 0: - get_i2c_order() - - if I2C_BUS_ORDER !=0 : + order = get_i2c_order() + if order !=0 : return port_cpld_path[index].replace("0-", "1-") else: return port_cpld_path[index] def cpld_path_of_port(port_index): if port_index < 1 and port_index > DEVICE_NO['sfp']: - return None + return None if port_index < 25: return get_cpld_path(0) else: @@ -550,7 +534,7 @@ def get_path_sfp_tx_dis(port_index): return False, '' else: dev = cpld_p+"module_tx_disable_"+str(port_index) - return True, dev + return True, dev def get_path_sfp_presence(port_index): cpld_p = cpld_path_of_port(port_index) @@ -558,7 +542,7 @@ def get_path_sfp_presence(port_index): return False, '' else: dev = cpld_p+"module_present_"+str(port_index) - return True, dev + return True, dev def set_device(args): @@ -635,7 +619,7 @@ def print_1_device_traversal(i, j, k): return func+"="+log+" " else: return func+"="+"X"+" " - + def device_traversal(): if system_ready()==False: print("System's not ready.") @@ -659,18 +643,18 @@ def device_traversal(): if ret == False: continue log = print_1_device_traversal(i, j, k) - print log, + print log, if k.find('present')!= -1: ret, k = get_path_sfp_presence(port_index) if ret == False: continue log = print_1_device_traversal(i, j, k) - print log, - + print log, + else: for k in (ALL_DEVICE[i][j]): log = print_1_device_traversal(i, j, k) - print log, + print log, print print("----------------------------------------------------------------") diff --git a/platform/broadcom/sonic-platform-modules-accton/as5835-54x/utils/accton_as5835_54x_util.py b/platform/broadcom/sonic-platform-modules-accton/as5835-54x/utils/accton_as5835_54x_util.py index ee722ea03040..87ef06f0de16 100755 --- a/platform/broadcom/sonic-platform-modules-accton/as5835-54x/utils/accton_as5835_54x_util.py +++ b/platform/broadcom/sonic-platform-modules-accton/as5835-54x/utils/accton_as5835_54x_util.py @@ -21,13 +21,13 @@ options: -h | --help : this help message -d | --debug : run with debug mode - -f | --force : ignore error during installation or clean + -f | --force : ignore error during installation or clean command: install : install drivers and generate related sysfs nodes clean : uninstall drivers and remove related sysfs nodes show : show all systen status sff : dump SFP eeprom - set : change board setting with fan|led|sfp + set : change board setting with fan|led|sfp """ import commands @@ -45,7 +45,7 @@ verbose = False DEBUG = False args = [] -ALL_DEVICE = {} +ALL_DEVICE = {} DEVICE_NO = {'led':5, 'fan':5,'thermal':4, 'psu':2, 'sfp':54} FORCE = 0 #logging.basicConfig(filename= PROJECT_NAME+'.log', filemode='w',level=logging.DEBUG) @@ -54,37 +54,37 @@ if DEBUG == True: print sys.argv[0] - print 'ARGV :', sys.argv[1:] + print 'ARGV :', sys.argv[1:] def main(): global DEBUG global args global FORCE - + if len(sys.argv)<2: show_help() - + options, args = getopt.getopt(sys.argv[1:], 'hdf', ['help', 'debug', 'force', ]) - if DEBUG == True: + if DEBUG == True: print options print args print len(sys.argv) - + for opt, arg in options: if opt in ('-h', '--help'): show_help() - elif opt in ('-d', '--debug'): + elif opt in ('-d', '--debug'): DEBUG = True logging.basicConfig(level=logging.INFO) - elif opt in ('-f', '--force'): + elif opt in ('-f', '--force'): FORCE = 1 else: - logging.info('no option') - for arg in args: + logging.info('no option') + for arg in args: if arg == 'install': do_install() elif arg == 'clean': @@ -94,23 +94,23 @@ def main(): elif arg == 'sff': if len(args)!=2: show_eeprom_help() - elif int(args[1]) ==0 or int(args[1]) > DEVICE_NO['sfp']: + elif int(args[1]) ==0 or int(args[1]) > DEVICE_NO['sfp']: show_eeprom_help() else: - show_eeprom(args[1]) - return + show_eeprom(args[1]) + return elif arg == 'set': if len(args)<3: show_set_help() else: - set_device(args[1:]) - return + set_device(args[1:]) + return else: show_help() - - - return 0 - + + + return 0 + def show_help(): print __doc__ % {'scriptName' : sys.argv[0].split("/")[-1]} sys.exit(0) @@ -119,36 +119,36 @@ def show_set_help(): cmd = sys.argv[0].split("/")[-1]+ " " + args[0] print cmd +" [led|sfp|fan]" print " use \""+ cmd + " led 0-4 \" to set led color" - print " use \""+ cmd + " fan 0-100\" to set fan duty percetage" - print " use \""+ cmd + " sfp 1-54 {0|1}\" to set sfp# tx_disable" - sys.exit(0) - + print " use \""+ cmd + " fan 0-100\" to set fan duty percetage" + print " use \""+ cmd + " sfp 1-48 {0|1}\" to set sfp# tx_disable" + sys.exit(0) + def show_eeprom_help(): cmd = sys.argv[0].split("/")[-1]+ " " + args[0] - print " use \""+ cmd + " 1-54 \" to dump sfp# eeprom" - sys.exit(0) - + print " use \""+ cmd + " 1-54 \" to dump sfp# eeprom" + sys.exit(0) + def my_log(txt): if DEBUG == True: - print "[Debug]"+txt + print "[Debug]"+txt return - + def log_os_system(cmd, show): - logging.info('Run :'+cmd) - status, output = commands.getstatusoutput(cmd) + logging.info('Run :'+cmd) + status, output = commands.getstatusoutput(cmd) my_log (cmd +"with result:" + str(status)) - my_log (" output:"+output) + my_log (" output:"+output) if status: logging.info('Failed :'+cmd) if show: print('Failed :'+cmd) return status, output - + def driver_check(): - ret, lsmod = log_os_system("lsmod| grep accton", 0) + ret, lsmod = log_os_system("ls /sys/module/ | grep accton", 0) logging.info('mods:'+lsmod) if len(lsmod) ==0: - return False + return False return True @@ -165,30 +165,30 @@ def driver_check(): def driver_install(): global FORCE - status, output = log_os_system("depmod", 1) + log_os_system("depmod", 1) for i in range(0,len(kos)): - status, output = log_os_system(kos[i], 1) - if status: - if FORCE == 0: - return status + ret = log_os_system(kos[i], 1) + if ret[0]: + if FORCE == 0: + return ret[0] return 0 - + def driver_uninstall(): global FORCE for i in range(0,len(kos)): rm = kos[-(i+1)].replace("modprobe", "modprobe -rq") - rm = rm.replace("insmod", "rmmod") + rm = rm.replace("insmod", "rmmod") lst = rm.split(" ") if len(lst) > 3: del(lst[3]) - rm = " ".join(lst) - status, output = log_os_system(rm, 1) - if status: - if FORCE == 0: - return status + rm = " ".join(lst) + ret = log_os_system(rm, 1) + if ret[0]: + if FORCE == 0: + return ret[0] return 0 -led_prefix ='/sys/class/leds/accton_'+PROJECT_NAME+'_led::' +led_prefix ='/sys/class/leds/'+PROJECT_NAME+'_led::' hwmon_types = {'led': ['diag','fan','loc','psu1','psu2']} hwmon_nodes = {'led': ['brightness'] } hwmon_prefix ={'led': led_prefix} @@ -196,13 +196,13 @@ def driver_uninstall(): i2c_prefix = '/sys/bus/i2c/devices/' i2c_bus = {'fan': ['3-0063'] , 'thermal': ['18-004b','19-004c', '20-0049', '21-004a'] , - 'psu': ['11-0050','12-0053'], + 'psu': ['11-0050','12-0053'], 'sfp': ['-0050']} i2c_nodes = {'fan': ['present', 'front_speed_rpm', 'rear_speed_rpm'] , 'thermal': ['hwmon/hwmon*/temp1_input'] , 'psu': ['psu_present ', 'psu_power_good'] , 'sfp': ['module_present_', 'module_tx_disable_']} - + sfp_map = [42,43,44,45,46,47,48,49,50,51, 52,53,54,55,56,57,58,59,60,61, 62,63,64,65,66,67,68,69,70,71, @@ -216,7 +216,7 @@ def driver_uninstall(): cpld_of_module = {'3-0061': list(range(0,38)), '3-0062': list(range(38,54)) } -mknod =[ +mknod =[ 'echo pca9548 0x77 > /sys/bus/i2c/devices/i2c-1/new_device', 'echo pca9548 0x70 > /sys/bus/i2c/devices/i2c-2/new_device' , 'echo pca9548 0x71 > /sys/bus/i2c/devices/i2c-2/new_device' , @@ -243,7 +243,7 @@ def driver_uninstall(): 'echo as5835_54x_cpld2 0x61 > /sys/bus/i2c/devices/i2c-3/new_device', 'echo as5835_54x_cpld3 0x62 > /sys/bus/i2c/devices/i2c-3/new_device'] -mknod2 =[ +mknod2 =[ 'echo pca9548 0x77 > /sys/bus/i2c/devices/i2c-0/new_device', 'echo pca9548 0x70 > /sys/bus/i2c/devices/i2c-2/new_device' , 'echo pca9548 0x71 > /sys/bus/i2c/devices/i2c-2/new_device' , @@ -269,54 +269,52 @@ def driver_uninstall(): 'echo as5835_54x_cpld1 0x60 > /sys/bus/i2c/devices/i2c-3/new_device', 'echo as5835_54x_cpld2 0x61 > /sys/bus/i2c/devices/i2c-3/new_device', 'echo as5835_54x_cpld3 0x62 > /sys/bus/i2c/devices/i2c-3/new_device'] - - -def i2c_order_check(): + + +def i2c_order_check(): # i2c bus 0 and 1 might be installed in different order. # Here check if 0x77 is exist @ i2c-1 - tmp = "echo pca9548 0x77 > /sys/bus/i2c/devices/i2c-1/new_device" - status, output = log_os_system(tmp, 0) - if not device_exist(): + tmp = "i2cget -y -f 0 0x77" + ret = log_os_system(tmp, 0) + if not ret[0]: order = 1 else: order = 0 - tmp = "echo 0x77 > /sys/bus/i2c/devices/i2c-1/delete_device" - status, output = log_os_system(tmp, 0) return order - + def device_install(): global FORCE - + order = i2c_order_check() - - # if 0x77 is not exist @i2c-1, use reversed bus order - if order: + + # if 0x77 is not exist @i2c-1, use reversed bus order + if order: for i in range(0,len(mknod2)): - #for pca954x need times to built new i2c buses + #for pca954x need times to built new i2c buses if mknod2[i].find('pca954') != -1: - time.sleep(1) - + time.sleep(1) + status, output = log_os_system(mknod2[i], 1) time.sleep(0.01) if status: print output if FORCE == 0: - return status + return status else: for i in range(0,len(mknod)): - #for pca954x need times to built new i2c buses + #for pca954x need times to built new i2c buses if mknod[i].find('pca954') != -1: - time.sleep(1) - + time.sleep(1) + status, output = log_os_system(mknod[i], 1) if status: print output - if FORCE == 0: - return status - + if FORCE == 0: + return status + for i in range(49, 55): #Set qsfp port to normal state - log_os_system("echo 0 > /sys/bus/i2c/devices/3-0062/module_reset_" + str(i), 1) - + log_os_system("echo 0 > /sys/bus/i2c/devices/3-0062/module_reset_" + str(i), 1) + for i in range(0,len(sfp_map)): if i < qsfp_start: status, output =log_os_system("echo optoe2 0x50 > /sys/bus/i2c/devices/i2c-"+str(sfp_map[i])+"/new_device", 1) @@ -324,32 +322,27 @@ def device_install(): status, output =log_os_system("echo optoe1 0x50 > /sys/bus/i2c/devices/i2c-"+str(sfp_map[i])+"/new_device", 1) if status: print output - if FORCE == 0: - return status - return - + if FORCE == 0: + return status + return + def device_uninstall(): global FORCE - - status, output =log_os_system("ls /sys/bus/i2c/devices/0-0077", 0) - if status==0: - I2C_ORDER=1 - else: - I2C_ORDER=0 for i in range(0,len(sfp_map)): target = "/sys/bus/i2c/devices/i2c-"+str(sfp_map[i])+"/delete_device" status, output =log_os_system("echo 0x50 > "+ target, 1) if status: print output - if FORCE == 0: + if FORCE == 0: return status - - if I2C_ORDER==0: - nodelist = mknod - else: + + order = i2c_order_check() + if order: nodelist = mknod2 - + else: + nodelist = mknod + for i in range(len(nodelist)): target = nodelist[-(i+1)] temp = target.split() @@ -358,72 +351,72 @@ def device_uninstall(): status, output = log_os_system(" ".join(temp), 1) if status: print output - if FORCE == 0: - return status - - return - + if FORCE == 0: + return status + + return + def system_ready(): if driver_check() == False: return False - if not device_exist(): + if not device_exist(): return False return True - + def do_install(): print "Checking system...." if driver_check() == False: - print "No driver, installing...." + print "No driver, installing...." status = driver_install() if status: - if FORCE == 0: + if FORCE == 0: return status else: - print PROJECT_NAME.upper()+" drivers detected...." + print PROJECT_NAME.upper()+" drivers detected...." if not device_exist(): - print "No device, installing...." - status = device_install() + print "No device, installing...." + status = device_install() if status: - if FORCE == 0: - return status + if FORCE == 0: + return status else: - print PROJECT_NAME.upper()+" devices detected...." + print PROJECT_NAME.upper()+" devices detected...." return - + def do_uninstall(): print "Checking system...." if not device_exist(): - print PROJECT_NAME.upper() +" has no device installed...." + print PROJECT_NAME.upper() +" has no device installed...." else: - print "Removing device...." - status = device_uninstall() + print "Removing device...." + status = device_uninstall() if status: - if FORCE == 0: - return status - + if FORCE == 0: + return status + if driver_check()== False : print PROJECT_NAME.upper() +" has no driver installed...." else: print "Removing installed driver...." status = driver_uninstall() if status: - if FORCE == 0: - return status - - return + if FORCE == 0: + return status + + return def devices_info(): global DEVICE_NO global ALL_DEVICE global i2c_bus, hwmon_types - for key in DEVICE_NO: - ALL_DEVICE[key]= {} + for key in DEVICE_NO: + ALL_DEVICE[key]= {} for i in range(0,DEVICE_NO[key]): ALL_DEVICE[key][key+str(i+1)] = [] - + for key in i2c_bus: buses = i2c_bus[key] - nodes = i2c_nodes[key] + nodes = i2c_nodes[key] for i in range(0,len(buses)): for j in range(0,len(nodes)): if 'fan' == key: @@ -431,7 +424,7 @@ def devices_info(): node = key+str(k+1) path = i2c_prefix+ buses[i]+"/fan"+str(k+1)+"_"+ nodes[j] my_log(node+": "+ path) - ALL_DEVICE[key][node].append(path) + ALL_DEVICE[key][node].append(path) elif 'sfp' == key: for k in range(0,DEVICE_NO[key]): for lk in cpld_of_module: @@ -442,160 +435,160 @@ def devices_info(): ALL_DEVICE[key][node].append(path) else: node = key+str(i+1) - path = i2c_prefix+ buses[i]+"/"+ nodes[j] + path = i2c_prefix+ buses[i]+"/"+ nodes[j] my_log(node+": "+ path) - ALL_DEVICE[key][node].append(path) - + ALL_DEVICE[key][node].append(path) + for key in hwmon_types: itypes = hwmon_types[key] - nodes = hwmon_nodes[key] + nodes = hwmon_nodes[key] for i in range(0,len(itypes)): - for j in range(0,len(nodes)): + for j in range(0,len(nodes)): node = key+"_"+itypes[i] - path = hwmon_prefix[key]+ itypes[i]+"/"+ nodes[j] + path = hwmon_prefix[key]+ itypes[i]+"/"+ nodes[j] my_log(node+": "+ path) - ALL_DEVICE[key][ key+str(i+1)].append(path) - + ALL_DEVICE[key][ key+str(i+1)].append(path) + #show dict all in the order if DEBUG == True: for i in sorted(ALL_DEVICE.keys()): print(i+": ") - for j in sorted(ALL_DEVICE[i].keys()): + for j in sorted(ALL_DEVICE[i].keys()): print(" "+j) - for k in (ALL_DEVICE[i][j]): + for k in (ALL_DEVICE[i][j]): print(" "+" "+k) - return - + return + def show_eeprom(index): if system_ready()==False: - print("System's not ready.") + print("System's not ready.") print("Please install first!") - return - + return + if len(ALL_DEVICE)==0: - devices_info() + devices_info() node = ALL_DEVICE['sfp'] ['sfp'+str(index)][0] node = node.replace(node.split("/")[-1], 'sfp_eeprom') # check if got hexdump command in current environment ret, log = log_os_system("which hexdump", 0) - ret, log2 = log_os_system("which busybox hexdump", 0) - if len(log): + ret, log2 = log_os_system("which busybox hexdump", 0) + if log : hex_cmd = 'hexdump' - elif len(log2): + elif log2 : hex_cmd = ' busybox hexdump' else: log = 'Failed : no hexdump cmd!!' logging.info(log) print log - return 1 - + return 1 + print node + ":" ret, log = log_os_system("cat "+node+"| "+hex_cmd+" -C", 1) - if ret==0: - print log + if ret==0: + print log else: - print "**********device no found**********" - return - + print "**********device no found**********" + return + def set_device(args): global DEVICE_NO global ALL_DEVICE if system_ready()==False: - print("System's not ready.") + print("System's not ready.") print("Please install first!") - return - + return + if len(ALL_DEVICE)==0: - devices_info() - + devices_info() + if args[0]=='led': if int(args[1])>4: show_set_help() return #print ALL_DEVICE['led'] - for i in range(0,len(ALL_DEVICE['led'])): - for k in (ALL_DEVICE['led']['led'+str(i+1)]): - ret, log = log_os_system("echo "+args[1]+" >"+k, 1) - if ret: - return ret + for i in range(0,len(ALL_DEVICE['led'])): + for k in (ALL_DEVICE['led']['led'+str(i+1)]): + ret = log_os_system("echo "+args[1]+" >"+k, 1) + if ret[0]: + return ret[0] elif args[0]=='fan': if int(args[1])>100: show_set_help() return #print ALL_DEVICE['fan'] - #fan1~5 is all fine, all fan share same setting - node = ALL_DEVICE['fan'] ['fan1'][0] + #fan1~5 is all fine, all fan share same setting + node = ALL_DEVICE['fan'] ['fan1'][0] node = node.replace(node.split("/")[-1], 'fan_duty_cycle_percentage') - ret, log = log_os_system("cat "+ node, 1) - if ret==0: - print ("Previous fan duty: " + log.strip() +"%") - ret, log = log_os_system("echo "+args[1]+" >"+node, 1) - if ret==0: - print ("Current fan duty: " + args[1] +"%") - return ret + ret = log_os_system("cat "+ node, 1) + if ret[0] == 0: + print ("Previous fan duty: " + log.strip() +"%") + ret = log_os_system("echo "+args[1]+" >"+node, 1) + if ret[0] == 0: + print ("Current fan duty: " + args[1] +"%") + return ret[0] elif args[0]=='sfp': - if int(args[1])> DEVICE_NO[args[0]] or int(args[1])==0: + if int(args[1])> qsfp_start or int(args[1])==0: show_set_help() - return + return if len(args)<2: show_set_help() - return - + return + if int(args[2])>1: show_set_help() return - - #print ALL_DEVICE[args[0]] - for i in range(0,len(ALL_DEVICE[args[0]])): - for j in ALL_DEVICE[args[0]][args[0]+str(args[1])]: - if j.find('tx_disable')!= -1: - ret, log = log_os_system("echo "+args[2]+" >"+ j, 1) - if ret: - return ret - + + #print ALL_DEVICE[args[0]] + for i in range(0,len(ALL_DEVICE[args[0]])): + for j in ALL_DEVICE[args[0]][args[0]+str(args[1])]: + if j.find('tx_disable')!= -1: + ret = log_os_system("echo "+args[2]+" >"+ j, 1) + if ret[0]: + return ret[0] + return - -#get digits inside a string. -#Ex: 31 for "sfp31" + +#get digits inside a string. +#Ex: 31 for "sfp31" def get_value(input): digit = re.findall('\d+', input) return int(digit[0]) - + def device_traversal(): if system_ready()==False: - print("System's not ready.") + print("System's not ready.") print("Please install first!") - return - + return + if len(ALL_DEVICE)==0: devices_info() for i in sorted(ALL_DEVICE.keys()): - print("============================================") + print("============================================") print(i.upper()+": ") print("============================================") - - for j in sorted(ALL_DEVICE[i].keys(), key=get_value): + + for j in sorted(ALL_DEVICE[i].keys(), key=get_value): print " "+j+":", for k in (ALL_DEVICE[i][j]): ret, log = log_os_system("cat "+k, 0) func = k.split("/")[-1].strip() func = re.sub(j+'_','',func,1) - func = re.sub(i.lower()+'_','',func,1) + func = re.sub(i.lower()+'_','',func,1) if ret==0: - print func+"="+log+" ", + print func+"="+log+" ", else: print func+"="+"X"+" ", - print + print print("----------------------------------------------------------------") - - + + print return - + def device_exist(): - ret1, log = log_os_system("ls "+i2c_prefix+"*0077", 0) - ret2, log = log_os_system("ls "+i2c_prefix+"i2c-2", 0) - return not(ret1 or ret2) + ret1 = log_os_system("ls "+i2c_prefix+"*0077", 0) + ret2 = log_os_system("ls "+i2c_prefix+"i2c-2", 0) + return not(ret1[0] or ret2[0]) if __name__ == "__main__": main() diff --git a/platform/broadcom/sonic-platform-modules-accton/as7312-54x/classes/fanutil.py b/platform/broadcom/sonic-platform-modules-accton/as7312-54x/classes/fanutil.py index 207436c1fc96..92e79da72746 100755 --- a/platform/broadcom/sonic-platform-modules-accton/as7312-54x/classes/fanutil.py +++ b/platform/broadcom/sonic-platform-modules-accton/as7312-54x/classes/fanutil.py @@ -100,26 +100,17 @@ def _get_fan_node_val(self, fan_num, node_num): return None device_path = self.get_fan_to_device_path(fan_num, node_num) - try: - val_file = open(device_path, 'r') + with open(device_path, 'r') as val_file: + content = val_file.readline().rstrip() + if not content: + logging.debug('GET. content is NULL, path:%s', device_path) + return None except IOError as e: - logging.error('GET. unable to open file: %s', str(e)) - return None - - content = val_file.readline().rstrip() - - if content == '': - logging.debug('GET. content is NULL. device_path:%s', device_path) - return None - - try: - val_file.close() - except: - logging.debug('GET. unable to close file. device_path:%s', device_path) - return None + logging.error('GET. unable to read file: %s', str(e)) + else: + return int(content) - return int(content) def _set_fan_node_val(self, fan_num, node_num, val): if fan_num < self.FAN_NUM_1_IDX or fan_num > self.FAN_NUM_ON_MAIN_BROAD: @@ -137,19 +128,11 @@ def _set_fan_node_val(self, fan_num, node_num, val): device_path = self.get_fan_to_device_path(fan_num, node_num) try: - val_file = open(device_path, 'w') + with open(device_path, 'w') as val_file: + val_file.write(content) except IOError as e: logging.error('GET. unable to open file: %s', str(e)) return None - - val_file.write(content) - - try: - val_file.close() - except: - logging.debug('GET. unable to close file. device_path:%s', device_path) - return None - return True def __init__(self): @@ -193,32 +176,20 @@ def get_fan_dir(self, fan_num): def get_fan_duty_cycle(self): #duty_path = self.FAN_DUTY_PATH try: - val_file = open(self.FAN_DUTY_PATH) + with open(self.FAN_DUTY_PATH) as val_file: + content = val_file.readline().rstrip() except IOError as e: print "Error: unable to open file: %s" % str(e) return False - - content = val_file.readline().rstrip() - val_file.close() - return int(content) - #self._get_fan_node_val(fan_num, self.FAN_NODE_DUTY_IDX_OF_MAP) -#static u32 reg_val_to_duty_cycle(u8 reg_val) -#{ -# reg_val &= FAN_DUTY_CYCLE_REG_MASK; -# return ((u32)(reg_val+1) * 625 + 75)/ 100; -#} -# + def set_fan_duty_cycle(self, val): - try: - fan_file = open(self.FAN_DUTY_PATH, 'r+') + with open(self.FAN_DUTY_PATH, 'r+') as val_file: + val_file.write(str(val)) except IOError as e: print "Error: unable to open file: %s" % str(e) return False - #val = ((val + 1 ) * 625 +75 ) / 100 - fan_file.write(str(val)) - fan_file.close() return True #def get_fanr_fault(self, fan_num): diff --git a/platform/broadcom/sonic-platform-modules-accton/as7312-54x/classes/thermalutil.py b/platform/broadcom/sonic-platform-modules-accton/as7312-54x/classes/thermalutil.py index 68f0ef900df6..4b3868ee6ec9 100755 --- a/platform/broadcom/sonic-platform-modules-accton/as7312-54x/classes/thermalutil.py +++ b/platform/broadcom/sonic-platform-modules-accton/as7312-54x/classes/thermalutil.py @@ -69,26 +69,19 @@ def _get_thermal_node_val(self, thermal_num): device_path = self.get_thermal_to_device_path(thermal_num) for filename in glob.glob(device_path): try: - val_file = open(filename, 'r') + with open(filename, 'r') as val_file: + val_file = open(filename, 'r') + content = val_file.readline().rstrip() + if not content : + logging.debug('File is NULL. path:%s', device_path) + return None + else: + return int(content) except IOError as e: logging.error('GET. unable to open file: %s', str(e)) - return None - content = val_file.readline().rstrip() - - if content == '': - logging.debug('GET. content is NULL. device_path:%s', device_path) - return None - - try: - val_file.close() - except: - logging.debug('GET. unable to close file. device_path:%s', device_path) - return None + return None - return int(content) - - def get_num_thermals(self): return self.THERMAL_NUM_ON_MAIN_BROAD diff --git a/platform/broadcom/sonic-platform-modules-accton/as7312-54x/utils/accton_as7312_monitor.py b/platform/broadcom/sonic-platform-modules-accton/as7312-54x/utils/accton_as7312_monitor.py index 8e115c3ad88b..2f87c3f58736 100755 --- a/platform/broadcom/sonic-platform-modules-accton/as7312-54x/utils/accton_as7312_monitor.py +++ b/platform/broadcom/sonic-platform-modules-accton/as7312-54x/utils/accton_as7312_monitor.py @@ -72,6 +72,7 @@ class accton_as7312_monitor(object): _new_perc = 0 _ori_perc = 0 + def __init__(self, log_file, log_level): """Needs a logger and a logger level.""" # set up logging to file @@ -93,6 +94,9 @@ def __init__(self, log_file, log_level): logging.debug('SET. logfile:%s / loglevel:%d', log_file, log_level) + self.thermal = ThermalUtil() + self.fan = FanUtil() + def manage_fans(self): max_duty = DUTY_MAX fan_policy_f2b = { @@ -113,8 +117,8 @@ def manage_fans(self): 2: 50000, } - thermal = ThermalUtil() - fan = FanUtil() + thermal = self.thermal + fan = self.fan for x in range(fan.get_idx_fan_start(), fan.get_num_fans()+1): fan_status = fan.get_fan_status(x) if fan_status is None: diff --git a/platform/broadcom/sonic-platform-modules-accton/as7312-54x/utils/accton_as7312_util.py b/platform/broadcom/sonic-platform-modules-accton/as7312-54x/utils/accton_as7312_util.py index f5438f28f6fc..db58d769b3aa 100755 --- a/platform/broadcom/sonic-platform-modules-accton/as7312-54x/utils/accton_as7312_util.py +++ b/platform/broadcom/sonic-platform-modules-accton/as7312-54x/utils/accton_as7312_util.py @@ -1,5 +1,4 @@ #!/usr/bin/env python -# # Copyright (C) 2016 Accton Networks, Inc. # # This program is free software: you can redistribute it and/or modify @@ -21,13 +20,13 @@ options: -h | --help : this help message -d | --debug : run with debug mode - -f | --force : ignore error during installation or clean + -f | --force : ignore error during installation or clean command: install : install drivers and generate related sysfs nodes clean : uninstall drivers and remove related sysfs nodes show : show all systen status sff : dump SFP eeprom - set : change board setting with fan|led|sfp + set : change board setting with fan|led|sfp """ import commands @@ -38,550 +37,565 @@ import time - - PROJECT_NAME = 'as7312_54x' version = '0.1.0' verbose = False DEBUG = False -args = [] -ALL_DEVICE = {} -DEVICE_NO = {'led':5, 'fan':6,'thermal':4, 'psu':2, 'sfp':54} +ARGS = [] +ALL_DEVICE = {} +DEVICE_NO = { + 'led': 5, + 'fan': 6, + 'thermal': 4, + 'psu': 2, + 'sfp': 54, + } FORCE = 0 -#logging.basicConfig(filename= PROJECT_NAME+'.log', filemode='w',level=logging.DEBUG) -#logging.basicConfig(level=logging.INFO) +# logging.basicConfig(filename= PROJECT_NAME+'.log', filemode='w',level=logging.DEBUG) +# logging.basicConfig(level=logging.INFO) if DEBUG == True: print sys.argv[0] - print 'ARGV :', sys.argv[1:] + print 'ARGV :', sys.argv[1:] def main(): global DEBUG - global args + global ARGS global FORCE - - if len(sys.argv)<2: + + if len(sys.argv) < 2: show_help() - - options, args = getopt.getopt(sys.argv[1:], 'hdf', ['help', - 'debug', - 'force', - ]) - if DEBUG == True: + + (options, ARGS) = getopt.getopt(sys.argv[1:], 'hdf', + ['help','debug', 'force']) + if DEBUG == True: print options - print args + print ARGS print len(sys.argv) - - for opt, arg in options: + + for (opt, arg) in options: if opt in ('-h', '--help'): show_help() - elif opt in ('-d', '--debug'): + elif opt in ('-d', '--debug'): DEBUG = True logging.basicConfig(level=logging.INFO) - elif opt in ('-f', '--force'): + elif opt in ('-f', '--force'): FORCE = 1 else: - logging.info('no option') - for arg in args: + logging.info('no option') + for arg in ARGS: if arg == 'install': - do_install() + do_install() elif arg == 'clean': - do_uninstall() + do_uninstall() elif arg == 'show': - device_traversal() + device_traversal() elif arg == 'sff': - if len(args)!=2: + if len(ARGS) != 2: show_eeprom_help() - elif int(args[1]) ==0 or int(args[1]) > DEVICE_NO['sfp']: + elif int(ARGS[1]) == 0 or int(ARGS[1]) > DEVICE_NO['sfp']: show_eeprom_help() else: - show_eeprom(args[1]) - return + show_eeprom(ARGS[1]) + return elif arg == 'set': - if len(args)<3: + if len(ARGS) < 3: show_set_help() else: - set_device(args[1:]) - return + set_device(ARGS[1:]) + return else: show_help() - - - return 0 - + return 0 + + def show_help(): - print __doc__ % {'scriptName' : sys.argv[0].split("/")[-1]} + print __doc__ % {'scriptName': sys.argv[0].split('/')[-1]} + sys.exit(0) + + +def show_set_help(): + cmd = sys.argv[0].split('/')[-1] + ' ' + ARGS[0] + print cmd + ' [led|sfp|fan]' + print ' use "' + cmd + ' led 0-4 " to set led color' + print ' use "' + cmd + ' fan 0-100" to set fan duty percetage' + print ' use "' + cmd + ' sfp 1-48 {0|1}" to set sfp# tx_disable' sys.exit(0) -def show_set_help(): - cmd = sys.argv[0].split("/")[-1]+ " " + args[0] - print cmd +" [led|sfp|fan]" - print " use \""+ cmd + " led 0-4 \" to set led color" - print " use \""+ cmd + " fan 0-100\" to set fan duty percetage" - print " use \""+ cmd + " sfp 1-54 {0|1}\" to set sfp# tx_disable" - sys.exit(0) - -def show_eeprom_help(): - cmd = sys.argv[0].split("/")[-1]+ " " + args[0] - print " use \""+ cmd + " 1-54 \" to dump sfp# eeprom" - sys.exit(0) - + +def show_eeprom_help(): + cmd = sys.argv[0].split('/')[-1] + ' ' + ARGS[0] + print ' use "' + cmd + ' 1-54 " to dump sfp# eeprom' + sys.exit(0) + + def my_log(txt): if DEBUG == True: - print "[ROY]"+txt + print '[DBG]' + txt return - + + def log_os_system(cmd, show): - logging.info('Run :'+cmd) - status, output = commands.getstatusoutput(cmd) - my_log (cmd +"with result:" + str(status)) - my_log (" output:"+output) + logging.info('Run :' + cmd) + (status, output) = commands.getstatusoutput(cmd) + my_log(cmd + 'with result:' + str(status)) + my_log(' output:' + output) if status: - logging.info('Failed :'+cmd) + logging.info('Failed :' + cmd) if show: - print('Failed :'+cmd) - return status, output - + print 'Failed :' + cmd + return (status, output) + + def driver_check(): - ret, lsmod = log_os_system("lsmod| grep accton", 0) - logging.info('mods:'+lsmod) - if len(lsmod) ==0: - return False + (ret, lsmod) = log_os_system('ls /sys/module/ | grep accton', 0) + logging.info('mods:' + lsmod) + if not lsmod: + return False return True - kos = [ -'modprobe i2c_dev', -'modprobe i2c_mux_pca954x force_deselect_on_exit=1', -'modprobe accton_i2c_cpld' , -'modprobe ym2651y' , -'modprobe accton_as7312_54x_fan' , -'modprobe optoe' , -'modprobe accton_as7312_54x_leds' , -'modprobe accton_as7312_54x_psu' ] + 'modprobe i2c_dev', + 'modprobe i2c_mux_pca954x force_deselect_on_exit=1', + 'modprobe accton_i2c_cpld', + 'modprobe ym2651y', + 'modprobe accton_as7312_54x_fan', + 'modprobe optoe', + 'modprobe accton_as7312_54x_leds', + 'modprobe accton_as7312_54x_psu', + ] + def driver_install(): global FORCE - status, output = log_os_system("depmod", 1) - for i in range(0,len(kos)): - status, output = log_os_system(kos[i], 1) - if status: - if FORCE == 0: - return status + log_os_system('depmod', 1) + for i in range(0, len(kos)): + ret = log_os_system(kos[i], 1) + if ret[0] and FORCE == 0: + return status return 0 - + + def driver_uninstall(): global FORCE - for i in range(0,len(kos)): - rm = kos[-(i+1)].replace("modprobe", "modprobe -rq") - rm = rm.replace("insmod", "rmmod") - lst = rm.split(" ") + for i in range(0, len(kos)): + rm = kos[-(i + 1)].replace('modprobe', 'modprobe -rq') + rm = rm.replace('insmod', 'rmmod') + lst = rm.split(' ') if len(lst) > 3: - del(lst[3]) - rm = " ".join(lst) - status, output = log_os_system(rm, 1) - if status: - if FORCE == 0: - return status + del lst[3] + rm = ' '.join(lst) + ret = log_os_system(rm, 1) + if ret[0] and FORCE == 0: + return ret[0] return 0 -led_prefix ='/sys/class/leds/accton_'+PROJECT_NAME+'_led::' -hwmon_types = {'led': ['diag','fan','loc','psu1','psu2']} -hwmon_nodes = {'led': ['brightness'] } -hwmon_prefix ={'led': led_prefix} + +led_prefix = '/sys/class/leds/accton_' + PROJECT_NAME + '_led::' +hwmon_types = {'led': ['diag', 'fan', 'loc', 'psu1', 'psu2']} +hwmon_nodes = {'led': ['brightness']} +hwmon_prefix = {'led': led_prefix} i2c_prefix = '/sys/bus/i2c/devices/' -i2c_bus = {'fan': ['2-0066'] , - 'thermal': ['3-0048','3-0049', '3-004a', '3-004b'] , - 'psu': ['10-0051','11-0053'], - 'sfp': ['-0050']} -i2c_nodes = {'fan': ['present', 'front_speed_rpm', 'rear_speed_rpm'] , - 'thermal': ['hwmon/hwmon*/temp1_input'] , - 'psu': ['psu_present ', 'psu_power_good'] , - 'sfp': ['sfp_is_present', 'sfp_tx_disable']} - -sfp_map = [18,19,20,21,22,23,24,25,26,27, - 28,29,30,31,32,33,34,35,36,37, - 38,39,40,41,42,43,44,45,46,47, - 48,49,50,51,52,53,54,55,56,57, - 58,59,60,61,62,63,64,65,66,67, - 68,69,70,71] +i2c_bus = { + 'fan': ['2-0066'], + 'thermal': ['3-0048', '3-0049', '3-004a', '3-004b'], + 'psu': ['10-0050', '11-0053'], + 'sfp': ['-0050'], + } +i2c_nodes = { + 'fan': ['present', 'front_speed_rpm', 'rear_speed_rpm'], + 'thermal': ['hwmon/hwmon*/temp1_input'], + 'psu': ['psu_present ', 'psu_power_good'], + 'sfp': ['module_present', 'module_tx_disable'], + } + +sfp_map = [18, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, + 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, + 68, 69, 70, 71] qsfp_start = 48 -mknod =[ -'echo pca9548 0x76 > /sys/bus/i2c/devices/i2c-0/new_device', -'echo pca9548 0x71 > /sys/bus/i2c/devices/i2c-0/new_device' , -'echo pca9548 0x72 > /sys/bus/i2c/devices/i2c-1/new_device' , -'echo pca9548 0x73 > /sys/bus/i2c/devices/i2c-1/new_device' , -'echo pca9548 0x74 > /sys/bus/i2c/devices/i2c-1/new_device', -'echo pca9548 0x75 > /sys/bus/i2c/devices/i2c-1/new_device', -'echo pca9548 0x76 > /sys/bus/i2c/devices/i2c-1/new_device', -'echo pca9548 0x71 > /sys/bus/i2c/devices/i2c-1/new_device', -'echo pca9548 0x70 > /sys/bus/i2c/devices/i2c-1/new_device', -'echo 24c02 0x57 > /sys/bus/i2c/devices/i2c-1/new_device', - -'echo as7312_54x_fan 0x66 > /sys/bus/i2c/devices/i2c-2/new_device ', -'echo lm75 0x48 > /sys/bus/i2c/devices/i2c-3/new_device', -'echo lm75 0x49 > /sys/bus/i2c/devices/i2c-3/new_device', -'echo lm75 0x4a > /sys/bus/i2c/devices/i2c-3/new_device', -'echo lm75 0x4b > /sys/bus/i2c/devices/i2c-3/new_device', -'echo as7312_54x_psu1 0x53 > /sys/bus/i2c/devices/i2c-11/new_device', -'echo ym2651 0x5b > /sys/bus/i2c/devices/i2c-11/new_device', -'echo as7312_54x_psu2 0x50 > /sys/bus/i2c/devices/i2c-10/new_device', -'echo ym2651 0x58 > /sys/bus/i2c/devices/i2c-10/new_device', -'echo as7312_54x_cpld1 0x60 > /sys/bus/i2c/devices/i2c-4/new_device', -'echo as7312_54x_cpld2 0x62 > /sys/bus/i2c/devices/i2c-5/new_device', -'echo as7312_54x_cpld3 0x64 > /sys/bus/i2c/devices/i2c-6/new_device'] - -mknod2 =[ -'echo pca9548 0x76 > /sys/bus/i2c/devices/i2c-1/new_device', -'echo pca9548 0x71 > /sys/bus/i2c/devices/i2c-1/new_device' , -'echo pca9548 0x72 > /sys/bus/i2c/devices/i2c-0/new_device' , -'echo pca9548 0x73 > /sys/bus/i2c/devices/i2c-0/new_device' , -'echo pca9548 0x74 > /sys/bus/i2c/devices/i2c-0/new_device', -'echo pca9548 0x75 > /sys/bus/i2c/devices/i2c-0/new_device', -'echo pca9548 0x76 > /sys/bus/i2c/devices/i2c-0/new_device', -'echo pca9548 0x71 > /sys/bus/i2c/devices/i2c-0/new_device', -'echo pca9548 0x70 > /sys/bus/i2c/devices/i2c-0/new_device', -'echo 24c02 0x57 > /sys/bus/i2c/devices/i2c-0/new_device', - -'echo as7312_54x_fan 0x66 > /sys/bus/i2c/devices/i2c-2/new_device ', -'echo lm75 0x48 > /sys/bus/i2c/devices/i2c-3/new_device', -'echo lm75 0x49 > /sys/bus/i2c/devices/i2c-3/new_device', -'echo lm75 0x4a > /sys/bus/i2c/devices/i2c-3/new_device', -'echo lm75 0x4b > /sys/bus/i2c/devices/i2c-3/new_device', -'echo as7312_54x_psu1 0x53 > /sys/bus/i2c/devices/i2c-11/new_device', -'echo ym2651 0x5b > /sys/bus/i2c/devices/i2c-11/new_device', -'echo as7312_54x_psu2 0x50 > /sys/bus/i2c/devices/i2c-10/new_device', -'echo ym2651 0x58 > /sys/bus/i2c/devices/i2c-10/new_device', -'echo as7312_54x_cpld1 0x60 > /sys/bus/i2c/devices/i2c-4/new_device', -'echo as7312_54x_cpld2 0x62 > /sys/bus/i2c/devices/i2c-5/new_device', -'echo as7312_54x_cpld3 0x64 > /sys/bus/i2c/devices/i2c-6/new_device'] - - - -def i2c_order_check(): +mknod_common = [ + 'echo as7312_54x_fan 0x66 > /sys/bus/i2c/devices/i2c-2/new_device ', + 'echo lm75 0x48 > /sys/bus/i2c/devices/i2c-3/new_device', + 'echo lm75 0x49 > /sys/bus/i2c/devices/i2c-3/new_device', + 'echo lm75 0x4a > /sys/bus/i2c/devices/i2c-3/new_device', + 'echo lm75 0x4b > /sys/bus/i2c/devices/i2c-3/new_device', + 'echo as7312_54x_psu1 0x53 > /sys/bus/i2c/devices/i2c-11/new_device', + 'echo ym2651 0x5b > /sys/bus/i2c/devices/i2c-11/new_device', + 'echo as7312_54x_psu2 0x50 > /sys/bus/i2c/devices/i2c-10/new_device', + 'echo ym2651 0x58 > /sys/bus/i2c/devices/i2c-10/new_device', + 'echo as7312_54x_cpld1 0x60 > /sys/bus/i2c/devices/i2c-4/new_device', + 'echo as7312_54x_cpld2 0x62 > /sys/bus/i2c/devices/i2c-5/new_device', + 'echo as7312_54x_cpld3 0x64 > /sys/bus/i2c/devices/i2c-6/new_device'] + +mknod = [ + 'echo pca9548 0x76 > /sys/bus/i2c/devices/i2c-0/new_device', + 'echo pca9548 0x71 > /sys/bus/i2c/devices/i2c-0/new_device', + 'echo pca9548 0x72 > /sys/bus/i2c/devices/i2c-1/new_device', + 'echo pca9548 0x73 > /sys/bus/i2c/devices/i2c-1/new_device', + 'echo pca9548 0x74 > /sys/bus/i2c/devices/i2c-1/new_device', + 'echo pca9548 0x75 > /sys/bus/i2c/devices/i2c-1/new_device', + 'echo pca9548 0x76 > /sys/bus/i2c/devices/i2c-1/new_device', + 'echo pca9548 0x71 > /sys/bus/i2c/devices/i2c-1/new_device', + 'echo pca9548 0x70 > /sys/bus/i2c/devices/i2c-1/new_device', + 'echo 24c02 0x57 > /sys/bus/i2c/devices/i2c-1/new_device',] +mknod = mknod + mknod_common + +mknod2 = [ + 'echo pca9548 0x76 > /sys/bus/i2c/devices/i2c-1/new_device', + 'echo pca9548 0x71 > /sys/bus/i2c/devices/i2c-1/new_device', + 'echo pca9548 0x72 > /sys/bus/i2c/devices/i2c-0/new_device', + 'echo pca9548 0x73 > /sys/bus/i2c/devices/i2c-0/new_device', + 'echo pca9548 0x74 > /sys/bus/i2c/devices/i2c-0/new_device', + 'echo pca9548 0x75 > /sys/bus/i2c/devices/i2c-0/new_device', + 'echo pca9548 0x76 > /sys/bus/i2c/devices/i2c-0/new_device', + 'echo pca9548 0x71 > /sys/bus/i2c/devices/i2c-0/new_device', + 'echo pca9548 0x70 > /sys/bus/i2c/devices/i2c-0/new_device', + 'echo 24c02 0x57 > /sys/bus/i2c/devices/i2c-0/new_device',] + +mknod2 = mknod2 + mknod_common + + +def i2c_order_check(): # i2c bus 0 and 1 might be installed in different order. # Here check if 0x70 is exist @ i2c-1 - tmp = "echo pca9548 0x70 > /sys/bus/i2c/devices/i2c-1/new_device" - status, output = log_os_system(tmp, 0) - if not device_exist(): + tmp = "i2cget -y -f 0 0x70" + ret = log_os_system(tmp, 0) + if not ret[0]: order = 1 else: order = 0 - tmp = "echo 0x70 > /sys/bus/i2c/devices/i2c-1/delete_device" - status, output = log_os_system(tmp, 0) return order - + + def device_install(): global FORCE - + order = i2c_order_check() - - # if 0x70 is not exist @i2c-1, use reversed bus order - if order: - for i in range(0,len(mknod2)): - #for pca954x need times to built new i2c buses + # if 0x70 is not exist @i2c-1, use reversed bus order + if order: + for i in range(0, len(mknod2)): + # for pca954x need times to built new i2c buses if mknod2[i].find('pca954') != -1: - time.sleep(1) - - status, output = log_os_system(mknod2[i], 1) + time.sleep(1) + + (status, output) = log_os_system(mknod2[i], 1) if status: print output if FORCE == 0: - return status + return status else: - for i in range(0,len(mknod)): - #for pca954x need times to built new i2c buses + for i in range(0, len(mknod)): + # for pca954x need times to built new i2c buses if mknod[i].find('pca954') != -1: - time.sleep(1) - - status, output = log_os_system(mknod[i], 1) + time.sleep(1) + + (status, output) = log_os_system(mknod[i], 1) if status: print output - if FORCE == 0: - return status - for i in range(0,len(sfp_map)): + if FORCE == 0: + return status + for i in range(0, len(sfp_map)): if i < qsfp_start: - status, output =log_os_system("echo optoe2 0x50 > /sys/bus/i2c/devices/i2c-"+str(sfp_map[i])+"/new_device", 1) + (status, output) = \ + log_os_system('echo optoe2 0x50 > /sys/bus/i2c/devices/i2c-' + + str(sfp_map[i]) + '/new_device', 1) else: - status, output =log_os_system("echo optoe1 0x50 > /sys/bus/i2c/devices/i2c-"+str(sfp_map[i])+"/new_device", 1) + (status, output) = \ + log_os_system('echo optoe1 0x50 > /sys/bus/i2c/devices/i2c-' + + str(sfp_map[i]) + '/new_device', 1) if status: print output - if FORCE == 0: - return status - return - + if FORCE == 0: + return status + return + def device_uninstall(): global FORCE - - status, output =log_os_system("ls /sys/bus/i2c/devices/1-0076", 0) - if status==0: - I2C_ORDER=1 - else: - I2C_ORDER=0 - for i in range(0,len(sfp_map)): - target = "/sys/bus/i2c/devices/i2c-"+str(sfp_map[i])+"/delete_device" - status, output =log_os_system("echo 0x50 > "+ target, 1) + for i in range(0, len(sfp_map)): + target = '/sys/bus/i2c/devices/i2c-' + str(sfp_map[i]) \ + + '/delete_device' + (status, output) = log_os_system('echo 0x50 > ' + target, 1) if status: print output - if FORCE == 0: + if FORCE == 0: return status - - if I2C_ORDER==0: - nodelist = mknod - else: + + order = i2c_order_check() + if order : nodelist = mknod2 - + else: + nodelist = mknod + for i in range(len(nodelist)): - target = nodelist[-(i+1)] + target = nodelist[-(i + 1)] temp = target.split() del temp[1] temp[-1] = temp[-1].replace('new_device', 'delete_device') - status, output = log_os_system(" ".join(temp), 1) + (status, output) = log_os_system(' '.join(temp), 1) if status: print output - if FORCE == 0: - return status - - return - + if FORCE == 0: + return status + + return + + def system_ready(): - if driver_check() == False: + if driver_check() is False: return False - if not device_exist(): + if not device_exist(): return False return True - + + def do_install(): - print "Checking system...." - if driver_check() == False: - print "No driver, installing...." + print 'Checking system....' + if driver_check() is False: + print 'No driver, installing....' status = driver_install() if status: - if FORCE == 0: - return status + if FORCE == 0: + return status else: - print PROJECT_NAME.upper()+" drivers detected...." + print PROJECT_NAME.upper() + ' drivers detected....' if not device_exist(): - print "No device, installing...." - status = device_install() + print 'No device, installing....' + status = device_install() if status: - if FORCE == 0: - return status + if FORCE == 0: + return status else: - print PROJECT_NAME.upper()+" devices detected...." + print PROJECT_NAME.upper() + ' devices detected....' return - + + def do_uninstall(): - print "Checking system...." + print 'Checking system....' if not device_exist(): - print PROJECT_NAME.upper() +" has no device installed...." + print PROJECT_NAME.upper() + ' has no device installed....' else: - print "Removing device...." - status = device_uninstall() - if status: - if FORCE == 0: - return status - - if driver_check()== False : - print PROJECT_NAME.upper() +" has no driver installed...." + print 'Removing device....' + status = device_uninstall() + if status and FORCE == 0: + return status + + if driver_check() is False: + print PROJECT_NAME.upper() + ' has no driver installed....' else: - print "Removing installed driver...." + print 'Removing installed driver....' status = driver_uninstall() - if status: - if FORCE == 0: - return status - - return + if status and FORCE == 0: + return status + return None + def devices_info(): global DEVICE_NO global ALL_DEVICE global i2c_bus, hwmon_types - for key in DEVICE_NO: - ALL_DEVICE[key]= {} - for i in range(0,DEVICE_NO[key]): - ALL_DEVICE[key][key+str(i+1)] = [] - + for key in DEVICE_NO: + ALL_DEVICE[key] = {} + for i in range(0, DEVICE_NO[key]): + ALL_DEVICE[key][key + str(i + 1)] = [] + for key in i2c_bus: buses = i2c_bus[key] - nodes = i2c_nodes[key] - for i in range(0,len(buses)): - for j in range(0,len(nodes)): - if 'fan' == key: - for k in range(0,DEVICE_NO[key]): - node = key+str(k+1) - path = i2c_prefix+ buses[i]+"/fan"+str(k+1)+"_"+ nodes[j] - my_log(node+": "+ path) - ALL_DEVICE[key][node].append(path) - elif 'sfp' == key: - for k in range(0,DEVICE_NO[key]): - node = key+str(k+1) - path = i2c_prefix+ str(sfp_map[k])+ buses[i]+"/"+ nodes[j] - my_log(node+": "+ path) - ALL_DEVICE[key][node].append(path) + nodes = i2c_nodes[key] + for i in range(0, len(buses)): + for j in range(0, len(nodes)): + if 'fan' == key: + for k in range(0, DEVICE_NO[key]): + node = key + str(k + 1) + path = i2c_prefix + buses[i] + '/fan' + str(k + + 1) + '_' + nodes[j] + my_log(node + ': ' + path) + ALL_DEVICE[key][node].append(path) + elif 'sfp' == key: + for k in range(0, DEVICE_NO[key]): + if k in range(24) or k in range(48, 52): + fmt = i2c_prefix + '5-0062/{0}_{1}' + else: + fmt = i2c_prefix + '6-0064/{0}_{1}' + node = key + str(k + 1) + path = fmt.format(nodes[j], k + 1) + my_log(node + ': ' + path) + ALL_DEVICE[key][node].append(path) else: - node = key+str(i+1) - path = i2c_prefix+ buses[i]+"/"+ nodes[j] - my_log(node+": "+ path) - ALL_DEVICE[key][node].append(path) - + node = key + str(i + 1) + path = i2c_prefix + buses[i] + '/' + nodes[j] + my_log(node + ': ' + path) + ALL_DEVICE[key][node].append(path) + for key in hwmon_types: itypes = hwmon_types[key] - nodes = hwmon_nodes[key] - for i in range(0,len(itypes)): - for j in range(0,len(nodes)): - node = key+"_"+itypes[i] - path = hwmon_prefix[key]+ itypes[i]+"/"+ nodes[j] - my_log(node+": "+ path) - ALL_DEVICE[key][ key+str(i+1)].append(path) - - #show dict all in the order + nodes = hwmon_nodes[key] + for i in range(0, len(itypes)): + for j in range(0, len(nodes)): + node = key + '_' + itypes[i] + path = hwmon_prefix[key] + itypes[i] + '/' + nodes[j] + my_log(node + ': ' + path) + ALL_DEVICE[key][key + str(i + 1)].append(path) + + # show dict all in the order if DEBUG == True: for i in sorted(ALL_DEVICE.keys()): - print(i+": ") - for j in sorted(ALL_DEVICE[i].keys()): - print(" "+j) - for k in (ALL_DEVICE[i][j]): - print(" "+" "+k) - return - + print i + ': ' + for j in sorted(ALL_DEVICE[i].keys()): + print ' ' + j + for k in ALL_DEVICE[i][j]: + print ' ' + ' ' + k + return + + def show_eeprom(index): - if system_ready()==False: - print("System's not ready.") - print("Please install first!") - return - - if len(ALL_DEVICE)==0: - devices_info() - node = ALL_DEVICE['sfp'] ['sfp'+str(index)][0] - node = node.replace(node.split("/")[-1], 'sfp_eeprom') + if system_ready() is False: + print "System's not ready." + print 'Please install first!' + return + + if len(ALL_DEVICE) == 0: + devices_info() + node = ALL_DEVICE['sfp']['sfp' + str(index)][0] + node = node.replace(node.split('/')[-1], 'sfp_eeprom') + # check if got hexdump command in current environment - ret, log = log_os_system("which hexdump", 0) - ret, log2 = log_os_system("which busybox hexdump", 0) - if len(log): + (ret, log) = log_os_system('which hexdump', 0) + (ret, log2) = log_os_system('which busybox hexdump', 0) + if log: hex_cmd = 'hexdump' - elif len(log2): + elif log2: hex_cmd = ' busybox hexdump' else: log = 'Failed : no hexdump cmd!!' logging.info(log) print log - return 1 - - print node + ":" - ret, log = log_os_system("cat "+node+"| "+hex_cmd+" -C", 1) - if ret==0: - print log + return 1 + + print node + ':' + (ret, log) = log_os_system('cat ' + node + '| ' + hex_cmd + ' -C', + 1) + if ret == 0: + print log else: - print "**********device no found**********" - return - + print '**********device no found**********' + return + + def set_device(args): global DEVICE_NO global ALL_DEVICE - if system_ready()==False: - print("System's not ready.") - print("Please install first!") - return - - if len(ALL_DEVICE)==0: - devices_info() - - if args[0]=='led': - if int(args[1])>4: + if system_ready() is False: + print "System's not ready." + print 'Please install first!' + return + + if not ALL_DEVICE: + devices_info() + + if args[0] == 'led': + if int(args[1]) > 4: show_set_help() return - #print ALL_DEVICE['led'] - for i in range(0,len(ALL_DEVICE['led'])): - for k in (ALL_DEVICE['led']['led'+str(i+1)]): - ret, log = log_os_system("echo "+args[1]+" >"+k, 1) - if ret: - return ret - elif args[0]=='fan': - if int(args[1])>100: + + # print ALL_DEVICE['led'] + for i in range(0, len(ALL_DEVICE['led'])): + for k in ALL_DEVICE['led']['led' + str(i + 1)]: + ret = log_os_system('echo ' + args[1] + ' >' + k, 1) + if ret[0]: + return ret[0] + elif args[0] == 'fan': + if int(args[1]) > 100: show_set_help() return - #print ALL_DEVICE['fan'] - #fan1~6 is all fine, all fan share same setting - node = ALL_DEVICE['fan'] ['fan1'][0] - node = node.replace(node.split("/")[-1], 'fan_duty_cycle_percentage') - ret, log = log_os_system("cat "+ node, 1) - if ret==0: - print ("Previous fan duty: " + log.strip() +"%") - ret, log = log_os_system("echo "+args[1]+" >"+node, 1) - if ret==0: - print ("Current fan duty: " + args[1] +"%") + + # print ALL_DEVICE['fan'] + # fan1~6 is all fine, all fan share same setting + + node = ALL_DEVICE['fan']['fan1'][0] + node = node.replace(node.split('/')[-1], + 'fan_duty_cycle_percentage') + (ret, log) = log_os_system('cat ' + node, 1) + if ret == 0: + print 'Previous fan duty: ' + log.strip() + '%' + ret = log_os_system('echo ' + args[1] + ' >' + node, 1) + if ret[0] == 0: + print 'Current fan duty: ' + args[1] + '%' return ret - elif args[0]=='sfp': - if int(args[1])> DEVICE_NO[args[0]] or int(args[1])==0: + elif args[0] == 'sfp': + if int(args[1]) > qsfp_start or int(args[1]) == 0: show_set_help() - return - if len(args)<2: + return + if len(args) < 2: show_set_help() - return - - if int(args[2])>1: + return + + if int(args[2]) > 1: show_set_help() return - - #print ALL_DEVICE[args[0]] - for i in range(0,len(ALL_DEVICE[args[0]])): - for j in ALL_DEVICE[args[0]][args[0]+str(args[1])]: - if j.find('tx_disable')!= -1: - ret, log = log_os_system("echo "+args[2]+" >"+ j, 1) - if ret: - return ret - + + # print ALL_DEVICE[args[0]] + + for i in range(len(ALL_DEVICE[args[0]])): + for j in ALL_DEVICE[args[0]][args[0] + str(args[1])]: + if j.find('tx_disable') != -1: + ret = log_os_system('echo ' + args[2] + ' >' + j, 1) + if ret[0]: + return ret[0] + return - -#get digits inside a string. -#Ex: 31 for "sfp31" -def get_value(input): - digit = re.findall('\d+', input) + + +# get digits inside a string. +# Ex: get 31 from "sfp31" +def get_value(i): + digit = re.findall('\d+', i) return int(digit[0]) - + + def device_traversal(): - if system_ready()==False: - print("System's not ready.") - print("Please install first!") - return - - if len(ALL_DEVICE)==0: + if system_ready() is False: + print "System's not ready." + print 'Please install first!' + return + + if not ALL_DEVICE: devices_info() for i in sorted(ALL_DEVICE.keys()): - print("============================================") - print(i.upper()+": ") - print("============================================") - - for j in sorted(ALL_DEVICE[i].keys(), key=get_value): - print " "+j+":", - for k in (ALL_DEVICE[i][j]): - ret, log = log_os_system("cat "+k, 0) - func = k.split("/")[-1].strip() - func = re.sub(j+'_','',func,1) - func = re.sub(i.lower()+'_','',func,1) - if ret==0: - print func+"="+log+" ", + print '============================================' + print i.upper() + ': ' + print '============================================' + for j in sorted(ALL_DEVICE[i].keys(), key=get_value): + print ' ' + j + ':', + for k in ALL_DEVICE[i][j]: + (ret, log) = log_os_system('cat ' + k, 0) + func = k.split('/')[-1].strip() + func = re.sub(j + '_', '', func, 1) + func = re.sub(i.lower() + '_', '', func, 1) + if ret == 0: + print func + '=' + log + ' ', else: - print func+"="+"X"+" ", - print - print("----------------------------------------------------------------") - - + print func + '=' + 'X' + ' ', + print + print '----------------------------------------------------------------' print return - + + def device_exist(): - ret1, log = log_os_system("ls "+i2c_prefix+"*0070", 0) - ret2, log = log_os_system("ls "+i2c_prefix+"i2c-2", 0) - return not(ret1 or ret2) + ret1 = log_os_system('ls ' + i2c_prefix + '*0070', 0) + ret2 = log_os_system('ls ' + i2c_prefix + 'i2c-2', 0) + return not (ret1[0] or ret2[0]) + -if __name__ == "__main__": +if __name__ == '__main__': main()