summaryrefslogtreecommitdiffstats
path: root/meta-rcs/meta-talos/recipes-phosphor/chassis/vrm-control
diff options
context:
space:
mode:
authorRaptor Engineering Development Team <support@raptorengineering.com>2019-04-19 08:35:02 +0000
committerTimothy Pearson <tpearson@raptorengineering.com>2019-04-25 08:02:05 +0000
commitc6a41036bb2f2fedb9a37ab3e1721839110b32a1 (patch)
tree5d3723e067adac7eaa4843d7ef24fbd82dc2aceb /meta-rcs/meta-talos/recipes-phosphor/chassis/vrm-control
parentfb83e16d3529ade1057088c33faeb4ea7ff922ed (diff)
downloadtalos-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')
-rw-r--r--meta-rcs/meta-talos/recipes-phosphor/chassis/vrm-control/vrm-control.sh137
-rw-r--r--meta-rcs/meta-talos/recipes-phosphor/chassis/vrm-control/vrm-control@.service15
-rw-r--r--meta-rcs/meta-talos/recipes-phosphor/chassis/vrm-control/vrm.sh22
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
OpenPOWER on IntegriCloud