Initial commit

This commit is contained in:
Your Name
2026-04-23 17:07:55 +08:00
commit b7e39e063b
16725 changed files with 1625565 additions and 0 deletions
@@ -0,0 +1,33 @@
SUMMARY = "Romulus AVSBus control"
PR = "r1"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
inherit obmc-phosphor-systemd
RDEPENDS:${PN} += "i2c-tools bash"
S = "${WORKDIR}"
SRC_URI += "file://avsbus-enable.sh \
file://avsbus-disable.sh"
do_install() {
install -d ${D}${bindir}
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"
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} += "${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')}"
@@ -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
@@ -0,0 +1,15 @@
[Unit]
Description=Disable the AVS bus on the VRMs
Wants=obmc-power-start@.service
After=obmc-power-start@.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,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
@@ -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,27 @@
SUMMARY = "Romulus VRM Overrides"
DESCRIPTION = "Sets Rolumus 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 obmc-phosphor-systemd
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')}"
@@ -0,0 +1,137 @@
#!/bin/bash
# #########################################################
# Script to run on Romulus 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) / $3}')"
}
# #########################################################
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 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
@@ -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.sh
Type=oneshot
RemainAfterExit=yes
[Install]
WantedBy=obmc-chassis-poweron@%i.target
@@ -0,0 +1,3 @@
#!/bin/sh
vrm-control.sh vdna=0.9 vdnb=0.9