summaryrefslogtreecommitdiffstats
path: root/meta-openbmc-machines
diff options
context:
space:
mode:
authorBrian Yang <yang.brianc.w@inventec.com>2018-07-10 02:02:53 -0400
committerBrad Bishop <bradleyb@fuzziesquirrel.com>2018-07-16 03:42:18 +0000
commitfb6b450934f0682141c302394cfc4c08e0cef5a7 (patch)
tree92bcd7da661d76f1d851e21adc4425a59a44fe31 /meta-openbmc-machines
parentf2086519efb590151583856915ff01b175b33cf0 (diff)
downloadtalos-openbmc-fb6b450934f0682141c302394cfc4c08e0cef5a7.tar.gz
talos-openbmc-fb6b450934f0682141c302394cfc4c08e0cef5a7.zip
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')
-rw-r--r--meta-openbmc-machines/meta-openpower/meta-inventec/meta-lanyang/conf/machine/lanyang.conf1
-rw-r--r--meta-openbmc-machines/meta-openpower/meta-inventec/meta-lanyang/recipes-phosphor/chassis/avsbus-control.bb28
-rw-r--r--meta-openbmc-machines/meta-openpower/meta-inventec/meta-lanyang/recipes-phosphor/chassis/avsbus-control/avsbus-disable@.service15
-rw-r--r--meta-openbmc-machines/meta-openpower/meta-inventec/meta-lanyang/recipes-phosphor/chassis/avsbus-control/avsbus-enable@.service16
-rwxr-xr-xmeta-openbmc-machines/meta-openpower/meta-inventec/meta-lanyang/recipes-phosphor/chassis/avsbus-control/lanyang_avsbus.sh98
-rw-r--r--meta-openbmc-machines/meta-openpower/meta-inventec/meta-lanyang/recipes-phosphor/host/p9-host-start.bbappend2
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 e6e0bb01b..4ca08b1fb 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 000000000..ff68f3926
--- /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 000000000..add5f224e
--- /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 000000000..787ec4cbf
--- /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 000000000..bf58defc8
--- /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 000000000..e2fe9f274
--- /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"
OpenPOWER on IntegriCloud