From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 192.55.52.151, mailfrom: zailiang.sun@intel.com) Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by groups.io with SMTP; Thu, 18 Jul 2019 20:18:37 -0700 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga107.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 18 Jul 2019 20:18:37 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.64,280,1559545200"; d="scan'208";a="343571794" Received: from fmsmsx107.amr.corp.intel.com ([10.18.124.205]) by orsmga005.jf.intel.com with ESMTP; 18 Jul 2019 20:18:36 -0700 Received: from fmsmsx120.amr.corp.intel.com (10.18.124.208) by fmsmsx107.amr.corp.intel.com (10.18.124.205) with Microsoft SMTP Server (TLS) id 14.3.439.0; Thu, 18 Jul 2019 20:18:36 -0700 Received: from shsmsx103.ccr.corp.intel.com (10.239.4.69) by fmsmsx120.amr.corp.intel.com (10.18.124.208) with Microsoft SMTP Server (TLS) id 14.3.439.0; Thu, 18 Jul 2019 20:18:36 -0700 Received: from shsmsx104.ccr.corp.intel.com ([169.254.5.110]) by SHSMSX103.ccr.corp.intel.com ([169.254.4.109]) with mapi id 14.03.0439.000; Fri, 19 Jul 2019 11:18:34 +0800 From: "Sun, Zailiang" To: "devel@edk2.groups.io" , "Kinney, Michael D" CC: "Qian, Yi" , Gary Lin Subject: Re: [edk2-devel] [edk2-platforms Patch 1/5] Vlv2TbltDevicePkg/PlatformPei: Add boot mode detection Thread-Topic: [edk2-devel] [edk2-platforms Patch 1/5] Vlv2TbltDevicePkg/PlatformPei: Add boot mode detection Thread-Index: AQHVPbyYyQI8Ma+MJkiVrkvPig755abRRcNQ Date: Fri, 19 Jul 2019 03:18:34 +0000 Message-ID: <7CB7EF03E15B5D48981329A508747A9850C98283@SHSMSX104.ccr.corp.intel.com> References: <20190718230017.14852-1-michael.d.kinney@intel.com> <20190718230017.14852-2-michael.d.kinney@intel.com> In-Reply-To: <20190718230017.14852-2-michael.d.kinney@intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Return-Path: zailiang.sun@intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Reviewed-By: Zailiang Sun > -----Original Message----- > From: devel@edk2.groups.io [mailto:devel@edk2.groups.io] On Behalf Of > Michael D Kinney > Sent: Friday, July 19, 2019 7:00 AM > To: devel@edk2.groups.io > Cc: Sun, Zailiang ; Qian, Yi = ; > Gary Lin > Subject: [edk2-devel] [edk2-platforms Patch 1/5] > Vlv2TbltDevicePkg/PlatformPei: Add boot mode detection >=20 > Add boot mode detection back into PlatformPei that was inadvertently > removed in the following commit: >=20 > https://github.com/tianocore/edk2- > platforms/commit/d6211390793fbd0a89b14001c43e0ef942c85425 >=20 > 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. >=20 > Cc: Zailiang Sun > Cc: Yi Qian > Cc: Gary Lin > Signed-off-by: Michael D Kinney > --- > .../Vlv2TbltDevicePkg/PlatformPei/BootMode.c | 92 > ++++++++++++++++++- .../Vlv2TbltDevicePkg/PlatformPei/Platform.c | 6 > ++ .../Vlv2TbltDevicePkg/PlatformPei/Platform.h | 17 ++++ > 3 files changed, 114 insertions(+), 1 deletion(-) >=20 > 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 =3D=3D EFI_SUCCESS) { > if (Capsule->CheckCapsuleUpdate ((EFI_PEI_SERVICES**)PeiServices)= =3D=3D > EFI_SUCCESS) { > BootMode =3D 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 =3D (*PeiServices)->SetBootMode((const EFI_PEI_SERVICES > **)PeiServices, BootMode); > ASSERT_EFI_ERROR (Status); > } > @@ -92,6 +92,96 @@ CapsulePpiNotifyCallback ( > return Status; > } >=20 > +EFI_STATUS > +UpdateBootMode ( > + IN CONST EFI_PEI_SERVICES **PeiServices > + ) > +{ > + EFI_STATUS Status; > + EFI_BOOT_MODE BootMode; > + UINT16 SleepType; > + CHAR16 *strBootMode; > + > + Status =3D (*PeiServices)->GetBootMode(PeiServices, &BootMode); > + ASSERT_EFI_ERROR (Status); if (BootMode =3D=3D > BOOT_IN_RECOVERY_MODE){ > + return Status; > + } > + > + // > + // Let's assume things are OK if not told otherwise // BootMode =3D > + BOOT_WITH_FULL_CONFIGURATION; > + > + if (GetSleepTypeAfterWakeup (PeiServices, &SleepType)) { > + switch (SleepType) { > + case V_PCH_ACPI_PM1_CNT_S3: > + BootMode =3D BOOT_ON_S3_RESUME; > + Status =3D (*PeiServices)->NotifyPpi (PeiServices, > &mCapsuleNotifyList[0]); > + ASSERT_EFI_ERROR (Status); > + break; > + > + case V_PCH_ACPI_PM1_CNT_S4: > + BootMode =3D BOOT_ON_S4_RESUME; > + break; > + > + case V_PCH_ACPI_PM1_CNT_S5: > + BootMode =3D 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 =3D L"BOOT_WITH_FULL_CONFIGURATION"; > + break; > + case BOOT_WITH_MINIMAL_CONFIGURATION: > + strBootMode =3D L"BOOT_WITH_MINIMAL_CONFIGURATION"; > + break; > + case BOOT_ASSUMING_NO_CONFIGURATION_CHANGES: > + strBootMode =3D L"BOOT_ASSUMING_NO_CONFIGURATION_CHANGES"; > + break; > + case BOOT_WITH_FULL_CONFIGURATION_PLUS_DIAGNOSTICS: > + strBootMode =3D > L"BOOT_WITH_FULL_CONFIGURATION_PLUS_DIAGNOSTICS"; > + break; > + case BOOT_WITH_DEFAULT_SETTINGS: > + strBootMode =3D L"BOOT_WITH_DEFAULT_SETTINGS"; > + break; > + case BOOT_ON_S4_RESUME: > + strBootMode =3D L"BOOT_ON_S4_RESUME"; > + break; > + case BOOT_ON_S5_RESUME: > + strBootMode =3D L"BOOT_ON_S5_RESUME"; > + break; > + case BOOT_ON_S2_RESUME: > + strBootMode =3D L"BOOT_ON_S2_RESUME"; > + break; > + case BOOT_ON_S3_RESUME: > + strBootMode =3D L"BOOT_ON_S3_RESUME"; > + > + break; > + case BOOT_ON_FLASH_UPDATE: > + strBootMode =3D L"BOOT_ON_FLASH_UPDATE"; > + break; > + case BOOT_IN_RECOVERY_MODE: > + strBootMode =3D L"BOOT_IN_RECOVERY_MODE"; > + break; > + default: > + strBootMode =3D L"Unknown boot mode"; } // switch (BootMode) > + > + DEBUG ((DEBUG_ERROR, "Setting BootMode to %s\n", strBootMode)); > + Status =3D (*PeiServices)->SetBootMode(PeiServices, BootMode); > + ASSERT_EFI_ERROR (Status); > + > + return Status; > +} > + > /** > Get sleep type after wakeup >=20 > 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) > ); >=20 > + // > + // Set the new boot mode for MRC > + // > + Status =3D UpdateBootMode (PeiServices); ASSERT_EFI_ERROR (Status); > + > DEBUG((EFI_D_INFO, "Setup MMIO size ... \n\n")); >=20 > // > 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 { >=20 > #define STALL_PEIM_FROM_THIS(a) CR (a, > STALL_CALLBACK_STATE_INFORMATION, StallNotify, > STALL_PEIM_SIGNATURE) >=20 > +/** > + 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 >=20 >=20 >=20