diff options
Diffstat (limited to 'meta-ingrasys/meta-zaius/recipes-phosphor/chassis/avsbus-control/zaius_avsbus.sh')
-rwxr-xr-x | meta-ingrasys/meta-zaius/recipes-phosphor/chassis/avsbus-control/zaius_avsbus.sh | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/meta-ingrasys/meta-zaius/recipes-phosphor/chassis/avsbus-control/zaius_avsbus.sh b/meta-ingrasys/meta-zaius/recipes-phosphor/chassis/avsbus-control/zaius_avsbus.sh new file mode 100755 index 0000000000..45e60664ad --- /dev/null +++ b/meta-ingrasys/meta-zaius/recipes-phosphor/chassis/avsbus-control/zaius_avsbus.sh @@ -0,0 +1,98 @@ +#!/bin/sh -e +# AVSBus control for PMBUS voltage regulator modules (VRMs) +# Switches output voltage target between +# - VOUT_COMMAND register (AVSBus disabled, default on Zaius) +# - AVSBus target output (AVSBus enabled, voltage set by host) + +cpu0_i2c_bus="7" +cpu1_i2c_bus="8" +buses="$cpu0_i2c_bus $cpu1_i2c_bus" +vdd_i2c_addr_page="0x60:0x01" +vdn_i2c_addr_page="0x64:0x01" +vcs_i2c_addr_page="0x64:0x00" +addrs_pages="$vdd_i2c_addr_page $vdn_i2c_addr_page $vcs_i2c_addr_page" + +# Usage: vrm_set_page <bus> <i2c_address> <page> +vrm_set_page() +{ + i2cset -y $1 $2 0x00 $3 b +} + +# Usage: vrm_avs_enable <bus> <i2c_address> <page> +# Initializes the AVSBus VOUT setpoint to the value in PMBus VOUT_COMMAND +# Sets OPERATION PMBUS register to +# - Enable/Disable: On +# - VOUT Source: AVSBus Target Rail Voltage +# - AVSBus Copy: VOUT_COMMAND remains unchanged +# Writes to VOUT setpoint over AVSBus will persist after the VRM is switched to +# PMBus control. Switching back to AVSBus control restores this persisted +# setpoint rather than re-initializing to PMBus VOUT_COMMAND. This behavior is +# known to Intersil and writing VOUT_COMMAND over PMBus is the only workaround. +vrm_avs_enable() +{ + vrm_set_page "$@" + echo Enabling AVSBus on bus $1 VRM @$2 rail $3... + local vout_command=`i2cget -y $1 $2 0x21 w` + i2cset -y $1 $2 0x21 $vout_command w + i2cset -y $1 $2 0x01 0xb0 b +} + +# Usage: vrm_avs_disable <bus> <i2c_address> <page> +# Sets OPERATION PMBUS register to +# - Enable/Disable: On +# - VOUT Source: VOUT_COMMAND +# - AVSBus Copy: VOUT_COMMAND remains unchanged +vrm_avs_disable() +{ + vrm_set_page "$@" + echo Disabling AVSBus on bus $1 VRM @$2 rail $3... + i2cset -y $1 $2 0x01 0x80 b +} + +# Usage: vrm_vout_max_1v1 <bus> <i2c_address> <page> +# Sets VOUT_MAX to 1.1V +vrm_vout_max_1v1() +{ + vrm_set_page "$@" + echo Setting VOUT_MAX=[1.1V] on bus $1 VRM @$2 rail $3... + i2cset -y $1 $2 0x24 0x44c w +} + +# Usage: vrm_print <bus> <i2c_address> <page> +vrm_print() +{ + vrm_set_page "$@" + local operation=`i2cget -y $1 $2 0x01 b` + local vout=`i2cget -y $1 $2 0x8b w` + local iout=`i2cget -y $1 $2 0x8c w` + echo VRM on bus $1 @$2 rail $3: OPERATION=$operation VOUT=$vout IOUT=$iout +} + +# Usage: for_each_rail <command> +# <command> will be invoked with <bus> <i2c_address> <page> +for_each_rail() +{ + for bus in $buses + do + for addr_page in $addrs_pages + do + $1 $bus `echo $addr_page | tr : " "` + done + done +} + +if [ "$1" == "enable" ] +then + for_each_rail vrm_avs_enable +elif [ "$1" == "disable" ] +then + for_each_rail vrm_avs_disable +elif [ "$1" == "vdn_max" ] +then + addrs_pages="$vdn_i2c_addr_page" + for_each_rail vrm_vout_max_1v1 +else + for_each_rail vrm_print + echo "\"$0 <enable|disable>\" to control whether VRMs use AVSBus" + echo "\"$0 <vdn_max>\" to set VDN rails VOUT_MAX to 1.1V" +fi |