From aaac49737087a66777bc69b2a94d1795bb3645d0 Mon Sep 17 00:00:00 2001 From: Wirut Getbamrung Date: Fri, 22 Jun 2018 00:57:32 +0700 Subject: [PATCH] [device]: Fix a bug that psuutil cannot access gpio sysfs to get PSU status (#1789) --- .../x86_64-cel_seastone-r0/plugins/psuutil.py | 49 +++++++------------ 1 file changed, 19 insertions(+), 30 deletions(-) diff --git a/device/celestica/x86_64-cel_seastone-r0/plugins/psuutil.py b/device/celestica/x86_64-cel_seastone-r0/plugins/psuutil.py index 9e8f99e7a7f2..510c03a43ff1 100644 --- a/device/celestica/x86_64-cel_seastone-r0/plugins/psuutil.py +++ b/device/celestica/x86_64-cel_seastone-r0/plugins/psuutil.py @@ -3,7 +3,8 @@ # Platform-specific PSU status interface for SONiC # -import os.path +import os + try: from sonic_psu.psu_base import PsuBase @@ -18,42 +19,32 @@ def __init__(self): PsuBase.__init__(self) # DX010 PSU pin mapping self.psu = [ - {'base':216}, # Reserved + {'base': self.get_gpio_base()}, {'abs':27, 'power':22}, {'abs':28, 'power':25} ] - def init_psu_gpio(self, pinnum): - # export pin, input as default - gpio_base = self.psu[0]['base'] - export_file = "/sys/class/gpio/export" - direction_file = '/sys/class/gpio/gpio' + str(gpio_base+pinnum) + '/direction' - - try: - with open(export_file, 'w') as fd: - fd.write(str(gpio_base+pinnum)) - except Exception as error: - logging.error("Unable to export gpio ", pinnum) + def get_gpio_base(self): + sys_gpio_dir = "/sys/class/gpio" + for r in os.listdir(sys_gpio_dir): + if "gpiochip" in r: + return int(r[8:],10) + return 216 #Reserve # Get a psu status and presence def read_psu_statuses(self, pinnum): sys_gpio_dir = "/sys/class/gpio" - retval = 'ERR' gpio_base = self.psu[0]['base'] gpio_dir = sys_gpio_dir + '/gpio' + str(gpio_base+pinnum) gpio_file = gpio_dir + "/value" - - # init gpio - if (not os.path.isdir(gpio_dir)): - self.init_psu_gpio(pinnum) try: with open(gpio_file, 'r') as fd: retval = fd.read() - except Exception as error: - logging.error("Unable to open ", gpio_file, "file !") + except IOError: + raise IOError("Unable to open " + gpio_file + "file !") retval = retval.rstrip('\r\n') return retval @@ -76,11 +67,10 @@ def get_psu_status(self, index): """ status = 0 psu_status = self.read_psu_statuses(self.psu[index]['power']) - if (psu_status != 'ERR'): - psu_status = int(psu_status, 10) - # Check for PSU status - if (psu_status == 1): - status = 1 + psu_status = int(psu_status, 10) + # Check for PSU status + if (psu_status == 1): + status = 1 return status @@ -93,10 +83,9 @@ def get_psu_presence(self, index): """ status = 0 psu_absence = self.read_psu_statuses(self.psu[index]['abs']) - if (psu_absence != 'ERR'): - psu_absence = (int(psu_absence, 10)) - # Check for PSU presence - if (psu_absence == 0): - status = 1 + psu_absence = (int(psu_absence, 10)) + # Check for PSU presence + if (psu_absence == 0): + status = 1 return status