summaryrefslogtreecommitdiff
path: root/meta-quanta
diff options
context:
space:
mode:
Diffstat (limited to 'meta-quanta')
-rwxr-xr-xmeta-quanta/meta-common/recipes-phosphor/health/files/bmc_health_config.json15
-rwxr-xr-xmeta-quanta/meta-common/recipes-phosphor/health/phosphor-health-monitor_%.bbappend9
-rw-r--r--meta-quanta/meta-gbs/conf/machine/gbs.conf6
-rw-r--r--meta-quanta/meta-gbs/recipes-bsp/u-boot/u-boot-fw-utils-nuvoton/fw_env.config24
-rw-r--r--meta-quanta/meta-gbs/recipes-bsp/u-boot/u-boot-fw-utils-nuvoton_%.bbappend6
-rw-r--r--meta-quanta/meta-gbs/recipes-gbs/gbs-bios-update/gbs-bios-update.bb3
-rw-r--r--meta-quanta/meta-gbs/recipes-gbs/gbs-nvme-pwr-ctrl/gbs-nvme-pwr-ctrl.bb2
-rw-r--r--meta-quanta/meta-gbs/recipes-gbs/gbs-sysinit/gbs-sysinit.bb3
-rw-r--r--meta-quanta/meta-gbs/recipes-gbs/hotswap-power-cycle/gbs-hotswap-power-cycle.bb1
-rw-r--r--meta-quanta/meta-gbs/recipes-google/acpi-power-state/acpi-power-state-daemon/gbs-host-s0-set-failsafe.service4
-rw-r--r--meta-quanta/meta-gbs/recipes-kernel/linux/linux-nuvoton/0003-Add-basic-support-for-SB-TSI-sensors.patch327
-rw-r--r--meta-quanta/meta-gbs/recipes-kernel/linux/linux-nuvoton/gbs.cfg12
-rw-r--r--meta-quanta/meta-gbs/recipes-kernel/linux/linux-nuvoton_%.bbappend1
-rw-r--r--meta-quanta/meta-gbs/recipes-phosphor/configuration/gbs-yaml-config.bb4
-rw-r--r--meta-quanta/meta-gbs/recipes-phosphor/configuration/gbs-yaml-config/gbs-ipmi-inventory-sensors.yaml435
-rw-r--r--meta-quanta/meta-gbs/recipes-phosphor/console/files/80-gbs-nuvoton-sol.rules1
-rw-r--r--meta-quanta/meta-gbs/recipes-phosphor/console/obmc-console_%.bbappend13
-rw-r--r--meta-quanta/meta-gbs/recipes-phosphor/dbus/phosphor-dbus-interfaces/0024-Add-the-pre-timeout-interrupt-defined-in-IPMI-spec.patch57
-rw-r--r--meta-quanta/meta-gbs/recipes-phosphor/dbus/phosphor-dbus-interfaces/0025-Add-PreInterruptFlag-properity-in-DBUS.patch39
-rw-r--r--meta-quanta/meta-gbs/recipes-phosphor/dbus/phosphor-dbus-interfaces_%.bbappend5
-rw-r--r--meta-quanta/meta-gbs/recipes-phosphor/images/obmc-phosphor-image.bbappend1
-rwxr-xr-xmeta-quanta/meta-gbs/recipes-phosphor/interfaces/bmcweb_%.bbappend9
-rw-r--r--meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-flash_%.bbappend2
-rw-r--r--meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-host/0001-Add-Chassis-State-Transition-interface.patch79
-rw-r--r--meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-host/0001-Fix-issues-and-support-signed-sensor-values.patch169
-rw-r--r--meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-host/0002-Update-Host-State-Transition-function.patch137
-rw-r--r--meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-host/0003-Update-IPMI-Chassis-Control-command-transition-reque.patch180
-rw-r--r--meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-host/0063-Save-the-pre-timeout-interrupt-in-dbus-property.patch138
-rw-r--r--meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-host_%.bbappend15
-rw-r--r--meta-quanta/meta-gbs/recipes-phosphor/leds/phosphor-led-manager_%.bbappend15
-rw-r--r--meta-quanta/meta-gbs/recipes-phosphor/logging/phosphor-logging_%.bbappend1
-rw-r--r--meta-quanta/meta-gbs/recipes-phosphor/network/phosphor-network_%.bbappend3
-rw-r--r--meta-quanta/meta-gbs/recipes-phosphor/packagegroups/packagegroup-gbs-apps.bb2
-rw-r--r--meta-quanta/meta-gbs/recipes-phosphor/packagegroups/packagegroup-obmc-apps%.bbappend4
-rw-r--r--meta-quanta/meta-gbs/recipes-phosphor/sel-logger/phosphor-sel-logger_%.bbappend7
-rw-r--r--meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/0002-Add-power-on-monitor-mechanism.patch (renamed from meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/0001-lev-add-poweron-monitor-feature.patch)144
-rw-r--r--meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/0002-lev-add-sensors-slow-readings.patch295
-rw-r--r--meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/pwm-fan-controller@103000.conf10
-rw-r--r--meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon_%.bbappend5
-rw-r--r--meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-virtual-sensor/config-virtual-sensor.json12
-rw-r--r--meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-virtual-sensor/phosphor-virtual-sensor.service.replace7
-rw-r--r--meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-virtual-sensor_%.bbappend4
-rw-r--r--meta-quanta/meta-gbs/recipes-phosphor/watchdog/phosphor-watchdog/0001-Customize-phosphor-watchdog-for-Intel-platforms.patch313
-rw-r--r--meta-quanta/meta-gbs/recipes-phosphor/watchdog/phosphor-watchdog/obmc/watchdog/host08
-rw-r--r--meta-quanta/meta-gbs/recipes-phosphor/watchdog/phosphor-watchdog/phosphor-host-watchdog-powercycle.service9
-rw-r--r--meta-quanta/meta-gbs/recipes-phosphor/watchdog/phosphor-watchdog/phosphor-host-watchdog-poweroff.service8
-rw-r--r--meta-quanta/meta-gbs/recipes-phosphor/watchdog/phosphor-watchdog/phosphor-host-watchdog-reset.service9
-rw-r--r--meta-quanta/meta-gbs/recipes-phosphor/watchdog/phosphor-watchdog/phosphor-watchdog.service16
-rw-r--r--meta-quanta/meta-gbs/recipes-phosphor/watchdog/phosphor-watchdog/phosphor-watchdog@.service17
-rw-r--r--meta-quanta/meta-gbs/recipes-phosphor/watchdog/phosphor-watchdog_%.bbappend14
-rw-r--r--meta-quanta/meta-gsj/recipes-gsj/mac-address/files/mac-address.service11
-rw-r--r--meta-quanta/meta-gsj/recipes-gsj/mac-address/mac-address.bb34
-rw-r--r--meta-quanta/meta-gsj/recipes-phosphor/network/phosphor-network_%.bbappend1
-rw-r--r--meta-quanta/meta-gsj/recipes-quanta/network/mac-address/mac-address/config.txt (renamed from meta-quanta/meta-gsj/recipes-gsj/mac-address/files/config.txt)0
-rw-r--r--meta-quanta/meta-gsj/recipes-quanta/network/mac-address_%.bbappend10
55 files changed, 1260 insertions, 1396 deletions
diff --git a/meta-quanta/meta-common/recipes-phosphor/health/files/bmc_health_config.json b/meta-quanta/meta-common/recipes-phosphor/health/files/bmc_health_config.json
new file mode 100755
index 000000000..373b5d50f
--- /dev/null
+++ b/meta-quanta/meta-common/recipes-phosphor/health/files/bmc_health_config.json
@@ -0,0 +1,15 @@
+{
+ "CPU" : {
+ "Frequency" : 1,
+ "Window_size": 120
+ },
+ "Memory" : {
+ "Frequency" : 1,
+ "Window_size": 120
+ },
+ "Storage_RW" : {
+ "Path" : "/run/initramfs/rw",
+ "Frequency" : 1,
+ "Window_size": 120
+ }
+}
diff --git a/meta-quanta/meta-common/recipes-phosphor/health/phosphor-health-monitor_%.bbappend b/meta-quanta/meta-common/recipes-phosphor/health/phosphor-health-monitor_%.bbappend
new file mode 100755
index 000000000..1d8bb4ecd
--- /dev/null
+++ b/meta-quanta/meta-common/recipes-phosphor/health/phosphor-health-monitor_%.bbappend
@@ -0,0 +1,9 @@
+FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
+SRC_URI_append = " file://bmc_health_config.json \
+ "
+
+do_install_append() {
+ install -d ${D}/${sysconfdir}/healthMon/
+ install -m 0644 ${WORKDIR}/bmc_health_config.json ${D}/${sysconfdir}/healthMon/
+}
+
diff --git a/meta-quanta/meta-gbs/conf/machine/gbs.conf b/meta-quanta/meta-gbs/conf/machine/gbs.conf
index e9456b5ec..6f54e383b 100644
--- a/meta-quanta/meta-gbs/conf/machine/gbs.conf
+++ b/meta-quanta/meta-gbs/conf/machine/gbs.conf
@@ -10,12 +10,13 @@ MACHINEOVERRIDES .= ":npcm7xx"
require conf/machine/include/npcm7xx.inc
require conf/machine/include/obmc-bsp-common.inc
+SERIAL_CONSOLES = "115200;ttyS0"
GBMC_NCSI_IF_NAME = "eth0"
GBMC_KCS_DEV = "ipmi-kcs1"
# Overwrite flash offsets
-FLASH_ROFS_OFFSET = "7296"
-FLASH_RWFS_OFFSET = "61440"
+FLASH_ROFS_OFFSET = "7168"
+FLASH_RWFS_OFFSET = "62400"
FLASH_SIZE = "65536"
OBMC_MACHINE_FEATURES += "\
@@ -37,6 +38,7 @@ PREFERRED_PROVIDER_virtual/obmc-fan-mgmt = "packagegroup-gbs-apps"
PREFERRED_PROVIDER_virtual/obmc-flash-mgmt = "packagegroup-gbs-apps"
PREFERRED_PROVIDER_virtual/obmc-host-ipmi-hw = "gbmc-kcs-config"
PREFERRED_PROVIDER_virtual/phosphor-led-manager-config-native = "gbs-led-manager-config-native"
+PREFERRED_PROVIDER_virtual/bios-update = "gbs-bios-update"
# Remove unneeded binaries from image
IMAGE_FEATURES_remove = "obmc-fan-control"
diff --git a/meta-quanta/meta-gbs/recipes-bsp/u-boot/u-boot-fw-utils-nuvoton/fw_env.config b/meta-quanta/meta-gbs/recipes-bsp/u-boot/u-boot-fw-utils-nuvoton/fw_env.config
deleted file mode 100644
index 0c384273f..000000000
--- a/meta-quanta/meta-gbs/recipes-bsp/u-boot/u-boot-fw-utils-nuvoton/fw_env.config
+++ /dev/null
@@ -1,24 +0,0 @@
-# Configuration file for fw_(printenv/setenv) utility.
-# Up to two entries are valid, in this case the redundant
-# environment sector is assumed present.
-# Notice, that the "Number of sectors" is not required on NOR and SPI-dataflash.
-# Futhermore, if the Flash sector size is ommitted, this value is assumed to
-# be the same as the Environment size, which is valid for NOR and SPI-dataflash
-
-# NOR example
-# MTD device name Device offset Env. size Flash sector size Number of sectors
-/dev/mtd2 0x0000 0x40000 0x4000
-
-# MTD SPI-dataflash example
-# MTD device name Device offset Env. size Flash sector size Number of sectors
-#/dev/mtd5 0x4200 0x4200
-#/dev/mtd6 0x4200 0x4200
-
-# NAND example
-#/dev/mtd0 0x4000 0x4000 0x20000 2
-
-# Block device example
-#/dev/mmcblk0 0xc0000 0x20000
-
-# VFAT example
-#/boot/uboot.env 0x0000 0x4000
diff --git a/meta-quanta/meta-gbs/recipes-bsp/u-boot/u-boot-fw-utils-nuvoton_%.bbappend b/meta-quanta/meta-gbs/recipes-bsp/u-boot/u-boot-fw-utils-nuvoton_%.bbappend
deleted file mode 100644
index 8b66271a5..000000000
--- a/meta-quanta/meta-gbs/recipes-bsp/u-boot/u-boot-fw-utils-nuvoton_%.bbappend
+++ /dev/null
@@ -1,6 +0,0 @@
-FILESEXTRAPATHS_prepend_gbs := "${THISDIR}/${PN}:"
-SRC_URI_append_gbs = " file://fw_env.config"
-
-do_install_append_gbs() {
- install -m 644 ${WORKDIR}/fw_env.config ${D}${sysconfdir}/fw_env.config
-}
diff --git a/meta-quanta/meta-gbs/recipes-gbs/gbs-bios-update/gbs-bios-update.bb b/meta-quanta/meta-gbs/recipes-gbs/gbs-bios-update/gbs-bios-update.bb
index 32b9d512b..0ea731c35 100644
--- a/meta-quanta/meta-gbs/recipes-gbs/gbs-bios-update/gbs-bios-update.bb
+++ b/meta-quanta/meta-gbs/recipes-gbs/gbs-bios-update/gbs-bios-update.bb
@@ -12,6 +12,9 @@ DEPENDS += "systemd"
DEPENDS += "phosphor-ipmi-flash"
RDEPENDS_${PN} += "bash"
+PROVIDES += "virtual/bios-update"
+RPROVIDES_${PN} += "virtual/bios-update"
+
SRC_URI += " file://bios-verify.sh \
file://bios-update.sh \
file://phosphor-ipmi-flash-bios-verify.service \
diff --git a/meta-quanta/meta-gbs/recipes-gbs/gbs-nvme-pwr-ctrl/gbs-nvme-pwr-ctrl.bb b/meta-quanta/meta-gbs/recipes-gbs/gbs-nvme-pwr-ctrl/gbs-nvme-pwr-ctrl.bb
index a3f0c58d9..21ef52c49 100644
--- a/meta-quanta/meta-gbs/recipes-gbs/gbs-nvme-pwr-ctrl/gbs-nvme-pwr-ctrl.bb
+++ b/meta-quanta/meta-gbs/recipes-gbs/gbs-nvme-pwr-ctrl/gbs-nvme-pwr-ctrl.bb
@@ -12,7 +12,7 @@ DEPENDS += "boost"
DEPENDS += "libgpiod"
SRC_URI = "git://github.com/quanta-bmc/nvme-power-control;protocol=git"
-SRCREV = "f7d2dbd6b48f3992d4a2fb1c0fe2afd746b8428a"
+SRCREV = "3b39e92a8340d8ba1bd40a03af3f5a9049da3bc7"
S = "${WORKDIR}/git"
diff --git a/meta-quanta/meta-gbs/recipes-gbs/gbs-sysinit/gbs-sysinit.bb b/meta-quanta/meta-gbs/recipes-gbs/gbs-sysinit/gbs-sysinit.bb
index 68a9cf181..c9d595a3d 100644
--- a/meta-quanta/meta-gbs/recipes-gbs/gbs-sysinit/gbs-sysinit.bb
+++ b/meta-quanta/meta-gbs/recipes-gbs/gbs-sysinit/gbs-sysinit.bb
@@ -8,8 +8,9 @@ inherit systemd
DEPENDS += "systemd"
RDEPENDS_${PN} += "bash"
-RDEPENDS_${PN} += "libsystemd"
+RDEPENDS_${PN} += "i2c-tools"
RDEPENDS_${PN} += "jq"
+RDEPENDS_${PN} += "libsystemd"
SRC_URI = "file://gbs-sysinit.sh \
file://gbs-gpio-common.sh \
diff --git a/meta-quanta/meta-gbs/recipes-gbs/hotswap-power-cycle/gbs-hotswap-power-cycle.bb b/meta-quanta/meta-gbs/recipes-gbs/hotswap-power-cycle/gbs-hotswap-power-cycle.bb
index 6bf7bb69f..7c28dc28d 100644
--- a/meta-quanta/meta-gbs/recipes-gbs/hotswap-power-cycle/gbs-hotswap-power-cycle.bb
+++ b/meta-quanta/meta-gbs/recipes-gbs/hotswap-power-cycle/gbs-hotswap-power-cycle.bb
@@ -8,6 +8,7 @@ inherit systemd
DEPENDS += "systemd"
RDEPENDS_${PN} += "bash"
+RDEPENDS_${PN} += "libgpiod-tools"
SRC_URI = " file://hotswap-power-cycle.service \
file://tray_powercycle.sh \
diff --git a/meta-quanta/meta-gbs/recipes-google/acpi-power-state/acpi-power-state-daemon/gbs-host-s0-set-failsafe.service b/meta-quanta/meta-gbs/recipes-google/acpi-power-state/acpi-power-state-daemon/gbs-host-s0-set-failsafe.service
index 263cafaa2..ccc6a1c20 100644
--- a/meta-quanta/meta-gbs/recipes-google/acpi-power-state/acpi-power-state-daemon/gbs-host-s0-set-failsafe.service
+++ b/meta-quanta/meta-gbs/recipes-google/acpi-power-state/acpi-power-state-daemon/gbs-host-s0-set-failsafe.service
@@ -8,8 +8,8 @@ After=mapper-wait@-xyz-openbmc_project-settings-fanctrl.service
[Service]
Type=oneshot
-# 230: 90% duty cycle
-ExecStart=/usr/bin/gbs-set-failsafe.sh 230
+# 255: 100% duty cycle
+ExecStart=/usr/bin/gbs-set-failsafe.sh 255
[Install]
WantedBy=host-s0-state.target
diff --git a/meta-quanta/meta-gbs/recipes-kernel/linux/linux-nuvoton/0003-Add-basic-support-for-SB-TSI-sensors.patch b/meta-quanta/meta-gbs/recipes-kernel/linux/linux-nuvoton/0003-Add-basic-support-for-SB-TSI-sensors.patch
deleted file mode 100644
index b690a9813..000000000
--- a/meta-quanta/meta-gbs/recipes-kernel/linux/linux-nuvoton/0003-Add-basic-support-for-SB-TSI-sensors.patch
+++ /dev/null
@@ -1,327 +0,0 @@
-SB Temperature Sensor Interface (SB-TSI) is an SMBus compatible
-interface that reports AMD SoC's Ttcl (normalized temperature),
-and resembles a typical 8-pin remote temperature sensor's I2C interface
-to BMC.
-
-This commit adds basic support using this interface to read CPU
-temperature, and read/write high/low CPU temp thresholds.
-
-To instantiate this driver on an AMD CPU with SB-TSI
-support, the i2c bus number would be the bus connected from the board
-management controller (BMC) to the CPU. The i2c address is specified in
-Section 6.3.1 of the spec [1]: The SB-TSI address is normally 98h for socket 0
-and 90h for socket 1, but it could vary based on hardware address select pins.
-
-[1]: https://www.amd.com/system/files/TechDocs/56255_OSRR.pdf
-
-Test status: tested reading temp1_input, and reading/writing
-temp1_max/min.
-
-Signed-off-by: Kun Yi <kunyi at google.com>
----
- drivers/hwmon/Kconfig | 10 ++
- drivers/hwmon/Makefile | 1 +
- drivers/hwmon/sbtsi_temp.c | 259 +++++++++++++++++++++++++++++++++++++
- 3 files changed, 270 insertions(+)
- create mode 100644 drivers/hwmon/sbtsi_temp.c
-
-diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig
-index 05a30832c6ba..9585dcd01d1b 100644
---- a/drivers/hwmon/Kconfig
-+++ b/drivers/hwmon/Kconfig
-@@ -1412,6 +1412,16 @@ config SENSORS_RASPBERRYPI_HWMON
- This driver can also be built as a module. If so, the module
- will be called raspberrypi-hwmon.
-
-+config SENSORS_SBTSI
-+ tristate "Emulated SB-TSI temperature sensor"
-+ depends on I2C
-+ help
-+ If you say yes here you get support for emulated temperature
-+ sensors on AMD SoCs with SB-TSI interface connected to a BMC device.
-+
-+ This driver can also be built as a module. If so, the module will
-+ be called sbtsi_temp.
-+
- config SENSORS_SHT15
- tristate "Sensiron humidity and temperature sensors. SHT15 and compat."
- depends on GPIOLIB || COMPILE_TEST
-diff --git a/drivers/hwmon/Makefile b/drivers/hwmon/Makefile
-index b0b9c8e57176..cd109f003ce4 100644
---- a/drivers/hwmon/Makefile
-+++ b/drivers/hwmon/Makefile
-@@ -152,6 +152,7 @@ obj-$(CONFIG_SENSORS_POWR1220) += powr1220.o
- obj-$(CONFIG_SENSORS_PWM_FAN) += pwm-fan.o
- obj-$(CONFIG_SENSORS_RASPBERRYPI_HWMON) += raspberrypi-hwmon.o
- obj-$(CONFIG_SENSORS_S3C) += s3c-hwmon.o
-+obj-$(CONFIG_SENSORS_SBTSI) += sbtsi_temp.o
- obj-$(CONFIG_SENSORS_SCH56XX_COMMON)+= sch56xx-common.o
- obj-$(CONFIG_SENSORS_SCH5627) += sch5627.o
- obj-$(CONFIG_SENSORS_SCH5636) += sch5636.o
-diff --git a/drivers/hwmon/sbtsi_temp.c b/drivers/hwmon/sbtsi_temp.c
-new file mode 100644
-index 000000000000..e3ad6a9f7ec1
---- /dev/null
-+++ b/drivers/hwmon/sbtsi_temp.c
-@@ -0,0 +1,259 @@
-+// SPDX-License-Identifier: GPL-2.0-or-later
-+/*
-+ * sbtsi_temp.c - hwmon driver for a SBI Temperature Sensor Interface (SB-TSI)
-+ * compliant AMD SoC temperature device.
-+ *
-+ * Copyright (c) 2020, Google Inc.
-+ * Copyright (c) 2020, Kun Yi <kunyi at google.com>
-+ */
-+
-+#include <linux/err.h>
-+#include <linux/i2c.h>
-+#include <linux/init.h>
-+#include <linux/hwmon.h>
-+#include <linux/module.h>
-+#include <linux/mutex.h>
-+#include <linux/of_device.h>
-+#include <linux/of.h>
-+
-+/*
-+ * SB-TSI registers only support SMBus byte data access. "_INT" registers are
-+ * the integer part of a temperature value or limit, and "_DEC" registers are
-+ * corresponding decimal parts.
-+ */
-+#define SBTSI_REG_TEMP_INT 0x01 /* RO */
-+#define SBTSI_REG_STATUS 0x02 /* RO */
-+#define SBTSI_REG_CONFIG 0x03 /* RO */
-+#define SBTSI_REG_TEMP_HIGH_INT 0x07 /* RW */
-+#define SBTSI_REG_TEMP_LOW_INT 0x08 /* RW */
-+#define SBTSI_REG_TEMP_DEC 0x10 /* RW */
-+#define SBTSI_REG_TEMP_HIGH_DEC 0x13 /* RW */
-+#define SBTSI_REG_TEMP_LOW_DEC 0x14 /* RW */
-+#define SBTSI_REG_REV 0xFF /* RO */
-+
-+#define SBTSI_CONFIG_READ_ORDER_SHIFT 5
-+
-+#define SBTSI_TEMP_MIN 0
-+#define SBTSI_TEMP_MAX 255875
-+#define SBTSI_REV_MAX_VALID_ID 4
-+
-+/* Each client has this additional data */
-+struct sbtsi_data {
-+ struct i2c_client *client;
-+ struct mutex lock;
-+};
-+
-+/*
-+ * From SB-TSI spec: CPU temperature readings and limit registers encode the
-+ * temperature in increments of 0.125 from 0 to 255.875. The "high byte"
-+ * register encodes the base-2 of the integer portion, and the upper 3 bits of
-+ * the "low byte" encode in base-2 the decimal portion.
-+ *
-+ * e.g. INT=0x19, DEC=0x20 represents 25.125 degrees Celsius
-+ *
-+ * Therefore temperature in millidegree Celsius =
-+ * (INT + DEC / 256) * 1000 = (INT * 8 + DEC / 32) * 125
-+ */
-+static inline int sbtsi_reg_to_mc(s32 integer, s32 decimal)
-+{
-+ return ((integer << 3) + (decimal >> 5)) * 125;
-+}
-+
-+/*
-+ * Inversely, given temperature in millidegree Celsius
-+ * INT = (TEMP / 125) / 8
-+ * DEC = ((TEMP / 125) % 8) * 32
-+ * Caller have to make sure temp doesn't exceed 255875, the max valid value.
-+ */
-+static inline void sbtsi_mc_to_reg(s32 temp, u8 *integer, u8 *decimal)
-+{
-+ temp /= 125;
-+ *integer = temp >> 3;
-+ *decimal = (temp & 0x7) << 5;
-+}
-+
-+static int sbtsi_read(struct device *dev, enum hwmon_sensor_types type,
-+ u32 attr, int channel, long *val)
-+{
-+ struct sbtsi_data *data = dev_get_drvdata(dev);
-+ s32 temp_int, temp_dec;
-+ int err, reg_int, reg_dec;
-+ u8 read_order;
-+
-+ if (type != hwmon_temp)
-+ return -EINVAL;
-+
-+ read_order = 0;
-+ switch (attr) {
-+ case hwmon_temp_input:
-+ /*
-+ * ReadOrder bit specifies the reading order of integer and
-+ * decimal part of CPU temp for atomic reads. If bit == 0,
-+ * reading integer part triggers latching of the decimal part,
-+ * so integer part should be read first. If bit == 1, read
-+ * order should be reversed.
-+ */
-+ err = i2c_smbus_read_byte_data(data->client, SBTSI_REG_CONFIG);
-+ if (err < 0)
-+ return err;
-+
-+ read_order = (u8)err & BIT(SBTSI_CONFIG_READ_ORDER_SHIFT);
-+ reg_int = SBTSI_REG_TEMP_INT;
-+ reg_dec = SBTSI_REG_TEMP_DEC;
-+ break;
-+ case hwmon_temp_max:
-+ reg_int = SBTSI_REG_TEMP_HIGH_INT;
-+ reg_dec = SBTSI_REG_TEMP_HIGH_DEC;
-+ break;
-+ case hwmon_temp_min:
-+ reg_int = SBTSI_REG_TEMP_LOW_INT;
-+ reg_dec = SBTSI_REG_TEMP_LOW_DEC;
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+
-+ if (read_order == 0) {
-+ temp_int = i2c_smbus_read_byte_data(data->client, reg_int);
-+ temp_dec = i2c_smbus_read_byte_data(data->client, reg_dec);
-+ } else {
-+ temp_dec = i2c_smbus_read_byte_data(data->client, reg_dec);
-+ temp_int = i2c_smbus_read_byte_data(data->client, reg_int);
-+ }
-+
-+ if (temp_int < 0)
-+ return temp_int;
-+ if (temp_dec < 0)
-+ return temp_dec;
-+
-+ *val = sbtsi_reg_to_mc(temp_int, temp_dec);
-+
-+ return 0;
-+}
-+
-+static int sbtsi_write(struct device *dev, enum hwmon_sensor_types type,
-+ u32 attr, int channel, long val)
-+{
-+ struct sbtsi_data *data = dev_get_drvdata(dev);
-+ int reg_int, reg_dec, err;
-+ u8 temp_int, temp_dec;
-+
-+ if (type != hwmon_temp)
-+ return -EINVAL;
-+
-+ switch (attr) {
-+ case hwmon_temp_max:
-+ reg_int = SBTSI_REG_TEMP_HIGH_INT;
-+ reg_dec = SBTSI_REG_TEMP_HIGH_DEC;
-+ break;
-+ case hwmon_temp_min:
-+ reg_int = SBTSI_REG_TEMP_LOW_INT;
-+ reg_dec = SBTSI_REG_TEMP_LOW_DEC;
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+
-+ val = clamp_val(val, SBTSI_TEMP_MIN, SBTSI_TEMP_MAX);
-+ mutex_lock(&data->lock);
-+ sbtsi_mc_to_reg(val, &temp_int, &temp_dec);
-+ err = i2c_smbus_write_byte_data(data->client, reg_int, temp_int);
-+ if (err)
-+ goto exit;
-+
-+ err = i2c_smbus_write_byte_data(data->client, reg_dec, temp_dec);
-+exit:
-+ mutex_unlock(&data->lock);
-+ return err;
-+}
-+
-+static umode_t sbtsi_is_visible(const void *data,
-+ enum hwmon_sensor_types type,
-+ u32 attr, int channel)
-+{
-+ switch (type) {
-+ case hwmon_temp:
-+ switch (attr) {
-+ case hwmon_temp_input:
-+ return 0444;
-+ case hwmon_temp_min:
-+ return 0644;
-+ case hwmon_temp_max:
-+ return 0644;
-+ }
-+ break;
-+ default:
-+ break;
-+ }
-+ return 0;
-+}
-+
-+static const struct hwmon_channel_info *sbtsi_info[] = {
-+ HWMON_CHANNEL_INFO(chip,
-+ HWMON_C_REGISTER_TZ),
-+ HWMON_CHANNEL_INFO(temp,
-+ HWMON_T_INPUT | HWMON_T_MIN | HWMON_T_MAX),
-+ NULL
-+};
-+
-+static const struct hwmon_ops sbtsi_hwmon_ops = {
-+ .is_visible = sbtsi_is_visible,
-+ .read = sbtsi_read,
-+ .write = sbtsi_write,
-+};
-+
-+static const struct hwmon_chip_info sbtsi_chip_info = {
-+ .ops = &sbtsi_hwmon_ops,
-+ .info = sbtsi_info,
-+};
-+
-+static int sbtsi_probe(struct i2c_client *client,
-+ const struct i2c_device_id *id)
-+{
-+ struct device *dev = &client->dev;
-+ struct device *hwmon_dev;
-+ struct sbtsi_data *data;
-+
-+ data = devm_kzalloc(dev, sizeof(struct sbtsi_data), GFP_KERNEL);
-+ if (!data)
-+ return -ENOMEM;
-+
-+ data->client = client;
-+ mutex_init(&data->lock);
-+
-+ hwmon_dev =
-+ devm_hwmon_device_register_with_info(dev, client->name, data,
-+ &sbtsi_chip_info, NULL);
-+
-+ return PTR_ERR_OR_ZERO(hwmon_dev);
-+}
-+
-+static const struct i2c_device_id sbtsi_id[] = {
-+ {"sbtsi", 0},
-+ {}
-+};
-+MODULE_DEVICE_TABLE(i2c, sbtsi_id);
-+
-+static const struct of_device_id __maybe_unused sbtsi_of_match[] = {
-+ {
-+ .compatible = "amd,sbtsi",
-+ },
-+ { },
-+};
-+MODULE_DEVICE_TABLE(of, sbtsi_of_match);
-+
-+static struct i2c_driver sbtsi_driver = {
-+ .class = I2C_CLASS_HWMON,
-+ .driver = {
-+ .name = "sbtsi",
-+ .of_match_table = of_match_ptr(sbtsi_of_match),
-+ },
-+ .probe = sbtsi_probe,
-+ .id_table = sbtsi_id,
-+};
-+
-+module_i2c_driver(sbtsi_driver);
-+
-+MODULE_AUTHOR("Kun Yi <kunyi at google.com>");
-+MODULE_DESCRIPTION("Hwmon driver for AMD SB-TSI emulated sensor");
-+MODULE_LICENSE("GPL");
---
-2.26.0.292.g33ef6b2f38-goog \ No newline at end of file
diff --git a/meta-quanta/meta-gbs/recipes-kernel/linux/linux-nuvoton/gbs.cfg b/meta-quanta/meta-gbs/recipes-kernel/linux/linux-nuvoton/gbs.cfg
index edd009c47..221910a36 100644
--- a/meta-quanta/meta-gbs/recipes-kernel/linux/linux-nuvoton/gbs.cfg
+++ b/meta-quanta/meta-gbs/recipes-kernel/linux/linux-nuvoton/gbs.cfg
@@ -29,8 +29,10 @@ CONFIG_NEW_LEDS=y
CONFIG_LEDS_CLASS=y
CONFIG_LEDS_GPIO=y
CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y // Allow userspace to blink LEDs
-CONFIG_LEDS_TRIGGER_PANIC=y // Blink BMC fault when kernel panics
+# Allow userspace to blink LEDs
+CONFIG_LEDS_TRIGGER_TIMER=y
+# Blink BMC fault when kernel panics
+CONFIG_LEDS_TRIGGER_PANIC=y
CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
CONFIG_LEDS_TRIGGER_HEARTBEAT=y
@@ -108,3 +110,9 @@ CONFIG_MTD_M25P80=y
CONFIG_MUX_MMIO=y
CONFIG_NPCM7XX_LPC_BPC=y
CONFIG_MTD_PARTITIONED_MASTER=y
+
+# Enable phsophor-gpio-keys feature
+CONFIG_INPUT_EVDEV=y
+# Need for CONFIG_KEYBOARD_GPIO Kconfig
+CONFIG_INPUT_KEYBOARD=y
+CONFIG_KEYBOARD_GPIO=y
diff --git a/meta-quanta/meta-gbs/recipes-kernel/linux/linux-nuvoton_%.bbappend b/meta-quanta/meta-gbs/recipes-kernel/linux/linux-nuvoton_%.bbappend
index 4de4ca900..e5fadfe05 100644
--- a/meta-quanta/meta-gbs/recipes-kernel/linux/linux-nuvoton_%.bbappend
+++ b/meta-quanta/meta-gbs/recipes-kernel/linux/linux-nuvoton_%.bbappend
@@ -1,6 +1,5 @@
FILESEXTRAPATHS_prepend_gbs := "${THISDIR}/linux-nuvoton:"
SRC_URI_append_gbs = " file://gbs.cfg"
-SRC_URI_append_gbs = " file://0003-Add-basic-support-for-SB-TSI-sensors.patch"
SRC_URI_append_gbs = " file://0004-Add-kernel-seven-seg-display-support.patch"
SRC_URI_append_gbs = " file://0004-ben-drivers-misc-Character-device-driver-for-seven-segme.patch"
SRC_URI_append_gbs = " file://0004-ben-drivers-misc-Platform-driver-for-seven-segment-displ.patch"
diff --git a/meta-quanta/meta-gbs/recipes-phosphor/configuration/gbs-yaml-config.bb b/meta-quanta/meta-gbs/recipes-phosphor/configuration/gbs-yaml-config.bb
index cd632e132..167f78df9 100644
--- a/meta-quanta/meta-gbs/recipes-phosphor/configuration/gbs-yaml-config.bb
+++ b/meta-quanta/meta-gbs/recipes-phosphor/configuration/gbs-yaml-config.bb
@@ -9,6 +9,7 @@ SRC_URI = " \
file://gbs-ipmi-fru.yaml \
file://gbs-ipmi-sensors.yaml \
file://gbs-ipmi-fru-properties.yaml \
+ file://gbs-ipmi-inventory-sensors.yaml \
"
S = "${WORKDIR}"
@@ -20,12 +21,15 @@ do_install() {
${D}${datadir}/${BPN}/ipmi-sensors.yaml
install -m 0644 -D gbs-ipmi-fru-properties.yaml \
${D}${datadir}/${BPN}/ipmi-extra-properties.yaml
+ install -m 0644 -D gbs-ipmi-inventory-sensors.yaml \
+ ${D}${datadir}/${BPN}/ipmi-inventory-sensors.yaml
}
FILES_${PN}-dev = " \
${datadir}/${BPN}/ipmi-fru-read.yaml \
${datadir}/${BPN}/ipmi-sensors.yaml \
${datadir}/${BPN}/ipmi-extra-properties.yaml \
+ ${datadir}/${BPN}/ipmi-inventory-sensors.yaml \
"
ALLOW_EMPTY_${PN} = "1"
diff --git a/meta-quanta/meta-gbs/recipes-phosphor/configuration/gbs-yaml-config/gbs-ipmi-inventory-sensors.yaml b/meta-quanta/meta-gbs/recipes-phosphor/configuration/gbs-yaml-config/gbs-ipmi-inventory-sensors.yaml
new file mode 100644
index 000000000..865e4b3b6
--- /dev/null
+++ b/meta-quanta/meta-gbs/recipes-phosphor/configuration/gbs-yaml-config/gbs-ipmi-inventory-sensors.yaml
@@ -0,0 +1,435 @@
+/xyz/openbmc_project/sensors/temperature/i2cool_0:
+ eventReadingType: 1
+ sensorID: 0x10
+ sensorType: 1
+ offset: 0xff
+/xyz/openbmc_project/sensors/temperature/i2cool_1:
+ eventReadingType: 1
+ sensorID: 0x11
+ sensorType: 1
+ offset: 0xff
+/xyz/openbmc_project/sensors/temperature/i2cool_2:
+ eventReadingType: 1
+ sensorID: 0x12
+ sensorType: 1
+ offset: 0xff
+/xyz/openbmc_project/sensors/temperature/powerseq_temp:
+ eventReadingType: 1
+ sensorID: 0x13
+ sensorType: 1
+ offset: 0xff
+/xyz/openbmc_project/sensors/temperature/cputemp:
+ eventReadingType: 1
+ sensorID: 0x14
+ sensorType: 1
+ offset: 0xff
+/xyz/openbmc_project/sensors/temperature/nvme0:
+ eventReadingType: 1
+ sensorID: 0x15
+ sensorType: 1
+ offset: 0xff
+/xyz/openbmc_project/sensors/temperature/nvme1:
+ eventReadingType: 1
+ sensorID: 0x16
+ sensorType: 1
+ offset: 0xff
+/xyz/openbmc_project/sensors/temperature/nvme2:
+ eventReadingType: 1
+ sensorID: 0x17
+ sensorType: 1
+ offset: 0xff
+/xyz/openbmc_project/sensors/temperature/nvme3:
+ eventReadingType: 1
+ sensorID: 0x18
+ sensorType: 1
+ offset: 0xff
+/xyz/openbmc_project/sensors/temperature/nvme4:
+ eventReadingType: 1
+ sensorID: 0x19
+ sensorType: 1
+ offset: 0xff
+/xyz/openbmc_project/sensors/temperature/nvme5:
+ eventReadingType: 1
+ sensorID: 0x1A
+ sensorType: 1
+ offset: 0xff
+/xyz/openbmc_project/sensors/temperature/nvme6:
+ eventReadingType: 1
+ sensorID: 0x1B
+ sensorType: 1
+ offset: 0xff
+/xyz/openbmc_project/sensors/temperature/nvme7:
+ eventReadingType: 1
+ sensorID: 0x1C
+ sensorType: 1
+ offset: 0xff
+/xyz/openbmc_project/sensors/temperature/nvme8:
+ eventReadingType: 1
+ sensorID: 0x1D
+ sensorType: 1
+ offset: 0xff
+/xyz/openbmc_project/sensors/temperature/nvme9:
+ eventReadingType: 1
+ sensorID: 0x1E
+ sensorType: 1
+ offset: 0xff
+/xyz/openbmc_project/sensors/temperature/nvme10:
+ eventReadingType: 1
+ sensorID: 0x1F
+ sensorType: 1
+ offset: 0xff
+/xyz/openbmc_project/sensors/temperature/nvme11:
+ eventReadingType: 1
+ sensorID: 0x20
+ sensorType: 1
+ offset: 0xff
+/xyz/openbmc_project/sensors/temperature/nvme12:
+ eventReadingType: 1
+ sensorID: 0x21
+ sensorType: 1
+ offset: 0xff
+/xyz/openbmc_project/sensors/temperature/nvme13:
+ eventReadingType: 1
+ sensorID: 0x22
+ sensorType: 1
+ offset: 0xff
+/xyz/openbmc_project/sensors/temperature/nvme14:
+ eventReadingType: 1
+ sensorID: 0x23
+ sensorType: 1
+ offset: 0xff
+/xyz/openbmc_project/sensors/temperature/nvme15:
+ eventReadingType: 1
+ sensorID: 0x24
+ sensorType: 1
+ offset: 0xff
+/xyz/openbmc_project/sensors/temperature/vddcr_cpu:
+ eventReadingType: 1
+ sensorID: 0x27
+ sensorType: 1
+ offset: 0xff
+/xyz/openbmc_project/sensors/temperature/vddcr_soc:
+ eventReadingType: 1
+ sensorID: 0x28
+ sensorType: 1
+ offset: 0xff
+/xyz/openbmc_project/sensors/temperature/vddio_abcd:
+ eventReadingType: 1
+ sensorID: 0x29
+ sensorType: 1
+ offset: 0xff
+/xyz/openbmc_project/sensors/temperature/vddio_efgh:
+ eventReadingType: 1
+ sensorID: 0x2A
+ sensorType: 1
+ offset: 0xff
+/xyz/openbmc_project/sensors/temperature/p12v_mobo:
+ eventReadingType: 1
+ sensorID: 0x2B
+ sensorType: 1
+ offset: 0xff
+/xyz/openbmc_project/sensors/temperature/p12v_fan:
+ eventReadingType: 1
+ sensorID: 0x2C
+ sensorType: 1
+ offset: 0xff
+/xyz/openbmc_project/sensors/temperature/hotswap:
+ eventReadingType: 1
+ sensorID: 0x2D
+ sensorType: 1
+ offset: 0xff
+/xyz/openbmc_project/sensors/voltage/p1v8_stby:
+ eventReadingType: 1
+ sensorID: 0x30
+ sensorType: 2
+ offset: 0xff
+/xyz/openbmc_project/sensors/voltage/vddcr_soc_stby:
+ eventReadingType: 1
+ sensorID: 0x31
+ sensorType: 2
+ offset: 0xff
+/xyz/openbmc_project/sensors/voltage/p2v5_stby:
+ eventReadingType: 1
+ sensorID: 0x32
+ sensorType: 2
+ offset: 0xff
+/xyz/openbmc_project/sensors/voltage/p1v2_stby:
+ eventReadingType: 1
+ sensorID: 0x33
+ sensorType: 2
+ offset: 0xff
+/xyz/openbmc_project/sensors/voltage/p1v175_stby:
+ eventReadingType: 1
+ sensorID: 0x34
+ sensorType: 2
+ offset: 0xff
+/xyz/openbmc_project/sensors/voltage/p1v8:
+ eventReadingType: 1
+ sensorID: 0x35
+ sensorType: 2
+ offset: 0xff
+/xyz/openbmc_project/sensors/voltage/p3v3:
+ eventReadingType: 1
+ sensorID: 0x36
+ sensorType: 2
+ offset: 0xff
+/xyz/openbmc_project/sensors/voltage/pwrgd_pvpp:
+ eventReadingType: 1
+ sensorID: 0x37
+ sensorType: 2
+ offset: 0xff
+/xyz/openbmc_project/sensors/voltage/pwrgd_pvddio:
+ eventReadingType: 1
+ sensorID: 0x38
+ sensorType: 2
+ offset: 0xff
+/xyz/openbmc_project/sensors/voltage/pwrgd_cpuvr:
+ eventReadingType: 1
+ sensorID: 0x39
+ sensorType: 2
+ offset: 0xff
+/xyz/openbmc_project/sensors/voltage/p3v3_stby:
+ eventReadingType: 1
+ sensorID: 0x3A
+ sensorType: 2
+ offset: 0xff
+/xyz/openbmc_project/sensors/voltage/p5v_stby:
+ eventReadingType: 1
+ sensorID: 0x3B
+ sensorType: 2
+ offset: 0xff
+/xyz/openbmc_project/sensors/voltage/vddcr_cpu_in:
+ eventReadingType: 1
+ sensorID: 0x3C
+ sensorType: 2
+ offset: 0xff
+/xyz/openbmc_project/sensors/voltage/vddcr_cpu_out:
+ eventReadingType: 1
+ sensorID: 0x3D
+ sensorType: 2
+ offset: 0xff
+/xyz/openbmc_project/sensors/voltage/vddcr_soc_in:
+ eventReadingType: 1
+ sensorID: 0x3E
+ sensorType: 2
+ offset: 0xff
+/xyz/openbmc_project/sensors/voltage/vddcr_soc_out:
+ eventReadingType: 1
+ sensorID: 0x3F
+ sensorType: 2
+ offset: 0xff
+/xyz/openbmc_project/sensors/voltage/vddio_abcd_out:
+ eventReadingType: 1
+ sensorID: 0x40
+ sensorType: 2
+ offset: 0xff
+/xyz/openbmc_project/sensors/voltage/vddio_abcd_in:
+ eventReadingType: 1
+ sensorID: 0x41
+ sensorType: 2
+ offset: 0xff
+/xyz/openbmc_project/sensors/voltage/vddio_efgh_out:
+ eventReadingType: 1
+ sensorID: 0x42
+ sensorType: 2
+ offset: 0xff
+/xyz/openbmc_project/sensors/voltage/vddio_efgh_in:
+ eventReadingType: 1
+ sensorID: 0x43
+ sensorType: 2
+ offset: 0xff
+/xyz/openbmc_project/sensors/voltage/hotswap_vin:
+ eventReadingType: 1
+ sensorID: 0x44
+ sensorType: 2
+ offset: 0xff
+/xyz/openbmc_project/sensors/voltage/hotswap_vout:
+ eventReadingType: 1
+ sensorID: 0x45
+ sensorType: 2
+ offset: 0xff
+/xyz/openbmc_project/sensors/voltage/p3v_bat_adc:
+ eventReadingType: 1
+ sensorID: 0x46
+ sensorType: 2
+ offset: 0xff
+/xyz/openbmc_project/sensors/voltage/p12v_mobo_out:
+ eventReadingType: 1
+ sensorID: 0x47
+ sensorType: 2
+ offset: 0xff
+/xyz/openbmc_project/sensors/voltage/p12v_mobo_in:
+ eventReadingType: 1
+ sensorID: 0x48
+ sensorType: 2
+ offset: 0xff
+/xyz/openbmc_project/sensors/voltage/p12v_fan_out:
+ eventReadingType: 1
+ sensorID: 0x49
+ sensorType: 2
+ offset: 0xff
+/xyz/openbmc_project/sensors/voltage/p12v_fan_in:
+ eventReadingType: 1
+ sensorID: 0x4A
+ sensorType: 2
+ offset: 0xff
+/xyz/openbmc_project/sensors/current/vddcr_cpu_in:
+ eventReadingType: 1
+ sensorID: 0x50
+ sensorType: 3
+ offset: 0xff
+/xyz/openbmc_project/sensors/current/vddcr_cpu_out:
+ eventReadingType: 1
+ sensorID: 0x51
+ sensorType: 3
+ offset: 0xff
+/xyz/openbmc_project/sensors/current/vddcr_soc_in:
+ eventReadingType: 1
+ sensorID: 0x52
+ sensorType: 3
+ offset: 0xff
+/xyz/openbmc_project/sensors/current/vddcr_soc_out:
+ eventReadingType: 1
+ sensorID: 0x53
+ sensorType: 3
+ offset: 0xff
+/xyz/openbmc_project/sensors/current/vddio_abcd_in:
+ eventReadingType: 1
+ sensorID: 0x55
+ sensorType: 3
+ offset: 0xff
+/xyz/openbmc_project/sensors/current/vddio_abcd_out:
+ eventReadingType: 1
+ sensorID: 0x54
+ sensorType: 3
+ offset: 0xff
+/xyz/openbmc_project/sensors/current/vddio_efgh_in:
+ eventReadingType: 1
+ sensorID: 0x57
+ sensorType: 3
+ offset: 0xff
+/xyz/openbmc_project/sensors/current/vddio_efgh_out:
+ eventReadingType: 1
+ sensorID: 0x56
+ sensorType: 3
+ offset: 0xff
+/xyz/openbmc_project/sensors/current/p12v_mobo_in:
+ eventReadingType: 1
+ sensorID: 0x5A
+ sensorType: 3
+ offset: 0xff
+/xyz/openbmc_project/sensors/current/p12v_mobo_out:
+ eventReadingType: 1
+ sensorID: 0x59
+ sensorType: 3
+ offset: 0xff
+/xyz/openbmc_project/sensors/current/p12v_fan_in:
+ eventReadingType: 1
+ sensorID: 0x5C
+ sensorType: 3
+ offset: 0xff
+/xyz/openbmc_project/sensors/current/p12v_fan_out:
+ eventReadingType: 1
+ sensorID: 0x5B
+ sensorType: 3
+ offset: 0xff
+/xyz/openbmc_project/sensors/current/hotswap_iout:
+ eventReadingType: 1
+ sensorID: 0x58
+ sensorType: 3
+ offset: 0xff
+/xyz/openbmc_project/sensors/power/hotswap_pout:
+ eventReadingType: 1
+ sensorID: 0x70
+ sensorType: 0x0B
+ offset: 0xff
+/xyz/openbmc_project/sensors/fan_tach/fan0:
+ eventReadingType: 1
+ sensorID: 0x60
+ sensorType: 4
+ offset: 0xff
+/xyz/openbmc_project/sensors/fan_tach/fan1:
+ eventReadingType: 1
+ sensorID: 0x61
+ sensorType: 4
+ offset: 0xff
+/xyz/openbmc_project/sensors/fan_tach/fb_fan0:
+ eventReadingType: 1
+ sensorID: 0x62
+ sensorType: 4
+ offset: 0xff
+/xyz/openbmc_project/sensors/fan_tach/fb_fan1:
+ eventReadingType: 1
+ sensorID: 0x63
+ sensorType: 4
+ offset: 0xff
+/xyz/openbmc_project/sensors/fan_tach/fb_fan2:
+ eventReadingType: 1
+ sensorID: 0x64
+ sensorType: 4
+ offset: 0xff
+/xyz/openbmc_project/metrics/memory/BmcECC:
+ eventReadingType: 0x6f
+ sensorID: 0xF0
+ sensorType: 0x0C
+ offset: 0x00
+/xyz/openbmc_project/inventory/system/chassis/cable/ss_cab0_prsnt:
+ eventReadingType: 0x6f
+ sensorID: 0xF1
+ sensorType: 0x1B
+ offset: 0x01
+/xyz/openbmc_project/inventory/system/chassis/cable/ss_cab1_prsnt:
+ eventReadingType: 0x6f
+ sensorID: 0xF2
+ sensorType: 0x1B
+ offset: 0x01
+/xyz/openbmc_project/inventory/system/chassis/cable/ss_cab2_prsnt:
+ eventReadingType: 0x6f
+ sensorID: 0xF3
+ sensorType: 0x1B
+ offset: 0x01
+/xyz/openbmc_project/inventory/system/chassis/cable/ss_cab3_prsnt:
+ eventReadingType: 0x6f
+ sensorID: 0xF4
+ sensorType: 0x1B
+ offset: 0x01
+/xyz/openbmc_project/inventory/system/chassis/entity/sata0_prsnt:
+ eventReadingType: 0x6f
+ sensorID: 0xF5
+ sensorType: 0x25
+ offset: 0x01
+/xyz/openbmc_project/inventory/system/chassis/cable/hsbp_cab_prsnt:
+ eventReadingType: 0x6f
+ sensorID: 0xF6
+ sensorType: 0x1B
+ offset: 0x01
+/xyz/openbmc_project/inventory/system/chassis/cable/fanbd_cab_prsnt:
+ eventReadingType: 0x6f
+ sensorID: 0xF7
+ sensorType: 0x1B
+ offset: 0x01
+/xyz/openbmc_project/inventory/system/chassis/cable/bp12v_cab_prsnt:
+ eventReadingType: 0x6f
+ sensorID: 0xF8
+ sensorType: 0x1B
+ offset: 0x01
+/xyz/openbmc_project/inventory/system/chassis/entity/pe_slot0_prsnt:
+ eventReadingType: 0x6f
+ sensorID: 0xF9
+ sensorType: 0x25
+ offset: 0x01
+/xyz/openbmc_project/inventory/system/chassis/entity/pe_slot1_prsnt:
+ eventReadingType: 0x6f
+ sensorID: 0xFA
+ sensorType: 0x25
+ offset: 0x01
+/xyz/openbmc_project/watchdog/host0:
+ eventReadingType: 0x6f
+ sensorID: 0xFB
+ sensorType: 0x23
+ offset: 0x01
+/xyz/openbmc_project/inventory/system/chassis/entity/fans_efuse_pg:
+ eventReadingType: 0x6f
+ sensorID: 0xFC
+ sensorType: 0x25
+ offset: 0x01
diff --git a/meta-quanta/meta-gbs/recipes-phosphor/console/files/80-gbs-nuvoton-sol.rules b/meta-quanta/meta-gbs/recipes-phosphor/console/files/80-gbs-nuvoton-sol.rules
deleted file mode 100644
index 3d0670bc3..000000000
--- a/meta-quanta/meta-gbs/recipes-phosphor/console/files/80-gbs-nuvoton-sol.rules
+++ /dev/null
@@ -1 +0,0 @@
-SUBSYSTEM=="tty", ATTRS{iomem_base}=="0xF0002000", ENV{SYSTEMD_WANTS}="obmc-console@ttyS1" SYMLINK+="ttyS1", TAG+="systemd"
diff --git a/meta-quanta/meta-gbs/recipes-phosphor/console/obmc-console_%.bbappend b/meta-quanta/meta-gbs/recipes-phosphor/console/obmc-console_%.bbappend
index f78e3c22d..142661078 100644
--- a/meta-quanta/meta-gbs/recipes-phosphor/console/obmc-console_%.bbappend
+++ b/meta-quanta/meta-gbs/recipes-phosphor/console/obmc-console_%.bbappend
@@ -1,13 +1,4 @@
FILESEXTRAPATHS_prepend_gbs := "${THISDIR}/files:"
-SRC_URI_append_gbs = " file://80-gbs-nuvoton-sol.rules"
-do_install_append_gbs() {
- install -m 0755 -d ${D}${sysconfdir}/${BPN}
- rm -f ${D}${sysconfdir}/${BPN}/server.ttyVUART0.conf
- install -m 0644 ${WORKDIR}/${BPN}.conf ${D}${sysconfdir}/
- ln -sr ${D}${sysconfdir}/${BPN}.conf ${D}${sysconfdir}/${BPN}/server.ttyS1.conf
-
- install -d ${D}/lib/udev/rules.d
- rm -f ${D}/lib/udev/rules.d/80-obmc-console-uart.rules
- install -m 0644 ${WORKDIR}/80-gbs-nuvoton-sol.rules ${D}/lib/udev/rules.d
-}
+OBMC_CONSOLE_FRONT_TTY_gbs = "ttyS3"
+OBMC_CONSOLE_HOST_TTY_gbs = "ttyS1"
diff --git a/meta-quanta/meta-gbs/recipes-phosphor/dbus/phosphor-dbus-interfaces/0024-Add-the-pre-timeout-interrupt-defined-in-IPMI-spec.patch b/meta-quanta/meta-gbs/recipes-phosphor/dbus/phosphor-dbus-interfaces/0024-Add-the-pre-timeout-interrupt-defined-in-IPMI-spec.patch
deleted file mode 100644
index 67fa59090..000000000
--- a/meta-quanta/meta-gbs/recipes-phosphor/dbus/phosphor-dbus-interfaces/0024-Add-the-pre-timeout-interrupt-defined-in-IPMI-spec.patch
+++ /dev/null
@@ -1,57 +0,0 @@
-From 6e9a19c43acac7d4254910906329d98d7b59085a Mon Sep 17 00:00:00 2001
-From: Ren Yu <yux.ren@intel.com>
-Date: Fri, 24 May 2019 14:55:10 +0800
-Subject: [PATCH] Add the pre-timeout interrupt defined in IPMI spec
-
-The IPMI watchdog pre-timeout interrupt is used to set the different
-pre-timeout interrupt source. Add them as a dbus property,
-IPMI set/get watchdog commands will use it.
-
-Signed-off-by: Ren Yu <yux.ren@intel.com>
----
- xyz/openbmc_project/State/Watchdog.interface.yaml | 22 ++++++++++++++++++++++
- 1 file changed, 22 insertions(+)
-
-diff --git a/xyz/openbmc_project/State/Watchdog.interface.yaml b/xyz/openbmc_project/State/Watchdog.interface.yaml
-index 2fc47d8..6dfa9b9 100644
---- a/xyz/openbmc_project/State/Watchdog.interface.yaml
-+++ b/xyz/openbmc_project/State/Watchdog.interface.yaml
-@@ -33,6 +33,11 @@ properties:
- description: >
- The action the watchdog should perform when it expires.
- default: 'HardReset'
-+ - name: PreTimeoutInterrupt
-+ type: enum[self.PreTimeoutInterruptAction]
-+ description: >
-+ The BMC generates the selected interrupt before the timer expires.
-+ default: 'None'
- - name: Interval
- type: uint64
- description: >
-@@ -73,6 +78,23 @@ enumerations:
- description: >
- Perform a power cycle of the system.
-
-+ - name: PreTimeoutInterruptAction
-+ description: >
-+ The type of PreTimeout Interrupt.
-+ values:
-+ - name: 'None'
-+ description: >
-+ Do nothing.
-+ - name: 'SMI'
-+ description: >
-+ SMI.
-+ - name: 'NMI'
-+ description: >
-+ NMI / Diagnostic Interrupt.
-+ - name: 'MI'
-+ description: >
-+ Messaging Interrupt.
-+
- - name: TimerUse
- description: >
- The type of timer use.
---
-2.7.4
-
diff --git a/meta-quanta/meta-gbs/recipes-phosphor/dbus/phosphor-dbus-interfaces/0025-Add-PreInterruptFlag-properity-in-DBUS.patch b/meta-quanta/meta-gbs/recipes-phosphor/dbus/phosphor-dbus-interfaces/0025-Add-PreInterruptFlag-properity-in-DBUS.patch
deleted file mode 100644
index d7e66abd2..000000000
--- a/meta-quanta/meta-gbs/recipes-phosphor/dbus/phosphor-dbus-interfaces/0025-Add-PreInterruptFlag-properity-in-DBUS.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From b7c487750c05dcc081219ccdd4ef539beef6aa30 Mon Sep 17 00:00:00 2001
-From: Ren Yu <yux.ren@intel.com>
-Date: Mon, 29 Jul 2019 10:51:12 +0800
-Subject: [PATCH] Add PreInterruptFlag properity in DBUS.
-
-PreTimeoutInterruptOccurFlag in DBUS would be set 'true'
-when watchdog pre-timeout interrupt occurred.
-
-Tested:
-Enable command(raw 0x06 0x31) that get message flag
-can set right bit about watchdog,
-need record PreTimeoutInterruptOccurFlag
-at xyz.openbmmc_project.State.Watchdog when watchdog
-pre-timeout interrupt occurred.
-
-Signed-off-by: Ren Yu <yux.ren@intel.com>
----
- xyz/openbmc_project/State/Watchdog.interface.yaml | 5 +++++
- 1 file changed, 5 insertions(+)
-
-diff --git a/xyz/openbmc_project/State/Watchdog.interface.yaml b/xyz/openbmc_project/State/Watchdog.interface.yaml
-index bf4cca0..6579368 100644
---- a/xyz/openbmc_project/State/Watchdog.interface.yaml
-+++ b/xyz/openbmc_project/State/Watchdog.interface.yaml
-@@ -59,6 +59,11 @@ properties:
- description: >
- The timer user at the time of expiration.
- default: 'Reserved'
-+ - name: PreTimeoutInterruptOccurFlag
-+ type: boolean
-+ description: >
-+ PreTimeoutInterruptOccurFlag that preTimeoutInterrupt action occurred.
-+ default: false
-
- enumerations:
- - name: Action
---
-2.7.4
-
diff --git a/meta-quanta/meta-gbs/recipes-phosphor/dbus/phosphor-dbus-interfaces_%.bbappend b/meta-quanta/meta-gbs/recipes-phosphor/dbus/phosphor-dbus-interfaces_%.bbappend
deleted file mode 100644
index 0b5bff905..000000000
--- a/meta-quanta/meta-gbs/recipes-phosphor/dbus/phosphor-dbus-interfaces_%.bbappend
+++ /dev/null
@@ -1,5 +0,0 @@
-FILESEXTRAPATHS_prepend_gbs := "${THISDIR}/${PN}:"
-
-SRC_URI_append_gbs = " file://0024-Add-the-pre-timeout-interrupt-defined-in-IPMI-spec.patch \
- file://0025-Add-PreInterruptFlag-properity-in-DBUS.patch \
- "
diff --git a/meta-quanta/meta-gbs/recipes-phosphor/images/obmc-phosphor-image.bbappend b/meta-quanta/meta-gbs/recipes-phosphor/images/obmc-phosphor-image.bbappend
index 9cea5db15..ff9e512c7 100644
--- a/meta-quanta/meta-gbs/recipes-phosphor/images/obmc-phosphor-image.bbappend
+++ b/meta-quanta/meta-gbs/recipes-phosphor/images/obmc-phosphor-image.bbappend
@@ -22,3 +22,4 @@ OBMC_IMAGE_EXTRA_INSTALL_append_gbs = " gbs-nvme-pwr-ctrl"
OBMC_IMAGE_EXTRA_INSTALL_append_gbs = " read-margin-temp"
OBMC_IMAGE_EXTRA_INSTALL_append_gbs = " phosphor-virtual-sensor"
OBMC_IMAGE_EXTRA_INSTALL_append_gbs = " acpi-power-state-daemon"
+OBMC_IMAGE_EXTRA_INSTALL_append_gbs = " virtual/obmc-gpio-presence"
diff --git a/meta-quanta/meta-gbs/recipes-phosphor/interfaces/bmcweb_%.bbappend b/meta-quanta/meta-gbs/recipes-phosphor/interfaces/bmcweb_%.bbappend
index 87ecf4fa3..2c19a3ead 100755
--- a/meta-quanta/meta-gbs/recipes-phosphor/interfaces/bmcweb_%.bbappend
+++ b/meta-quanta/meta-gbs/recipes-phosphor/interfaces/bmcweb_%.bbappend
@@ -1,3 +1,8 @@
-EXTRA_OECMAKE_append_gbs = " \
- -DBMCWEB_ENABLE_REDFISH_DBUS_LOG_ENTRIES=ON \
+EXTRA_OEMESON_append_gbs = " \
+ -Dredfish-dbus-log=enabled \
+ -Dhttp-body-limit=40 \
"
+
+do_install_append_gbs(){
+ install -d ${D}${localstatedir}/lib/bmcweb
+}
diff --git a/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-flash_%.bbappend b/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-flash_%.bbappend
index 9f4c89026..14f333b81 100644
--- a/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-flash_%.bbappend
+++ b/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-flash_%.bbappend
@@ -1,5 +1,5 @@
NUVOTON_FLASH_PCIMBOX = "0xF0848000"
-EXTRA_OECONF_append_gbs = " --enable-nuvoton-p2a-mbox"
+PACKAGECONFIG_append_gbs = " nuvoton-p2a-mbox"
IPMI_FLASH_BMC_ADDRESS_gbs = "${NUVOTON_FLASH_PCIMBOX}"
diff --git a/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-host/0001-Add-Chassis-State-Transition-interface.patch b/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-host/0001-Add-Chassis-State-Transition-interface.patch
new file mode 100644
index 000000000..74f982b33
--- /dev/null
+++ b/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-host/0001-Add-Chassis-State-Transition-interface.patch
@@ -0,0 +1,79 @@
+From a1f9d797753e32b36e08e7d611ff88b10e9bbad2 Mon Sep 17 00:00:00 2001
+From: "Jason M. Bills" <jason.m.bills@linux.intel.com>
+Date: Thu, 30 Jan 2020 16:18:33 -0800
+Subject: [PATCH 1/3] Add Chassis State Transition interface
+
+This adds the Chassis State Transition interface in preparation
+to support the mapping defined in the design document below.
+
+ref: https://gerrit.openbmc-project.xyz/c/openbmc/docs/+/22358
+
+Tested:
+Ran each IPMI chassis control command to confirm the expected
+behavior:
+ipmitool power on: system is powered-on
+ipmitool power off: system is forced off
+ipmitool power cycle: system is forced off then powered-on
+ipmitool power reset: system is hard reset
+ipmitool power soft: soft power-off requested from system software
+
+Change-Id: I6acfb795a9a33ff5227a5d6e1830774ab732ac0c
+Signed-off-by: Jason M. Bills <jason.m.bills@linux.intel.com>
+---
+ chassishandler.cpp | 33 +++++++++++++++++++++++++++++++++
+ 1 file changed, 33 insertions(+)
+
+diff --git a/chassishandler.cpp b/chassishandler.cpp
+index 0d318647..fdbb9fa5 100644
+--- a/chassishandler.cpp
++++ b/chassishandler.cpp
+@@ -31,6 +31,7 @@
+ #include <xyz/openbmc_project/Control/Boot/Mode/server.hpp>
+ #include <xyz/openbmc_project/Control/Boot/Source/server.hpp>
+ #include <xyz/openbmc_project/Control/Power/RestorePolicy/server.hpp>
++#include <xyz/openbmc_project/State/Chassis/server.hpp>
+ #include <xyz/openbmc_project/State/Host/server.hpp>
+ #include <xyz/openbmc_project/State/PowerOnHours/server.hpp>
+
+@@ -865,6 +866,38 @@ int initiate_state_transition(State::Host::Transition transition)
+ return rc;
+ }
+
++//------------------------------------------
++// Calls into Chassis State Manager Dbus object
++//------------------------------------------
++int initiateChassisStateTransition(State::Chassis::Transition transition)
++{
++ // OpenBMC Chassis State Manager dbus framework
++ constexpr auto chassisStatePath = "/xyz/openbmc_project/state/chassis0";
++ constexpr auto chassisStateIntf = "xyz.openbmc_project.State.Chassis";
++
++ auto service =
++ ipmi::getService(*getSdBus(), chassisStateIntf, chassisStatePath);
++
++ // Convert to string equivalent of the passed in transition enum.
++ auto request = State::convertForMessage(transition);
++
++ try
++ {
++ ipmi::setDbusProperty(*getSdBus(), service, chassisStatePath,
++ chassisStateIntf, "RequestedPowerTransition",
++ request);
++ }
++ catch (std::exception& e)
++ {
++ log<level::ERR>(
++ "Failed to initiate transition",
++ entry("EXCEPTION=%s, REQUEST=%s", e.what(), request.c_str()));
++ return -1;
++ }
++
++ return 0;
++}
++
+ //------------------------------------------
+ // Set Enabled property to inform NMI source
+ // handling to trigger a NMI_OUT BSOD.
+--
+2.21.0
+
diff --git a/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-host/0001-Fix-issues-and-support-signed-sensor-values.patch b/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-host/0001-Fix-issues-and-support-signed-sensor-values.patch
new file mode 100644
index 000000000..6d13f9297
--- /dev/null
+++ b/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-host/0001-Fix-issues-and-support-signed-sensor-values.patch
@@ -0,0 +1,169 @@
+From 8ce91a760fca8c945540679c92770f841629e179 Mon Sep 17 00:00:00 2001
+From: Tony Lee <tony.lee@quantatw.com>
+Date: Thu, 31 Oct 2019 17:24:16 +0800
+Subject: [PATCH] Fix issues and support signed sensor values
+
+Sensor will get "disable" when the command "ipmitool sdr elist" is
+executed that if sensorReadingType is 0x6F.
+
+sensor_units_1 is always set to 0 currently. To support the display of
+signed sensor values, we add the attribute "sensorUnits1" to the sensor
+mapping yaml. This attribute can be used to determine whether the
+sensor is signed.
+
+It were making negative values 0 in get::readingData(). Fix the issue
+by using a int32_t and add an overflow check.
+
+Change-Id: I705defcf18805db9ada7d0de0738a59aedab61df
+Signed-off-by: Tony Lee <tony.lee@quantatw.com>
+---
+ include/ipmid/types.hpp | 2 ++
+ scripts/sensor-example.yaml | 2 ++
+ scripts/writesensor.mako.cpp | 2 ++
+ sensordatahandler.cpp | 2 --
+ sensordatahandler.hpp | 31 ++++++++++++++++++++++++++++---
+ sensorhandler.cpp | 5 ++---
+ 6 files changed, 36 insertions(+), 8 deletions(-)
+
+diff --git a/include/ipmid/types.hpp b/include/ipmid/types.hpp
+index e62c8192..bd1fac2b 100644
+--- a/include/ipmid/types.hpp
++++ b/include/ipmid/types.hpp
+@@ -133,6 +133,7 @@ using Unit = std::string;
+ using EntityType = uint8_t;
+ using EntityInst = uint8_t;
+ using SensorName = std::string;
++using SensorUnits1 = uint8_t;
+
+ enum class Mutability
+ {
+@@ -167,6 +168,7 @@ struct Info
+ Exponent exponentR;
+ bool hasScale;
+ Scale scale;
++ SensorUnits1 sensorUnits1;
+ Unit unit;
+ std::function<uint8_t(SetSensorReadingReq&, const Info&)> updateFunc;
+ std::function<GetSensorResponse(const Info&)> getFunc;
+diff --git a/scripts/sensor-example.yaml b/scripts/sensor-example.yaml
+index 9760cd01..bddd2e6d 100644
+--- a/scripts/sensor-example.yaml
++++ b/scripts/sensor-example.yaml
+@@ -112,6 +112,8 @@
+ # Applies for analog sensors, the actual reading value for the sensor is
+ # Value * 10^N
+ scale: -3
++ # Indicate Analog Data Format, Rate unit, Modifier unit and Percentage
++ sensorUnits1 : 0x80
+ mutability: Mutability::Write|Mutability::Read
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: readingData
+diff --git a/scripts/writesensor.mako.cpp b/scripts/writesensor.mako.cpp
+index 8b268052..813f9404 100644
+--- a/scripts/writesensor.mako.cpp
++++ b/scripts/writesensor.mako.cpp
+@@ -49,6 +49,7 @@ extern const IdInfoMap sensors = {
+ offsetB = sensor.get("offsetB", 0)
+ bExp = sensor.get("bExp", 0)
+ rExp = sensor.get("rExp", 0)
++ sensorUnits1 = sensor.get("sensorUnits1", 0)
+ unit = sensor.get("unit", "")
+ scale = sensor.get("scale", 0)
+ hasScale = "true" if "scale" in sensor.keys() else "false"
+@@ -91,6 +92,7 @@ extern const IdInfoMap sensors = {
+ .exponentR = ${rExp},
+ .hasScale = ${hasScale},
+ .scale = ${scale},
++ .sensorUnits1 = ${sensorUnits1},
+ .unit = "${unit}",
+ .updateFunc = ${updateFunc},
+ .getFunc = ${getFunc},
+diff --git a/sensordatahandler.cpp b/sensordatahandler.cpp
+index 06f5f429..fc74b8f8 100644
+--- a/sensordatahandler.cpp
++++ b/sensordatahandler.cpp
+@@ -7,8 +7,6 @@
+ #include <ipmid/types.hpp>
+ #include <ipmid/utils.hpp>
+ #include <optional>
+-#include <phosphor-logging/elog-errors.hpp>
+-#include <phosphor-logging/log.hpp>
+ #include <sdbusplus/message/types.hpp>
+ #include <xyz/openbmc_project/Common/error.hpp>
+
+diff --git a/sensordatahandler.hpp b/sensordatahandler.hpp
+index 5cad58c5..c48140a3 100644
+--- a/sensordatahandler.hpp
++++ b/sensordatahandler.hpp
+@@ -8,6 +8,8 @@
+ #include <ipmid/api.hpp>
+ #include <ipmid/types.hpp>
+ #include <ipmid/utils.hpp>
++#include <phosphor-logging/elog-errors.hpp>
++#include <phosphor-logging/log.hpp>
+ #include <sdbusplus/message/types.hpp>
+
+ namespace ipmi
+@@ -28,6 +30,7 @@ using ServicePath = std::pair<Path, Service>;
+ using Interfaces = std::vector<Interface>;
+
+ using MapperResponseType = std::map<Path, std::map<Service, Interfaces>>;
++using namespace phosphor::logging;
+
+ /** @brief get the D-Bus service and service path
+ * @param[in] bus - The Dbus bus object
+@@ -225,10 +228,32 @@ GetSensorResponse readingData(const Info& sensorInfo)
+
+ double value = std::get<T>(propValue) *
+ std::pow(10, sensorInfo.scale - sensorInfo.exponentR);
++ int32_t rawData =
++ (value - sensorInfo.scaledOffset) / sensorInfo.coefficientM;
+
+- auto rawData = static_cast<uint8_t>((value - sensorInfo.scaledOffset) /
+- sensorInfo.coefficientM);
+- setReading(rawData, &response);
++ constexpr uint8_t sensorUnitsSignedBits = 2 << 6;
++ constexpr uint8_t signedDataFormat = 0x80;
++ // if sensorUnits1 [7:6] = 10b, sensor is signed
++ if ((sensorInfo.sensorUnits1 & sensorUnitsSignedBits) == signedDataFormat)
++ {
++ if (rawData > std::numeric_limits<int8_t>::max() ||
++ rawData < std::numeric_limits<int8_t>::lowest())
++ {
++ log<level::ERR>("Value out of range");
++ throw std::out_of_range("Value out of range");
++ }
++ setReading(static_cast<int8_t>(rawData), &response);
++ }
++ else
++ {
++ if (rawData > std::numeric_limits<uint8_t>::max() ||
++ rawData < std::numeric_limits<uint8_t>::lowest())
++ {
++ log<level::ERR>("Value out of range");
++ throw std::out_of_range("Value out of range");
++ }
++ setReading(static_cast<uint8_t>(rawData), &response);
++ }
+
+ return response;
+ }
+diff --git a/sensorhandler.cpp b/sensorhandler.cpp
+index 36998715..260331a0 100644
+--- a/sensorhandler.cpp
++++ b/sensorhandler.cpp
+@@ -700,9 +700,8 @@ ipmi_ret_t populate_record_from_dbus(get_sdr::SensorDataFullRecordBody* body,
+ /* Functional sensor case */
+ if (isAnalogSensor(info->propertyInterfaces.begin()->first))
+ {
+-
+- body->sensor_units_1 = 0; // unsigned, no rate, no modifier, not a %
+-
++ body->sensor_units_1 = info->sensorUnits1; // default is 0. unsigned, no
++ // rate, no modifier, not a %
+ /* Unit info */
+ setUnitFieldsForObject(info, body);
+
+--
+2.21.0
+
diff --git a/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-host/0002-Update-Host-State-Transition-function.patch b/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-host/0002-Update-Host-State-Transition-function.patch
new file mode 100644
index 000000000..156327b9c
--- /dev/null
+++ b/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-host/0002-Update-Host-State-Transition-function.patch
@@ -0,0 +1,137 @@
+From 8079e1e39e1953458bd2e59c7f546a3d879558db Mon Sep 17 00:00:00 2001
+From: "Jason M. Bills" <jason.m.bills@linux.intel.com>
+Date: Thu, 30 Jan 2020 16:02:39 -0800
+Subject: [PATCH 2/3] Update Host State Transition function
+
+This updates the Host State Transition function to use the new
+IPMI DBus APIs for transition requests.
+
+Tested:
+Ran each IPMI chassis control command to confirm the expected
+behavior:
+ipmitool power on: system is powered-on
+ipmitool power off: system is forced off
+ipmitool power cycle: system is forced off then powered-on
+ipmitool power reset: system is hard reset
+ipmitool power soft: soft power-off requested from system software
+
+Change-Id: Id2253a9c0060e892bc318dd02a6221ac1a2ae2d9
+Signed-off-by: Jason M. Bills <jason.m.bills@linux.intel.com>
+---
+ chassishandler.cpp | 64 +++++++++++++---------------------------------
+ 1 file changed, 18 insertions(+), 46 deletions(-)
+
+diff --git a/chassishandler.cpp b/chassishandler.cpp
+index fdbb9fa5..af9cba72 100644
+--- a/chassishandler.cpp
++++ b/chassishandler.cpp
+@@ -811,59 +811,31 @@ ipmi::RspType<> ipmiSetChassisCap(bool intrusion, bool fpLockout,
+ //------------------------------------------
+ // Calls into Host State Manager Dbus object
+ //------------------------------------------
+-int initiate_state_transition(State::Host::Transition transition)
++int initiateHostStateTransition(State::Host::Transition transition)
+ {
+ // OpenBMC Host State Manager dbus framework
+- constexpr auto HOST_STATE_MANAGER_ROOT = "/xyz/openbmc_project/state/host0";
+- constexpr auto HOST_STATE_MANAGER_IFACE = "xyz.openbmc_project.State.Host";
+- constexpr auto DBUS_PROPERTY_IFACE = "org.freedesktop.DBus.Properties";
+- constexpr auto PROPERTY = "RequestedHostTransition";
++ constexpr auto hostStatePath = "/xyz/openbmc_project/state/host0";
++ constexpr auto hostStateIntf = "xyz.openbmc_project.State.Host";
+
+- // sd_bus error
+- int rc = 0;
+- char* busname = NULL;
+-
+- // SD Bus error report mechanism.
+- sd_bus_error bus_error = SD_BUS_ERROR_NULL;
+-
+- // Gets a hook onto either a SYSTEM or SESSION bus
+- sd_bus* bus_type = ipmid_get_sd_bus_connection();
+- rc = mapper_get_service(bus_type, HOST_STATE_MANAGER_ROOT, &busname);
+- if (rc < 0)
+- {
+- log<level::ERR>(
+- "Failed to get bus name",
+- entry("ERRNO=0x%X, OBJPATH=%s", -rc, HOST_STATE_MANAGER_ROOT));
+- return rc;
+- }
++ auto service = ipmi::getService(*getSdBus(), hostStateIntf, hostStatePath);
+
+ // Convert to string equivalent of the passed in transition enum.
+ auto request = State::convertForMessage(transition);
+
+- rc = sd_bus_call_method(bus_type, // On the system bus
+- busname, // Service to contact
+- HOST_STATE_MANAGER_ROOT, // Object path
+- DBUS_PROPERTY_IFACE, // Interface name
+- "Set", // Method to be called
+- &bus_error, // object to return error
+- nullptr, // Response buffer if any
+- "ssv", // Takes 3 arguments
+- HOST_STATE_MANAGER_IFACE, PROPERTY, "s",
+- request.c_str());
+- if (rc < 0)
++ try
+ {
+- log<level::ERR>("Failed to initiate transition",
+- entry("ERRNO=0x%X, REQUEST=%s", -rc, request.c_str()));
++ ipmi::setDbusProperty(*getSdBus(), service, hostStatePath,
++ hostStateIntf, "RequestedHostTransition",
++ request);
+ }
+- else
++ catch (std::exception& e)
+ {
+- log<level::INFO>("Transition request initiated successfully");
++ log<level::ERR>(
++ "Failed to initiate transition",
++ entry("EXCEPTION=%s, REQUEST=%s", e.what(), request.c_str()));
++ return -1;
+ }
+-
+- sd_bus_error_free(&bus_error);
+- free(busname);
+-
+- return rc;
++ return 0;
+ }
+
+ //------------------------------------------
+@@ -1411,7 +1383,7 @@ ipmi::RspType<> ipmiChassisControl(uint8_t chassisControl)
+ switch (chassisControl)
+ {
+ case CMD_POWER_ON:
+- rc = initiate_state_transition(State::Host::Transition::On);
++ rc = initiateHostStateTransition(State::Host::Transition::On);
+ break;
+ case CMD_POWER_OFF:
+ // This path would be hit in 2 conditions.
+@@ -1439,7 +1411,7 @@ ipmi::RspType<> ipmiChassisControl(uint8_t chassisControl)
+ indicate_no_softoff_needed();
+
+ // Now request the shutdown
+- rc = initiate_state_transition(State::Host::Transition::Off);
++ rc = initiateHostStateTransition(State::Host::Transition::Off);
+ }
+ else
+ {
+@@ -1460,12 +1432,12 @@ ipmi::RspType<> ipmiChassisControl(uint8_t chassisControl)
+ // originating via a soft power off SMS request)
+ indicate_no_softoff_needed();
+
+- rc = initiate_state_transition(State::Host::Transition::Reboot);
++ rc = initiateHostStateTransition(State::Host::Transition::Reboot);
+ break;
+
+ case CMD_SOFT_OFF_VIA_OVER_TEMP:
+ // Request Host State Manager to do a soft power off
+- rc = initiate_state_transition(State::Host::Transition::Off);
++ rc = initiateHostStateTransition(State::Host::Transition::Off);
+ break;
+
+ case CMD_PULSE_DIAGNOSTIC_INTR:
+--
+2.21.0
+
diff --git a/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-host/0003-Update-IPMI-Chassis-Control-command-transition-reque.patch b/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-host/0003-Update-IPMI-Chassis-Control-command-transition-reque.patch
new file mode 100644
index 000000000..271af3f5b
--- /dev/null
+++ b/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-host/0003-Update-IPMI-Chassis-Control-command-transition-reque.patch
@@ -0,0 +1,180 @@
+From 291629d5c3e5bea31925c9d025688897c90eb783 Mon Sep 17 00:00:00 2001
+From: "Jason M. Bills" <jason.m.bills@linux.intel.com>
+Date: Thu, 30 Jan 2020 16:22:24 -0800
+Subject: [PATCH 3/3] Update IPMI Chassis Control command transition requests
+
+This change updates the IPMI Chassis Control command to use the new
+host state transitions and chassis off transition based on the
+mapping in the design document below. This allows each chassis
+control action to more closely follow the behavior defined in the
+IPMI spec.
+
+ref: https://gerrit.openbmc-project.xyz/c/openbmc/docs/+/22358
+
+Tested:
+Ran each IPMI chassis control command to confirm the expected
+behavior:
+ipmitool power on: system is powered-on using Host.On
+ipmitool power off: system is forced off using Chassis.Off
+ipmitool power cycle: system is forced off then powered-on using
+ Host.Reboot
+ipmitool power reset: system is hard reset using Host.ForceWarmReboot
+ipmitool power soft: soft power-off requested from system software
+ using Host.Off
+
+Change-Id: Ieb42722102fde0e51a49dc4aaa3ff227a3394066
+Signed-off-by: Jason M. Bills <jason.m.bills@linux.intel.com>
+---
+ chassishandler.cpp | 121 ++-------------------------------------------
+ 1 file changed, 5 insertions(+), 116 deletions(-)
+
+diff --git a/chassishandler.cpp b/chassishandler.cpp
+index af9cba72..663081de 100644
+--- a/chassishandler.cpp
++++ b/chassishandler.cpp
+@@ -1301,76 +1301,6 @@ ipmi::RspType<uint4_t, // Restart Cause
+ return ipmi::responseSuccess(cause.value(), reserved, channel);
+ }
+
+-//-------------------------------------------------------------
+-// Send a command to SoftPowerOff application to stop any timer
+-//-------------------------------------------------------------
+-int stop_soft_off_timer()
+-{
+- constexpr auto iface = "org.freedesktop.DBus.Properties";
+- constexpr auto soft_off_iface = "xyz.openbmc_project.Ipmi.Internal."
+- "SoftPowerOff";
+-
+- constexpr auto property = "ResponseReceived";
+- constexpr auto value = "xyz.openbmc_project.Ipmi.Internal."
+- "SoftPowerOff.HostResponse.HostShutdown";
+-
+- // Get the system bus where most system services are provided.
+- auto bus = ipmid_get_sd_bus_connection();
+-
+- // Get the service name
+- // TODO openbmc/openbmc#1661 - Mapper refactor
+- //
+- // See openbmc/openbmc#1743 for some details but high level summary is that
+- // for now the code will directly call the soft off interface due to a
+- // race condition with mapper usage
+- //
+- // char *busname = nullptr;
+- // auto r = mapper_get_service(bus, SOFTOFF_OBJPATH, &busname);
+- // if (r < 0)
+- //{
+- // fprintf(stderr, "Failed to get %s bus name: %s\n",
+- // SOFTOFF_OBJPATH, -r);
+- // return r;
+- //}
+-
+- // No error object or reply expected.
+- int rc = sd_bus_call_method(bus, SOFTOFF_BUSNAME, SOFTOFF_OBJPATH, iface,
+- "Set", nullptr, nullptr, "ssv", soft_off_iface,
+- property, "s", value);
+- if (rc < 0)
+- {
+- log<level::ERR>("Failed to set property in SoftPowerOff object",
+- entry("ERRNO=0x%X", -rc));
+- }
+-
+- // TODO openbmc/openbmc#1661 - Mapper refactor
+- // free(busname);
+- return rc;
+-}
+-
+-//----------------------------------------------------------------------
+-// Create file to indicate there is no need for softoff notification to host
+-//----------------------------------------------------------------------
+-void indicate_no_softoff_needed()
+-{
+- fs::path path{HOST_INBAND_REQUEST_DIR};
+- if (!fs::is_directory(path))
+- {
+- fs::create_directory(path);
+- }
+-
+- // Add the host instance (default 0 for now) to the file name
+- std::string file{HOST_INBAND_REQUEST_FILE};
+- auto size = std::snprintf(nullptr, 0, file.c_str(), 0);
+- size++; // null
+- std::unique_ptr<char[]> buf(new char[size]);
+- std::snprintf(buf.get(), size, file.c_str(), 0);
+-
+- // Append file name to directory and create it
+- path /= buf.get();
+- std::ofstream(path.c_str());
+-}
+-
+ /** @brief Implementation of chassis control command
+ *
+ * @param - chassisControl command byte
+@@ -1386,60 +1316,19 @@ ipmi::RspType<> ipmiChassisControl(uint8_t chassisControl)
+ rc = initiateHostStateTransition(State::Host::Transition::On);
+ break;
+ case CMD_POWER_OFF:
+- // This path would be hit in 2 conditions.
+- // 1: When user asks for power off using ipmi chassis command 0x04
+- // 2: Host asking for power off post shutting down.
+-
+- // If it's a host requested power off, then need to nudge Softoff
+- // application that it needs to stop the watchdog timer if running.
+- // If it is a user requested power off, then this is not really
+- // needed. But then we need to differentiate between user and host
+- // calling this same command
+-
+- // For now, we are going ahead with trying to nudge the soft off and
+- // interpret the failure to do so as a non softoff case
+- rc = stop_soft_off_timer();
+-
+- // Only request the Off transition if the soft power off
+- // application is not running
+- if (rc < 0)
+- {
+- // First create a file to indicate to the soft off application
+- // that it should not run. Not doing this will result in State
+- // manager doing a default soft power off when asked for power
+- // off.
+- indicate_no_softoff_needed();
+-
+- // Now request the shutdown
+- rc = initiateHostStateTransition(State::Host::Transition::Off);
+- }
+- else
+- {
+- log<level::INFO>("Soft off is running, so let shutdown target "
+- "stop the host");
+- }
++ rc =
++ initiateChassisStateTransition(State::Chassis::Transition::Off);
+ break;
+-
+ case CMD_HARD_RESET:
++ rc = initiateHostStateTransition(
++ State::Host::Transition::ForceWarmReboot);
++ break;
+ case CMD_POWER_CYCLE:
+- // SPEC has a section that says certain implementations can trigger
+- // PowerOn if power is Off when a command to power cycle is
+- // requested
+-
+- // First create a file to indicate to the soft off application
+- // that it should not run since this is a direct user initiated
+- // power reboot request (i.e. a reboot request that is not
+- // originating via a soft power off SMS request)
+- indicate_no_softoff_needed();
+-
+ rc = initiateHostStateTransition(State::Host::Transition::Reboot);
+ break;
+-
+ case CMD_SOFT_OFF_VIA_OVER_TEMP:
+- // Request Host State Manager to do a soft power off
+ rc = initiateHostStateTransition(State::Host::Transition::Off);
+ break;
+-
+ case CMD_PULSE_DIAGNOSTIC_INTR:
+ rc = setNmiProperty(true);
+ break;
+--
+2.21.0
+
diff --git a/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-host/0063-Save-the-pre-timeout-interrupt-in-dbus-property.patch b/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-host/0063-Save-the-pre-timeout-interrupt-in-dbus-property.patch
deleted file mode 100644
index d815cde72..000000000
--- a/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-host/0063-Save-the-pre-timeout-interrupt-in-dbus-property.patch
+++ /dev/null
@@ -1,138 +0,0 @@
-From 9deb72959477700216326c033c930236e58f965f Mon Sep 17 00:00:00 2001
-From: Ren Yu <yux.ren@intel.com>
-Date: Tue, 28 May 2019 17:11:17 +0800
-Subject: [PATCH] Save the pre-timeout interrupt in dbus property
-
-Get the watchdog pre-timeout interrupt value from ipmi watchdog set command,
-and store it into dbus property.
-
-Tested:
-Config IPMI watchdog: BIOS FRB2 Power Cycle after 1 seconds:
-ipmitool raw 0x06 0x24 0x01 0x13 0x0 0x2 0xa 0x00
-Start watchdog:
-Ipmitool mc watchdog reset
-Check the watchdog pre-timeout interrupt in below:
-https://BMCIP/redfish/v1/Systems/system/LogServices/EventLog/Entries
-
-Signed-off-by: Ren Yu <yux.ren@intel.com>
-
----
- app/watchdog.cpp | 47 ++++++++++++++++++++++++++++++++++++++++
- app/watchdog_service.cpp | 6 +++++
- app/watchdog_service.hpp | 9 ++++++++
- 3 files changed, 62 insertions(+)
-
-diff --git a/app/watchdog.cpp b/app/watchdog.cpp
-index 03c373e..cb0b1fd 100644
---- a/app/watchdog.cpp
-+++ b/app/watchdog.cpp
-@@ -80,6 +80,7 @@ ipmi::RspType<> ipmiAppResetWatchdogTimer()
-
- static constexpr uint8_t wd_dont_stop = 0x1 << 6;
- static constexpr uint8_t wd_timeout_action_mask = 0x3;
-+static constexpr uint8_t wdPreTimeoutInterruptMask = 0x3;
-
- static constexpr uint8_t wdTimerUseResTimer1 = 0x0;
- static constexpr uint8_t wdTimerUseResTimer2 = 0x6;
-@@ -127,6 +128,45 @@ WatchdogService::Action ipmiActionToWdAction(IpmiAction ipmi_action)
- }
- }
-
-+enum class IpmiPreTimeoutInterrupt : uint8_t
-+{
-+ None = 0x0,
-+ SMI = 0x1,
-+ NMI = 0x2,
-+ MI = 0x3,
-+};
-+/** @brief Converts an IPMI Watchdog PreTimeoutInterrupt to DBUS defined action
-+ * @param[in] ipmi_action The IPMI Watchdog PreTimeoutInterrupt
-+ * @return The Watchdog PreTimeoutInterrupt that the ipmi_action maps to
-+ */
-+WatchdogService::PreTimeoutInterruptAction ipmiPreTimeoutInterruptToWdAction(
-+ IpmiPreTimeoutInterrupt ipmiPreTimeOutInterrupt)
-+{
-+ switch (ipmiPreTimeOutInterrupt)
-+ {
-+ case IpmiPreTimeoutInterrupt::None:
-+ {
-+ return WatchdogService::PreTimeoutInterruptAction::None;
-+ }
-+ case IpmiPreTimeoutInterrupt::SMI:
-+ {
-+ return WatchdogService::PreTimeoutInterruptAction::SMI;
-+ }
-+ case IpmiPreTimeoutInterrupt::NMI:
-+ {
-+ return WatchdogService::PreTimeoutInterruptAction::NMI;
-+ }
-+ case IpmiPreTimeoutInterrupt::MI:
-+ {
-+ return WatchdogService::PreTimeoutInterruptAction::MI;
-+ }
-+ default:
-+ {
-+ throw std::domain_error("IPMI PreTimeoutInterrupt is invalid");
-+ }
-+ }
-+}
-+
- enum class IpmiTimerUse : uint8_t
- {
- Reserved = 0x0,
-@@ -250,6 +290,13 @@ ipmi::RspType<>
- // Mark as initialized so that future resets behave correctly
- wd_service.setInitialized(true);
-
-+ // pretimeOutAction
-+ const auto ipmiPreTimeoutInterrupt =
-+ static_cast<IpmiPreTimeoutInterrupt>(wdPreTimeoutInterruptMask &
-+ (static_cast<uint8_t>(preTimeoutInterrupt)));
-+ wd_service.setPreTimeoutInterrupt(
-+ ipmiPreTimeoutInterruptToWdAction(ipmiPreTimeoutInterrupt));
-+
- lastCallSuccessful = true;
- return ipmi::responseSuccess();
- }
-diff --git a/app/watchdog_service.cpp b/app/watchdog_service.cpp
-index 3534e89..4df1ab6 100644
---- a/app/watchdog_service.cpp
-+++ b/app/watchdog_service.cpp
-@@ -198,3 +198,9 @@ void WatchdogService::setInterval(uint64_t interval)
- {
- setProperty("Interval", interval);
- }
-+
-+void WatchdogService::setPreTimeoutInterrupt(
-+ PreTimeoutInterruptAction preTimeoutInterrupt)
-+{
-+ setProperty("PreTimeoutInterrupt", convertForMessage(preTimeoutInterrupt));
-+}
-\ No newline at end of file
-diff --git a/app/watchdog_service.hpp b/app/watchdog_service.hpp
-index 141bdb7..32b7461 100644
---- a/app/watchdog_service.hpp
-+++ b/app/watchdog_service.hpp
-@@ -15,6 +15,8 @@ class WatchdogService
-
- using Action =
- sdbusplus::xyz::openbmc_project::State::server::Watchdog::Action;
-+ using PreTimeoutInterruptAction = sdbusplus::xyz::openbmc_project::State::
-+ server::Watchdog::PreTimeoutInterruptAction;
- using TimerUse =
- sdbusplus::xyz::openbmc_project::State::server::Watchdog::TimerUse;
-
-@@ -92,6 +94,13 @@ class WatchdogService
- */
- void setInterval(uint64_t interval);
-
-+ /** @brief Sets the value of the PreTimeoutInterrupt property on the host
-+ * watchdog
-+ *
-+ * @param[in] PreTimeoutInterrupt - The new PreTimeoutInterrupt value
-+ */
-+ void setPreTimeoutInterrupt(PreTimeoutInterruptAction preTimeoutInterrupt);
-+
- private:
- /** @brief sdbusplus handle */
- sdbusplus::bus::bus bus;
diff --git a/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-host_%.bbappend b/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-host_%.bbappend
index bf2986c47..af5fb1356 100644
--- a/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-host_%.bbappend
+++ b/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-host_%.bbappend
@@ -1,18 +1,19 @@
DEPENDS_append_gbs = " gbs-yaml-config"
-SRC_URI_remove_gbs = "git://github.com/openbmc/phosphor-host-ipmid"
-SRC_URI_prepend_gbs = "git://github.com/quanta-bmc/phosphor-host-ipmid.git"
-
-SRCREV_gbs = "257ea262809c52e51f1f592e047d27125f0273b3"
-
FILESEXTRAPATHS_prepend_gbs := "${THISDIR}/${PN}:"
SRC_URI_append_gbs = " file://gbs-ipmid-whitelist.conf \
- file://0063-Save-the-pre-timeout-interrupt-in-dbus-property.patch \
+ file://0001-Add-Chassis-State-Transition-interface.patch \
+ file://0002-Update-Host-State-Transition-function.patch \
+ file://0003-Update-IPMI-Chassis-Control-command-transition-reque.patch \
+ file://0001-Fix-issues-and-support-signed-sensor-values.patch \
"
WHITELIST_CONF_gbs = "${WORKDIR}/gbs-ipmid-whitelist.conf"
-EXTRA_OECONF_append_gbs = " --with-journal-sel \
+EXTRA_OECONF_append_gbs = " \
SENSOR_YAML_GEN=${STAGING_DIR_HOST}${datadir}/gbs-yaml-config/ipmi-sensors.yaml \
FRU_YAML_GEN=${STAGING_DIR_HOST}${datadir}/gbs-yaml-config/ipmi-fru-read.yaml \
+ INVSENSOR_YAML_GEN=${STAGING_DIR_HOST}${datadir}/gbs-yaml-config/ipmi-inventory-sensors.yaml \
"
+
+RDEPENDS_${PN}_remove_gbs = "clear-once"
diff --git a/meta-quanta/meta-gbs/recipes-phosphor/leds/phosphor-led-manager_%.bbappend b/meta-quanta/meta-gbs/recipes-phosphor/leds/phosphor-led-manager_%.bbappend
index a7ec24f41..e887b1935 100644
--- a/meta-quanta/meta-gbs/recipes-phosphor/leds/phosphor-led-manager_%.bbappend
+++ b/meta-quanta/meta-gbs/recipes-phosphor/leds/phosphor-led-manager_%.bbappend
@@ -1,5 +1,16 @@
FILESEXTRAPATHS_prepend_gbs := "${THISDIR}/${PN}:"
SRC_URI_append_gbs = " file://service-override.conf"
-SYSTEMD_OVERRIDE_${PN}-ledmanager_append_gbs = " \
- service-override.conf:xyz.openbmc_project.LED.GroupManager.service.d/service-override.conf"
+FILES_${PN}_append_gbs = " ${systemd_system_unitdir}/xyz.openbmc_project.LED.GroupManager.service.d/service-override.conf"
+
+do_compile_prepend_gbs() {
+ install -m 0644 ${STAGING_DATADIR_NATIVE}/${PN}/led.yaml ${S}
+}
+
+do_install_append_gbs() {
+ rm -rf ${D}${datadir}/${PN}/*
+
+ install -d ${D}${systemd_system_unitdir}/xyz.openbmc_project.LED.GroupManager.service.d
+ install -D -m 0644 ${WORKDIR}/service-override.conf \
+ ${D}${systemd_system_unitdir}/xyz.openbmc_project.LED.GroupManager.service.d/
+}
diff --git a/meta-quanta/meta-gbs/recipes-phosphor/logging/phosphor-logging_%.bbappend b/meta-quanta/meta-gbs/recipes-phosphor/logging/phosphor-logging_%.bbappend
new file mode 100644
index 000000000..264423933
--- /dev/null
+++ b/meta-quanta/meta-gbs/recipes-phosphor/logging/phosphor-logging_%.bbappend
@@ -0,0 +1 @@
+EXTRA_OEMESON_append_gbs = " -Derror_info_cap=256"
diff --git a/meta-quanta/meta-gbs/recipes-phosphor/network/phosphor-network_%.bbappend b/meta-quanta/meta-gbs/recipes-phosphor/network/phosphor-network_%.bbappend
index 49959cc0e..9caf61e66 100644
--- a/meta-quanta/meta-gbs/recipes-phosphor/network/phosphor-network_%.bbappend
+++ b/meta-quanta/meta-gbs/recipes-phosphor/network/phosphor-network_%.bbappend
@@ -1 +1,2 @@
-EXTRA_OECONF_append_gbs = " --enable-nic-ethtool=yes"
+PACKAGECONFIG_append_gbs = " nic-ethtool"
+PACKAGECONFIG_remove_gbs = "uboot-env"
diff --git a/meta-quanta/meta-gbs/recipes-phosphor/packagegroups/packagegroup-gbs-apps.bb b/meta-quanta/meta-gbs/recipes-phosphor/packagegroups/packagegroup-gbs-apps.bb
index 4c1bb123c..20c81ad94 100644
--- a/meta-quanta/meta-gbs/recipes-phosphor/packagegroups/packagegroup-gbs-apps.bb
+++ b/meta-quanta/meta-gbs/recipes-phosphor/packagegroups/packagegroup-gbs-apps.bb
@@ -32,5 +32,5 @@ SUMMARY_${PN}-flash = "GBS Flash"
RDEPENDS_${PN}-flash = " \
phosphor-ipmi-flash \
gbs-bmc-update \
- gbs-bios-update \
+ virtual/bios-update \
"
diff --git a/meta-quanta/meta-gbs/recipes-phosphor/packagegroups/packagegroup-obmc-apps%.bbappend b/meta-quanta/meta-gbs/recipes-phosphor/packagegroups/packagegroup-obmc-apps%.bbappend
index 935c3cebb..73e9b0aa4 100644
--- a/meta-quanta/meta-gbs/recipes-phosphor/packagegroups/packagegroup-obmc-apps%.bbappend
+++ b/meta-quanta/meta-gbs/recipes-phosphor/packagegroups/packagegroup-obmc-apps%.bbappend
@@ -1,2 +1,2 @@
-RDEPENDS_${PN}-extras_remove_gbs = "obmc-ikvm"
-RDEPENDS_${PN}-inventory_append_gbs = " virtual/obmc-gpio-presence"
+RDEPENDS_${PN}-fru-ipmi_remove_gbs = "fru-device"
+RDEPENDS_${PN}-ikvm_remove_gbs = "obmc-ikvm"
diff --git a/meta-quanta/meta-gbs/recipes-phosphor/sel-logger/phosphor-sel-logger_%.bbappend b/meta-quanta/meta-gbs/recipes-phosphor/sel-logger/phosphor-sel-logger_%.bbappend
index e0f8e08aa..5c28b0435 100644
--- a/meta-quanta/meta-gbs/recipes-phosphor/sel-logger/phosphor-sel-logger_%.bbappend
+++ b/meta-quanta/meta-gbs/recipes-phosphor/sel-logger/phosphor-sel-logger_%.bbappend
@@ -1,5 +1,4 @@
-SRC_URI_gbs := "git://github.com/quanta-bmc/phosphor-sel-logger.git"
-SRCREV_gbs := "6ded68355db28958836aedb40c0d4780d84d2b43"
-
# Enable threshold monitoring
-EXTRA_OECMAKE_append_gbs = "-DSEL_LOGGER_MONITOR_THRESHOLD_EVENTS=ON"
+EXTRA_OECMAKE_append_gbs = "-DSEL_LOGGER_SEND_TO_LOGGING_SERVICE=ON \
+ -DSEL_LOGGER_MONITOR_THRESHOLD_ALARM_EVENTS=ON \
+ "
diff --git a/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/0001-lev-add-poweron-monitor-feature.patch b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/0002-Add-power-on-monitor-mechanism.patch
index c279e0b81..a3718ea2a 100644
--- a/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/0001-lev-add-poweron-monitor-feature.patch
+++ b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/0002-Add-power-on-monitor-mechanism.patch
@@ -1,44 +1,33 @@
-From 2cea5d289b278db4468b16bf6b64102655811fd0 Mon Sep 17 00:00:00 2001
-From: Eddielu <Eddie.Lu@quantatw.com>
-Date: Mon, 27 Jul 2020 20:30:22 +0800
-Subject: [PATCH] Update lev-add-poweron-monitor-feature patch.
+From 5cea18ba476c0cb6ea622be50a09ead00cd47b14 Mon Sep 17 00:00:00 2001
+From: Ivan Li <rli11@lenovo.com>
+Date: Wed, 25 Dec 2019 17:05:00 +0800
+Subject: [PATCH] Add power on monitor mechanism
+Summary:
+1. Add "PWRONMON" attribute in sensor configuration file to determine whether it's power-on monitor sensor or not. (i.e. PWRONMON_temp1 = "ON")
+2. Watching "CurrentHostState" property and then use it to turn on/off threshold alert for power-on monitor sensors.
+
+Test Plan:
+Check if there is any abnormal threshold events occurred in power off state or during power transition
+
+Signed-off-by: Ivan Li <rli11@lenovo.com>
+Change-Id: I76d3a664153141d94636e0011f3a48e4f6dee922
---
- Makefile.am | 2 ++
- mainloop.cpp | 102 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- sensor.cpp | 11 ++++++-
- sensor.hpp | 13 ++++++++
- thresholds.hpp | 2 --
- 5 files changed, 127 insertions(+), 3 deletions(-)
+ mainloop.cpp | 102 +++++++++++++++++++++++++++++++++++++++++++++++++
+ sensor.cpp | 11 +++++-
+ sensor.hpp | 13 +++++++
+ thresholds.hpp | 24 ------------
+ 4 files changed, 125 insertions(+), 25 deletions(-)
-diff --git a/Makefile.am b/Makefile.am
-index 706a6cc..c620fa4 100644
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -46,6 +46,7 @@ libhwmon_la_LIBADD = \
- $(SDEVENTPLUS_LIBS) \
- $(PHOSPHOR_DBUS_INTERFACES_LIBS) \
- $(PHOSPHOR_LOGGING_LIBS) \
-+ $(PTHREAD_LIBS) \
- $(GPIOPLUS_LIBS) \
- $(STDPLUS_LIBS) \
- $(CODE_COVERAGE_LIBS) \
-@@ -55,6 +56,7 @@ libhwmon_la_CXXFLAGS = \
- $(SDEVENTPLUS_CFLAGS) \
- $(PHOSPHOR_DBUS_INTERFACES_CFLAGS) \
- $(PHOSPHOR_LOGGING_CFLAGS) \
-+ $(PTHREAD_CFLAGS) \
- $(STDPLUS_CFLAGS) \
- $(CODE_COVERAGE_CXXFLAGS)
-
diff --git a/mainloop.cpp b/mainloop.cpp
-index 3e7e0bf..4789a80 100644
+index 29dc26a..5e27a30 100644
--- a/mainloop.cpp
+++ b/mainloop.cpp
-@@ -41,6 +41,12 @@
+@@ -42,6 +42,13 @@
#include <string>
#include <unordered_set>
#include <xyz/openbmc_project/Sensor/Device/error.hpp>
++#include <boost/asio/io_service.hpp>
+#include <boost/container/flat_map.hpp>
+#include <boost/algorithm/string/predicate.hpp>
+#include <sdbusplus/asio/connection.hpp>
@@ -48,9 +37,9 @@ index 3e7e0bf..4789a80 100644
using namespace phosphor::logging;
-@@ -76,6 +82,12 @@ decltype(
- Thresholds<CriticalObject>::alarmHi) Thresholds<CriticalObject>::alarmHi =
- &CriticalObject::criticalAlarmHigh;
+@@ -110,6 +117,12 @@ decltype(Thresholds<CriticalObject>::deassertHighSignal)
+ Thresholds<CriticalObject>::deassertHighSignal =
+ &CriticalObject::criticalHighAlarmDeasserted;
+static std::unique_ptr<phosphor::Timer> cacheTimer = nullptr;
+static std::unique_ptr<sdbusplus::bus::match::match> powerMatch = nullptr;
@@ -61,7 +50,7 @@ index 3e7e0bf..4789a80 100644
void updateSensorInterfaces(InterfaceMap& ifaces, SensorValueType value)
{
for (auto& iface : ifaces)
-@@ -103,6 +115,84 @@ void updateSensorInterfaces(InterfaceMap& ifaces, SensorValueType value)
+@@ -137,6 +150,83 @@ void updateSensorInterfaces(InterfaceMap& ifaces, SensorValueType value)
}
}
@@ -104,23 +93,23 @@ index 3e7e0bf..4789a80 100644
+ std::string objectName;
+ boost::container::flat_map<std::string, std::variant<std::string>>
+ values;
-+ message.read(objectName, values);
-+ auto findState = values.find("CurrentHostState");
-+ if (findState != values.end())
-+ {
-+ bool on = boost::ends_with(
++ message.read(objectName, values);
++ auto findState = values.find("CurrentHostState");
++ if (findState != values.end())
++ {
++ bool on = boost::ends_with(
+ std::get<std::string>(findState->second), "Running");
-+ if (!on)
++ if (!on)
+ {
-+ cacheTimer->stop();
++ cacheTimer->stop();
+ powerStatusOn = false;
+ return;
+ }
-+ cacheTimer->start(std::chrono::duration_cast<std::chrono::microseconds>(
++ cacheTimer->start(std::chrono::duration_cast<std::chrono::microseconds>(
+ std::chrono::seconds(10)));
-+ }
-+ else {
-+ powerStatusOn = false;
++ }
++ else {
++ powerStatusOn = false;
+ }
+ });
+
@@ -135,18 +124,17 @@ index 3e7e0bf..4789a80 100644
+ boost::ends_with(std::get<std::string>(state), "Running");
+ },
+ "xyz.openbmc_project.State.Host",
-+ "/xyz/openbmc_project/state/host0",
-+ "org.freedesktop.DBus.Properties", "Get",
++ "/xyz/openbmc_project/state/host0",
++ "org.freedesktop.DBus.Properties", "Get",
+ "xyz.openbmc_project.State.Host", "CurrentHostState");
+
+ createTimer();
+}
+
-+
std::string MainLoop::getID(SensorSet::container_t::const_reference sensor)
{
std::string id;
-@@ -384,6 +474,7 @@ void MainLoop::init()
+@@ -418,6 +508,7 @@ void MainLoop::init()
_interval = std::strtoull(interval.c_str(), NULL, 10);
}
}
@@ -154,7 +142,7 @@ index 3e7e0bf..4789a80 100644
}
void MainLoop::read()
-@@ -428,6 +519,12 @@ void MainLoop::read()
+@@ -462,6 +553,12 @@ void MainLoop::read()
try
{
@@ -167,23 +155,23 @@ index 3e7e0bf..4789a80 100644
if (sensor->hasFaultFile())
{
auto fault = _ioAccess->read(sensorSysfsType, sensorSysfsNum,
-@@ -490,6 +587,11 @@ void MainLoop::read()
+@@ -588,6 +685,11 @@ void MainLoop::read()
}
}
+ if(sensor->pwrOnMonitor() && !isPowerOn())
+ {
-+ statusIface->functional(false);
-+ continue;
++ statusIface->functional(false);
++ continue;
+ }
updateSensorInterfaces(obj, value);
}
catch (const std::system_error& e)
diff --git a/sensor.cpp b/sensor.cpp
-index 09aeca6..b1cb470 100644
+index ac2f896..72b45f8 100644
--- a/sensor.cpp
+++ b/sensor.cpp
-@@ -31,7 +31,7 @@ Sensor::Sensor(const SensorSet::key_type& sensor,
+@@ -32,7 +32,7 @@ Sensor::Sensor(const SensorSet::key_type& sensor,
const hwmonio::HwmonIOInterface* ioAccess,
const std::string& devPath) :
_sensor(sensor),
@@ -192,7 +180,7 @@ index 09aeca6..b1cb470 100644
{
auto chip = env::getEnv("GPIOCHIP", sensor);
auto access = env::getEnv("GPIO", sensor);
-@@ -60,6 +60,15 @@ Sensor::Sensor(const SensorSet::key_type& sensor,
+@@ -61,6 +61,15 @@ Sensor::Sensor(const SensorSet::key_type& sensor,
auto senRmRCs = env::getEnv("REMOVERCS", sensor);
// Add sensor removal return codes defined per sensor
addRemoveRCs(senRmRCs);
@@ -209,10 +197,10 @@ index 09aeca6..b1cb470 100644
void Sensor::addRemoveRCs(const std::string& rcList)
diff --git a/sensor.hpp b/sensor.hpp
-index 4b2d281..369a252 100644
+index 64d6e48..41c0fe7 100644
--- a/sensor.hpp
+++ b/sensor.hpp
-@@ -135,6 +135,16 @@ class Sensor
+@@ -151,6 +151,16 @@ class Sensor
return _hasFaultFile;
}
@@ -229,7 +217,7 @@ index 4b2d281..369a252 100644
private:
/** @brief Sensor object's identifiers */
SensorSet::key_type _sensor;
-@@ -156,6 +166,9 @@ class Sensor
+@@ -172,6 +182,9 @@ class Sensor
/** @brief Tracks whether the sensor has a fault file or not. */
bool _hasFaultFile;
@@ -240,18 +228,42 @@ index 4b2d281..369a252 100644
/**
diff --git a/thresholds.hpp b/thresholds.hpp
-index 4d2fcff..972a469 100644
+index 8d557fc..0ffe0ce 100644
--- a/thresholds.hpp
+++ b/thresholds.hpp
-@@ -101,8 +101,6 @@ auto addThreshold(const std::string& sensorType, const std::string& sensorID,
+@@ -137,32 +137,8 @@ auto addThreshold(const std::string& sensorType, const std::string& sensorID,
auto hi = stod(tHi) * std::pow(10, scale);
(*iface.*Thresholds<T>::setLo)(lo);
(*iface.*Thresholds<T>::setHi)(hi);
-- (*iface.*Thresholds<T>::alarmLo)(value <= lo);
-- (*iface.*Thresholds<T>::alarmHi)(value >= hi);
+- auto alarmLowState = (*iface.*Thresholds<T>::getAlarmLow)();
+- auto alarmHighState = (*iface.*Thresholds<T>::getAlarmHigh)();
+ (*iface.*Thresholds<T>::alarmLo)(value <= lo);
+ (*iface.*Thresholds<T>::alarmHi)(value >= hi);
+- if (alarmLowState != (value <= lo))
+- {
+- if (value <= lo)
+- {
+- (*iface.*Thresholds<T>::assertLowSignal)(value);
+- }
+- else
+- {
+- (*iface.*Thresholds<T>::deassertLowSignal)(value);
+- }
+- }
+- if (alarmHighState != (value >= hi))
+- {
+- if (value >= hi)
+- {
+- (*iface.*Thresholds<T>::assertHighSignal)(value);
+- }
+- else
+- {
+- (*iface.*Thresholds<T>::deassertHighSignal)(value);
+- }
+- }
auto type = Thresholds<T>::type;
obj[type] = iface;
}
--
-2.7.4
+2.21.0
diff --git a/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/0002-lev-add-sensors-slow-readings.patch b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/0002-lev-add-sensors-slow-readings.patch
deleted file mode 100644
index 0ab2f2048..000000000
--- a/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/0002-lev-add-sensors-slow-readings.patch
+++ /dev/null
@@ -1,295 +0,0 @@
-From 8eafa1b0513dd2f5898182487b4524a485bf1e21 Mon Sep 17 00:00:00 2001
-From: Eddielu <Eddie.Lu@quantatw.com>
-Date: Mon, 27 Jul 2020 20:54:28 +0800
-Subject: [PATCH] Update add sensors slow readings patch.
-
----
- mainloop.cpp | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++++----
- mainloop.hpp | 3 +++
- meson.build | 1 +
- sensor.cpp | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++-------
- sensor.hpp | 20 ++++++++++++++--
- 5 files changed, 158 insertions(+), 14 deletions(-)
-
-diff --git a/mainloop.cpp b/mainloop.cpp
-index 4789a80..98d0658 100644
---- a/mainloop.cpp
-+++ b/mainloop.cpp
-@@ -34,6 +34,7 @@
- #include <cassert>
- #include <cstdlib>
- #include <functional>
-+#include <future>
- #include <iostream>
- #include <memory>
- #include <phosphor-logging/elog-errors.hpp>
-@@ -299,7 +300,7 @@ std::optional<ObjectStateData>
- {
- // Add status interface based on _fault file being present
- sensorObj->addStatus(info);
-- valueInterface = sensorObj->addValue(retryIO, info);
-+ valueInterface = sensorObj->addValue(retryIO, info, _timedoutMap);
- }
- catch (const std::system_error& e)
- {
-@@ -542,10 +543,74 @@ void MainLoop::read()
- // RAII object for GPIO unlock / lock
- auto locker = sensor::gpioUnlock(sensor->getGpio());
-
-- // Retry for up to a second if device is busy
-- // or has a transient error.
-- value = _ioAccess->read(sensorSysfsType, sensorSysfsNum, input,
-+ // For sensors with attribute ASYNC_READ_TIMEOUT,
-+ // spawn a thread with timeout
-+ auto asyncRead =
-+ env::getEnv("ASYNC_READ_TIMEOUT", sensorSetKey);
-+ if (!asyncRead.empty())
-+ {
-+ // Default async read timeout
-+ std::chrono::milliseconds asyncReadTimeout{
-+ std::stoi(asyncRead)};
-+ bool valueIsValid = false;
-+ std::future<int64_t> asyncThread;
-+
-+ auto asyncIter = _timedoutMap.find(sensorSetKey);
-+ if (asyncIter == _timedoutMap.end())
-+ {
-+ // If sensor not found in timedoutMap, spawn an async
-+ // thread
-+ asyncThread = std::async(
-+ std::launch::async,
-+ &hwmonio::HwmonIOInterface::read, _ioAccess,
-+ sensorSysfsType, sensorSysfsNum, input,
-+ hwmonio::retries, hwmonio::delay);
-+ valueIsValid = true;
-+ }
-+ else
-+ {
-+ // If we already have the async thread in the
-+ // timedoutMap, it means this sensor has already timed
-+ // out in the previous reads. No need to wait on
-+ // subsequent reads
-+ asyncReadTimeout = std::chrono::seconds(0);
-+ asyncThread = std::move(asyncIter->second);
-+ }
-+
-+ std::future_status status =
-+ asyncThread.wait_for(asyncReadTimeout);
-+ switch (status)
-+ {
-+ // Read has finished
-+ case std::future_status::ready:
-+ // Read has finished
-+ if (valueIsValid)
-+ {
-+ value = asyncThread.get();
-+ break;
-+ // Good sensor reads should skip the code below
-+ }
-+ // Async read thread has completed, erase from
-+ // timedoutMap to allow retry then throw
-+ _timedoutMap.erase(sensorSetKey);
-+ throw sensor::AsyncSensorReadTimeOut();
-+ default:
-+ // Read timed out so add the thread to the
-+ // timedoutMap (if the entry already exists,
-+ // operator[] updates it)
-+ _timedoutMap[sensorSetKey] = std::move(asyncThread);
-+ throw sensor::AsyncSensorReadTimeOut();
-+ }
-+ }
-+ else
-+ {
-+ // Retry for up to a second if device is busy
-+ // or has a transient error.
-+ value =
-+ _ioAccess->read(sensorSysfsType, sensorSysfsNum, input,
- hwmonio::retries, hwmonio::delay);
-+ }
-+
- // Set functional property to true if we could read sensor
- statusIface->functional(true);
-
-diff --git a/mainloop.hpp b/mainloop.hpp
-index b3de022..6803c4b 100644
---- a/mainloop.hpp
-+++ b/mainloop.hpp
-@@ -9,6 +9,7 @@
- #include "types.hpp"
-
- #include <any>
-+#include <future>
- #include <memory>
- #include <optional>
- #include <sdbusplus/server.hpp>
-@@ -116,6 +117,8 @@ class MainLoop
- /** @brief Store the specifications of sensor objects */
- std::map<SensorSet::key_type, std::unique_ptr<sensor::Sensor>>
- _sensorObjects;
-+ /** @brief Store the async futures of timed out sensor objects */
-+ std::map<SensorSet::key_type, std::future<int64_t>> _timedoutMap;
-
- /**
- * @brief Map of removed sensors
-diff --git a/meson.build b/meson.build
-index 66e6801..d6a92f8 100644
---- a/meson.build
-+++ b/meson.build
-@@ -84,6 +84,7 @@ libhwmon_all = static_library(
- gpioplus,
- phosphor_dbus_interfaces,
- phosphor_logging,
-+ threads,
- ],
- link_with: [
- libaverage,
-diff --git a/sensor.cpp b/sensor.cpp
-index b1cb470..72b45f8 100644
---- a/sensor.cpp
-+++ b/sensor.cpp
-@@ -15,6 +15,7 @@
- #include <cmath>
- #include <cstring>
- #include <filesystem>
-+#include <future>
- #include <phosphor-logging/elog-errors.hpp>
- #include <thread>
- #include <xyz/openbmc_project/Common/error.hpp>
-@@ -125,8 +126,9 @@ SensorValueType Sensor::adjustValue(SensorValueType value)
- return value;
- }
-
--std::shared_ptr<ValueObject> Sensor::addValue(const RetryIO& retryIO,
-- ObjectInfo& info)
-+std::shared_ptr<ValueObject> Sensor::addValue(
-+ const RetryIO& retryIO, ObjectInfo& info,
-+ std::map<SensorSet::key_type, std::future<int64_t>>& timedoutMap)
- {
- static constexpr bool deferSignals = true;
-
-@@ -153,12 +155,69 @@ std::shared_ptr<ValueObject> Sensor::addValue(const RetryIO& retryIO,
- // RAII object for GPIO unlock / lock
- auto locker = gpioUnlock(getGpio());
-
-- // Retry for up to a second if device is busy
-- // or has a transient error.
-- val =
-- _ioAccess->read(_sensor.first, _sensor.second,
-- hwmon::entry::cinput, std::get<size_t>(retryIO),
-- std::get<std::chrono::milliseconds>(retryIO));
-+ // For sensors with attribute ASYNC_READ_TIMEOUT,
-+ // spawn a thread with timeout
-+ auto asyncRead = env::getEnv("ASYNC_READ_TIMEOUT", _sensor);
-+ if (!asyncRead.empty())
-+ {
-+ // Default async read timeout
-+ std::chrono::milliseconds asyncReadTimeout{
-+ std::stoi(asyncRead)};
-+ bool valueIsValid = false;
-+ std::future<int64_t> asyncThread;
-+
-+ auto asyncIter = timedoutMap.find(_sensor);
-+ if (asyncIter == timedoutMap.end())
-+ {
-+ // If sensor not found in timedoutMap, spawn an async thread
-+ asyncThread = std::async(
-+ std::launch::async, &hwmonio::HwmonIOInterface::read,
-+ _ioAccess, _sensor.first, _sensor.second,
-+ hwmon::entry::cinput, std::get<size_t>(retryIO),
-+ std::get<std::chrono::milliseconds>(retryIO));
-+ valueIsValid = true;
-+ }
-+ else
-+ {
-+ // If we already have the async thread in the timedoutMap,
-+ // it means this sensor has already timed out in the
-+ // previous reads. No need to wait on subsequent reads
-+ asyncReadTimeout = std::chrono::seconds(0);
-+ asyncThread = std::move(asyncIter->second);
-+ }
-+
-+ std::future_status status =
-+ asyncThread.wait_for(asyncReadTimeout);
-+ switch (status)
-+ {
-+ case std::future_status::ready:
-+ // Read has finished
-+ if (valueIsValid)
-+ {
-+ val = asyncThread.get();
-+ break;
-+ // Good sensor reads should skip the code below
-+ }
-+ // Async read thread has completed, erase from
-+ // timedoutMap to allow retry then throw
-+ timedoutMap.erase(_sensor);
-+ throw AsyncSensorReadTimeOut();
-+ default:
-+ // Read timed out so add the thread to the timedoutMap
-+ // (if the entry already exists, operator[] updates it)
-+ timedoutMap[_sensor] = std::move(asyncThread);
-+ throw AsyncSensorReadTimeOut();
-+ }
-+ }
-+ else
-+ {
-+ // Retry for up to a second if device is busy
-+ // or has a transient error.
-+ val = _ioAccess->read(
-+ _sensor.first, _sensor.second, hwmon::entry::cinput,
-+ std::get<size_t>(retryIO),
-+ std::get<std::chrono::milliseconds>(retryIO));
-+ }
- }
- #ifdef UPDATE_FUNCTIONAL_ON_FAIL
- catch (const std::system_error& e)
-diff --git a/sensor.hpp b/sensor.hpp
-index 369a252..41c0fe7 100644
---- a/sensor.hpp
-+++ b/sensor.hpp
-@@ -4,6 +4,8 @@
- #include "sensorset.hpp"
- #include "types.hpp"
-
-+#include <cerrno>
-+#include <future>
- #include <gpioplus/handle.hpp>
- #include <memory>
- #include <optional>
-@@ -20,6 +22,17 @@ struct valueAdjust
- std::unordered_set<int> rmRCs;
- };
-
-+/** @brief Custom exception for async sensor reading timeout
-+ */
-+struct AsyncSensorReadTimeOut : public std::system_error
-+{
-+ AsyncSensorReadTimeOut() :
-+ system_error(std::error_code(ETIMEDOUT, std::system_category()),
-+ "Async sensor read timed out")
-+ {
-+ }
-+};
-+
- /** @class Sensor
- * @brief Sensor object based on a SensorSet container's key type
- * @details Sensor object to create and modify an associated device's sensor
-@@ -87,10 +100,13 @@ class Sensor
- * (number of and delay between)
- * @param[in] info - Sensor object information
- *
-+ * @param[in] timedoutMap - Map to track timed out threads
-+ *
- * @return - Shared pointer to the value object
- */
-- std::shared_ptr<ValueObject> addValue(const RetryIO& retryIO,
-- ObjectInfo& info);
-+ std::shared_ptr<ValueObject> addValue(
-+ const RetryIO& retryIO, ObjectInfo& info,
-+ std::map<SensorSet::key_type, std::future<int64_t>>& timedoutMap);
-
- /**
- * @brief Add status interface and functional property for sensor
---
-2.7.4
-
diff --git a/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/pwm-fan-controller@103000.conf b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/pwm-fan-controller@103000.conf
index 34caf4a43..f21ee70e9 100644
--- a/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/pwm-fan-controller@103000.conf
+++ b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/pwm-fan-controller@103000.conf
@@ -2,7 +2,7 @@ LABEL_fan1= "fan0"
WARNHI_fan1= "19800"
WARNLO_fan1= "3330"
CRITHI_fan1= "19800"
-CRITLO_fan1= "1800"
+CRITLO_fan1= "1500"
MINVALUE_fan1 = "0"
MAXVALUE_fan1 = "20775"
PWM_TARGET_fan1 = 1
@@ -11,7 +11,7 @@ LABEL_fan2= "fan1"
WARNHI_fan2= "19800"
WARNLO_fan2= "3330"
CRITHI_fan2= "19800"
-CRITLO_fan2= "1800"
+CRITLO_fan2= "1500"
MINVALUE_fan2 = "0"
MAXVALUE_fan2 = "20775"
PWM_TARGET_fan2 = 2
@@ -20,7 +20,7 @@ LABEL_fan3= "fb_fan0"
WARNHI_fan3= "19800"
WARNLO_fan3= "3330"
CRITHI_fan3= "19800"
-CRITLO_fan3= "1800"
+CRITLO_fan3= "1500"
MINVALUE_fan3 = "0"
MAXVALUE_fan3 = "20775"
PWM_TARGET_fan3 = 3
@@ -29,7 +29,7 @@ LABEL_fan4= "fb_fan1"
WARNHI_fan4= "19800"
WARNLO_fan4= "3330"
CRITHI_fan4= "19800"
-CRITLO_fan4= "1800"
+CRITLO_fan4= "1500"
MINVALUE_fan4 = "0"
MAXVALUE_fan4 = "20775"
PWM_TARGET_fan4 = 4
@@ -38,7 +38,7 @@ LABEL_fan5= "fb_fan2"
WARNHI_fan5= "19800"
WARNLO_fan5= "3330"
CRITHI_fan5= "19800"
-CRITLO_fan5= "1800"
+CRITLO_fan5= "1500"
MINVALUE_fan5 = "0"
MAXVALUE_fan5 = "20775"
PWM_TARGET_fan5 = 5
diff --git a/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon_%.bbappend b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon_%.bbappend
index 5f0517a30..22b31cfb9 100644
--- a/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon_%.bbappend
+++ b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon_%.bbappend
@@ -1,7 +1,6 @@
FILESEXTRAPATHS_prepend_gbs := "${THISDIR}/${PN}:"
-SRC_URI_append_gbs = " file://0001-lev-add-poweron-monitor-feature.patch \
- file://0002-lev-add-sensors-slow-readings.patch \
+SRC_URI_append_gbs = " file://0002-Add-power-on-monitor-mechanism.patch \
"
GBS_NAMES = " \
@@ -32,4 +31,4 @@ FENVS = "obmc/hwmon/ahb/apb/{0}"
SYSTEMD_ENVIRONMENT_FILE_${PN}_append_gbs = " ${@compose_list(d, 'FENVS', 'FITEMS')}"
-EXTRA_OEMESON_append_gbs = " -Dupdate-functional-on-fail=true"
+EXTRA_OEMESON_append_gbs = " -Dupdate-functional-on-fail=true -Dnegative-errno-on-fail=false"
diff --git a/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-virtual-sensor/config-virtual-sensor.json b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-virtual-sensor/config-virtual-sensor.json
index 6e729108a..7be584152 100644
--- a/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-virtual-sensor/config-virtual-sensor.json
+++ b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-virtual-sensor/config-virtual-sensor.json
@@ -2,7 +2,9 @@
{
"Desc": {
"Name": "i2cool_0",
- "SensorType": "temperature"
+ "SensorType": "temperature",
+ "MaxValue": 127.0,
+ "MinValue": -128.0
},
"Threshold": {
"CriticalHigh": 35,
@@ -40,7 +42,9 @@
{
"Desc": {
"Name": "i2cool_1",
- "SensorType": "temperature"
+ "SensorType": "temperature",
+ "MaxValue": 127.0,
+ "MinValue": -128.0
},
"Threshold": {
"CriticalHigh": 70,
@@ -78,7 +82,9 @@
{
"Desc": {
"Name": "i2cool_2",
- "SensorType": "temperature"
+ "SensorType": "temperature",
+ "MaxValue": 127.0,
+ "MinValue": -128.0
},
"Threshold": {
"CriticalHigh": 70,
diff --git a/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-virtual-sensor/phosphor-virtual-sensor.service.replace b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-virtual-sensor/phosphor-virtual-sensor.service.replace
index eae38b23d..bffb6d154 100644
--- a/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-virtual-sensor/phosphor-virtual-sensor.service.replace
+++ b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-virtual-sensor/phosphor-virtual-sensor.service.replace
@@ -2,13 +2,12 @@
Description=Virtual sensors
Wants=obmc-mapper.target
After=obmc-mapper.target
+After=mapper-wait@-xyz-openbmc_project-sensors-temperature-inlet.service
+After=mapper-wait@-xyz-openbmc_project-sensors-temperature-outlet_0.service
+After=mapper-wait@-xyz-openbmc_project-sensors-temperature-outlet_1.service
[Service]
-ExecStartPre=mapper wait /xyz/openbmc_project/sensors/temperature/inlet
-ExecStartPre=mapper wait /xyz/openbmc_project/sensors/temperature/outlet_0
-ExecStartPre=mapper wait /xyz/openbmc_project/sensors/temperature/outlet_1
ExecStart=/usr/bin/virtual-sensor
-ExecStartPost=/usr/bin/setMaxMinValue.sh
Type=dbus
BusName=xyz.openbmc_project.VirtualSensor
SyslogIdentifier=phosphor-virtual-sensor
diff --git a/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-virtual-sensor_%.bbappend b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-virtual-sensor_%.bbappend
index 77546694e..d151f2025 100644
--- a/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-virtual-sensor_%.bbappend
+++ b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-virtual-sensor_%.bbappend
@@ -2,15 +2,11 @@ FILESEXTRAPATHS_prepend_gbs := "${THISDIR}/${PN}:"
SRC_URI_append_gbs = " file://config-virtual-sensor.json \
file://phosphor-virtual-sensor.service.replace \
- file://setMaxMinValue.sh \
"
RDEPENDS_${PN}_append_gbs = "bash"
do_install_append_gbs() {
- install -d ${D}${bindir}
- install -m 0755 ${WORKDIR}/setMaxMinValue.sh ${D}${bindir}/
-
install -d ${D}${datadir}/${PN}
install -m 0644 -D ${WORKDIR}/config-virtual-sensor.json \
${D}${datadir}/${PN}/virtual_sensor_config.json
diff --git a/meta-quanta/meta-gbs/recipes-phosphor/watchdog/phosphor-watchdog/0001-Customize-phosphor-watchdog-for-Intel-platforms.patch b/meta-quanta/meta-gbs/recipes-phosphor/watchdog/phosphor-watchdog/0001-Customize-phosphor-watchdog-for-Intel-platforms.patch
deleted file mode 100644
index 22670d3fc..000000000
--- a/meta-quanta/meta-gbs/recipes-phosphor/watchdog/phosphor-watchdog/0001-Customize-phosphor-watchdog-for-Intel-platforms.patch
+++ /dev/null
@@ -1,313 +0,0 @@
-From ac0c216ac2c273c620579fd1308c8c225e0cca36 Mon Sep 17 00:00:00 2001
-From: James Feist <james.feist@linux.intel.com>
-Date: Mon, 17 Jun 2019 12:00:58 -0700
-Subject: [PATCH] Customize phosphor-watchdog for Intel platforms
-
-This patch adds various changes to phosphor-watchdog that are
-required for compatibility with Intel platforms.
-
- 1. Add Redfish messages for watchdog timeout and pre-interrupt
- 2. Use dbus properties for power control insted of service files
- 3. Use host status to enable/disable watchdog
- 4. Set preTimeoutInterruptOccurFlag
-
-Signed-off-by: James Feist <james.feist@linux.intel.com>
-Signed-off-by: Ren Yu <yux.ren@intel.com>
-Signed-off-by: Yong Li <yong.b.li@linux.intel.com>
-Signed-off-by: Jason M. Bills <jason.m.bills@linux.intel.com>
----
- watchdog.cpp | 193 ++++++++++++++++++++++++++++++++++++++++++++++++---
- watchdog.hpp | 23 +++++-
- 2 files changed, 206 insertions(+), 10 deletions(-)
-
-diff --git a/watchdog.cpp b/watchdog.cpp
-index 57e9050..3b5356f 100644
---- a/watchdog.cpp
-+++ b/watchdog.cpp
-@@ -1,11 +1,14 @@
- #include "watchdog.hpp"
-
-+#include <systemd/sd-journal.h>
-+
- #include <algorithm>
- #include <chrono>
- #include <phosphor-logging/elog.hpp>
- #include <phosphor-logging/log.hpp>
- #include <sdbusplus/exception.hpp>
- #include <xyz/openbmc_project/Common/error.hpp>
-+#include <xyz/openbmc_project/State/Host/server.hpp>
-
- namespace phosphor
- {
-@@ -18,10 +21,69 @@ using namespace phosphor::logging;
- using sdbusplus::exception::SdBusError;
- using sdbusplus::xyz::openbmc_project::Common::Error::InternalFailure;
-
--// systemd service to kick start a target.
--constexpr auto SYSTEMD_SERVICE = "org.freedesktop.systemd1";
--constexpr auto SYSTEMD_ROOT = "/org/freedesktop/systemd1";
--constexpr auto SYSTEMD_INTERFACE = "org.freedesktop.systemd1.Manager";
-+const static constexpr char* currentHostState = "CurrentHostState";
-+const static constexpr char* hostStatusOff =
-+ "xyz.openbmc_project.State.Host.HostState.Off";
-+
-+const static constexpr char* actionDescription = " due to Watchdog timeout";
-+const static constexpr char* hardResetDescription = "Hard Reset - System reset";
-+const static constexpr char* powerOffDescription =
-+ "Power Down - System power down";
-+const static constexpr char* powerCycleDescription =
-+ "Power Cycle - System power cycle";
-+const static constexpr char* timerExpiredDescription = "Timer expired";
-+
-+const static constexpr char* preInterruptActionNone =
-+ "xyz.openbmc_project.State.Watchdog.PreTimeoutInterruptAction.None";
-+
-+const static constexpr char* preInterruptDescriptionSMI = "SMI";
-+const static constexpr char* preInterruptDescriptionNMI = "NMI";
-+const static constexpr char* preInterruptDescriptionMI = "Messaging Interrupt";
-+
-+const static constexpr char* reservedDescription = "Reserved";
-+
-+const static constexpr char* timerUseDescriptionBIOSFRB2 = "BIOS FRB2";
-+const static constexpr char* timerUseDescriptionBIOSPOST = "BIOS/POST";
-+const static constexpr char* timerUseDescriptionOSLoad = "OSLoad";
-+const static constexpr char* timerUseDescriptionSMSOS = "SMS/OS";
-+const static constexpr char* timerUseDescriptionOEM = "OEM";
-+
-+namespace restart
-+{
-+static constexpr const char* busName =
-+ "xyz.openbmc_project.Control.Host.RestartCause";
-+static constexpr const char* path =
-+ "/xyz/openbmc_project/control/host0/restart_cause";
-+static constexpr const char* interface =
-+ "xyz.openbmc_project.Control.Host.RestartCause";
-+static constexpr const char* property = "RequestedRestartCause";
-+} // namespace restart
-+
-+// chassis state manager service
-+namespace chassis
-+{
-+static constexpr const char* busName = "xyz.openbmc_project.State.Chassis";
-+static constexpr const char* path = "/xyz/openbmc_project/state/chassis0";
-+static constexpr const char* interface = "xyz.openbmc_project.State.Chassis";
-+static constexpr const char* request = "RequestedPowerTransition";
-+} // namespace chassis
-+
-+void Watchdog::powerStateChangedHandler(
-+ const std::map<std::string, std::variant<std::string>>& props)
-+{
-+ const auto iter = props.find(currentHostState);
-+ if (iter != props.end())
-+ {
-+ const std::string* powerState = std::get_if<std::string>(&iter->second);
-+ if (powerState && (*powerState == hostStatusOff))
-+ {
-+ if (timerEnabled())
-+ {
-+ enabled(false);
-+ }
-+ }
-+ }
-+}
-
- void Watchdog::resetTimeRemaining(bool enableWatchdog)
- {
-@@ -107,13 +169,102 @@ uint64_t Watchdog::interval(uint64_t value)
- // Optional callback function on timer expiration
- void Watchdog::timeOutHandler()
- {
-+ PreTimeoutInterruptAction preTimeoutInterruptAction = preTimeoutInterrupt();
-+ std::string preInterruptActionMessageArgs{};
-+
- Action action = expireAction();
-+ std::string actionMessageArgs{};
-+
-+ expiredTimerUse(currentTimerUse());
-+
-+ TimerUse timeUser = expiredTimerUse();
-+ std::string timeUserMessage{};
-+
- if (!this->enabled())
- {
- action = fallback->action;
- }
-
-- expiredTimerUse(currentTimerUse());
-+ switch (timeUser)
-+ {
-+ case Watchdog::TimerUse::BIOSFRB2:
-+ timeUserMessage = timerUseDescriptionBIOSFRB2;
-+ break;
-+ case Watchdog::TimerUse::BIOSPOST:
-+ timeUserMessage = timerUseDescriptionBIOSPOST;
-+ break;
-+ case Watchdog::TimerUse::OSLoad:
-+ timeUserMessage = timerUseDescriptionOSLoad;
-+ break;
-+ case Watchdog::TimerUse::SMSOS:
-+ timeUserMessage = timerUseDescriptionSMSOS;
-+ break;
-+ case Watchdog::TimerUse::OEM:
-+ timeUserMessage = timerUseDescriptionOEM;
-+ break;
-+ default:
-+ timeUserMessage = reservedDescription;
-+ break;
-+ }
-+
-+ switch (action)
-+ {
-+ case Watchdog::Action::HardReset:
-+ actionMessageArgs = std::string(hardResetDescription) +
-+ std::string(actionDescription);
-+ break;
-+ case Watchdog::Action::PowerOff:
-+ actionMessageArgs = std::string(powerOffDescription) +
-+ std::string(actionDescription);
-+ break;
-+ case Watchdog::Action::PowerCycle:
-+ actionMessageArgs = std::string(powerCycleDescription) +
-+ std::string(actionDescription);
-+ break;
-+ case Watchdog::Action::None:
-+ actionMessageArgs = timerExpiredDescription;
-+ break;
-+ default:
-+ actionMessageArgs = reservedDescription;
-+ break;
-+ }
-+
-+ // Log into redfish event log
-+ sd_journal_send("MESSAGE=IPMIWatchdog: Timed out ACTION=%s",
-+ convertForMessage(action).c_str(), "PRIORITY=%i", LOG_INFO,
-+ "REDFISH_MESSAGE_ID=%s", "OpenBMC.0.1.IPMIWatchdog",
-+ "REDFISH_MESSAGE_ARGS=%s. timer use: %s",
-+ actionMessageArgs.c_str(), timeUserMessage.c_str(), NULL);
-+
-+ switch (preTimeoutInterruptAction)
-+ {
-+ case Watchdog::PreTimeoutInterruptAction::SMI:
-+ preInterruptActionMessageArgs = preInterruptDescriptionSMI;
-+ break;
-+ case Watchdog::PreTimeoutInterruptAction::NMI:
-+ preInterruptActionMessageArgs = preInterruptDescriptionNMI;
-+ break;
-+ case Watchdog::PreTimeoutInterruptAction::MI:
-+ preInterruptActionMessageArgs = preInterruptDescriptionMI;
-+ break;
-+ default:
-+ preInterruptActionMessageArgs = reservedDescription;
-+ break;
-+ }
-+
-+ if (preInterruptActionNone != convertForMessage(preTimeoutInterruptAction))
-+ {
-+ preTimeoutInterruptOccurFlag(true);
-+
-+ sd_journal_send("MESSAGE=IPMIWatchdog: Pre Timed out Interrupt=%s",
-+ convertForMessage(preTimeoutInterruptAction).c_str(),
-+ "PRIORITY=%i", LOG_INFO, "REDFISH_MESSAGE_ID=%s",
-+ "OpenBMC.0.1.IPMIWatchdog",
-+ "REDFISH_MESSAGE_ARGS=Timer interrupt - %s due to "
-+ "Watchdog timeout. timer use: %s",
-+ preInterruptActionMessageArgs.c_str(),
-+ timeUserMessage.c_str(), NULL);
-+ }
-
- auto target = actionTargetMap.find(action);
- if (target == actionTargetMap.end())
-@@ -133,10 +284,11 @@ void Watchdog::timeOutHandler()
-
- try
- {
-- auto method = bus.new_method_call(SYSTEMD_SERVICE, SYSTEMD_ROOT,
-- SYSTEMD_INTERFACE, "StartUnit");
-- method.append(target->second);
-- method.append("replace");
-+ auto method =
-+ bus.new_method_call(chassis::busName, chassis::path,
-+ "org.freedesktop.DBus.Properties", "Set");
-+ method.append(chassis::interface, chassis::request,
-+ std::variant<std::string>(target->second));
-
- bus.call_noreply(method);
- }
-@@ -147,6 +299,29 @@ void Watchdog::timeOutHandler()
- entry("ERROR=%s", e.what()));
- commit<InternalFailure>();
- }
-+
-+ // set restart cause for watchdog HardReset & PowerCycle actions
-+ if ((action == Watchdog::Action::HardReset) ||
-+ (action == Watchdog::Action::PowerCycle))
-+ {
-+ try
-+ {
-+ auto method = bus.new_method_call(
-+ restart::busName, restart::path,
-+ "org.freedesktop.DBus.Properties", "Set");
-+ method.append(
-+ restart::interface, restart::property,
-+ std::variant<std::string>("xyz.openbmc_project.State.Host."
-+ "RestartCause.WatchdogTimer"));
-+ bus.call(method);
-+ }
-+ catch (sdbusplus::exception_t& e)
-+ {
-+ log<level::ERR>("Failed to set HostRestartCause property",
-+ entry("ERROR=%s", e.what()));
-+ commit<InternalFailure>();
-+ }
-+ }
- }
-
- tryFallbackOrDisable();
-diff --git a/watchdog.hpp b/watchdog.hpp
-index 7de9bb3..b004b7a 100644
---- a/watchdog.hpp
-+++ b/watchdog.hpp
-@@ -68,7 +68,18 @@ class Watchdog : public WatchdogInherits
- WatchdogInherits(bus, objPath),
- bus(bus), actionTargetMap(std::move(actionTargetMap)),
- fallback(std::move(fallback)), minInterval(minInterval),
-- timer(event, std::bind(&Watchdog::timeOutHandler, this))
-+ timer(event, std::bind(&Watchdog::timeOutHandler, this)),
-+ powerStateChangedSignal(
-+ bus,
-+ sdbusplus::bus::match::rules::propertiesChanged(
-+ "/xyz/openbmc_project/state/host0",
-+ "xyz.openbmc_project.State.Host"),
-+ [this](sdbusplus::message::message& msg) {
-+ std::string objectName;
-+ std::map<std::string, std::variant<std::string>> props;
-+ msg.read(objectName, props);
-+ powerStateChangedHandler(props);
-+ })
- {
- // We set the watchdog interval with the default value.
- interval(interval());
-@@ -77,6 +88,12 @@ class Watchdog : public WatchdogInherits
- tryFallbackOrDisable();
- }
-
-+ /** @brief Disable watchdog when power status change meet
-+ * the specific requirement
-+ */
-+ void powerStateChangedHandler(
-+ const std::map<std::string, std::variant<std::string>>& props);
-+
- /** @brief Resets the TimeRemaining to the configured Interval
- * Optionally enables the watchdog.
- *
-@@ -165,6 +182,10 @@ class Watchdog : public WatchdogInherits
- /** @brief Contained timer object */
- sdeventplus::utility::Timer<sdeventplus::ClockId::Monotonic> timer;
-
-+ /** @brief Optional Callback handler when power status change meet
-+ * the specific requirement */
-+ sdbusplus::bus::match_t powerStateChangedSignal;
-+
- /** @brief Optional Callback handler on timer expirartion */
- void timeOutHandler();
-
diff --git a/meta-quanta/meta-gbs/recipes-phosphor/watchdog/phosphor-watchdog/obmc/watchdog/host0 b/meta-quanta/meta-gbs/recipes-phosphor/watchdog/phosphor-watchdog/obmc/watchdog/host0
new file mode 100644
index 000000000..27c438d90
--- /dev/null
+++ b/meta-quanta/meta-gbs/recipes-phosphor/watchdog/phosphor-watchdog/obmc/watchdog/host0
@@ -0,0 +1,8 @@
+DEVPATH=/xyz/openbmc_project/watchdog/host0
+SERVICE=xyz.openbmc_project.Watchdog
+UNIT_HARD_RESET=phosphor-host-watchdog-reset.service
+UNIT_POWER_OFF=phosphor-host-watchdog-poweroff.service
+UNIT_POWER_CYCLE=phosphor-host-watchdog-powercycle.service
+FALLBACK_ACTION=xyz.openbmc_project.State.Watchdog.Action.PowerCycle
+FALLBACK_INTERVAL=180000
+MIN_INTERVAL=60000
diff --git a/meta-quanta/meta-gbs/recipes-phosphor/watchdog/phosphor-watchdog/phosphor-host-watchdog-powercycle.service b/meta-quanta/meta-gbs/recipes-phosphor/watchdog/phosphor-watchdog/phosphor-host-watchdog-powercycle.service
new file mode 100644
index 000000000..9b8b0d691
--- /dev/null
+++ b/meta-quanta/meta-gbs/recipes-phosphor/watchdog/phosphor-watchdog/phosphor-host-watchdog-powercycle.service
@@ -0,0 +1,9 @@
+[Unit]
+Description=Power Cycle Host Server
+After=xyz.openbmc_project.Chassis.Control.Power.service
+
+[Service]
+Type=oneshot
+ExecStart=busctl set-property xyz.openbmc_project.State.Chassis /xyz/openbmc_project/state/chassis0 xyz.openbmc_project.State.Chassis RequestedPowerTransition s xyz.openbmc_project.State.Chassis.Transition.PowerCycle
+ExecStart=busctl set-property xyz.openbmc_project.Control.Host.RestartCause /xyz/openbmc_project/control/host0/restart_cause xyz.openbmc_project.Control.Host.RestartCause RequestedRestartCause s xyz.openbmc_project.State.Host.RestartCause.WatchdogTimer
+SyslogIdentifier=phosphor-watchdog
diff --git a/meta-quanta/meta-gbs/recipes-phosphor/watchdog/phosphor-watchdog/phosphor-host-watchdog-poweroff.service b/meta-quanta/meta-gbs/recipes-phosphor/watchdog/phosphor-watchdog/phosphor-host-watchdog-poweroff.service
new file mode 100644
index 000000000..af7e6ef0d
--- /dev/null
+++ b/meta-quanta/meta-gbs/recipes-phosphor/watchdog/phosphor-watchdog/phosphor-host-watchdog-poweroff.service
@@ -0,0 +1,8 @@
+[Unit]
+Description=Shutdown Host Server
+After=xyz.openbmc_project.Chassis.Control.Power.service
+
+[Service]
+Type=oneshot
+ExecStart=busctl set-property xyz.openbmc_project.State.Chassis /xyz/openbmc_project/state/chassis0 xyz.openbmc_project.State.Chassis RequestedPowerTransition s xyz.openbmc_project.State.Chassis.Transition.Off
+SyslogIdentifier=phosphor-watchdog
diff --git a/meta-quanta/meta-gbs/recipes-phosphor/watchdog/phosphor-watchdog/phosphor-host-watchdog-reset.service b/meta-quanta/meta-gbs/recipes-phosphor/watchdog/phosphor-watchdog/phosphor-host-watchdog-reset.service
new file mode 100644
index 000000000..655618b05
--- /dev/null
+++ b/meta-quanta/meta-gbs/recipes-phosphor/watchdog/phosphor-watchdog/phosphor-host-watchdog-reset.service
@@ -0,0 +1,9 @@
+[Unit]
+Description=Reset Host Server
+After=xyz.openbmc_project.Chassis.Control.Power.service
+
+[Service]
+Type=oneshot
+ExecStart=busctl set-property xyz.openbmc_project.State.Host /xyz/openbmc_project/state/host0 xyz.openbmc_project.State.Host RequestedHostTransition s xyz.openbmc_project.State.Host.Transition.ForceWarmReboot
+ExecStart=busctl set-property xyz.openbmc_project.Control.Host.RestartCause /xyz/openbmc_project/control/host0/restart_cause xyz.openbmc_project.Control.Host.RestartCause RequestedRestartCause s xyz.openbmc_project.State.Host.RestartCause.WatchdogTimer
+SyslogIdentifier=phosphor-watchdog
diff --git a/meta-quanta/meta-gbs/recipes-phosphor/watchdog/phosphor-watchdog/phosphor-watchdog.service b/meta-quanta/meta-gbs/recipes-phosphor/watchdog/phosphor-watchdog/phosphor-watchdog.service
deleted file mode 100644
index 5ef1a4179..000000000
--- a/meta-quanta/meta-gbs/recipes-phosphor/watchdog/phosphor-watchdog/phosphor-watchdog.service
+++ /dev/null
@@ -1,16 +0,0 @@
-[Unit]
-Description=Phosphor Watchdog
-
-[Service]
-ExecStart=/usr/bin/env phosphor-watchdog --continue --service=xyz.openbmc_project.Watchdog \
- --path=/xyz/openbmc_project/watchdog/host0 \
- --action_target=xyz.openbmc_project.State.Watchdog.Action.HardReset=xyz.openbmc_project.State.Chassis.Transition.Reset \
- --action_target=xyz.openbmc_project.State.Watchdog.Action.PowerOff=xyz.openbmc_project.State.Chassis.Transition.Off \
- --action_target=xyz.openbmc_project.State.Watchdog.Action.PowerCycle=xyz.openbmc_project.State.Chassis.Transition.PowerCycle
-
-SyslogIdentifier=phosphor-watchdog
-BusName =xyz.openbmc_project.Watchdog
-Type=dbus
-
-[Install]
-WantedBy=basic.target
diff --git a/meta-quanta/meta-gbs/recipes-phosphor/watchdog/phosphor-watchdog/phosphor-watchdog@.service b/meta-quanta/meta-gbs/recipes-phosphor/watchdog/phosphor-watchdog/phosphor-watchdog@.service
new file mode 100644
index 000000000..4577cd1c1
--- /dev/null
+++ b/meta-quanta/meta-gbs/recipes-phosphor/watchdog/phosphor-watchdog/phosphor-watchdog@.service
@@ -0,0 +1,17 @@
+[Unit]
+Description=Phosphor Watchdog
+
+[Service]
+EnvironmentFile={envfiledir}/obmc/watchdog/%I
+ExecStart=/usr/bin/env phosphor-watchdog --service=${{SERVICE}} --path=${{DEVPATH}} \
+ --continue --fallback_always --min_interval=${{MIN_INTERVAL}} \
+ --fallback_action=${{FALLBACK_ACTION}} --fallback_interval=${{FALLBACK_INTERVAL}} \
+ --action_target=xyz.openbmc_project.State.Watchdog.Action.HardReset=${{UNIT_HARD_RESET}} \
+ --action_target=xyz.openbmc_project.State.Watchdog.Action.PowerOff=${{UNIT_POWER_OFF}} \
+ --action_target=xyz.openbmc_project.State.Watchdog.Action.PowerCycle=${{UNIT_POWER_CYCLE}}
+SyslogIdentifier=phosphor-watchdog
+BusName=xyz.openbmc_project.Watchdog
+Type=dbus
+
+[Install]
+WantedBy=basic.target
diff --git a/meta-quanta/meta-gbs/recipes-phosphor/watchdog/phosphor-watchdog_%.bbappend b/meta-quanta/meta-gbs/recipes-phosphor/watchdog/phosphor-watchdog_%.bbappend
index 9c491ecfc..d8b1aa956 100644
--- a/meta-quanta/meta-gbs/recipes-phosphor/watchdog/phosphor-watchdog_%.bbappend
+++ b/meta-quanta/meta-gbs/recipes-phosphor/watchdog/phosphor-watchdog_%.bbappend
@@ -1,7 +1,13 @@
FILESEXTRAPATHS_prepend_gbs := "${THISDIR}/${PN}:"
-SRC_URI_append_gbs = " file://0001-Customize-phosphor-watchdog-for-Intel-platforms.patch"
-
-# Remove the override to keep service running after DC cycle
+SYSTEMD_ENVIRONMENT_FILE_${PN}_append_gbs = " obmc/watchdog/host0"
+OBMC_HOST_WATCHDOG_INSTANCES_A = "host0"
+WATCHDOG_FMT_A = "phosphor-watchdog@{0}.service"
SYSTEMD_OVERRIDE_${PN}_remove_gbs = "poweron.conf:phosphor-watchdog@poweron.service.d/poweron.conf"
-SYSTEMD_SERVICE_${PN}_gbs = "phosphor-watchdog.service"
+SYSTEMD_LINK_${PN}_remove_gbs = "${@compose_list(d, 'ENABLE_WATCHDOG_FMT', 'OBMC_HOST_INSTANCES')}"
+SYSTEMD_LINK_${PN}_remove_gbs = "${@compose_list(d, 'WATCHDOG_FMT', 'OBMC_HOST_WATCHDOG_INSTANCES', 'OBMC_HOST_INSTANCES')}"
+SYSTEMD_SERVICE_${PN}_gbs = " ${@compose_list(d, 'WATCHDOG_FMT_A', 'OBMC_HOST_WATCHDOG_INSTANCES_A')} \
+ phosphor-host-watchdog-reset.service \
+ phosphor-host-watchdog-poweroff.service \
+ phosphor-host-watchdog-powercycle.service \
+ "
diff --git a/meta-quanta/meta-gsj/recipes-gsj/mac-address/files/mac-address.service b/meta-quanta/meta-gsj/recipes-gsj/mac-address/files/mac-address.service
deleted file mode 100644
index e18d69493..000000000
--- a/meta-quanta/meta-gsj/recipes-gsj/mac-address/files/mac-address.service
+++ /dev/null
@@ -1,11 +0,0 @@
-[Unit]
-Description=Initialize MAC Address
-Before=usb_network.service network-pre.target
-Wants=network-pre.target
-
-[Service]
-Type=oneshot
-ExecStart=/usr/bin/mac-address
-
-[Install]
-WantedBy=multi-user.target \ No newline at end of file
diff --git a/meta-quanta/meta-gsj/recipes-gsj/mac-address/mac-address.bb b/meta-quanta/meta-gsj/recipes-gsj/mac-address/mac-address.bb
deleted file mode 100644
index d9fda7ccb..000000000
--- a/meta-quanta/meta-gsj/recipes-gsj/mac-address/mac-address.bb
+++ /dev/null
@@ -1,34 +0,0 @@
-SRC_URI = "git://github.com/quanta-bmc/mac-address.git;protocol=git"
-SRCREV = "${AUTOREV}"
-
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
-
-inherit autotools pkgconfig
-inherit systemd
-
-DEPENDS += "systemd"
-DEPENDS += "autoconf-archive-native"
-
-FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
-SRC_URI_append = " file://mac-address.service"
-SRC_URI_append = " file://config.txt"
-
-FILES_${PN}_append = " ${datadir}/mac-address/config.txt"
-
-HASHSTYLE = "gnu"
-S = "${WORKDIR}/git"
-CXXFLAGS += "-std=c++17"
-
-do_install_append() {
- install -d ${D}${systemd_unitdir}/system/
- install -m 0644 ${WORKDIR}/mac-address.service \
- ${D}${systemd_unitdir}/system
-
- install -d ${D}${datadir}/mac-address
- install -m 0644 -D ${WORKDIR}/config.txt \
- ${D}${datadir}/mac-address/config.txt
-}
-
-SYSTEMD_PACKAGES = "${PN}"
-SYSTEMD_SERVICE_${PN} += "mac-address.service"
diff --git a/meta-quanta/meta-gsj/recipes-phosphor/network/phosphor-network_%.bbappend b/meta-quanta/meta-gsj/recipes-phosphor/network/phosphor-network_%.bbappend
deleted file mode 100644
index 730c62d5f..000000000
--- a/meta-quanta/meta-gsj/recipes-phosphor/network/phosphor-network_%.bbappend
+++ /dev/null
@@ -1 +0,0 @@
-EXTRA_OECONF_gsj += " --disable-link-local-autoconfiguration"
diff --git a/meta-quanta/meta-gsj/recipes-gsj/mac-address/files/config.txt b/meta-quanta/meta-gsj/recipes-quanta/network/mac-address/mac-address/config.txt
index 668b1d485..668b1d485 100644
--- a/meta-quanta/meta-gsj/recipes-gsj/mac-address/files/config.txt
+++ b/meta-quanta/meta-gsj/recipes-quanta/network/mac-address/mac-address/config.txt
diff --git a/meta-quanta/meta-gsj/recipes-quanta/network/mac-address_%.bbappend b/meta-quanta/meta-gsj/recipes-quanta/network/mac-address_%.bbappend
new file mode 100644
index 000000000..a90150b3d
--- /dev/null
+++ b/meta-quanta/meta-gsj/recipes-quanta/network/mac-address_%.bbappend
@@ -0,0 +1,10 @@
+FILESEXTRAPATHS_prepend_gsj := "${THISDIR}/${PN}:"
+SRC_URI_append_gsj = " file://config.txt"
+
+FILES_${PN}_append_gsj = " ${datadir}/mac-address/config.txt"
+
+do_install_append_gsj() {
+ install -d ${D}${datadir}/mac-address
+ install -m 0644 -D ${WORKDIR}/config.txt \
+ ${D}${datadir}/mac-address/config.txt
+}