[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