diff options
Diffstat (limited to 'meta-ibm/meta-romulus/recipes-phosphor/chassis')
11 files changed, 308 insertions, 0 deletions
diff --git a/meta-ibm/meta-romulus/recipes-phosphor/chassis/avsbus-control.bb b/meta-ibm/meta-romulus/recipes-phosphor/chassis/avsbus-control.bb new file mode 100644 index 000000000..e014da2e6 --- /dev/null +++ b/meta-ibm/meta-romulus/recipes-phosphor/chassis/avsbus-control.bb @@ -0,0 +1,40 @@ +SUMMARY = "Romulus AVSBus control" +PR = "r1" + +inherit obmc-phosphor-systemd +inherit obmc-phosphor-license + +RDEPENDS_${PN} += "i2c-tools bash" + +S = "${WORKDIR}" +SRC_URI += "file://avsbus-workaround.sh \ + file://avsbus-enable.sh \ + file://avsbus-disable.sh" + +do_install() { + install -d ${D}${bindir} + install -m 0755 ${WORKDIR}/avsbus-workaround.sh \ + ${D}${bindir}/avsbus-workaround.sh + install -m 0755 ${WORKDIR}/avsbus-disable.sh \ + ${D}${bindir}/avsbus-disable.sh + install -m 0755 ${WORKDIR}/avsbus-enable.sh \ + ${D}${bindir}/avsbus-enable.sh +} + +TMPL_EN= "avsbus-enable@.service" +TMPL_DIS= "avsbus-disable@.service" +TMPL_WA= "avsbus-workaround@.service" +INSTFMT_EN= "avsbus-enable@{0}.service" +INSTFMT_DIS= "avsbus-disable@{0}.service" +INSTFMT_WA= "avsbus-workaround@{0}.service" +TGTFMT = "obmc-chassis-poweron@{0}.target" +FMT_EN = "../${TMPL_EN}:${TGTFMT}.requires/${INSTFMT_EN}" +FMT_DIS = "../${TMPL_DIS}:${TGTFMT}.requires/${INSTFMT_DIS}" +FMT_WA = "../${TMPL_WA}:${TGTFMT}.requires/${INSTFMT_WA}" + +SYSTEMD_SERVICE_${PN} += "${TMPL_EN}" +SYSTEMD_LINK_${PN} += "${@compose_list(d, 'FMT_EN', 'OBMC_CHASSIS_INSTANCES')}" +SYSTEMD_SERVICE_${PN} += "${TMPL_DIS}" +SYSTEMD_LINK_${PN} += "${@compose_list(d, 'FMT_DIS', 'OBMC_CHASSIS_INSTANCES')}" +SYSTEMD_SERVICE_${PN} += "${TMPL_WA}" +SYSTEMD_LINK_${PN} += "${@compose_list(d, 'FMT_WA', 'OBMC_CHASSIS_INSTANCES')}" diff --git a/meta-ibm/meta-romulus/recipes-phosphor/chassis/avsbus-control/avsbus-disable.sh b/meta-ibm/meta-romulus/recipes-phosphor/chassis/avsbus-control/avsbus-disable.sh new file mode 100644 index 000000000..1c3600088 --- /dev/null +++ b/meta-ibm/meta-romulus/recipes-phosphor/chassis/avsbus-control/avsbus-disable.sh @@ -0,0 +1,16 @@ +#!/bin/sh + +i2cset -y 4 0x70 0x00 0x00 b # VDD 0 - PAGE set +i2cset -y 4 0x70 0x01 0x80 b # VDD 0 +i2cset -y 4 0x70 0x00 0x01 b # VCS 0 - PAGE set +i2cset -y 4 0x70 0x01 0x80 b # VCS 0 +i2cset -y 4 0x70 0x00 0x00 b # VCS 0 - PAGE reset +i2cset -y 4 0x73 0x00 0x00 b # VDN 0 - PAGE set +i2cset -y 4 0x73 0x01 0x80 b # VDN 0 +i2cset -y 5 0x70 0x00 0x00 b # VDD 1 - PAGE set +i2cset -y 5 0x70 0x01 0x80 b # VDD 1 +i2cset -y 5 0x70 0x00 0x01 b # VCS 1 - PAGE set +i2cset -y 5 0x70 0x01 0x80 b # VCS 1 +i2cset -y 5 0x70 0x00 0x00 b # VCS 1 - PAGE reset +i2cset -y 5 0x73 0x00 0x00 b # VDN 1 - PAGE set +i2cset -y 5 0x73 0x01 0x80 b # VDN 1 diff --git a/meta-ibm/meta-romulus/recipes-phosphor/chassis/avsbus-control/avsbus-disable@.service b/meta-ibm/meta-romulus/recipes-phosphor/chassis/avsbus-control/avsbus-disable@.service new file mode 100644 index 000000000..424aa2394 --- /dev/null +++ b/meta-ibm/meta-romulus/recipes-phosphor/chassis/avsbus-control/avsbus-disable@.service @@ -0,0 +1,16 @@ +[Unit] +Description=Disable the AVS bus on the VRMs +Wants=avsbus-workaround@%i.service +After=avsbus-workaround@%i.service +Before=vrm-control@%i.service +Conflicts=obmc-chassis-poweroff@%i.target +ConditionPathExists=!/run/openbmc/chassis@%i-on + +[Service] +ExecStart=/usr/bin/env avsbus-disable.sh +SyslogIdentifier=avsbus-disable.sh +Type=oneshot +RemainAfterExit=yes + +[Install] +WantedBy=obmc-chassis-poweron@%i.target diff --git a/meta-ibm/meta-romulus/recipes-phosphor/chassis/avsbus-control/avsbus-enable.sh b/meta-ibm/meta-romulus/recipes-phosphor/chassis/avsbus-control/avsbus-enable.sh new file mode 100644 index 000000000..98e585cc2 --- /dev/null +++ b/meta-ibm/meta-romulus/recipes-phosphor/chassis/avsbus-control/avsbus-enable.sh @@ -0,0 +1,16 @@ +#!/bin/sh + +i2cset -y 4 0x70 0x00 0x00 b # VDD 0 - PAGE set +i2cset -y 4 0x70 0x01 0xB0 b # VDD 0 +i2cset -y 4 0x70 0x00 0x01 b # VCS 0 - PAGE set +i2cset -y 4 0x70 0x01 0xB0 b # VCS 0 +i2cset -y 4 0x70 0x00 0x00 b # VCS 0 - PAGE reset +i2cset -y 4 0x73 0x00 0x00 b # VDN 0 - PAGE set +i2cset -y 4 0x73 0x01 0xB0 b # VDN 0 +i2cset -y 5 0x70 0x00 0x00 b # VDD 1 - PAGE set +i2cset -y 5 0x70 0x01 0xB0 b # VDD 1 +i2cset -y 5 0x70 0x00 0x01 b # VCS 1 - PAGE set +i2cset -y 5 0x70 0x01 0xB0 b # VCS 1 +i2cset -y 5 0x70 0x00 0x00 b # VCS 1 - PAGE reset +i2cset -y 5 0x73 0x00 0x00 b # VDN 1 - PAGE set +i2cset -y 5 0x73 0x01 0xB0 b # VDN 1 diff --git a/meta-ibm/meta-romulus/recipes-phosphor/chassis/avsbus-control/avsbus-enable@.service b/meta-ibm/meta-romulus/recipes-phosphor/chassis/avsbus-control/avsbus-enable@.service new file mode 100644 index 000000000..b7fb41e24 --- /dev/null +++ b/meta-ibm/meta-romulus/recipes-phosphor/chassis/avsbus-control/avsbus-enable@.service @@ -0,0 +1,15 @@ +[Unit] +Description=Enable the AVS bus on VRMs +Wants=vrm-control@%i.service +After=vrm-control@%i.service +Conflicts=obmc-chassis-poweroff@%i.target +ConditionPathExists=!/run/openbmc/chassis@%i-on + +[Service] +ExecStart=/usr/bin/env avsbus-enable.sh +SyslogIdentifier=avsbus-enable.sh +Type=oneshot +RemainAfterExit=yes + +[Install] +WantedBy=obmc-chassis-poweron@%i.target diff --git a/meta-ibm/meta-romulus/recipes-phosphor/chassis/avsbus-control/avsbus-workaround.sh b/meta-ibm/meta-romulus/recipes-phosphor/chassis/avsbus-control/avsbus-workaround.sh new file mode 100644 index 000000000..75ec8caed --- /dev/null +++ b/meta-ibm/meta-romulus/recipes-phosphor/chassis/avsbus-control/avsbus-workaround.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +i2cset -y 4 0x28 0x2E 0x23 b # VDD/VCS 0 +i2cset -y 4 0x2B 0x2E 0x23 b # VDN 0 +i2cset -y 5 0x28 0x2E 0x23 b # VDD/VCS 1 +i2cset -y 5 0x2B 0x2E 0x23 b # VDN 1 + diff --git a/meta-ibm/meta-romulus/recipes-phosphor/chassis/avsbus-control/avsbus-workaround@.service b/meta-ibm/meta-romulus/recipes-phosphor/chassis/avsbus-control/avsbus-workaround@.service new file mode 100644 index 000000000..156ef03c7 --- /dev/null +++ b/meta-ibm/meta-romulus/recipes-phosphor/chassis/avsbus-control/avsbus-workaround@.service @@ -0,0 +1,16 @@ +[Unit] +Description=Perform AVS bus workaround on VRMs +Wants=op-power-start@.service +After=op-power-start@.service +Before=avsbus-disable@%i.service +Conflicts=obmc-chassis-poweroff@%i.target +ConditionPathExists=!/run/openbmc/chassis@%i-on + +[Service] +ExecStart=/usr/bin/env avsbus-workaround.sh +SyslogIdentifier=avsbus-workaround.sh +Type=oneshot +RemainAfterExit=yes + +[Install] +WantedBy=obmc-chassis-poweron@%i.target diff --git a/meta-ibm/meta-romulus/recipes-phosphor/chassis/vrm-control.bb b/meta-ibm/meta-romulus/recipes-phosphor/chassis/vrm-control.bb new file mode 100644 index 000000000..e23bdd077 --- /dev/null +++ b/meta-ibm/meta-romulus/recipes-phosphor/chassis/vrm-control.bb @@ -0,0 +1,26 @@ +SUMMARY = "Romulus VRM Overrides" +DESCRIPTION = "Sets Rolumus VRMs to custom voltages" +PR = "r1" + +inherit obmc-phosphor-systemd +inherit obmc-phosphor-license + +RDEPENDS_${PN} += "i2c-tools bash" + +S = "${WORKDIR}" +SRC_URI += "file://vrm-control.sh \ + file://vrm.sh" + +do_install() { + install -d ${D}${bindir} + install -m 0755 ${WORKDIR}/vrm.sh ${D}${bindir}/vrm.sh + install -m 0755 ${WORKDIR}/vrm-control.sh ${D}${bindir}/vrm-control.sh +} + +TMPL = "vrm-control@.service" +INSTFMT = "vrm-control@{0}.service" +TGTFMT = "obmc-chassis-poweron@{0}.target" +FMT = "../${TMPL}:${TGTFMT}.requires/${INSTFMT}" + +SYSTEMD_SERVICE_${PN} += "${TMPL}" +SYSTEMD_LINK_${PN} += "${@compose_list(d, 'FMT', 'OBMC_CHASSIS_INSTANCES')}" diff --git a/meta-ibm/meta-romulus/recipes-phosphor/chassis/vrm-control/vrm-control.sh b/meta-ibm/meta-romulus/recipes-phosphor/chassis/vrm-control/vrm-control.sh new file mode 100644 index 000000000..870124296 --- /dev/null +++ b/meta-ibm/meta-romulus/recipes-phosphor/chassis/vrm-control/vrm-control.sh @@ -0,0 +1,137 @@ +#!/bin/bash +# ######################################################### +# Script to run on Romulus 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-ibm/meta-romulus/recipes-phosphor/chassis/vrm-control/vrm-control@.service b/meta-ibm/meta-romulus/recipes-phosphor/chassis/vrm-control/vrm-control@.service new file mode 100644 index 000000000..22f0aeb87 --- /dev/null +++ b/meta-ibm/meta-romulus/recipes-phosphor/chassis/vrm-control/vrm-control@.service @@ -0,0 +1,16 @@ +[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/env vrm.sh +SyslogIdentifier=vrm.sh +Type=oneshot +RemainAfterExit=yes + +[Install] +WantedBy=obmc-chassis-poweron@%i.target diff --git a/meta-ibm/meta-romulus/recipes-phosphor/chassis/vrm-control/vrm.sh b/meta-ibm/meta-romulus/recipes-phosphor/chassis/vrm-control/vrm.sh new file mode 100644 index 000000000..725e72f84 --- /dev/null +++ b/meta-ibm/meta-romulus/recipes-phosphor/chassis/vrm-control/vrm.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +vrm-control.sh vdna=0.9 vdnb=0.9 |