Reviewed-by: Zailiang Sun <zailiang....@intel.com> > -----Original Message----- > From: Kinney, Michael D > Sent: Tuesday, July 23, 2019 6:59 AM > To: devel@edk2.groups.io > Cc: Sun, Zailiang <zailiang....@intel.com>; Qian, Yi <yi.q...@intel.com>; > Gary Lin <g...@suse.com> > Subject: [edk2-platforms Patch V3 01/12] 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....@intel.com> > Cc: Yi Qian <yi.q...@intel.com> > Cc: Gary Lin <g...@suse.com> > Signed-off-by: Michael D Kinney <michael.d.kin...@intel.com> > Reviewed-by: Zailiang Sun <zailiang....@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 (#44184): https://edk2.groups.io/g/devel/message/44184 Mute This Topic: https://groups.io/mt/32564731/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-