diff options
Diffstat (limited to 'meta-ibm/meta-witherspoon/recipes-phosphor/chassis/avsbus-control/witherspoon/power-workarounds.sh')
-rw-r--r-- | meta-ibm/meta-witherspoon/recipes-phosphor/chassis/avsbus-control/witherspoon/power-workarounds.sh | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/meta-ibm/meta-witherspoon/recipes-phosphor/chassis/avsbus-control/witherspoon/power-workarounds.sh b/meta-ibm/meta-witherspoon/recipes-phosphor/chassis/avsbus-control/witherspoon/power-workarounds.sh new file mode 100644 index 000000000..d40579731 --- /dev/null +++ b/meta-ibm/meta-witherspoon/recipes-phosphor/chassis/avsbus-control/witherspoon/power-workarounds.sh @@ -0,0 +1,134 @@ +#!/bin/sh + +# ensure VCS ON_OFF_CONFIG set correctly from prior FW drivers +# A side +i2cset -y 4 0x70 0x00 0x01 b +i2cset -y 4 0x70 0x02 0x16 b #respond to ENABLE pin +i2cset -y 4 0x70 0x00 0x00 b +# B side +i2cset -y 5 0x70 0x00 0x01 b +i2cset -y 5 0x70 0x02 0x16 b #respond to ENABLE pin +i2cset -y 5 0x70 0x00 0x00 b + +# vddio = 1.0V, mdat/sdat PU enabled +i2cset -y 4 0x12 0xFF 0x00 b # VDD/VCS 0 +i2cset -y 4 0x12 0x2E 0x03 b # VDD/VCS 0 +i2cset -y 4 0x13 0xFF 0x00 b # VDN 0 +i2cset -y 4 0x13 0x2E 0x03 b # VDN 0 +i2cset -y 5 0x12 0xFF 0x00 b # VDD/VCS 1 +i2cset -y 5 0x12 0x2E 0x03 b # VDD/VCS 1 +i2cset -y 5 0x13 0xFF 0x00 b # VDN 1 +i2cset -y 5 0x13 0x2E 0x03 b # VDN 1 + +# A side VDDR - set to 1.23V +i2cset -y 4 0x71 0x00 0x01 +i2cset -y 4 0x71 0x21 0x3B 0x01 i +i2cset -y 4 0x71 0x00 0x00 + +# B side VDDR - set to 1.23V +i2cset -y 5 0x71 0x00 0x01 +i2cset -y 5 0x71 0x21 0x3B 0x01 i +i2cset -y 5 0x71 0x00 0x00 + +# VDN A - PGOOD_ON threshold +i2cset -y 4 0x71 0x00 0x00 b # PAGE +i2cset -y 4 0x71 0x5E 0xCD 0x00 i # set to 0.8V + +# VDN B - PGOOD_ON threshold +i2cset -y 5 0x71 0x00 0x00 b # PAGE +i2cset -y 5 0x71 0x5E 0xCD 0x00 i # set to 0.8V + +# unbind ucd driver to permit i2cset +ucd_retries=5 +ucd= + +ucdpath="/sys/bus/i2c/drivers/ucd9000" +if [ -e $ucdpath ] +then + ucd=`ls -1 $ucdpath | grep 64` + if [ -n "$ucd" ] + then + echo $ucd > $ucdpath/unbind + fi +fi + +# make sure VCS ON_OFF_CONFIG set correctly from old FW releases +i2cset -y 11 0x64 0x00 0x0E i +i2cset -y 11 0x64 0x02 0x16 i +i2cset -y 11 0x64 0x00 0x0F i +i2cset -y 11 0x64 0x02 0x16 i + +## move memory enables to align with VDN (VDN to VDDR leakage issue) +#GPO_CONFIG_1 (GPIO15) : mem 0 reg enables +i2cset -y 11 0x64 0xF7 0x00 i +i2cset -y 11 0x64 0xF8 0x15 0x6E 0x80 0x08 0x00 0x00 0x00 0x40 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 i +#GPO_CONFIG_2 (GPIO7) : mem 1 reg enables +i2cset -y 11 0x64 0xF7 0x01 i +i2cset -y 11 0x64 0xF8 0x15 0x16 0x80 0x08 0x00 0x00 0x20 0x40 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 i + +# change VDN delays based on UCD MFR_REVISION setting +REV=`i2cget -y 11 0x64 0x9B i 2|cut -f2 -d' '` +if [ "$REV" == "0x01" -o "$REV" == "0x02" ] ; then + # use 20ms delay for VDN + #TON_DELAY rail 8 + i2cset -y 11 0x64 0x00 0x07 i + i2cset -y 11 0x64 0x60 0x80 0xDA i + #TON_DELAY rail 9 + i2cset -y 11 0x64 0x00 0x08 i + i2cset -y 11 0x64 0x60 0x80 0xDA i +else + # use 70ms delay for VDN + #TON_DELAY rail 8 + i2cset -y 11 0x64 0x00 0x07 i + i2cset -y 11 0x64 0x60 0x30 0xEA i + #TON_DELAY rail 9 + i2cset -y 11 0x64 0x00 0x08 i + i2cset -y 11 0x64 0x60 0x30 0xEA i +fi + +# Raise AVDD +100mV +i2cset -y 11 0x64 0x00 0x09 i # set PAGE +i2cset -y 11 0x64 0xF5 0x81 i # set margin_config +i2cset -y 11 0x64 0x21 0x85 0x33 i # set VOUT_COMMAND + +# Increase over-current settings +#VDD A phase current +i2cset -y 4 0x12 0xFF 0x04 b # set window register high byte to 4 +i2cset -y 4 0x12 0x3C 0x80 b # Set to 64A +#VDD B phase current +i2cset -y 5 0x12 0xFF 0x04 b # set window register high byte to 4 +i2cset -y 5 0x12 0x3C 0x80 b # Set to 64A +#VDD A master OC fault to 445A +i2cset -y 4 0x70 0x00 0x00 b # PAGE +i2cset -y 4 0x70 0x46 0x08DE w +# VDD A master OC warn to 326A +i2cset -y 4 0x70 0x4A 0x08A3 w # A308 +#VDD B master OC fault to 445A +i2cset -y 5 0x70 0x00 0x00 b # PAGE +i2cset -y 5 0x70 0x46 0x08DE w +# VDD B master OC warn to 326A +i2cset -y 5 0x70 0x4A 0x08A3 w +#VCS phase current to 30A C/C +i2cset -y 4 0x12 0xFF 0x08 b # set window register to 8 +i2cset -y 4 0x12 0x3C 0x3C b # 30A +i2cset -y 5 0x12 0xFF 0x08 b # set window register to 8 +i2cset -y 5 0x12 0x3C 0x3C b # 30A +#VCS master OC to 43A +i2cset -y 4 0x70 0x00 0x01 # PAGE 1 +i2cset -y 4 0x70 0x46 0x0816 w # OC to 43A +i2cset -y 5 0x70 0x00 0x01 # PAGE 1 +i2cset -y 5 0x70 0x46 0x0816 w # OC to 43A + +# re-bind ucd driver only if we unbound it (i.e. ucd has been set with a value) +if [ -e $ucdpath -a -n "$ucd" ]; then + j=0 + until [ $j -ge $ucd_retries ] || [ -e $ucdpath/$ucd ]; do + j=$((j+1)) + echo $ucd > $ucdpath/bind || ret=$? + if [ $j -gt 1 ]; then + echo "rebinding UCD driver. Retry number $j" + sleep 1 + fi + done + if [ ! -e $ucdpath/$ucd ]; then exit $ret; fi +fi |