From bbe1580936a477656e8da6c7bf96e6e584521125 Mon Sep 17 00:00:00 2001 From: bolv Date: Mon, 30 Jul 2018 17:17:26 +0800 Subject: [PATCH] Revert "[device]: Fix a bug that psuutil cannot access gpio sysfs to get PSU status (#1789)" This reverts commit 310c3f9ff62c0d3876d4962cceb6cc6eeec88869. --- .../x86_64-cel_seastone-r0/plugins/psuutil.py | 49 ++++++++++++------- 1 file changed, 30 insertions(+), 19 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 510c03a43ff1..9e8f99e7a7f2 100644 --- a/device/celestica/x86_64-cel_seastone-r0/plugins/psuutil.py +++ b/device/celestica/x86_64-cel_seastone-r0/plugins/psuutil.py @@ -3,8 +3,7 @@ # Platform-specific PSU status interface for SONiC # -import os - +import os.path try: from sonic_psu.psu_base import PsuBase @@ -19,32 +18,42 @@ def __init__(self): PsuBase.__init__(self) # DX010 PSU pin mapping self.psu = [ - {'base': self.get_gpio_base()}, + {'base':216}, # Reserved {'abs':27, 'power':22}, {'abs':28, 'power':25} ] - 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 + 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) # 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 IOError: - raise IOError("Unable to open " + gpio_file + "file !") + except Exception as error: + logging.error("Unable to open ", gpio_file, "file !") retval = retval.rstrip('\r\n') return retval @@ -67,10 +76,11 @@ def get_psu_status(self, index): """ status = 0 psu_status = self.read_psu_statuses(self.psu[index]['power']) - psu_status = int(psu_status, 10) - # Check for PSU status - if (psu_status == 1): - status = 1 + if (psu_status != 'ERR'): + psu_status = int(psu_status, 10) + # Check for PSU status + if (psu_status == 1): + status = 1 return status @@ -83,9 +93,10 @@ def get_psu_presence(self, index): """ status = 0 psu_absence = self.read_psu_statuses(self.psu[index]['abs']) - psu_absence = (int(psu_absence, 10)) - # Check for PSU presence - if (psu_absence == 0): - status = 1 + if (psu_absence != 'ERR'): + psu_absence = (int(psu_absence, 10)) + # Check for PSU presence + if (psu_absence == 0): + status = 1 return status