blob: e8861f9844cbc1a227efae48fd4b380a7051b119 [file] [log] [blame]
Xo Wang61a10012016-12-15 18:29:58 -08001#!/bin/sh -e
2# AVSBus control for PMBUS voltage regulator modules (VRMs)
3# Switches output voltage target between
4# - VOUT_COMMAND register (AVSBus disabled, default on Zaius)
5# - AVSBus target output (AVSBus enabled, voltage set by host)
6
7cpu0_i2c_bus="7"
8cpu1_i2c_bus="8"
9busses="$cpu0_i2c_bus $cpu1_i2c_bus"
10vdd_i2c_addr_page="0x60:0x01"
11vdn_i2c_addr_page="0x64:0x01"
12vcs_i2c_addr_page="0x64:0x00"
13addrs_pages="$vdd_i2c_addr_page $vdn_i2c_addr_page $vcs_i2c_addr_page"
14
15# Usage: vrm_set_page <bus> <i2c_address> <page>
16vrm_set_page()
17{
18 i2cset -y $1 $2 0x00 $3 b
19}
20
21# Usage: vrm_avs_enable <bus> <i2c_address> <page>
22# Sets OPERATION PMBUS register to
23# - Enable/Disable: On
24# - VOUT Source: AVSBus Target Rail Voltage
25# - AVSBus Copy: VOUT_COMMAND remains unchanged
26vrm_avs_enable()
27{
28 vrm_set_page "$@"
29 echo Enabling AVSBus on bus $1 VRM @$2 rail $3...
30 i2cset -y $1 $2 0x01 0xb0 b
31}
32
33# Usage: vrm_avs_disable <bus> <i2c_address> <page>
34# Sets OPERATION PMBUS register to
35# - Enable/Disable: On
36# - VOUT Source: VOUT_COMMAND
37# - AVSBus Copy: VOUT_COMMAND remains unchanged
38vrm_avs_disable()
39{
40 vrm_set_page "$@"
41 echo Disabling AVSBus on bus $1 VRM @$2 rail $3...
42 i2cset -y $1 $2 0x01 0x80 b
43}
44
Xo Wang41c193f2017-02-15 17:10:15 -080045# Usage: vrm_vout_max_1v1 <bus> <i2c_address> <page>
46# Sets VOUT_MAX to 1.1V
47vrm_vout_max_1v1()
48{
49 vrm_set_page "$@"
50 echo Setting VOUT_MAX=[1.1V] on bus $1 VRM @$2 rail $3...
51 i2cset -y $1 $2 0x24 0x44c w
52}
53
Xo Wang61a10012016-12-15 18:29:58 -080054# Usage: vrm_print <bus> <i2c_address> <page>
55vrm_print()
56{
57 vrm_set_page "$@"
58 local operation=`i2cget -y $1 $2 0x01 b`
59 local vout=`i2cget -y $1 $2 0x8b w`
60 local iout=`i2cget -y $1 $2 0x8c w`
61 echo VRM on bus $1 @$2 rail $3: OPERATION=$operation VOUT=$vout IOUT=$iout
62}
63
64# Usage: for_each_rail <command>
65# <command> will be invoked with <bus> <i2c_address> <page>
66for_each_rail()
67{
68 for bus in $busses
69 do
70 for addr_page in $addrs_pages
71 do
72 $1 $bus `echo $addr_page | tr : " "`
73 done
74 done
75}
76
77if [ "$1" == "enable" ]
78then
79 for_each_rail vrm_avs_enable
80elif [ "$1" == "disable" ]
81then
82 for_each_rail vrm_avs_disable
Xo Wang41c193f2017-02-15 17:10:15 -080083elif [ "$1" == "vdn_max" ]
84then
85 addrs_pages="$vdn_i2c_addr_page"
86 for_each_rail vrm_vout_max_1v1
Xo Wang61a10012016-12-15 18:29:58 -080087else
88 for_each_rail vrm_print
89 echo "\"$0 <enable|disable>\" to control whether VRMs use AVSBus"
Xo Wang41c193f2017-02-15 17:10:15 -080090 echo "\"$0 <vdn_max>\" to set VDN rails VOUT_MAX to 1.1V"
Xo Wang61a10012016-12-15 18:29:58 -080091fi