[edk2-devel] [edk2-platforms Patch 1/5] Vlv2TbltDevicePkg/PlatformPei: Add boot mode detection
Sun, Zailiang
zailiang.sun at intel.com
Fri Jul 19 03:18:34 UTC 2019
Reviewed-By: Zailiang Sun <zailiang.sun at intel.com>
> -----Original Message-----
> From: devel at edk2.groups.io [mailto:devel at edk2.groups.io] On Behalf Of
> Michael D Kinney
> Sent: Friday, July 19, 2019 7:00 AM
> To: devel at edk2.groups.io
> Cc: Sun, Zailiang <zailiang.sun at intel.com>; Qian, Yi <yi.qian at intel.com>;
> Gary Lin <glin at suse.com>
> Subject: [edk2-devel] [edk2-platforms Patch 1/5]
> Vlv2TbltDevicePkg/PlatformPei: Add boot mode detection
>
> 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>
> ---
> .../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 (#43997): https://edk2.groups.io/g/devel/message/43997
Mute This Topic: https://groups.io/mt/32520521/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