summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Kosenkov <NKosenkov@IBS.RU>2022-06-22 18:15:53 +0300
committerNikita Kosenkov <NKosenkov@IBS.RU>2022-06-22 18:15:53 +0300
commite60eec485d293211c989bbb04c5040982a3b5452 (patch)
treea806c8129f152d378b0b9982541bf81ecd094302
parenta7393b43c0a599265db31f8adbf7ced72466a7b5 (diff)
downloadopenbmc-e60eec485d293211c989bbb04c5040982a3b5452.tar.xz
x86-power-control: add patch for support host boot progress
-rw-r--r--meta-ibs/meta-cp2-5422/recipes-x86/chassis/x86-power-control/0001-support-host-boot-progress.patch178
-rw-r--r--meta-ibs/meta-cp2-5422/recipes-x86/chassis/x86-power-control/0002-x86-power-control-added-check-BMC-restart-cause.patch (renamed from meta-ibs/meta-cp2-5422/recipes-x86/chassis/x86-power-control/0001-x86-power-control-added-check-BMC-restart-cause.patch)0
-rw-r--r--meta-ibs/meta-cp2-5422/recipes-x86/chassis/x86-power-control_%.bbappend3
3 files changed, 180 insertions, 1 deletions
diff --git a/meta-ibs/meta-cp2-5422/recipes-x86/chassis/x86-power-control/0001-support-host-boot-progress.patch b/meta-ibs/meta-cp2-5422/recipes-x86/chassis/x86-power-control/0001-support-host-boot-progress.patch
new file mode 100644
index 0000000000..45b7bb22f6
--- /dev/null
+++ b/meta-ibs/meta-cp2-5422/recipes-x86/chassis/x86-power-control/0001-support-host-boot-progress.patch
@@ -0,0 +1,178 @@
+From d574c73bd458cbe2cf5fb85dbfced45e458d9cf0 Mon Sep 17 00:00:00 2001
+From: Joseph Liu <kwliu@nuvoton.com>
+Date: Mon, 11 Jan 2021 18:24:09 +0800
+Subject: [PATCH] support host boot progress
+
+Signed-off-by: Joseph Liu <kwliu@nuvoton.com>
+Signed-off-by: Nikita Kosenkov <NKosenkov@IBS.RU>
+---
+ src/power_control.cpp | 99 ++++++++++++++++++++++++++++++++++++++++++-
+ 1 file changed, 97 insertions(+), 2 deletions(-)
+
+diff --git a/src/power_control.cpp b/src/power_control.cpp
+index 05aa45c..0371aa9 100644
+--- a/src/power_control.cpp
++++ b/src/power_control.cpp
+@@ -110,6 +110,7 @@ static std::string buttonDbusName = "xyz.openbmc_project.Chassis.Buttons";
+ static std::string nmiDbusName = "xyz.openbmc_project.Control.Host.NMI";
+ static std::string rstCauseDbusName =
+ "xyz.openbmc_project.Control.Host.RestartCause";
++static std::shared_ptr<sdbusplus::asio::dbus_interface> bootIface;
+ static std::shared_ptr<sdbusplus::asio::dbus_interface> hostIface;
+ static std::shared_ptr<sdbusplus::asio::dbus_interface> chassisIface;
+ #ifdef CHASSIS_SYSTEM_RESET
+@@ -238,6 +239,16 @@ static void setOperatingSystemState(const OperatingSystemStateStage stage)
+ getOperatingSystemStateStage(stage));
+ }
+
++enum class BootProgressStage
++{
++ Unspecified,
++ MemoryInit,
++ SecondaryProcInit,
++ PCIInit,
++ OSStart,
++ MotherboardInit,
++};
++
+ enum class PowerState
+ {
+ on,
+@@ -485,6 +496,40 @@ static uint64_t getCurrentTimeMs()
+ return currentTimeMs;
+ }
+
++static constexpr std::string_view getBootProgressStage(const BootProgressStage stage)
++{
++ switch (stage)
++ {
++ case BootProgressStage::MemoryInit:
++ return "xyz.openbmc_project.State.Boot.Progress.ProgressStages.MemoryInit";
++ break;
++ case BootProgressStage::SecondaryProcInit:
++ return "xyz.openbmc_project.State.Boot.Progress.ProgressStages.SecondaryProcInit";
++ break;
++ case BootProgressStage::PCIInit:
++ return "xyz.openbmc_project.State.Boot.Progress.ProgressStages.PCIInit";
++ break;
++ case BootProgressStage::OSStart:
++ return "xyz.openbmc_project.State.Boot.Progress.ProgressStages.OSStart";
++ break;
++ case BootProgressStage::MotherboardInit:
++ return "xyz.openbmc_project.State.Boot.Progress.ProgressStages.MotherboardInit";
++ break;
++ case BootProgressStage::Unspecified:
++ default:
++ return "xyz.openbmc_project.State.Boot.Progress.ProgressStages.Unspecified";
++ break;
++ }
++};
++static void setBootProgress(const BootProgressStage stage)
++{
++ bootIface->set_property("BootProgress",
++ std::string(getBootProgressStage(stage)));
++ //std::cerr << "Moving boot progress to \""
++ // << std::string(getBootProgressStage(stage)) << "\" stage.\n";
++}
++
++
+ static constexpr std::string_view getHostState(const PowerState state)
+ {
+ switch (state)
+@@ -1558,6 +1603,11 @@ static void currentHostStateMonitor()
+ else
+ {
+ pohCounterTimer.cancel();
++
++ // If HostState is trurned to OFF, Set 'OperatingSystemState' to 'Inactive'
++ osIface->set_property("OperatingSystemState", std::string("Inactive"));
++ setBootProgress(BootProgressStage::Unspecified);
++
+ // Set the restart cause set for this restart
+ setRestartCause();
+ }
+@@ -1621,6 +1671,8 @@ static void currentHostStateMonitor()
+ // if HostState is trurned to OFF.
+ setOperatingSystemState(OperatingSystemStateStage::Inactive);
+
++ setBootProgress(BootProgressStage::Unspecified);
++
+ // Set the restart cause set for this restart
+ setRestartCause();
+ #ifdef USE_ACBOOT
+@@ -2238,11 +2290,13 @@ static void postCompleteHandler(bool state)
+ {
+ sendPowerControlEvent(Event::postCompleteAssert);
+ setOperatingSystemState(OperatingSystemStateStage::Standby);
++ setBootProgress(BootProgressStage::OSStart);
+ }
+ else
+ {
+ sendPowerControlEvent(Event::postCompleteDeAssert);
+ setOperatingSystemState(OperatingSystemStateStage::Inactive);
++ setBootProgress(BootProgressStage::Unspecified);
+ }
+ }
+
+@@ -2784,6 +2838,47 @@ int main(int argc, char* argv[])
+ lg2::info("Initializing power state.");
+ logStateTransition(powerState);
+
++ // Boot Progress Service
++ sdbusplus::asio::object_server bootServer =
++ sdbusplus::asio::object_server(power_control::conn);
++
++ // Boot Progress Interface
++ power_control::bootIface = bootServer.add_interface(
++ "/xyz/openbmc_project/state/host0", "xyz.openbmc_project.State.Boot.Progress");
++
++ std::string bootProgress = power_control::postCompleteLine.get_value() > 0
++ ? "xyz.openbmc_project.State.Boot.Progress.ProgressStages.Unspecified"
++ : "xyz.openbmc_project.State.Boot.Progress.ProgressStages.OSStart";
++
++
++ power_control::bootIface->register_property(
++ "BootProgress",
++ bootProgress,
++ [](const std::string& requested, std::string& resp) {
++ if (requested == "xyz.openbmc_project.State.Boot.Progress.ProgressStages.MemoryInit")
++ {
++ }
++ else if (requested == "xyz.openbmc_project.State.Boot.Progress.ProgressStages.SecondaryProcInit")
++ {
++ }
++ else if (requested == "xyz.openbmc_project.State.Boot.Progress.ProgressStages.PCIInit")
++ {
++ }
++ else if (requested == "xyz.openbmc_project.State.Boot.Progress.ProgressStages.OSStart")
++ {
++ }
++ else if (requested == "xyz.openbmc_project.State.Boot.Progress.ProgressStages.MotherboardInit")
++ {
++ }
++ else
++ {
++ }
++ resp = requested;
++ return 1;
++ });
++
++ power_control::bootIface->initialize();
++
+ // Power Control Service
+ sdbusplus::asio::object_server hostServer =
+ sdbusplus::asio::object_server(conn);
+@@ -3260,8 +3355,8 @@ int main(int argc, char* argv[])
+ sdbusplus::asio::object_server(conn);
+
+ // OS State Interface
+- osIface = osServer.add_interface(
+- "/xyz/openbmc_project/state/os",
++ power_control::osIface = osServer.add_interface(
++ "/xyz/openbmc_project/state/host0",
+ "xyz.openbmc_project.State.OperatingSystem.Status");
+
+ // Get the initial OS state based on POST complete
+--
+2.35.1
+
diff --git a/meta-ibs/meta-cp2-5422/recipes-x86/chassis/x86-power-control/0001-x86-power-control-added-check-BMC-restart-cause.patch b/meta-ibs/meta-cp2-5422/recipes-x86/chassis/x86-power-control/0002-x86-power-control-added-check-BMC-restart-cause.patch
index 33fee916b2..33fee916b2 100644
--- a/meta-ibs/meta-cp2-5422/recipes-x86/chassis/x86-power-control/0001-x86-power-control-added-check-BMC-restart-cause.patch
+++ b/meta-ibs/meta-cp2-5422/recipes-x86/chassis/x86-power-control/0002-x86-power-control-added-check-BMC-restart-cause.patch
diff --git a/meta-ibs/meta-cp2-5422/recipes-x86/chassis/x86-power-control_%.bbappend b/meta-ibs/meta-cp2-5422/recipes-x86/chassis/x86-power-control_%.bbappend
index 2024d33987..68c3a20729 100644
--- a/meta-ibs/meta-cp2-5422/recipes-x86/chassis/x86-power-control_%.bbappend
+++ b/meta-ibs/meta-cp2-5422/recipes-x86/chassis/x86-power-control_%.bbappend
@@ -1,7 +1,8 @@
FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
SRC_URI:append = " \
file://power-config-host0.json \
- file://0001-x86-power-control-added-check-BMC-restart-cause.patch \
+ file://0001-support-host-boot-progress.patch \
+ file://0002-x86-power-control-added-check-BMC-restart-cause.patch \
"
RDEPENDS:${PN}:append = " bash"