diff options
author | Dave Cobbley <david.j.cobbley@linux.intel.com> | 2018-08-23 04:40:54 +0300 |
---|---|---|
committer | Brad Bishop <bradleyb@fuzziesquirrel.com> | 2018-08-23 19:39:42 +0300 |
commit | 194ff4f1f5d44b12e9cb06ddafa6adb20174a13c (patch) | |
tree | 823835cd29daf8901a31ac14c7e6534abf199be3 /meta-inventec/meta-lanyang/recipes-phosphor/chassis | |
parent | 4feb727cd6b77a68bdaca63e121b378d814f5eaf (diff) | |
download | openbmc-194ff4f1f5d44b12e9cb06ddafa6adb20174a13c.tar.xz |
[Subtree] Bring openbmc machines to top level
The new subtree model brings the subtrees up from the openbmc-machines
layer.
Change-Id: I58a03ae1be374bc79ae1438e65e888375d12d0c0
Signed-off-by: Dave Cobbley <david.j.cobbley@linux.intel.com>
Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
Diffstat (limited to 'meta-inventec/meta-lanyang/recipes-phosphor/chassis')
4 files changed, 157 insertions, 0 deletions
diff --git a/meta-inventec/meta-lanyang/recipes-phosphor/chassis/avsbus-control.bb b/meta-inventec/meta-lanyang/recipes-phosphor/chassis/avsbus-control.bb new file mode 100644 index 000000000..ff68f3926 --- /dev/null +++ b/meta-inventec/meta-lanyang/recipes-phosphor/chassis/avsbus-control.bb @@ -0,0 +1,28 @@ +SUMMARY = "Lanyang AVSBus control" +DESCRIPTION = "Voltage regulator module (VRM) AVSBus control for Lanyang" +PR = "r0" + +inherit obmc-phosphor-systemd +inherit obmc-phosphor-license + +TMPL_OFF = "avsbus-disable@.service" +TMPL_ON = "avsbus-enable@.service" +INSTFMT_OFF = "avsbus-disable@{0}.service" +INSTFMT_ON = "avsbus-enable@{0}.service" +TGTFMT_OFF = "obmc-host-stop@{0}.target" +TGTFMT_ON = "obmc-chassis-poweron@{0}.target" +FMT_OFF = "../${TMPL_OFF}:${TGTFMT_OFF}.wants/${INSTFMT_OFF}" +FMT_ON = "../${TMPL_ON}:${TGTFMT_ON}.requires/${INSTFMT_ON}" + +SYSTEMD_SERVICE_${PN} += "${TMPL_OFF}" +SYSTEMD_LINK_${PN} += "${@compose_list(d, 'FMT_OFF', 'OBMC_CHASSIS_INSTANCES')}" +SYSTEMD_SERVICE_${PN} += "${TMPL_ON}" +SYSTEMD_LINK_${PN} += "${@compose_list(d, 'FMT_ON', 'OBMC_CHASSIS_INSTANCES')}" + +SRC_URI += "file://lanyang_avsbus.sh" +RDEPENDS_${PN} += "i2c-tools" + +do_install() { + install -d ${D}${bindir} + install -m 0755 ${WORKDIR}/lanyang_avsbus.sh ${D}${bindir}/lanyang_avsbus.sh +} diff --git a/meta-inventec/meta-lanyang/recipes-phosphor/chassis/avsbus-control/avsbus-disable@.service b/meta-inventec/meta-lanyang/recipes-phosphor/chassis/avsbus-control/avsbus-disable@.service new file mode 100644 index 000000000..add5f224e --- /dev/null +++ b/meta-inventec/meta-lanyang/recipes-phosphor/chassis/avsbus-control/avsbus-disable@.service @@ -0,0 +1,15 @@ +[Unit] +Description=Disable AVSBus on VRMs +Wants=obmc-power-stop-pre@%i.target +Before=obmc-power-stop-pre@%i.target +Conflicts=obmc-host-startmin@%i.target +ConditionPathExists=!/run/openbmc/chassis@%i-on + +[Service] +ExecStart=/usr/bin/env lanyang_avsbus.sh disable +SyslogIdentifier=lanyang_avsbus.sh +Type=oneshot +RemainAfterExit=yes + +[Install] +WantedBy=obmc-host-stop@%i.target diff --git a/meta-inventec/meta-lanyang/recipes-phosphor/chassis/avsbus-control/avsbus-enable@.service b/meta-inventec/meta-lanyang/recipes-phosphor/chassis/avsbus-control/avsbus-enable@.service new file mode 100644 index 000000000..787ec4cbf --- /dev/null +++ b/meta-inventec/meta-lanyang/recipes-phosphor/chassis/avsbus-control/avsbus-enable@.service @@ -0,0 +1,16 @@ +[Unit] +Description=Enable AVSBus on VRMs +Wants=obmc-host-start-pre@%i.target +Before=obmc-host-start-pre@%i.target +Conflicts=obmc-host-stop@%i.target +ConditionPathExists=!/run/openbmc/chassis@%i-on + +[Service] +ExecStart=/usr/bin/env lanyang_avsbus.sh vdn_max +ExecStart=/usr/bin/env lanyang_avsbus.sh enable +SyslogIdentifier=lanyang_avsbus.sh +Type=oneshot +RemainAfterExit=yes + +[Install] +RequiredBy=obmc-chassis-poweron@%i.target diff --git a/meta-inventec/meta-lanyang/recipes-phosphor/chassis/avsbus-control/lanyang_avsbus.sh b/meta-inventec/meta-lanyang/recipes-phosphor/chassis/avsbus-control/lanyang_avsbus.sh new file mode 100755 index 000000000..bf58defc8 --- /dev/null +++ b/meta-inventec/meta-lanyang/recipes-phosphor/chassis/avsbus-control/lanyang_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="5" +cpu1_i2c_bus="6" +busses="$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 $busses + 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 |