diff options
author | Matt Spinler <spinler@us.ibm.com> | 2018-05-25 12:29:33 -0500 |
---|---|---|
committer | Brad Bishop <bradleyb@fuzziesquirrel.com> | 2018-05-30 18:21:40 +0000 |
commit | 713d1c77229ba667d5e299e8263adc06778c0795 (patch) | |
tree | 11182e629bf38c8cb511e78bd645a0a6a29a86fa /meta-openbmc-machines/meta-openpower | |
parent | 5e0a731fcb45debbdedf944b3de7258bb5604bd3 (diff) | |
download | talos-openbmc-713d1c77229ba667d5e299e8263adc06778c0795.tar.gz talos-openbmc-713d1c77229ba667d5e299e8263adc06778c0795.zip |
wspoon: Retry on VRM bind fails
Enhanced the ir35221-unbind-bind.sh script to:
1) Retry a few times on failures binding the device driver.
2) Still try to bind other devices even if one device fails.
The script will still return a nonzero exit code if any of
the binds fail.
Tested:
* Do several power cycles.
* Modify script to fail a bind. Check that it returns nonzero.
Change-Id: Ia235557292d792998a1c10260fe2bf8b2e631b2c
Signed-off-by: Matt Spinler <spinler@us.ibm.com>
Diffstat (limited to 'meta-openbmc-machines/meta-openpower')
-rw-r--r-- | meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/chassis/vrm-control/ir35221-unbind-bind.sh | 65 |
1 files changed, 49 insertions, 16 deletions
diff --git a/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/chassis/vrm-control/ir35221-unbind-bind.sh b/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/chassis/vrm-control/ir35221-unbind-bind.sh index 5c100eb4f..160cc5d27 100644 --- a/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/chassis/vrm-control/ir35221-unbind-bind.sh +++ b/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/chassis/vrm-control/ir35221-unbind-bind.sh @@ -3,46 +3,79 @@ # Script to run on witherspoon BMC to unbind/bind the ir35221 # driver's devices +status=0 +max_retries=3 +driver_path="/sys/bus/i2c/drivers/ir35221/" +platform_path="/sys/devices/platform/ahb/ahb:apb/ahb:apb:i2c@1e78a000/" + +unbind_driver () { + echo $1 > $driver_path/unbind +} + +bind_driver () { + device=$1 + tries=0 + + until [ $tries -ge $max_retries ]; do + tries=$((tries+1)) + ret=0 + echo $device > $driver_path/bind || ret=$? + if [ $ret -ne 0 ]; then + echo "VRM $1 bind failed. Try $tries" + sleep 1 + else + tries=$((max_retries+1)) + fi + done + + #Script will return a nonzero value if any binds fail. + if [ $ret -ne 0 ]; then + status=$ret + fi +} + if [ "$1" = "unbind" ] then - if [ -e /sys/bus/i2c/drivers/ir35221/4-0070 ] + if [ -e $driver_path/4-0070 ] then - echo 4-0070 > /sys/bus/i2c/drivers/ir35221/$1 + unbind_driver "4-0070" fi - if [ -e /sys/bus/i2c/drivers/ir35221/4-0071 ] + if [ -e $driver_path/4-0071 ] then - echo 4-0071 > /sys/bus/i2c/drivers/ir35221/$1 + unbind_driver "4-0071" fi - if [ -e /sys/bus/i2c/drivers/ir35221/5-0070 ] + if [ -e $driver_path/5-0070 ] then - echo 5-0070 > /sys/bus/i2c/drivers/ir35221/$1 + unbind_driver "5-0070" fi - if [ -e /sys/bus/i2c/drivers/ir35221/5-0071 ] + if [ -e $driver_path/5-0071 ] then - echo 5-0071 > /sys/bus/i2c/drivers/ir35221/$1 + unbind_driver "5-0071" fi elif [ "$1" = "bind" ] then - if [ -e /sys/devices/platform/ahb/ahb:apb/ahb:apb:i2c@1e78a000/1e78a140.i2c-bus/i2c-4/4-0070 ] + if [ -e $platform_path/1e78a140.i2c-bus/i2c-4/4-0070 ] then - echo 4-0070 > /sys/bus/i2c/drivers/ir35221/$1 + bind_driver "4-0070" fi - if [ -e /sys/devices/platform/ahb/ahb:apb/ahb:apb:i2c@1e78a000/1e78a140.i2c-bus/i2c-4/4-0071 ] + if [ -e $platform_path/1e78a140.i2c-bus/i2c-4/4-0071 ] then - echo 4-0071 > /sys/bus/i2c/drivers/ir35221/$1 + bind_driver "4-0071" fi - if [ -e /sys/devices/platform/ahb/ahb:apb/ahb:apb:i2c@1e78a000/1e78a180.i2c-bus/i2c-5/5-0070 ] + if [ -e $platform_path/1e78a180.i2c-bus/i2c-5/5-0070 ] then - echo 5-0070 > /sys/bus/i2c/drivers/ir35221/$1 + bind_driver "5-0070" fi - if [ -e /sys/devices/platform/ahb/ahb:apb/ahb:apb:i2c@1e78a000/1e78a180.i2c-bus/i2c-5/5-0071 ] + if [ -e $platform_path/1e78a180.i2c-bus/i2c-5/5-0071 ] then - echo 5-0071 > /sys/bus/i2c/drivers/ir35221/$1 + bind_driver "5-0071" fi fi + +exit $status |