summaryrefslogtreecommitdiffstats
path: root/meta-ibm/meta-witherspoon/recipes-phosphor/chassis/avsbus-control/power-workarounds.sh
blob: d40579731195fe39d135f8160802f0617a1766e3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
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
OpenPOWER on IntegriCloud