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,20 @@
{
"gpio_definitions": [
{
"name": "POWER_BUTTON",
"pin": "M7",
"direction": "both"
},
{
"name": "DEBUG_SELECTOR_BUTTON",
"pin": "G3",
"direction": "both"
},
{
"name": "HOST_SELECTOR",
"group_gpio_config" : [],
"max_position" : 6,
"host_selector_map" : {}
}
]
}
@@ -0,0 +1,10 @@
FILESEXTRAPATHS:append:bletchley := "${THISDIR}/${PN}:"
SRC_URI += "file://gpio_defs.json"
do_install:append:bletchley() {
install -d ${D}${sysconfdir}/default/obmc/gpio/
install -m 0644 ${WORKDIR}/gpio_defs.json ${D}/${sysconfdir}/default/obmc/gpio/
}
FILES:${PN}-signals:append = " ${sysconfdir}/default/obmc/gpio/gpio_defs.json"
@@ -0,0 +1,23 @@
SUMMARY = "YAML configuration for bletchley"
PR = "r1"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
inherit allarch
SRC_URI = " \
file://bletchley-ipmi-fru.yaml \
"
S = "${WORKDIR}"
do_install() {
install -m 0644 -D bletchley-ipmi-fru.yaml \
${D}${datadir}/${BPN}/ipmi-fru-read.yaml
}
FILES:${PN}-dev = " \
${datadir}/${BPN}/ipmi-fru-read.yaml \
"
ALLOW_EMPTY:${PN} = "1"
@@ -0,0 +1,39 @@
0:
/system/chassis/bmc:
entityID: 7
entityInstance: 1
interfaces:
xyz.openbmc_project.Inventory.Decorator.Asset:
BuildDate:
IPMIFruProperty: Mfg Date
IPMIFruSection: Board
SerialNumber:
IPMIFruProperty: Serial Number
IPMIFruSection: Board
PartNumber:
IPMIFruProperty: Part Number
IPMIFruSection: Board
Manufacturer:
IPMIFruProperty: Manufacturer
IPMIFruSection: Board
xyz.openbmc_project.Inventory.Item:
PrettyName:
IPMIFruProperty: Name
IPMIFruSection: Board
xyz.openbmc_project.Inventory.Decorator.Revision:
Version:
IPMIFruProperty: FRU File ID
IPMIFruSection: Board
xyz.openbmc_project.Inventory.Item.Board:
xyz.openbmc_project.Inventory.Item.Bmc:
xyz.openbmc_project.Inventory.Item.Panel:
/system/chassis/bmc/ethernet:
entityID: 7
entityInstance: 1
interfaces:
xyz.openbmc_project.Inventory.Item.NetworkInterface:
MACAddress:
IPMIFruProperty: Custom Field 3
IPMIFruSection: Board
xyz.openbmc_project.Inventory.Item.Ethernet:
@@ -0,0 +1,16 @@
FILESEXTRAPATHS:prepend:bletchley := "${THISDIR}/${PN}:"
FILES:${PN}:append:bletchley = " ${datadir}/swampd"
FILES:${PN}:append:bletchley = " ${systemd_system_unitdir}/phosphor-pid-control.service.d/*.conf"
do_install:append:bletchley() {
override_dir="${D}${systemd_system_unitdir}/phosphor-pid-control.service.d"
override_file="${override_dir}/10-bletchley.conf"
mkdir -p ${D}${systemd_system_unitdir}/phosphor-pid-control.service.d
echo "[Unit]" > ${override_file}
echo "After=xyz.openbmc_project.hwmontempsensor.service" >> ${override_file}
echo "After=phosphor-virtual-sensor.service" >> ${override_file}
install -d ${D}${datadir}/swampd
}
@@ -0,0 +1,4 @@
INVENTORY=/system/chassis/presence/presence_sled1
DEVPATH=/dev/input/event0
KEY=58
NAME=presence_sled1
@@ -0,0 +1,4 @@
INVENTORY=/system/chassis/presence/presence_sled2
DEVPATH=/dev/input/event0
KEY=59
NAME=presence_sled2
@@ -0,0 +1,4 @@
INVENTORY=/system/chassis/presence/presence_sled3
DEVPATH=/dev/input/event0
KEY=60
NAME=presence_sled3
@@ -0,0 +1,4 @@
INVENTORY=/system/chassis/presence/presence_sled4
DEVPATH=/dev/input/event0
KEY=61
NAME=presence_sled4
@@ -0,0 +1,4 @@
INVENTORY=/system/chassis/presence/presence_sled5
DEVPATH=/dev/input/event0
KEY=62
NAME=presence_sled5
@@ -0,0 +1,4 @@
INVENTORY=/system/chassis/presence/presence_sled6
DEVPATH=/dev/input/event0
KEY=63
NAME=presence_sled6
@@ -0,0 +1,22 @@
FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
inherit obmc-phosphor-systemd
# Add service file link
TMPL_PRESENT = "phosphor-gpio-presence@.service"
INSTFMT_PRESENT = "phosphor-gpio-presence@presence-sled{0}.service"
PRESENT_TGT = "multi-user.target"
FMT_PRESENT = "../${TMPL_PRESENT}:${PRESENT_TGT}.requires/${INSTFMT_PRESENT}"
SYSTEMD_LINK:${PN}-presence:append:bletchley = " ${@compose_list(d, 'FMT_PRESENT', 'OBMC_HOST_INSTANCES')}"
# Add environment file
SLED_PRESENT_ENV_FMT = "obmc/gpio/presence-sled{0}.conf"
SYSTEMD_ENVIRONMENT_FILE:${PN}-presence:bletchley = " ${@compose_list(d, 'SLED_PRESENT_ENV_FMT', 'OBMC_HOST_INSTANCES')}"
GPIO_PRESENCE_SLED_CONF="/etc/default/obmc/gpio/%i.conf"
do_install:append:bletchley(){
# modify ConditionPathExists and EnvironmentFile to correct filepath
sed -i -e "s,ConditionPathExists=.*,ConditionPathExists=${GPIO_PRESENCE_SLED_CONF},g" ${D}${systemd_system_unitdir}/phosphor-gpio-presence@.service
sed -i -e "s,EnvironmentFile=.*,EnvironmentFile=${GPIO_PRESENCE_SLED_CONF},g" ${D}${systemd_system_unitdir}/phosphor-gpio-presence@.service
}
@@ -0,0 +1 @@
CPU_CRIT_TGT = ""
@@ -0,0 +1,18 @@
OBMC_IMAGE_EXTRA_INSTALL:append = " \
phosphor-nvme \
plat-svc \
motor-ctrl \
phosphor-virtual-sensor \
usbutils \
idevicerestore \
fw-update \
phosphor-sel-logger \
phosphor-gpio-monitor-presence \
detect-sled-present \
phosphor-ipmi-ipmb \
fb-ipmi-oem \
board-type-checker \
obmc-phosphor-buttons-signals \
obmc-phosphor-buttons-handler \
phosphor-state-manager \
"
@@ -0,0 +1,2 @@
FILESEXTRAPATHS:append := ":${THISDIR}/${PN}"
SOURCE_FILES:append = " 99-platform-init"
@@ -0,0 +1,23 @@
#bin/sh
# Create /dev/mem
if [ ! -c /dev/mem ]; then
/bin/mknod /dev/mem c 1 1
fi
# Disable FMC_WDT2
FMC_WDT2_CTRL_VAL=$(/sbin/devmem 0x1e620064)
FMC_WDT2_CTRL_VAL=$((16#${FMC_WDT2_CTRL_VAL#"0x"}))
SET_VAL=$((FMC_WDT2_CTRL_VAL & 0xFFFFFFFE))
/sbin/devmem 0x1e620064 32 "$SET_VAL"
# Detect boot flash source
SLOT_FILE="/run/media/slot"
mkdir -p "$(dirname "${SLOT_FILE}")"
if [ "$((FMC_WDT2_CTRL_VAL & 0x00000010))" != "0" ]; then
echo "1" > "$SLOT_FILE"
else
echo "0" > "$SLOT_FILE"
fi
exit 0
@@ -0,0 +1,2 @@
SYSFS_PATH=/sys/bus/i2c/devices/7-0054/eeprom
FRUID=0
@@ -0,0 +1,24 @@
inherit obmc-phosphor-systemd
FILESEXTRAPATHS:prepend:bletchley := "${THISDIR}/${PN}:"
DEPENDS:append:bletchley = " bletchley-yaml-config"
IPMI_FRU_YAML:bletchley = "${STAGING_DIR_HOST}${datadir}/bletchley-yaml-config/ipmi-fru-read.yaml"
EEPROM_NAMES = "bmc"
EEPROMFMT = "system/chassis/{0}"
EEPROM_ESCAPEDFMT = "system-chassis-{0}"
EEPROMS = "${@compose_list(d, 'EEPROMFMT', 'EEPROM_NAMES')}"
EEPROMS_ESCAPED = "${@compose_list(d, 'EEPROM_ESCAPEDFMT', 'EEPROM_NAMES')}"
ENVFMT = "obmc/eeproms/{0}"
SYSTEMD_ENVIRONMENT_FILE:${PN}:append:bletchley := " ${@compose_list(d, 'ENVFMT', 'EEPROMS')}"
TMPL = "obmc-read-eeprom@.service"
TGT = "${SYSTEMD_DEFAULT_TARGET}"
INSTFMT = "obmc-read-eeprom@{0}.service"
FMT = "../${TMPL}:${TGT}.wants/${INSTFMT}"
SYSTEMD_LINK:${PN}:append:bletchley := " ${@compose_list(d, 'FMT', 'EEPROMS_ESCAPED')}"
@@ -0,0 +1,13 @@
DEPENDS:append:bletchley = " bletchley-yaml-config"
EXTRA_OEMESON:bletchley = " \
-Dfru-yaml-gen=${STAGING_DIR_HOST}${datadir}/bletchley-yaml-config/ipmi-fru-read.yaml \
"
# host watchdog does not support on bletchley
RDEPENDS:${PN}:remove:bletchley = "phosphor-watchdog"
# bletchley doesn't have IPMI support, skip xyz.openbmc_project.Ipmi.Internal.SoftPowerOff.service
SOFT_SVC = ""
SOFT_TGTFMT = ""
SOFT_FMT = ""
@@ -0,0 +1 @@
IPMB_CHANNELS:bletchley = "/dev/ipmb-13"
@@ -0,0 +1,18 @@
SUMMARY = "Phosphor LED Group Management for Bletchley"
PR = "r1"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
inherit native
PROVIDES += "virtual/phosphor-led-manager-config-native"
SRC_URI += "file://led.yaml"
S = "${WORKDIR}"
# Copies example led layout yaml file
do_install() {
SRC=${S}
DEST=${D}${datadir}/phosphor-led-manager
install -D ${SRC}/led.yaml ${DEST}/led.yaml
}
@@ -0,0 +1,222 @@
#====================
# Chassis LED
#====================
bmc_booted:
sys_log_id:
Action: 'On'
enclosure_fault:
sys_log_id:
Action: 'Blink'
DutyOn: 50
Period: 1000
enclosure_identify:
sys_log_id:
Action: 'Blink'
DutyOn: 50
Period: 400
enclosure_identify_blink:
sys_log_id:
Action: 'Blink'
DutyOn: 50
Period: 400
#====================
# Fan 0
#====================
fan0_fault:
fan0_amber:
Action: 'On'
fan0_blue:
Action: 'Off'
fan0_good:
fan0_amber:
Action: 'Off'
fan0_blue:
Action: 'On'
#====================
# Fan 1
#====================
fan1_fault:
fan1_amber:
Action: 'On'
fan1_blue:
Action: 'Off'
fan1_good:
fan1_amber:
Action: 'Off'
fan1_blue:
Action: 'On'
#====================
# Fan 2
#====================
fan2_fault:
fan2_amber:
Action: 'On'
fan2_blue:
Action: 'Off'
fan2_good:
fan2_amber:
Action: 'Off'
fan2_blue:
Action: 'On'
#====================
# Fan 3
#====================
fan3_fault:
fan3_amber:
Action: 'On'
fan3_blue:
Action: 'Off'
fan3_good:
fan3_amber:
Action: 'Off'
fan3_blue:
Action: 'On'
#====================
# Sled 1
#====================
sled1_fault:
sled1_amber:
Action: 'On'
sled1_good:
sled1_blue:
Action: 'On'
sled1_identify:
sled1_amber:
Action: 'Blink'
DutyOn: 50
Period: 400
sled1_identify_blink:
sled1_amber:
Action: 'Blink'
DutyOn: 50
Period: 400
#====================
# Sled 2
#====================
sled2_fault:
sled2_amber:
Action: 'On'
sled2_good:
sled2_blue:
Action: 'On'
sled2_identify:
sled2_amber:
Action: 'Blink'
DutyOn: 50
Period: 400
sled2_identify_blink:
sled2_amber:
Action: 'Blink'
DutyOn: 50
Period: 400
#====================
# Sled 3
#====================
sled3_fault:
sled3_amber:
Action: 'On'
sled3_good:
sled3_blue:
Action: 'On'
sled3_identify:
sled3_amber:
Action: 'Blink'
DutyOn: 50
Period: 400
sled3_identify_blink:
sled3_amber:
Action: 'Blink'
DutyOn: 50
Period: 400
#====================
# Sled 4
#====================
sled4_fault:
sled4_amber:
Action: 'On'
sled4_good:
sled4_blue:
Action: 'On'
sled4_identify:
sled4_amber:
Action: 'Blink'
DutyOn: 50
Period: 400
sled4_identify_blink:
sled4_amber:
Action: 'Blink'
DutyOn: 50
Period: 400
#====================
# Sled 5
#====================
sled5_fault:
sled5_amber:
Action: 'On'
sled5_good:
sled5_blue:
Action: 'On'
sled5_identify:
sled5_amber:
Action: 'Blink'
DutyOn: 50
Period: 400
sled5_identify_blink:
sled5_amber:
Action: 'Blink'
DutyOn: 50
Period: 400
#====================
# Sled 6
#====================
sled6_fault:
sled6_amber:
Action: 'On'
sled6_good:
sled6_blue:
Action: 'On'
sled6_identify:
sled6_amber:
Action: 'Blink'
DutyOn: 50
Period: 400
sled6_identify_blink:
sled6_amber:
Action: 'Blink'
DutyOn: 50
Period: 400
@@ -0,0 +1,9 @@
FAN_INSTANCES="0 1 2 3"
FAN_INSTFMT="obmc-led-group-start@.service:obmc-led-group-start@fan{0}_good.service"
SYSTEMD_LINK:${PN} += "${@compose_list_zip(d, 'FAN_INSTFMT', 'FAN_INSTANCES')}"
HOST_START_INSTFMT="obmc-led-group-start@.service:obmc-led-group-start@sled{0}_good.service"
SYSTEMD_LINK:${PN} += "${@compose_list_zip(d, 'HOST_START_INSTFMT', 'OBMC_HOST_INSTANCES')}"
HOST_STOP_INSTFMT="obmc-led-group-stop@.service:obmc-led-group-stop@sled{0}_good.service"
SYSTEMD_LINK:${PN} += "${@compose_list_zip(d, 'HOST_STOP_INSTFMT', 'OBMC_HOST_INSTANCES')}"
@@ -0,0 +1,3 @@
{
"eth0":"ethernet"
}
@@ -0,0 +1,15 @@
FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
PACKAGECONFIG:append = " sync-mac"
EXTRA_OEMESON = "-Dforce-sync-mac=true"
SRC_URI += " \
file://config.json \
"
FILES:${PN} += "${datadir}/network/*.json"
do_install:append() {
install -d ${D}${datadir}/network/
install -m 0644 ${WORKDIR}/config.json ${D}${datadir}/network/
}
@@ -0,0 +1,8 @@
FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
PACKAGECONFIG:bletchley = " \
adcsensor \
fansensor \
hwmontempsensor \
psusensor \
"
@@ -0,0 +1,72 @@
#!/bin/bash
TARGET_FILE_NAME="/etc/nvme/nvme_config.json"
export_gpio() {
if [ ! -d "/sys/class/gpio/gpio$1" ]; then
echo "$1" >/sys/class/gpio/export
fi
}
for i in {0..5}
do
SLED_NVME_PCIE_EN[i]=0
for file in /sys/bus/i2c/drivers/pca953x/"$i"-0041/gpio/gpiochip*/base
do
if [ -f "$file" ]; then
GPIOCHIP_BASE="$(cat /sys/bus/i2c/drivers/pca953x/"$i"-0041/gpio/gpiochip*/base)"
SLED_NVME_PCIE_EN[i]=$((GPIOCHIP_BASE+3))
export_gpio "${SLED_NVME_PCIE_EN[i]}"
break
fi
done
done
cat > $TARGET_FILE_NAME << EOF1
{
"maxSmbusErrorRetry": 3,
"config": [
{
"NVMeDriveIndex": 1,
"NVMeDriveBusID": 0,
"NVMeDrivePwrGoodPin": ${SLED_NVME_PCIE_EN[0]}
},
{
"NVMeDriveIndex": 2,
"NVMeDriveBusID": 1,
"NVMeDrivePwrGoodPin": ${SLED_NVME_PCIE_EN[1]}
},
{
"NVMeDriveIndex": 3,
"NVMeDriveBusID": 2,
"NVMeDrivePwrGoodPin": ${SLED_NVME_PCIE_EN[2]}
},
{
"NVMeDriveIndex": 4,
"NVMeDriveBusID": 3,
"NVMeDrivePwrGoodPin": ${SLED_NVME_PCIE_EN[3]}
},
{
"NVMeDriveIndex": 5,
"NVMeDriveBusID": 4,
"NVMeDrivePwrGoodPin": ${SLED_NVME_PCIE_EN[4]}
},
{
"NVMeDriveIndex": 6,
"NVMeDriveBusID": 5,
"NVMeDrivePwrGoodPin": ${SLED_NVME_PCIE_EN[5]}
}
],
"threshold": [
{
"criticalHigh": 68,
"criticalLow": 0,
"warningHigh": 67,
"warningLow": 1,
"maxValue": 127,
"minValue": -127
}
]
}
EOF1
@@ -0,0 +1,2 @@
[Service]
ExecStartPre=/usr/libexec/phosphor-nvme/nvme-json-rewrite
@@ -0,0 +1,39 @@
{
"maxSmbusErrorRetry": 3,
"config": [
{
"NVMeDriveIndex": 1,
"NVMeDriveBusID": 0
},
{
"NVMeDriveIndex": 2,
"NVMeDriveBusID": 1
},
{
"NVMeDriveIndex": 3,
"NVMeDriveBusID": 2
},
{
"NVMeDriveIndex": 4,
"NVMeDriveBusID": 3
},
{
"NVMeDriveIndex": 5,
"NVMeDriveBusID": 4
},
{
"NVMeDriveIndex": 6,
"NVMeDriveBusID": 5
}
],
"threshold": [
{
"criticalHigh": 68,
"criticalLow": 0,
"warningHigh": 67,
"warningLow": 1,
"maxValue": 127,
"minValue": -127
}
]
}
@@ -0,0 +1,23 @@
FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
inherit obmc-phosphor-systemd
SRC_URI:append:bletchley = " \
file://nvme-json-rewrite \
file://nvme-json-rewrite.conf \
file://nvme_config.json \
"
RDEPENDS:${PN}:bletchley += "bash"
do_install:append:bletchley() {
install -d ${D}${libexecdir}/${PN}/
install -m 0755 ${WORKDIR}/nvme-json-rewrite ${D}${libexecdir}/${PN}/
install -d ${D}${sysconfdir}/nvme
install -m 0644 -D ${WORKDIR}/nvme_config.json ${D}${sysconfdir}/nvme
}
SYSTEMD_OVERRIDE:${PN}:append:bletchley = " \
nvme-json-rewrite.conf:xyz.openbmc_project.nvme.manager.service.d/nvme-json-rewrite.conf \
"
@@ -0,0 +1,143 @@
[
{
"Desc": {
"Name": "Virtual_CFM_Sensor",
"SensorType": "airflow"
},
"Params": {
"DbusParam": [
{
"ParamName": "fan0",
"Desc": {
"Name": "FAN0_TACH_IL",
"SensorType": "fan_tach"
}
},
{
"ParamName": "fan1",
"Desc": {
"Name": "FAN1_TACH_IL",
"SensorType": "fan_tach"
}
},
{
"ParamName": "fan2",
"Desc": {
"Name": "FAN2_TACH_IL",
"SensorType": "fan_tach"
}
},
{
"ParamName": "fan3",
"Desc": {
"Name": "FAN3_TACH_IL",
"SensorType": "fan_tach"
}
}
]
},
"Expression": "max(0, (avg(fan0, fan1, fan2, fan3) * 0.0448) - 9.5042)"
},
{
"Desc": {
"Name": "Virtual_Inlet_Temp",
"SensorType": "temperature"
},
"Threshold": {
"CriticalHigh": 40,
"CriticalLow": 0
},
"Params": {
"DbusParam": [
{
"ParamName": "inlet_temp",
"Desc": {
"Name": "FRONT_PANEL_TEMP",
"SensorType": "temperature"
}
},
{
"ParamName": "fan0",
"Desc": {
"Name": "FAN0_TACH_IL",
"SensorType": "fan_tach"
}
},
{
"ParamName": "fan1",
"Desc": {
"Name": "FAN1_TACH_IL",
"SensorType": "fan_tach"
}
},
{
"ParamName": "fan2",
"Desc": {
"Name": "FAN2_TACH_IL",
"SensorType": "fan_tach"
}
},
{
"ParamName": "fan3",
"Desc": {
"Name": "FAN3_TACH_IL",
"SensorType": "fan_tach"
}
}
]
},
"Expression": [
"if(",
" avg(fan0, fan1, fan2, fan3) > 0,",
" inlet_temp - (((avg(fan0, fan1, fan2, fan3)^2) * (5e-8)) -",
" (avg(fan0, fan1, fan2, fan3) * (6e-4)) + 1.5841),",
" inlet_temp)"
]
},
{
"Desc": {
"Name": "Virtual_P12V_AUX_HSC_Input_Power",
"SensorType": "power"
},
"Params": {
"DbusParam": [
{
"ParamName": "HSC_PWR",
"Desc": {
"Name": "P12V_AUX_HSC_Input_Power",
"SensorType": "power"
}
}
]
},
"Expression": [
"var PWR[9]:={",
" 68.082, 131.899, 194.753, 256.391, 316.721, 376.108, 433.569,",
" 490.850, 546.187 };",
"var ERR[9]:={",
" 0.0425, 0.0497, 0.0537, 0.0555, 0.0565, 0.0577, 0.0587, 0.0597,",
" 0.0603 };",
"switch {",
" case HSC_PWR<PWR[0]:",
" HSC_PWR/(1+ERR[0]);",
" case inrange(PWR[0],HSC_PWR,PWR[1]):",
" HSC_PWR/(1+ERR[0]+(HSC_PWR-PWR[0])*(ERR[1]-ERR[0])/(PWR[1]-PWR[0]));",
" case inrange(PWR[1],HSC_PWR,PWR[2]):",
" HSC_PWR/(1+ERR[1]+(HSC_PWR-PWR[1])*(ERR[2]-ERR[1])/(PWR[2]-PWR[1]));",
" case inrange(PWR[2],HSC_PWR,PWR[3]):",
" HSC_PWR/(1+ERR[2]+(HSC_PWR-PWR[2])*(ERR[3]-ERR[2])/(PWR[3]-PWR[2]));",
" case inrange(PWR[3],HSC_PWR,PWR[4]):",
" HSC_PWR/(1+ERR[3]+(HSC_PWR-PWR[3])*(ERR[4]-ERR[3])/(PWR[4]-PWR[3]));",
" case inrange(PWR[4],HSC_PWR,PWR[5]):",
" HSC_PWR/(1+ERR[4]+(HSC_PWR-PWR[4])*(ERR[5]-ERR[4])/(PWR[5]-PWR[4]));",
" case inrange(PWR[5],HSC_PWR,PWR[6]):",
" HSC_PWR/(1+ERR[5]+(HSC_PWR-PWR[5])*(ERR[6]-ERR[5])/(PWR[6]-PWR[5]));",
" case inrange(PWR[6],HSC_PWR,PWR[7]):",
" HSC_PWR/(1+ERR[6]+(HSC_PWR-PWR[6])*(ERR[7]-ERR[6])/(PWR[7]-PWR[6]));",
" case inrange(PWR[7],HSC_PWR,PWR[8]):",
" HSC_PWR/(1+ERR[7]+(HSC_PWR-PWR[7])*(ERR[8]-ERR[7])/(PWR[8]-PWR[7]));",
" default : HSC_PWR/(1+ERR[8]);",
"}"
]
}
]
@@ -0,0 +1,143 @@
[
{
"Desc": {
"Name": "Virtual_CFM_Sensor",
"SensorType": "airflow"
},
"Params": {
"DbusParam": [
{
"ParamName": "fan0",
"Desc": {
"Name": "FAN0_TACH_IL",
"SensorType": "fan_tach"
}
},
{
"ParamName": "fan1",
"Desc": {
"Name": "FAN1_TACH_IL",
"SensorType": "fan_tach"
}
},
{
"ParamName": "fan2",
"Desc": {
"Name": "FAN2_TACH_IL",
"SensorType": "fan_tach"
}
},
{
"ParamName": "fan3",
"Desc": {
"Name": "FAN3_TACH_IL",
"SensorType": "fan_tach"
}
}
]
},
"Expression": "max(0, (avg(fan0, fan1, fan2, fan3) * 0.0448) - 9.5042)"
},
{
"Desc": {
"Name": "Virtual_Inlet_Temp",
"SensorType": "temperature"
},
"Threshold": {
"CriticalHigh": 40,
"CriticalLow": 0
},
"Params": {
"DbusParam": [
{
"ParamName": "inlet_temp",
"Desc": {
"Name": "FRONT_PANEL_TEMP",
"SensorType": "temperature"
}
},
{
"ParamName": "fan0",
"Desc": {
"Name": "FAN0_TACH_IL",
"SensorType": "fan_tach"
}
},
{
"ParamName": "fan1",
"Desc": {
"Name": "FAN1_TACH_IL",
"SensorType": "fan_tach"
}
},
{
"ParamName": "fan2",
"Desc": {
"Name": "FAN2_TACH_IL",
"SensorType": "fan_tach"
}
},
{
"ParamName": "fan3",
"Desc": {
"Name": "FAN3_TACH_IL",
"SensorType": "fan_tach"
}
}
]
},
"Expression": [
"if(",
" avg(fan0, fan1, fan2, fan3) > 0,",
" inlet_temp - (((avg(fan0, fan1, fan2, fan3)^2) * (9e-8)) -",
" (avg(fan0, fan1, fan2, fan3) * (8e-4)) + 2.37),",
" inlet_temp)"
]
},
{
"Desc": {
"Name": "Virtual_P12V_AUX_HSC_Input_Power",
"SensorType": "power"
},
"Params": {
"DbusParam": [
{
"ParamName": "HSC_PWR",
"Desc": {
"Name": "P12V_AUX_HSC_Input_Power",
"SensorType": "power"
}
}
]
},
"Expression": [
"var PWR[9]:={",
" 68.082, 131.899, 194.753, 256.391, 316.721, 376.108, 433.569,",
" 490.850, 546.187 };",
"var ERR[9]:={",
" 0.0425, 0.0497, 0.0537, 0.0555, 0.0565, 0.0577, 0.0587, 0.0597,",
" 0.0603 };",
"switch {",
" case HSC_PWR<PWR[0]:",
" HSC_PWR/(1+ERR[0]);",
" case inrange(PWR[0],HSC_PWR,PWR[1]):",
" HSC_PWR/(1+ERR[0]+(HSC_PWR-PWR[0])*(ERR[1]-ERR[0])/(PWR[1]-PWR[0]));",
" case inrange(PWR[1],HSC_PWR,PWR[2]):",
" HSC_PWR/(1+ERR[1]+(HSC_PWR-PWR[1])*(ERR[2]-ERR[1])/(PWR[2]-PWR[1]));",
" case inrange(PWR[2],HSC_PWR,PWR[3]):",
" HSC_PWR/(1+ERR[2]+(HSC_PWR-PWR[2])*(ERR[3]-ERR[2])/(PWR[3]-PWR[2]));",
" case inrange(PWR[3],HSC_PWR,PWR[4]):",
" HSC_PWR/(1+ERR[3]+(HSC_PWR-PWR[3])*(ERR[4]-ERR[3])/(PWR[4]-PWR[3]));",
" case inrange(PWR[4],HSC_PWR,PWR[5]):",
" HSC_PWR/(1+ERR[4]+(HSC_PWR-PWR[4])*(ERR[5]-ERR[4])/(PWR[5]-PWR[4]));",
" case inrange(PWR[5],HSC_PWR,PWR[6]):",
" HSC_PWR/(1+ERR[5]+(HSC_PWR-PWR[5])*(ERR[6]-ERR[5])/(PWR[6]-PWR[5]));",
" case inrange(PWR[6],HSC_PWR,PWR[7]):",
" HSC_PWR/(1+ERR[6]+(HSC_PWR-PWR[6])*(ERR[7]-ERR[6])/(PWR[7]-PWR[6]));",
" case inrange(PWR[7],HSC_PWR,PWR[8]):",
" HSC_PWR/(1+ERR[7]+(HSC_PWR-PWR[7])*(ERR[8]-ERR[7])/(PWR[8]-PWR[7]));",
" default : HSC_PWR/(1+ERR[8]);",
"}"
]
}
]
@@ -0,0 +1,5 @@
FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
SENSOR_CONFIGS = " \
virtual_sensor_config_hdc1080.json \
virtual_sensor_config_si7021.json \
"
@@ -0,0 +1,22 @@
FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
SRC_URI:append = " \
file://bletchley-host-acpi-power-state.yaml \
file://bletchley-frontpanel.yaml \
"
SETTINGS_HOST_TEMPLATES:append = " bletchley-host-acpi-power-state.yaml"
SETTINGS_CHASSIS_TEMPLATES_ZERO_ONLY:append = " bletchley-frontpanel.yaml"
OBMC_CHASSIS_ZERO_ONLY="0"
do_install:append() {
DEST=${D}${settings_datadir}
for i in ${OBMC_CHASSIS_ZERO_ONLY};
do
for f in ${SETTINGS_CHASSIS_TEMPLATES_ZERO_ONLY};
do
sed "s/{}/${i}/g" ${f} >> ${DEST}/defaults.yaml
done
done
}
@@ -0,0 +1,5 @@
/xyz/openbmc_project/inventory/system/chassis{}/frontpanel:
- Interface: xyz.openbmc_project.Inventory.Decorator.Asset
Properties:
Model:
Default: '"Bletchley_FPB_HDC1080"'
@@ -0,0 +1,6 @@
/xyz/openbmc_project/control/host{}/acpi_power_state:
- Interface: "xyz.openbmc_project.Control.Power.ACPIPowerState"
Properties:
SysACPIStatus:
Default: ACPIPowerState::ACPI::Unknown
@@ -0,0 +1,3 @@
[Unit]
Requires=bletchley-system-state-init@%i.service
After=bletchley-system-state-init@%i.service
@@ -0,0 +1,9 @@
#!/bin/bash
if [ "$1" == "0" ]; then
echo "Enter chassis-cycle"
/usr/sbin/power-ctrl chassis-cycle
else
echo "Enter sled$1 cycle"
/usr/sbin/power-ctrl "sled$1" cycle
fi
@@ -0,0 +1,9 @@
[Unit]
Description=Chassis Power Cycle: %i
[Service]
Type=oneshot
ExecStart=/usr/libexec/phosphor-state-manager/chassis-powercycle %i
[Install]
WantedBy=obmc-chassis-powercycle@%i.target
@@ -0,0 +1,9 @@
[Unit]
Description=Turn off AC at Sled%i
Conflicts=chassis-poweron@%i.service
After=host-poweroff@%i.service
[Service]
Type=oneshot
ExecStart=/usr/sbin/power-ctrl sled%i ac-off
SyslogIdentifier=power-ctrl
@@ -0,0 +1,14 @@
[Unit]
Description=Turn on AC at Sled%i
Requires=motor-init-calibration@%i.service
After=motor-init-calibration@%i.service
Conflicts=chassis-poweroff@%i.service
[Service]
Type=oneshot
ExecStart=/usr/sbin/power-ctrl sled%i ac-on
SyslogIdentifier=power-ctrl
ExecStartPost=/bin/systemctl restart phosphor-discover-system-state@%i.service
[Install]
WantedBy=multi-user.target
@@ -0,0 +1,9 @@
[Unit]
Description=Sled%i Host Power Cycle
Requires=motor-init-calibration@%i.service
After=motor-init-calibration@%i.service
[Service]
Type=oneshot
ExecStart=/usr/sbin/power-ctrl sled%i cycle
SyslogIdentifier=power-ctrl
@@ -0,0 +1,11 @@
[Unit]
Description=Power off System in Sled%i by Step Motor
Requires=motor-init-calibration@%i.service
After=motor-init-calibration@%i.service
Conflicts=host-poweron@%i.service
[Service]
Type=oneshot
ExecStart=/usr/sbin/power-ctrl sled%i off
SyslogIdentifier=power-ctrl
@@ -0,0 +1,13 @@
[Unit]
Description=Power on System in Sled%i by Step Motor
Requires=motor-init-calibration@%i.service
After=motor-init-calibration@%i.service
Requires=chassis-poweron@%i.service
After=chassis-poweron@%i.service
Conflicts=host-poweroff@%i.service
[Service]
Type=oneshot
ExecStart=/usr/sbin/power-ctrl sled%i boot-from-bootmode
SyslogIdentifier=power-ctrl
@@ -0,0 +1,9 @@
[Unit]
Description=Sled%i Host Power Reset
Requires=motor-init-calibration@%i.service
After=motor-init-calibration@%i.service
[Service]
Type=oneshot
ExecStart=/usr/sbin/power-ctrl sled%i reset
SyslogIdentifier=power-ctrl
@@ -0,0 +1,47 @@
FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
SRC_URI:append:bletchley = " \
file://chassis-powercycle \
file://chassis-powercycle@.service \
file://chassis-poweroff@.service \
file://chassis-poweron@.service \
file://host-poweroff@.service \
file://host-poweron@.service \
"
RDEPENDS:${PN}-discover:append:bletchley = " bletchley-common-tool"
RDEPENDS:${PN}:append:bletchley = " bash motor-ctrl"
do_install:append:bletchley() {
install -d ${D}${systemd_system_unitdir}
install -m 0644 ${WORKDIR}/*.service ${D}${systemd_system_unitdir}/
install -d ${D}${libexecdir}/${PN}
install -m 0777 ${WORKDIR}/chassis-powercycle ${D}${libexecdir}/${PN}/
}
FILES:${PN}:append:bletchley = " ${systemd_system_unitdir}"
FILES:${PN}:append:bletchley = " ${libexecdir}/${PN}"
# Because Bletchley does not have IPMI between Bmc & Host, the Host init
# state will set to Off after Bmc booted. We require an extra service to
# check and set Host state & Chassis power state to correct state before
# doing any power action or power policy restore.
BLETCHLEY_SYS_ST_INIT_CONF_FMT = "bletchley-system-state-init.conf:phosphor-discover-system-state@{0}.service.d/bletchley-system-state-init.conf"
SYSTEMD_OVERRIDE:${PN}-discover:bletchley += "${@compose_list_zip(d, 'BLETCHLEY_SYS_ST_INIT_CONF_FMT', 'OBMC_HOST_INSTANCES')}"
#======================
# Workaround for bletchley
#======================
CHASSIS_DEFAULT_TARGETS:remove:bletchley = " \
obmc-chassis-powerreset@{}.target.requires/phosphor-reset-chassis-on@{}.service \
obmc-chassis-powerreset@{}.target.requires/phosphor-reset-chassis-running@{}.service \
obmc-chassis-poweroff@{}.target.requires/obmc-power-stop@{}.service \
obmc-chassis-poweron@{}.target.requires/obmc-power-start@{}.service \
"
HOST_DEFAULT_TARGETS:append = " \
obmc-host-startmin@{}.target.wants/host-poweron@{}.service \
obmc-host-stop@{}.target.wants/host-poweroff@{}.service \
"