Initial commit
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
#!/bin/bash
|
||||
# #########################################################
|
||||
# Script to run on witherspoon BMC to unbind/bind the ir35221
|
||||
# driver's devices
|
||||
|
||||
status=0
|
||||
max_retries=3
|
||||
driver_path="/sys/bus/i2c/drivers/ir35221/"
|
||||
platform_path="/sys/devices/platform/ahb/ahb:apb/ahb:apb:bus@1e78a000/"
|
||||
|
||||
unbind_driver () {
|
||||
echo "$1" > $driver_path/unbind
|
||||
}
|
||||
|
||||
bind_driver () {
|
||||
device=$1
|
||||
tries=0
|
||||
|
||||
until [ $tries -ge $max_retries ]; do
|
||||
tries=$((tries+1))
|
||||
ret=0
|
||||
# shellcheck disable=SC2320
|
||||
echo "$device" > $driver_path/bind || ret=$?
|
||||
if [ $ret -ne 0 ]; then
|
||||
echo "VRM $1 bind failed. Try $tries"
|
||||
sleep 1
|
||||
else
|
||||
tries=$((max_retries+1))
|
||||
fi
|
||||
done
|
||||
|
||||
#Script will return a nonzero value if any binds fail.
|
||||
if [ "$ret" -ne 0 ]; then
|
||||
status=$ret
|
||||
fi
|
||||
}
|
||||
|
||||
if [ "$1" = "unbind" ]
|
||||
then
|
||||
if [ -e $driver_path/4-0070 ]
|
||||
then
|
||||
unbind_driver "4-0070"
|
||||
fi
|
||||
|
||||
if [ -e $driver_path/4-0071 ]
|
||||
then
|
||||
unbind_driver "4-0071"
|
||||
fi
|
||||
|
||||
if [ -e $driver_path/5-0070 ]
|
||||
then
|
||||
unbind_driver "5-0070"
|
||||
fi
|
||||
|
||||
if [ -e $driver_path/5-0071 ]
|
||||
then
|
||||
unbind_driver "5-0071"
|
||||
fi
|
||||
elif [ "$1" = "bind" ]
|
||||
then
|
||||
if [ -e $platform_path/1e78a140.i2c-bus/i2c-4/4-0070 ]
|
||||
then
|
||||
bind_driver "4-0070"
|
||||
fi
|
||||
|
||||
if [ -e $platform_path/1e78a140.i2c-bus/i2c-4/4-0071 ]
|
||||
then
|
||||
bind_driver "4-0071"
|
||||
fi
|
||||
|
||||
if [ -e $platform_path/1e78a180.i2c-bus/i2c-5/5-0070 ]
|
||||
then
|
||||
bind_driver "5-0070"
|
||||
fi
|
||||
|
||||
if [ -e $platform_path/1e78a180.i2c-bus/i2c-5/5-0071 ]
|
||||
then
|
||||
bind_driver "5-0071"
|
||||
fi
|
||||
fi
|
||||
|
||||
exit "$status"
|
||||
@@ -0,0 +1,15 @@
|
||||
[Unit]
|
||||
Description=Power on bind ir35221 device driver devs
|
||||
After=avsbus-enable@%i.service
|
||||
Wants=obmc-host-start-pre@%i.target
|
||||
Before=obmc-host-start-pre@%i.target
|
||||
Conflicts=obmc-chassis-poweroff@%i.target
|
||||
ConditionPathExists=!/run/openbmc/chassis@%i-on
|
||||
|
||||
[Service]
|
||||
ExecStart=/usr/bin/ir35221-unbind-bind.sh bind
|
||||
Type=oneshot
|
||||
RemainAfterExit=yes
|
||||
|
||||
[Install]
|
||||
WantedBy=obmc-chassis-poweron@%i.target
|
||||
@@ -0,0 +1,14 @@
|
||||
[Unit]
|
||||
Description=power on mode unbind ir35221 device driver devs
|
||||
Wants=obmc-power-start-pre@%i.target
|
||||
Before=obmc-power-start-pre@%i.target
|
||||
Conflicts=obmc-chassis-poweroff@%i.target
|
||||
ConditionPathExists=!/run/openbmc/chassis@%i-on
|
||||
|
||||
[Service]
|
||||
ExecStart=/usr/bin/ir35221-unbind-bind.sh unbind
|
||||
Type=oneshot
|
||||
RemainAfterExit=yes
|
||||
|
||||
[Install]
|
||||
WantedBy=obmc-chassis-poweron@%i.target
|
||||
@@ -0,0 +1,155 @@
|
||||
#!/bin/bash
|
||||
# #########################################################
|
||||
# Script to run on witherspoon BMC to read/set vrm voltages
|
||||
|
||||
|
||||
# #########################################################
|
||||
function d2v() {
|
||||
# usage: d2v <decimal volts>
|
||||
|
||||
echo "$1" | awk '{print $1 * 256 + .5}' | cut -d '.' -f 1
|
||||
}
|
||||
|
||||
|
||||
# #########################################################
|
||||
function v2d() {
|
||||
# usage: v2d <hex val>
|
||||
|
||||
printf " %0.3fV" "$(echo "$1" | awk '{print $1 / 256}')"
|
||||
}
|
||||
|
||||
|
||||
# #########################################################
|
||||
function i2d() {
|
||||
# usage: i2d <hex val> <current divisor>
|
||||
|
||||
# parse current mantisa and exponent
|
||||
# format: SEEE ESMM MMMM MMMM
|
||||
e=$(( $1/0x800 ))
|
||||
esign=$(( e/0x10 ))
|
||||
m=$(( $1 & 0x07FF ))
|
||||
msign=$(( m/0x0400 ))
|
||||
|
||||
if [ $msign -eq 1 ]
|
||||
then
|
||||
# calc ones compliment
|
||||
m=$(( (m^0x07FF)+1 ))
|
||||
m=$(( -m ))
|
||||
fi
|
||||
if [ $esign -eq 1 ]
|
||||
then
|
||||
# calc ones compliment
|
||||
e=$(( (e^0x1F)+1 ))
|
||||
e=$(( -e ))
|
||||
fi
|
||||
printf " %0.3fA\n" "$(echo $m $e "$2" | awk '{print ($1 * 2^$2)}')"
|
||||
}
|
||||
|
||||
|
||||
# #########################################################
|
||||
function 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
|
||||
@@ -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
|
||||
ConditionPathExists=!/run/openbmc/chassis@%i-on
|
||||
|
||||
[Service]
|
||||
ExecStart=/usr/bin/vrm-control.sh vdna=0.9 vdnb=0.9
|
||||
Type=oneshot
|
||||
RemainAfterExit=yes
|
||||
|
||||
[Install]
|
||||
WantedBy=obmc-chassis-poweron@%i.target
|
||||
Reference in New Issue
Block a user