[edk2-devel] [edk2-platforms Patch V2 1/5] Vlv2TbltDevicePkg/PlatformPei: Add boot mode detection

Michael D Kinney michael.d.kinney at intel.com
Fri Jul 19 06:02:43 UTC 2019


Add boot mode detection back into PlatformPei that was
inadvertently removed in the following commit:

https://github.com/tianocore/edk2-platforms/commit/d6211390793fbd0a89b14001c43e0ef942c85425

Boot mode detection at this point is required to detect
the boot mode of BOOT_ON_FLASH_UPDATE that is required
to detect, coalesce, and process UEFI Capsules.

Cc: Zailiang Sun <zailiang.sun at intel.com>
Cc: Yi Qian <yi.qian at intel.com>
Cc: Gary Lin <glin at suse.com>
Signed-off-by: Michael D Kinney <michael.d.kinney at intel.com>
Reviewed-by: Zailiang Sun <zailiang.sun at intel.com>
---
 .../Vlv2TbltDevicePkg/PlatformPei/BootMode.c  | 92 ++++++++++++++++++-
 .../Vlv2TbltDevicePkg/PlatformPei/Platform.c  |  6 ++
 .../Vlv2TbltDevicePkg/PlatformPei/Platform.h  | 17 ++++
 3 files changed, 114 insertions(+), 1 deletion(-)

diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/BootMode.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/BootMode.c
index 5269b1ed39..4c0e660b7f 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/BootMode.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/BootMode.c
@@ -82,7 +82,7 @@ CapsulePpiNotifyCallback (
     if (Status == EFI_SUCCESS) {
       if (Capsule->CheckCapsuleUpdate ((EFI_PEI_SERVICES**)PeiServices) == EFI_SUCCESS) {
         BootMode = BOOT_ON_FLASH_UPDATE;
-        DEBUG ((EFI_D_ERROR, "Setting BootMode to BOOT_ON_FLASH_UPDATE\n"));
+        DEBUG ((DEBUG_ERROR, "Setting BootMode to BOOT_ON_FLASH_UPDATE\n"));
         Status = (*PeiServices)->SetBootMode((const EFI_PEI_SERVICES **)PeiServices, BootMode);
         ASSERT_EFI_ERROR (Status);
       }
@@ -92,6 +92,96 @@ CapsulePpiNotifyCallback (
   return Status;
 }
 
+EFI_STATUS
+UpdateBootMode (
+  IN CONST EFI_PEI_SERVICES     **PeiServices
+  )
+{
+  EFI_STATUS      Status;
+  EFI_BOOT_MODE   BootMode;
+  UINT16          SleepType;
+  CHAR16          *strBootMode;
+
+  Status = (*PeiServices)->GetBootMode(PeiServices, &BootMode);
+  ASSERT_EFI_ERROR (Status);
+  if (BootMode  == BOOT_IN_RECOVERY_MODE){
+    return Status;
+  }
+
+  //
+  // Let's assume things are OK if not told otherwise
+  //
+  BootMode = BOOT_WITH_FULL_CONFIGURATION;
+
+  if (GetSleepTypeAfterWakeup (PeiServices, &SleepType)) {
+    switch (SleepType) {
+      case V_PCH_ACPI_PM1_CNT_S3:
+        BootMode = BOOT_ON_S3_RESUME;
+        Status = (*PeiServices)->NotifyPpi (PeiServices, &mCapsuleNotifyList[0]);
+        ASSERT_EFI_ERROR (Status);
+        break;
+
+      case V_PCH_ACPI_PM1_CNT_S4:
+        BootMode = BOOT_ON_S4_RESUME;
+        break;
+
+      case V_PCH_ACPI_PM1_CNT_S5:
+        BootMode = BOOT_ON_S5_RESUME;
+        break;
+    } // switch (SleepType)
+  }
+
+  if (IsFastBootEnabled (PeiServices)) {
+    DEBUG ((DEBUG_INFO, "Prioritizing Boot mode to BOOT_WITH_MINIMAL_CONFIGURATION\n"));
+    PrioritizeBootMode (&BootMode, BOOT_WITH_MINIMAL_CONFIGURATION);
+  }
+
+  switch (BootMode) {
+    case BOOT_WITH_FULL_CONFIGURATION:
+      strBootMode = L"BOOT_WITH_FULL_CONFIGURATION";
+      break;
+    case BOOT_WITH_MINIMAL_CONFIGURATION:
+      strBootMode = L"BOOT_WITH_MINIMAL_CONFIGURATION";
+      break;
+    case BOOT_ASSUMING_NO_CONFIGURATION_CHANGES:
+      strBootMode = L"BOOT_ASSUMING_NO_CONFIGURATION_CHANGES";
+      break;
+    case BOOT_WITH_FULL_CONFIGURATION_PLUS_DIAGNOSTICS:
+      strBootMode = L"BOOT_WITH_FULL_CONFIGURATION_PLUS_DIAGNOSTICS";
+      break;
+    case BOOT_WITH_DEFAULT_SETTINGS:
+      strBootMode = L"BOOT_WITH_DEFAULT_SETTINGS";
+      break;
+    case BOOT_ON_S4_RESUME:
+      strBootMode = L"BOOT_ON_S4_RESUME";
+      break;
+    case BOOT_ON_S5_RESUME:
+      strBootMode = L"BOOT_ON_S5_RESUME";
+      break;
+    case BOOT_ON_S2_RESUME:
+      strBootMode = L"BOOT_ON_S2_RESUME";
+      break;
+    case BOOT_ON_S3_RESUME:
+      strBootMode = L"BOOT_ON_S3_RESUME";
+
+      break;
+    case BOOT_ON_FLASH_UPDATE:
+      strBootMode = L"BOOT_ON_FLASH_UPDATE";
+      break;
+    case BOOT_IN_RECOVERY_MODE:
+      strBootMode = L"BOOT_IN_RECOVERY_MODE";
+      break;
+    default:
+      strBootMode = L"Unknown boot mode";
+  } // switch (BootMode)
+
+  DEBUG ((DEBUG_ERROR, "Setting BootMode to %s\n", strBootMode));
+  Status = (*PeiServices)->SetBootMode(PeiServices, BootMode);
+  ASSERT_EFI_ERROR (Status);
+
+  return Status;
+}
+
 /**
   Get sleep type after wakeup
 
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/Platform.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/Platform.c
index 90998871dc..1b23bc9740 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/Platform.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/Platform.c
@@ -813,6 +813,12 @@ PeiInitPlatform (
     sizeof (EFI_PLATFORM_INFO_HOB)
     );
 
+  //
+  // Set the new boot mode for MRC
+  //
+  Status = UpdateBootMode (PeiServices);
+  ASSERT_EFI_ERROR (Status);
+
   DEBUG((EFI_D_INFO, "Setup MMIO size ... \n\n"));
 
   //
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/Platform.h b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/Platform.h
index 4f71e519e0..e2e07dc446 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/Platform.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/Platform.h
@@ -21,6 +21,23 @@ typedef struct {
 
 #define STALL_PEIM_FROM_THIS(a) CR (a, STALL_CALLBACK_STATE_INFORMATION, StallNotify, STALL_PEIM_SIGNATURE)
 
+/**
+  Peform the boot mode determination logic
+  If the box is closed, then
+  1. If it's first time to boot, it's boot with full config .
+  2. If the ChassisIntrution is selected, force to be a boot with full config
+  3. Otherwise it's boot with no change.
+
+  @param  PeiServices General purpose services available to every PEIM.
+  @param  BootMode The detected boot mode.
+
+  @retval EFI_SUCCESS if the boot mode could be set
+**/
+EFI_STATUS
+UpdateBootMode (
+  IN CONST EFI_PEI_SERVICES     **PeiServices
+  );
+
 /**
   This function reset the entire platform, including all processor and devices, and
   reboots the system.
-- 
2.21.0.windows.1


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#44006): https://edk2.groups.io/g/devel/message/44006
Mute This Topic: https://groups.io/mt/32523931/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-




More information about the edk2-devel-archive mailing list