diff options
author | Nikita Kosenkov <NKosenkov@IBS.RU> | 2022-06-22 18:15:53 +0300 |
---|---|---|
committer | Nikita Kosenkov <NKosenkov@IBS.RU> | 2022-06-22 18:15:53 +0300 |
commit | e60eec485d293211c989bbb04c5040982a3b5452 (patch) | |
tree | a806c8129f152d378b0b9982541bf81ecd094302 | |
parent | a7393b43c0a599265db31f8adbf7ced72466a7b5 (diff) | |
download | openbmc-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.patch | 178 | ||||
-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_%.bbappend | 3 |
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" |