Initial commit
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
SUMMARY = "AVSBus control"
|
||||
PR = "r1"
|
||||
LICENSE = "Apache-2.0"
|
||||
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
|
||||
|
||||
inherit allarch
|
||||
inherit obmc-phosphor-systemd
|
||||
|
||||
RDEPENDS:${PN} += "i2c-tools"
|
||||
|
||||
S = "${WORKDIR}"
|
||||
|
||||
SRC_URI:append:witherspoon = " file://avsbus-enable.sh"
|
||||
SRC_URI:append:witherspoon = " file://avsbus-disable.sh"
|
||||
|
||||
do_install:witherspoon() {
|
||||
install -d ${D}${bindir}
|
||||
install -m 0755 ${S}/avsbus-enable.sh ${D}${bindir}/avsbus-enable.sh
|
||||
install -m 0755 ${S}/avsbus-disable.sh ${D}${bindir}/avsbus-disable.sh
|
||||
}
|
||||
|
||||
|
||||
TMPL_EN= "avsbus-enable@.service"
|
||||
TMPL_DIS= "avsbus-disable@.service"
|
||||
INSTFMT_EN= "avsbus-enable@{0}.service"
|
||||
INSTFMT_DIS= "avsbus-disable@{0}.service"
|
||||
TGTFMT = "obmc-chassis-poweron@{0}.target"
|
||||
FMT_EN = "../${TMPL_EN}:${TGTFMT}.requires/${INSTFMT_EN}"
|
||||
FMT_DIS = "../${TMPL_DIS}:${TGTFMT}.requires/${INSTFMT_DIS}"
|
||||
|
||||
SYSTEMD_SERVICE:${PN}:append:witherspoon = " ${TMPL_EN}"
|
||||
SYSTEMD_SERVICE:${PN}:append:witherspoon = " ${TMPL_DIS}"
|
||||
SYSTEMD_LINK:${PN}:append:witherspoon = " ${@compose_list(d, 'FMT_DIS', 'OBMC_CHASSIS_INSTANCES')}"
|
||||
SYSTEMD_LINK:${PN}:append:witherspoon = " ${@compose_list(d, 'FMT_EN', 'OBMC_CHASSIS_INSTANCES')}"
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
#!/bin/sh
|
||||
# For each AVSBus attached power rail set the default boot voltage and then
|
||||
# program the OPERATION register to switch to AVSBus mode and update default
|
||||
# start voltage to what was last programmed in VOUT_COMMAND. This should be run
|
||||
# before power-on. This is platform specific settings that must be
|
||||
# updated/removed if not Swift.
|
||||
|
||||
i2cset -y 9 0x70 0x00 0x00 b # VDD 0 - PAGE set
|
||||
i2cset -y 9 0x70 0x01 0xB0 b # VDD 0
|
||||
i2cset -y 9 0x71 0x00 0x01 b # VCS 0 - PAGE set
|
||||
i2cset -y 9 0x71 0x01 0xB0 b # VCS 0
|
||||
i2cset -y 9 0x71 0x00 0x00 b # VDN 0 - PAGE set
|
||||
i2cset -y 9 0x71 0x01 0xB0 b # VDN 0
|
||||
|
||||
i2cset -y 10 0x70 0x00 0x00 b # VDD 1 - PAGE set
|
||||
i2cset -y 10 0x70 0x01 0xB0 b # VDD 1
|
||||
i2cset -y 10 0x71 0x00 0x01 b # VCS 1 - PAGE set
|
||||
i2cset -y 10 0x71 0x01 0xB0 b # VCS 1
|
||||
i2cset -y 10 0x71 0x00 0x00 b # VDN 1 - PAGE set
|
||||
i2cset -y 10 0x71 0x01 0xB0 b # VDN 1
|
||||
@@ -0,0 +1,15 @@
|
||||
[Unit]
|
||||
Description=Enable the AVS bus on VRMs
|
||||
Wants=obmc-power-start@%i.service
|
||||
Before=obmc-power-start@%i.service
|
||||
Conflicts=obmc-chassis-poweroff@%i.target
|
||||
ConditionPathExists=!/run/openbmc/chassis@%i-on
|
||||
|
||||
[Service]
|
||||
ExecStart={bindir}/avsbus-enable.sh
|
||||
SyslogIdentifier=avsbus-enable.sh
|
||||
Type=oneshot
|
||||
RemainAfterExit=yes
|
||||
|
||||
[Install]
|
||||
WantedBy=obmc-chassis-poweron@%i.target
|
||||
@@ -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 0x71 0x00 0x00 b # VDN 0 - PAGE set
|
||||
i2cset -y 4 0x71 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 0x71 0x00 0x00 b # VDN 1 - PAGE set
|
||||
i2cset -y 5 0x71 0x01 0x80 b # VDN 1
|
||||
@@ -0,0 +1,15 @@
|
||||
[Unit]
|
||||
Description=Disable the AVS bus on the VRMs
|
||||
Wants=power-workarounds@%i.service
|
||||
After=power-workarounds@%i.service
|
||||
Before=vrm-control@%i.service
|
||||
Conflicts=obmc-chassis-poweroff@%i.target
|
||||
ConditionPathExists=!/run/openbmc/chassis@%i-on
|
||||
|
||||
[Service]
|
||||
ExecStart=/usr/bin/avsbus-disable.sh
|
||||
Type=oneshot
|
||||
RemainAfterExit=yes
|
||||
|
||||
[Install]
|
||||
WantedBy=obmc-chassis-poweron@%i.target
|
||||
@@ -0,0 +1,22 @@
|
||||
#!/bin/sh
|
||||
|
||||
i2cset -y 4 0x70 0x00 0x00 b # VDD 0 - PAGE set
|
||||
i2cset -y 4 0x70 0x21 0x00 0x01 i # VDD 0 - Set default HW boot voltage
|
||||
i2cset -y 4 0x70 0x01 0xB0 b # VDD 0
|
||||
i2cset -y 4 0x70 0x00 0x01 b # VCS 0 - PAGE set
|
||||
i2cset -y 4 0x70 0x21 0x08 0x01 i # VCS 0 - Set default HW boot voltage
|
||||
i2cset -y 4 0x70 0x01 0xB0 b # VCS 0
|
||||
i2cset -y 4 0x70 0x00 0x00 b # VCS 0 - PAGE reset
|
||||
i2cset -y 4 0x71 0x00 0x00 b # VDN 0 - PAGE set
|
||||
i2cset -y 4 0x71 0x21 0x00 0x01 i # VDN 0 - Set default HW boot voltage
|
||||
i2cset -y 4 0x71 0x01 0xB0 b # VDN 0
|
||||
i2cset -y 5 0x70 0x00 0x00 b # VDD 1 - PAGE set
|
||||
i2cset -y 5 0x70 0x21 0x00 0x01 i # VDD 1 - Set default HW boot voltage
|
||||
i2cset -y 5 0x70 0x01 0xB0 b # VDD 1
|
||||
i2cset -y 5 0x70 0x00 0x01 b # VCS 1 - PAGE set
|
||||
i2cset -y 5 0x70 0x21 0x08 0x01 i # VCS 1 - Set default HW boot voltage
|
||||
i2cset -y 5 0x70 0x01 0xB0 b # VCS 1
|
||||
i2cset -y 5 0x70 0x00 0x00 b # VCS 1 - PAGE reset
|
||||
i2cset -y 5 0x71 0x00 0x00 b # VDN 1 - PAGE set
|
||||
i2cset -y 5 0x71 0x21 0x00 0x01 i # VDN 1 - Set default HW boot voltage
|
||||
i2cset -y 5 0x71 0x01 0xB0 b # VDN 1
|
||||
@@ -0,0 +1,14 @@
|
||||
[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/avsbus-enable.sh
|
||||
Type=oneshot
|
||||
RemainAfterExit=yes
|
||||
|
||||
[Install]
|
||||
WantedBy=obmc-chassis-poweron@%i.target
|
||||
@@ -0,0 +1 @@
|
||||
EXTRA_OEMESON:append:p10bmc = " -Dpower-button-profile=host_then_chassis_poweroff"
|
||||
@@ -0,0 +1,6 @@
|
||||
FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
|
||||
|
||||
# Remove, from the p10bmc image, the service file that starts the skeleton power
|
||||
# control application. That image will use the power control application
|
||||
# included in the phosphor-power repository.
|
||||
OBMC_CONTROL_POWER_FMT:p10bmc = ""
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
POLL_INTERVAL="500"
|
||||
PGOOD_TIMEOUT="10"
|
||||
@@ -0,0 +1,36 @@
|
||||
SUMMARY = "Power device Workarounds"
|
||||
PR = "r1"
|
||||
LICENSE = "Apache-2.0"
|
||||
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
|
||||
|
||||
inherit allarch
|
||||
inherit obmc-phosphor-systemd
|
||||
|
||||
RDEPENDS:${PN} += "i2c-tools"
|
||||
|
||||
S = "${WORKDIR}"
|
||||
|
||||
FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}/${MACHINE}:"
|
||||
SRC_URI:append:witherspoon = " file://power-workarounds.sh"
|
||||
SRC_URI:append:swift = " file://power-workarounds.sh"
|
||||
|
||||
do_install:append:witherspoon() {
|
||||
install -d ${D}${bindir}
|
||||
install -m 0755 ${S}/power-workarounds.sh ${D}${bindir}/power-workarounds.sh
|
||||
}
|
||||
|
||||
do_install:append:swift() {
|
||||
install -d ${D}${bindir}
|
||||
install -m 0755 ${S}/power-workarounds.sh ${D}${bindir}/power-workarounds.sh
|
||||
}
|
||||
|
||||
TMPL_WA = "power-workarounds@.service"
|
||||
INSTFMT_WA = "power-workarounds@{0}.service"
|
||||
TGTFMT = "obmc-chassis-poweron@{0}.target"
|
||||
FMT_WA = "../${TMPL_WA}:${TGTFMT}.requires/${INSTFMT_WA}"
|
||||
|
||||
SYSTEMD_SERVICE:${PN}:append:witherspoon = " ${TMPL_WA}"
|
||||
SYSTEMD_LINK:${PN}:append:witherspoon = "${@compose_list(d, 'FMT_WA', 'OBMC_CHASSIS_INSTANCES')}"
|
||||
|
||||
SYSTEMD_SERVICE:${PN}:append:swift = " ${TMPL_WA}"
|
||||
SYSTEMD_LINK:${PN}:append:swift = "${@compose_list(d, 'FMT_WA', 'OBMC_CHASSIS_INSTANCES')}"
|
||||
@@ -0,0 +1,23 @@
|
||||
#!/bin/sh
|
||||
# This should be run before power-on and used to patch/update power specific
|
||||
# hardware settings. This is platform specific settings that must be
|
||||
# updated/removed if not Swift.
|
||||
|
||||
########## Program TPS53915 FSW to desired frequency #########
|
||||
# FREQUENCY_CONFIG D3h, bits 2:0
|
||||
|
||||
# AVDD, bus 3 addr 1D, set to 600khz
|
||||
# 600khz = 1,0,0
|
||||
i2cset -y 3 0x1D 0xD3 0x04 b
|
||||
|
||||
# 3.3VA, bus 3 addr 1C, set to 600khz
|
||||
i2cset -y 3 0x1C 0xD3 0x04 b
|
||||
|
||||
# 3.3VB, bus 3 addr 1B, set to 600khz
|
||||
i2cset -y 3 0x1B 0xD3 0x04 b
|
||||
|
||||
# 5.0V, bus 3 addr 1A, set to 850khz
|
||||
# 850khz = 1,1,0
|
||||
i2cset -y 3 0x1A 0xD3 0x06 b
|
||||
########## END Program TPS53915 FSW to desired frequency #########
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
[Unit]
|
||||
Description=Perform power workarounds on VRMs after PGOOD is up
|
||||
Wants=obmc-power-on@%i.target
|
||||
After=obmc-power-on@%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/power-workarounds.sh
|
||||
SyslogIdentifier=power-workarounds.sh
|
||||
Type=oneshot
|
||||
RemainAfterExit=yes
|
||||
|
||||
[Install]
|
||||
WantedBy=obmc-chassis-poweron@%i.target
|
||||
@@ -0,0 +1,136 @@
|
||||
#!/bin/sh
|
||||
|
||||
# ensure VCS ON_OFF_CONFIG set correctly from prior FW drivers
|
||||
# A side
|
||||
i2cset -y 4 0x70 0x00 0x01 b
|
||||
i2cset -y 4 0x70 0x02 0x16 b #respond to ENABLE pin
|
||||
i2cset -y 4 0x70 0x00 0x00 b
|
||||
# B side
|
||||
i2cset -y 5 0x70 0x00 0x01 b
|
||||
i2cset -y 5 0x70 0x02 0x16 b #respond to ENABLE pin
|
||||
i2cset -y 5 0x70 0x00 0x00 b
|
||||
|
||||
# vddio = 1.0V, mdat/sdat PU enabled
|
||||
i2cset -y 4 0x12 0xFF 0x00 b # VDD/VCS 0
|
||||
i2cset -y 4 0x12 0x2E 0x03 b # VDD/VCS 0
|
||||
i2cset -y 4 0x13 0xFF 0x00 b # VDN 0
|
||||
i2cset -y 4 0x13 0x2E 0x03 b # VDN 0
|
||||
i2cset -y 5 0x12 0xFF 0x00 b # VDD/VCS 1
|
||||
i2cset -y 5 0x12 0x2E 0x03 b # VDD/VCS 1
|
||||
i2cset -y 5 0x13 0xFF 0x00 b # VDN 1
|
||||
i2cset -y 5 0x13 0x2E 0x03 b # VDN 1
|
||||
|
||||
# A side VDDR - set to 1.23V
|
||||
i2cset -y 4 0x71 0x00 0x01
|
||||
i2cset -y 4 0x71 0x21 0x3B 0x01 i
|
||||
i2cset -y 4 0x71 0x00 0x00
|
||||
|
||||
# B side VDDR - set to 1.23V
|
||||
i2cset -y 5 0x71 0x00 0x01
|
||||
i2cset -y 5 0x71 0x21 0x3B 0x01 i
|
||||
i2cset -y 5 0x71 0x00 0x00
|
||||
|
||||
# VDN A - PGOOD_ON threshold
|
||||
i2cset -y 4 0x71 0x00 0x00 b # PAGE
|
||||
i2cset -y 4 0x71 0x5E 0xCD 0x00 i # set to 0.8V
|
||||
|
||||
# VDN B - PGOOD_ON threshold
|
||||
i2cset -y 5 0x71 0x00 0x00 b # PAGE
|
||||
i2cset -y 5 0x71 0x5E 0xCD 0x00 i # set to 0.8V
|
||||
|
||||
# unbind ucd driver to permit i2cset
|
||||
ucd_retries=5
|
||||
ucd=
|
||||
|
||||
ucdpath="/sys/bus/i2c/drivers/ucd9000"
|
||||
if [ -e $ucdpath ]
|
||||
then
|
||||
# shellcheck disable=SC2010
|
||||
ucd=$(ls -1 $ucdpath | grep 64)
|
||||
if [ -n "$ucd" ]
|
||||
then
|
||||
echo "$ucd" > $ucdpath/unbind
|
||||
fi
|
||||
fi
|
||||
|
||||
# make sure VCS ON_OFF_CONFIG set correctly from old FW releases
|
||||
i2cset -y 11 0x64 0x00 0x0E i
|
||||
i2cset -y 11 0x64 0x02 0x16 i
|
||||
i2cset -y 11 0x64 0x00 0x0F i
|
||||
i2cset -y 11 0x64 0x02 0x16 i
|
||||
|
||||
## move memory enables to align with VDN (VDN to VDDR leakage issue)
|
||||
#GPO_CONFIG_1 (GPIO15) : mem 0 reg enables
|
||||
i2cset -y 11 0x64 0xF7 0x00 i
|
||||
i2cset -y 11 0x64 0xF8 0x15 0x6E 0x80 0x08 0x00 0x00 0x00 0x40 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 i
|
||||
#GPO_CONFIG_2 (GPIO7) : mem 1 reg enables
|
||||
i2cset -y 11 0x64 0xF7 0x01 i
|
||||
i2cset -y 11 0x64 0xF8 0x15 0x16 0x80 0x08 0x00 0x00 0x20 0x40 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 i
|
||||
|
||||
# change VDN delays based on UCD MFR_REVISION setting
|
||||
REV=$(i2cget -y 11 0x64 0x9B i 2|cut -f2 -d' ')
|
||||
if [ "$REV" = "0x01" ] || [ "$REV" = "0x02" ] ; then
|
||||
# use 20ms delay for VDN
|
||||
#TON_DELAY rail 8
|
||||
i2cset -y 11 0x64 0x00 0x07 i
|
||||
i2cset -y 11 0x64 0x60 0x80 0xDA i
|
||||
#TON_DELAY rail 9
|
||||
i2cset -y 11 0x64 0x00 0x08 i
|
||||
i2cset -y 11 0x64 0x60 0x80 0xDA i
|
||||
else
|
||||
# use 70ms delay for VDN
|
||||
#TON_DELAY rail 8
|
||||
i2cset -y 11 0x64 0x00 0x07 i
|
||||
i2cset -y 11 0x64 0x60 0x30 0xEA i
|
||||
#TON_DELAY rail 9
|
||||
i2cset -y 11 0x64 0x00 0x08 i
|
||||
i2cset -y 11 0x64 0x60 0x30 0xEA i
|
||||
fi
|
||||
|
||||
# Raise AVDD +100mV
|
||||
i2cset -y 11 0x64 0x00 0x09 i # set PAGE
|
||||
i2cset -y 11 0x64 0xF5 0x81 i # set margin_config
|
||||
i2cset -y 11 0x64 0x21 0x85 0x33 i # set VOUT_COMMAND
|
||||
|
||||
# Increase over-current settings
|
||||
#VDD A phase current
|
||||
i2cset -y 4 0x12 0xFF 0x04 b # set window register high byte to 4
|
||||
i2cset -y 4 0x12 0x3C 0x80 b # Set to 64A
|
||||
#VDD B phase current
|
||||
i2cset -y 5 0x12 0xFF 0x04 b # set window register high byte to 4
|
||||
i2cset -y 5 0x12 0x3C 0x80 b # Set to 64A
|
||||
#VDD A master OC fault to 445A
|
||||
i2cset -y 4 0x70 0x00 0x00 b # PAGE
|
||||
i2cset -y 4 0x70 0x46 0x08DE w
|
||||
# VDD A master OC warn to 326A
|
||||
i2cset -y 4 0x70 0x4A 0x08A3 w # A308
|
||||
#VDD B master OC fault to 445A
|
||||
i2cset -y 5 0x70 0x00 0x00 b # PAGE
|
||||
i2cset -y 5 0x70 0x46 0x08DE w
|
||||
# VDD B master OC warn to 326A
|
||||
i2cset -y 5 0x70 0x4A 0x08A3 w
|
||||
#VCS phase current to 30A C/C
|
||||
i2cset -y 4 0x12 0xFF 0x08 b # set window register to 8
|
||||
i2cset -y 4 0x12 0x3C 0x3C b # 30A
|
||||
i2cset -y 5 0x12 0xFF 0x08 b # set window register to 8
|
||||
i2cset -y 5 0x12 0x3C 0x3C b # 30A
|
||||
#VCS master OC to 43A
|
||||
i2cset -y 4 0x70 0x00 0x01 # PAGE 1
|
||||
i2cset -y 4 0x70 0x46 0x0816 w # OC to 43A
|
||||
i2cset -y 5 0x70 0x00 0x01 # PAGE 1
|
||||
i2cset -y 5 0x70 0x46 0x0816 w # OC to 43A
|
||||
|
||||
# re-bind ucd driver only if we unbound it (i.e. ucd has been set with a value)
|
||||
if [ -e $ucdpath ] && [ -n "$ucd" ]; then
|
||||
j=0
|
||||
until [ $j -ge $ucd_retries ] || [ -e "$ucdpath/$ucd" ]; do
|
||||
j=$((j+1))
|
||||
# shellcheck disable=2320
|
||||
echo "$ucd" > $ucdpath/bind || ret=$?
|
||||
if [ $j -gt 1 ]; then
|
||||
echo "rebinding UCD driver. Retry number $j"
|
||||
sleep 1
|
||||
fi
|
||||
done
|
||||
if [ ! -e "$ucdpath/$ucd" ]; then exit "$ret"; fi
|
||||
fi
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
[Unit]
|
||||
Description=Perform power workarounds on VRMs
|
||||
Wants=ir35221-on-unbind@%i.service
|
||||
After=ir35221-on-unbind@%i.service
|
||||
Before=avsbus-disable@%i.service
|
||||
Before=obmc-power-on@%i.target
|
||||
Conflicts=obmc-chassis-poweroff@%i.target
|
||||
ConditionPathExists=!/run/openbmc/chassis@%i-on
|
||||
|
||||
[Service]
|
||||
ExecStart=/usr/bin/power-workarounds.sh
|
||||
Type=oneshot
|
||||
RemainAfterExit=yes
|
||||
|
||||
[Install]
|
||||
WantedBy=obmc-chassis-poweron@%i.target
|
||||
@@ -0,0 +1,39 @@
|
||||
SUMMARY = "VRM Overrides"
|
||||
DESCRIPTION = "Sets VRMs to custom voltages"
|
||||
PR = "r1"
|
||||
LICENSE = "Apache-2.0"
|
||||
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
|
||||
|
||||
inherit allarch
|
||||
inherit obmc-phosphor-systemd
|
||||
|
||||
RDEPENDS:${PN} += "i2c-tools bash"
|
||||
|
||||
S = "${WORKDIR}"
|
||||
SRC_URI:append:ibm-ac-server = " file://ir35221-unbind-bind.sh"
|
||||
SRC_URI:append:ibm-ac-server = " file://vrm-control.sh"
|
||||
|
||||
do_install:ibm-ac-server() {
|
||||
install -d ${D}${bindir}
|
||||
install -m 0755 ${WORKDIR}/ir35221-unbind-bind.sh ${D}${bindir}/ir35221-unbind-bind.sh
|
||||
install -m 0755 ${WORKDIR}/vrm-control.sh ${D}${bindir}/vrm-control.sh
|
||||
}
|
||||
|
||||
TMPL = "vrm-control@.service"
|
||||
INSTFMT = "vrm-control@{0}.service"
|
||||
TGTFMT_ON = "obmc-chassis-poweron@{0}.target"
|
||||
FMT_ON = "../${TMPL}:${TGTFMT_ON}.requires/${INSTFMT}"
|
||||
|
||||
TMPL_ON_IRBIND = "ir35221-on-bind@.service"
|
||||
INSTFMT_ON_IRBIND = "ir35221-on-bind@{0}.service"
|
||||
FMT_ON_IRBIND = "../${TMPL_ON_IRBIND}:${TGTFMT_ON}.wants/${INSTFMT_ON_IRBIND}"
|
||||
|
||||
TMPL_ON_IRUNBIND = "ir35221-on-unbind@.service"
|
||||
INSTFMT_ON_IRUNBIND = "ir35221-on-unbind@{0}.service"
|
||||
FMT_ON_IRUNBIND = "../${TMPL_ON_IRUNBIND}:${TGTFMT_ON}.requires/${INSTFMT_ON_IRUNBIND}"
|
||||
|
||||
SYSTEMD_SERVICE:${PN}:append:ibm-ac-server = " ${TMPL_ON_IRUNBIND} ${TMPL_ON_IRBIND}"
|
||||
SYSTEMD_SERVICE:${PN}:append:ibm-ac-server = " ${TMPL}"
|
||||
SYSTEMD_LINK:${PN}:append:ibm-ac-server = " ${@compose_list(d, 'FMT_ON', 'OBMC_CHASSIS_INSTANCES')}"
|
||||
SYSTEMD_LINK:${PN}:append:ibm-ac-server = " ${@compose_list(d, 'FMT_ON_IRBIND', 'OBMC_CHASSIS_INSTANCES')}"
|
||||
SYSTEMD_LINK:${PN}:append:ibm-ac-server = " ${@compose_list(d, 'FMT_ON_IRUNBIND', 'OBMC_CHASSIS_INSTANCES')}"
|
||||
@@ -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