diff options
author | Brian Yang <yang.brianc.w@inventec.com> | 2018-07-10 09:02:53 +0300 |
---|---|---|
committer | Brad Bishop <bradleyb@fuzziesquirrel.com> | 2018-07-16 06:42:18 +0300 |
commit | fb6b450934f0682141c302394cfc4c08e0cef5a7 (patch) | |
tree | 92bcd7da661d76f1d851e21adc4425a59a44fe31 /meta-openbmc-machines | |
parent | f2086519efb590151583856915ff01b175b33cf0 (diff) | |
download | openbmc-fb6b450934f0682141c302394cfc4c08e0cef5a7.tar.xz |
meta-lanyang: add AVSBus script, services
Add AVSBus control script.
Add systemd services to enable AVSBus after power on and disable AVSBus
at power off.
Add bitbake recipe to install script and services.
Remove p9-vcs-workaround in the lanyang.conf and p9-host-start.bbappend
because there is no UCD on lanyang platform.
Change-Id: I3508776ff2b3ef5378af840f096d1cc4420f5062
Tested: built image correctly then can boot to host.
Signed-off-by: Brian Yang <yang.brianc.w@inventec.com>
Diffstat (limited to 'meta-openbmc-machines')
6 files changed, 159 insertions, 1 deletions
diff --git a/meta-openbmc-machines/meta-openpower/meta-inventec/meta-lanyang/conf/machine/lanyang.conf b/meta-openbmc-machines/meta-openpower/meta-inventec/meta-lanyang/conf/machine/lanyang.conf index e6e0bb01b2..4ca08b1fb7 100644 --- a/meta-openbmc-machines/meta-openpower/meta-inventec/meta-lanyang/conf/machine/lanyang.conf +++ b/meta-openbmc-machines/meta-openpower/meta-inventec/meta-lanyang/conf/machine/lanyang.conf @@ -5,7 +5,6 @@ UBOOT_MACHINE = "ast_g5_ncsi_config" FLASH_SIZE = "65536" -PREFERRED_PROVIDER_virtual/p9-vcs-workaround = 'vcs-control' PREFERRED_PROVIDER_virtual/phosphor-ipmi-fru-inventory = "lanyang-ipmi-inventory-map-native" PREFERRED_PROVIDER_virtual/phosphor-led-manager-config-native = "lanyang-led-manager-config-native" diff --git a/meta-openbmc-machines/meta-openpower/meta-inventec/meta-lanyang/recipes-phosphor/chassis/avsbus-control.bb b/meta-openbmc-machines/meta-openpower/meta-inventec/meta-lanyang/recipes-phosphor/chassis/avsbus-control.bb new file mode 100644 index 0000000000..ff68f3926d --- /dev/null +++ b/meta-openbmc-machines/meta-openpower/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-openbmc-machines/meta-openpower/meta-inventec/meta-lanyang/recipes-phosphor/chassis/avsbus-control/avsbus-disable@.service b/meta-openbmc-machines/meta-openpower/meta-inventec/meta-lanyang/recipes-phosphor/chassis/avsbus-control/avsbus-disable@.service new file mode 100644 index 0000000000..add5f224ec --- /dev/null +++ b/meta-openbmc-machines/meta-openpower/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-openbmc-machines/meta-openpower/meta-inventec/meta-lanyang/recipes-phosphor/chassis/avsbus-control/avsbus-enable@.service b/meta-openbmc-machines/meta-openpower/meta-inventec/meta-lanyang/recipes-phosphor/chassis/avsbus-control/avsbus-enable@.service new file mode 100644 index 0000000000..787ec4cbf9 --- /dev/null +++ b/meta-openbmc-machines/meta-openpower/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-openbmc-machines/meta-openpower/meta-inventec/meta-lanyang/recipes-phosphor/chassis/avsbus-control/lanyang_avsbus.sh b/meta-openbmc-machines/meta-openpower/meta-inventec/meta-lanyang/recipes-phosphor/chassis/avsbus-control/lanyang_avsbus.sh new file mode 100755 index 0000000000..bf58defc80 --- /dev/null +++ b/meta-openbmc-machines/meta-openpower/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 diff --git a/meta-openbmc-machines/meta-openpower/meta-inventec/meta-lanyang/recipes-phosphor/host/p9-host-start.bbappend b/meta-openbmc-machines/meta-openpower/meta-inventec/meta-lanyang/recipes-phosphor/host/p9-host-start.bbappend new file mode 100644 index 0000000000..e2fe9f2740 --- /dev/null +++ b/meta-openbmc-machines/meta-openpower/meta-inventec/meta-lanyang/recipes-phosphor/host/p9-host-start.bbappend @@ -0,0 +1,2 @@ +RDEPENDS_${PN} += 'avsbus-control' +RDEPENDS_${PN}_remove += "p9-vcs-workaround" |