blob: c67e244a73ec8e76a41d55c9d83ee892c12c9b5e (
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
|
#!/bin/bash
# #########################################################
# Script to run on witherspoon BMC to read/set vrm voltages
# #########################################################
d2v () {
# usage: d2v <decimal volts>
echo $1 | awk '{print $1 * 256 + .5}' | cut -d '.' -f 1
}
# #########################################################
v2d () {
# usage: v2d <hex val>
printf " %0.3fV" `echo $1 | awk '{print $1 / 256}'`
}
# #########################################################
i2d () {
# usage: i2d <hex val> <current divisor>
# parse current mantisa and exponent
# format: SEEE ESMM MMMM MMMM
let e=$1/0x800
let esign=e/0x10
let m=$1\&0x07FF
let msign=m/0x0400
if [ $msign -eq 1 ]
then
# calc ones compliment
let m=($m^0x07FF)+1
m="-$m"
fi
if [ $esign -eq 1 ]
then
# calc ones compliment
let e=(e^0x1F)+1
e="-$e"
fi
printf " %0.3fA\n" `echo $m $e $2 | awk '{print ($1 * 2^$2)}'`
}
# #########################################################
rw_vc () {
# usage: rw_vc <bus> <addr> <current divisor> <channel> <value>
# select channel
if [ $4 != "x" ]
then
i2cset -y $1 $2 0 $4 b
fi
# write new voltage set point
if [ ! -e $5 ]
then
i2cset -y $1 $2 0x21 `d2v $5` w
fi
# print voltage set point
v2d `i2cget -y $1 $2 0x21 w`
# print voltage
v2d `i2cget -y $1 $2 0x8B w`
# print current
i2d `i2cget -y $1 $2 0x8C w` $3
# default back to channel 0
if [ $4 != "x" ]
then
i2cset -y $1 $2 0 0 b
fi
}
# #########################################################
# Main
if [ -e $1 ]
then
$0 vdda vcsa vdna vioa vddra vppa vddb vcsb vdnb viob vddrb vppb
exit
fi
if [ $1 == "-h" ]
then
echo " Usage: vrm [<rail>=[value] [<rail>=[value]] ...]"
echo " rail: vdda vcsa vdna vioa vddra vppa vddb vcsb vdnb viob vddrb vppb vdnd viod"
echo " value: volts"
echo
echo " e.g., vrm vioa=1.0 viob=1.0"
echo
exit
fi
echo "rail set read current"
echo "------- ------- ------- -------"
for param in ${@:1}
do
rail=`echo $param | cut -d'=' -f 1`
val=`echo ${param}= | cut -d'=' -f 2`
echo -n "$rail"
case "$rail" in
vdda)
rw_vc 4 0x70 2 0 $val
;;
vddb)
rw_vc 5 0x70 2 0 $val
;;
vcsa)
rw_vc 4 0x70 4 1 $val
;;
vcsb)
rw_vc 5 0x70 4 1 $val
;;
vdna)
rw_vc 4 0x71 2 0 $val
;;
vdnb)
rw_vc 5 0x71 2 0 $val
;;
vioa)
rw_vc 4 0x40 2 x $val
;;
viob)
rw_vc 5 0x40 2 x $val
;;
vddra)
rw_vc 4 0x71 2 1 $val
;;
vddrb)
rw_vc 5 0x71 2 1 $val
;;
vppa)
rw_vc 12 0x41 2 x $val
;;
vppb)
rw_vc 13 0x41 2 x $val
;;
vdnd)
rw_vc 2 0x70 2 0 $val
;;
viod)
rw_vc 2 0x70 2 1 $val
;;
*)
echo " non-existant"
esac
done
|