diff options
author | Raptor Engineering Development Team <support@raptorengineering.com> | 2019-04-19 08:35:02 +0000 |
---|---|---|
committer | Timothy Pearson <tpearson@raptorengineering.com> | 2019-04-25 08:02:05 +0000 |
commit | c6a41036bb2f2fedb9a37ab3e1721839110b32a1 (patch) | |
tree | 5d3723e067adac7eaa4843d7ef24fbd82dc2aceb /meta-rcs/meta-talos/recipes-phosphor/chassis/vrm-control | |
parent | fb83e16d3529ade1057088c33faeb4ea7ff922ed (diff) | |
download | talos-openbmc-c6a41036bb2f2fedb9a37ab3e1721839110b32a1.tar.gz talos-openbmc-c6a41036bb2f2fedb9a37ab3e1721839110b32a1.zip |
[Subtree] Bring openbmc machines to top level
Diffstat (limited to 'meta-rcs/meta-talos/recipes-phosphor/chassis/vrm-control')
3 files changed, 174 insertions, 0 deletions
diff --git a/meta-rcs/meta-talos/recipes-phosphor/chassis/vrm-control/vrm-control.sh b/meta-rcs/meta-talos/recipes-phosphor/chassis/vrm-control/vrm-control.sh new file mode 100644 index 000000000..be23d4691 --- /dev/null +++ b/meta-rcs/meta-talos/recipes-phosphor/chassis/vrm-control/vrm-control.sh @@ -0,0 +1,137 @@ +#!/bin/bash +# ######################################################### +# Script to run on Talos II 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) / $3}'` +} + + +# ######################################################### +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 vddb vcsb vdnb viob + exit +fi + +if [ $1 == "-h" ] +then + echo " Usage: vrm [<rail>=[value] [<rail>=[value]] ...]" + echo " rail: vdda vcsa vdna vioa vddb vcsb vdnb viob" + 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 0x73 2 0 $val + ;; + vdnb) + rw_vc 5 0x73 2 0 $val + ;; + vioa) + rw_vc 4 0x73 2 1 $val + ;; + viob) + rw_vc 5 0x73 2 1 $val + ;; + *) + echo " non-existant" + esac +done diff --git a/meta-rcs/meta-talos/recipes-phosphor/chassis/vrm-control/vrm-control@.service b/meta-rcs/meta-talos/recipes-phosphor/chassis/vrm-control/vrm-control@.service new file mode 100644 index 000000000..5d072ad5f --- /dev/null +++ b/meta-rcs/meta-talos/recipes-phosphor/chassis/vrm-control/vrm-control@.service @@ -0,0 +1,15 @@ +[Unit] +Description=Apply voltage overrides to VRMs +Wants=avsbus-disable@%i.service +After=avsbus-disable@%i.service +Before=avsbus-enable@%i.service +Conflicts=obmc-chassis-poweroff@%i.target + +[Service] +ExecStart=/usr/bin/env vrm.sh +SyslogIdentifier=vrm.sh +Type=oneshot +RemainAfterExit=yes + +[Install] +WantedBy=obmc-chassis-poweron@%i.target diff --git a/meta-rcs/meta-talos/recipes-phosphor/chassis/vrm-control/vrm.sh b/meta-rcs/meta-talos/recipes-phosphor/chassis/vrm-control/vrm.sh new file mode 100644 index 000000000..86d5f1dd6 --- /dev/null +++ b/meta-rcs/meta-talos/recipes-phosphor/chassis/vrm-control/vrm.sh @@ -0,0 +1,22 @@ +#!/bin/sh + +# Get CPU count +CPU_COUNT=1 +STATUS_FLAGS=$(i2cget -y 12 0x31 0x7) +if [ $? != 0 ]; then + STATUS_FLAGS=$(i2cget -y 12 0x31 0x7) +fi +if [ $? != 0 ]; then + STATUS_FLAGS=$(i2cget -y 12 0x31 0x7) +fi +CPU_PRESENT_FLAG_N=$(( ${STATUS_FLAGS} & 0x20 )) +if [ $CPU_PRESENT_FLAG_N != 0 ]; then + CPU_COUNT=$(( ${CPU_COUNT} + 1 )) +fi +echo "Found $CPU_COUNT CPU(s)" + +if [ $CPU_COUNT -gt 1 ]; then + vrm-control.sh vdna=1.0 vdnb=1.0 +else + vrm-control.sh vdna=1.0 +fi |