From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 1261F81CEA for ; Wed, 9 Nov 2016 21:23:00 -0800 (PST) Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orsmga104.jf.intel.com with ESMTP; 09 Nov 2016 21:23:03 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.31,617,1473145200"; d="scan'208";a="1066503768" Received: from fmsmsx105.amr.corp.intel.com ([10.18.124.203]) by fmsmga001.fm.intel.com with ESMTP; 09 Nov 2016 21:23:03 -0800 Received: from fmsmsx101.amr.corp.intel.com (10.18.124.199) by FMSMSX105.amr.corp.intel.com (10.18.124.203) with Microsoft SMTP Server (TLS) id 14.3.248.2; Wed, 9 Nov 2016 21:23:03 -0800 Received: from shsmsx104.ccr.corp.intel.com (10.239.4.70) by fmsmsx101.amr.corp.intel.com (10.18.124.199) with Microsoft SMTP Server (TLS) id 14.3.248.2; Wed, 9 Nov 2016 21:23:02 -0800 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.239]) by SHSMSX104.ccr.corp.intel.com ([169.254.5.142]) with mapi id 14.03.0248.002; Thu, 10 Nov 2016 13:23:00 +0800 From: "Yao, Jiewen" To: "Thomaiyar, Richard Marian" , "edk2-devel@lists.01.org" Thread-Topic: [PATCH] IntelFsp2Pkg: Support to return error status from FSP API done Thread-Index: AQHSOaTxBDUPn/Tz9E+XqAvYk2n9QaDRsZEw Date: Thu, 10 Nov 2016 05:23:00 +0000 Message-ID: <74D8A39837DF1E4DA445A8C0B3885C50386CDE54@shsmsx102.ccr.corp.intel.com> References: <20161108094525.35036-1-richard.marian.thomaiyar@intel.com> In-Reply-To: <20161108094525.35036-1-richard.marian.thomaiyar@intel.com> Accept-Language: zh-CN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [PATCH] IntelFsp2Pkg: Support to return error status from FSP API done X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 10 Nov 2016 05:23:00 -0000 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Reivewed-by: jiewen.yao@intel.com > -----Original Message----- > From: Thomaiyar, Richard Marian > Sent: Tuesday, November 8, 2016 5:45 PM > To: edk2-devel@lists.01.org > Cc: Ma, Maurice ; Yao, Jiewen > ; Mudusuru, Giri P ; > Thomaiyar, Richard Marian > Subject: [PATCH] IntelFsp2Pkg: Support to return error status from FSP AP= I > done >=20 > Added FspMemoryInitDone2, FspTempRamExitDone2, FspSiliconInitDone2 > to return error status to Boot Loader for FSP API calls. > To maintain backward compatibility existing functions > (FspMemoryInitDone, FspTempRamExitDone, FspSiliconInitDone) > declaration left untouched. >=20 > Cc: Maurice Ma > Cc: Jiewen Yao > Cc: Giri P Mudusuru > Contributed-under: TianoCore Contribution Agreement 1.0 > Signed-off-by: Richard Thomaiyar > --- > IntelFsp2Pkg/Include/Library/FspPlatformLib.h | 35 +++++ > .../Library/BaseFspPlatformLib/FspPlatformNotify.c | 151 > +++++++++++++++++---- > 2 files changed, 163 insertions(+), 23 deletions(-) >=20 > diff --git a/IntelFsp2Pkg/Include/Library/FspPlatformLib.h > b/IntelFsp2Pkg/Include/Library/FspPlatformLib.h > index 61e77bd..1f39601 100644 > --- a/IntelFsp2Pkg/Include/Library/FspPlatformLib.h > +++ b/IntelFsp2Pkg/Include/Library/FspPlatformLib.h > @@ -93,4 +93,39 @@ FspWaitForNotify ( > VOID > ); >=20 > +/** > + This function transfer control back to BootLoader after FspSiliconInit= . > + > + @param[in] Status return status for the FspSiliconInit. > +**/ > +VOID > +EFIAPI > +FspSiliconInitDone2 ( > + IN EFI_STATUS Status > + ); > + > +/** > + This function returns control to BootLoader after MemoryInitApi. > + > + @param[in] Status return status for the MemoryInitApi. > + @param[in,out] HobListPtr The address of HobList pointer. > +**/ > +VOID > +EFIAPI > +FspMemoryInitDone2 ( > + IN EFI_STATUS Status, > + IN OUT VOID **HobListPtr > + ); > + > +/** > + This function returns control to BootLoader after TempRamExitApi. > + > + @param[in] Status return status for the TempRamExitApi. > +**/ > +VOID > +EFIAPI > +FspTempRamExitDone2 ( > + IN EFI_STATUS Status > + ); > + > #endif > diff --git a/IntelFsp2Pkg/Library/BaseFspPlatformLib/FspPlatformNotify.c > b/IntelFsp2Pkg/Library/BaseFspPlatformLib/FspPlatformNotify.c > index 755e84f..ac1fc1a 100644 > --- a/IntelFsp2Pkg/Library/BaseFspPlatformLib/FspPlatformNotify.c > +++ b/IntelFsp2Pkg/Library/BaseFspPlatformLib/FspPlatformNotify.c > @@ -108,35 +108,56 @@ FspNotificationHandler ( > /** > This function transfer control back to BootLoader after FspSiliconInit= . >=20 > + @param[in] Status return status for the FspSiliconInit. > + > **/ > VOID > EFIAPI > -FspSiliconInitDone ( > - VOID > +FspSiliconInitDone2 ( > + IN EFI_STATUS Status > ) > { > // > + // Convert to FSP EAS defined API return codes > + // > + switch (Status) { > + case EFI_SUCCESS: > + case EFI_INVALID_PARAMETER: > + case EFI_UNSUPPORTED: > + case EFI_DEVICE_ERROR: > + break; > + default: > + DEBUG ((DEBUG_INFO | DEBUG_INIT, "FspSiliconInitApi() Invalid > Error - [Status: 0x%08X]\n", Status)); > + Status =3D EFI_DEVICE_ERROR; // Force to known error. > + break; > + } > + // > // This is the end of the FspSiliconInit API > // Give control back to the boot loader > // > SetFspMeasurePoint (FSP_PERF_ID_API_FSP_SILICON_INIT_EXIT); > - DEBUG ((DEBUG_INFO | DEBUG_INIT, "FspSiliconInitApi() - End\n")); > + DEBUG ((DEBUG_INFO | DEBUG_INIT, "FspSiliconInitApi() - [Status: > 0x%08X] - End\n", Status)); > PERF_END_EX (&gFspPerformanceDataGuid, "EventRec", NULL, 0, > FSP_STATUS_CODE_SILICON_INIT | FSP_STATUS_CODE_COMMON_CODE | > FSP_STATUS_CODE_API_EXIT); > REPORT_STATUS_CODE (EFI_PROGRESS_CODE, > FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT); > - SetFspApiReturnStatus (EFI_SUCCESS); > - > - Pei2LoaderSwitchStack(); > - > + do { > + SetFspApiReturnStatus (Status); > + Pei2LoaderSwitchStack (); > + if (Status !=3D EFI_SUCCESS) { > + DEBUG ((DEBUG_ERROR, "!!!ERROR: FspSiliconInitApi() - [Status: > 0x%08X] - Error encountered during previous API and cannot proceed > further\n", Status)); > + } > + } while (Status !=3D EFI_SUCCESS); > } >=20 > /** > This function returns control to BootLoader after MemoryInitApi. >=20 > - @param[in,out] HobListPtr The address of HobList pointer. > + @param[in] Status return status for the MemoryInitApi. > + @param[in,out] HobListPtr The address of HobList pointer, if NULL, wil= l > get value from GetFspApiParameter2 () > **/ > VOID > EFIAPI > -FspMemoryInitDone ( > +FspMemoryInitDone2 ( > + IN EFI_STATUS Status, > IN OUT VOID **HobListPtr > ) > { > @@ -145,15 +166,32 @@ FspMemoryInitDone ( > // Calling use FspMemoryInit API > // Update HOB and return the control directly > // > + if (HobListPtr =3D=3D NULL) { > + HobListPtr =3D (VOID **)GetFspApiParameter2 (); > + } > if (HobListPtr !=3D NULL) { > *HobListPtr =3D (VOID *) GetHobList (); > } > - > + // > + // Convert to FSP EAS defined API return codes > + // > + switch (Status) { > + case EFI_SUCCESS: > + case EFI_INVALID_PARAMETER: > + case EFI_UNSUPPORTED: > + case EFI_DEVICE_ERROR: > + case EFI_OUT_OF_RESOURCES: > + break; > + default: > + DEBUG ((DEBUG_INFO | DEBUG_INIT, "FspMemoryInitApi() Invalid > Error [Status: 0x%08X]\n", Status)); > + Status =3D EFI_DEVICE_ERROR; // Force to known error. > + break; > + } > // > // This is the end of the FspMemoryInit API > // Give control back to the boot loader > // > - DEBUG ((DEBUG_INFO | DEBUG_INIT, "FspMemoryInitApi() - End\n")); > + DEBUG ((DEBUG_INFO | DEBUG_INIT, "FspMemoryInitApi() - [Status: > 0x%08X] - End\n", Status)); > SetFspMeasurePoint (FSP_PERF_ID_API_FSP_MEMORY_INIT_EXIT); > FspData =3D GetFspGlobalDataPointer (); > PERF_START_EX(&gFspPerformanceDataGuid, "EventRec", NULL, > (FspData->PerfData[0] & FSP_PERFORMANCE_DATA_TIMER_MASK), > FSP_STATUS_CODE_TEMP_RAM_INIT | > FSP_STATUS_CODE_COMMON_CODE| FSP_STATUS_CODE_API_ENTRY); > @@ -161,8 +199,13 @@ FspMemoryInitDone ( > PERF_START_EX(&gFspPerformanceDataGuid, "EventRec", NULL, > (FspData->PerfData[2] & FSP_PERFORMANCE_DATA_TIMER_MASK), > FSP_STATUS_CODE_MEMORY_INIT | FSP_STATUS_CODE_COMMON_CODE | > FSP_STATUS_CODE_API_ENTRY); > PERF_END_EX(&gFspPerformanceDataGuid, "EventRec", NULL, 0, > FSP_STATUS_CODE_MEMORY_INIT | FSP_STATUS_CODE_COMMON_CODE | > FSP_STATUS_CODE_API_EXIT); > REPORT_STATUS_CODE (EFI_PROGRESS_CODE, > FSP_STATUS_CODE_MEMORY_INIT | FSP_STATUS_CODE_COMMON_CODE | > FSP_STATUS_CODE_API_EXIT); > - SetFspApiReturnStatus (EFI_SUCCESS); > - Pei2LoaderSwitchStack (); > + do { > + SetFspApiReturnStatus (Status); > + Pei2LoaderSwitchStack (); > + if (Status !=3D EFI_SUCCESS) { > + DEBUG ((DEBUG_ERROR, "!!!ERROR: FspMemoryInitApi() - [Status: > 0x%08X] - Error encountered during previous API and cannot proceed > further\n", Status)); > + } > + } while (Status !=3D EFI_SUCCESS); >=20 > // > // The TempRamExitApi is called > @@ -185,25 +228,44 @@ FspMemoryInitDone ( > /** > This function returns control to BootLoader after TempRamExitApi. >=20 > + @param[in] Status return status for the TempRamExitApi. > + > **/ > VOID > EFIAPI > -FspTempRamExitDone ( > - VOID > +FspTempRamExitDone2 ( > + IN EFI_STATUS Status > ) > { > - > + // > + // Convert to FSP EAS defined API return codes > + // > + switch (Status) { > + case EFI_SUCCESS: > + case EFI_INVALID_PARAMETER: > + case EFI_UNSUPPORTED: > + case EFI_DEVICE_ERROR: > + break; > + default: > + DEBUG ((DEBUG_INFO | DEBUG_INIT, "TempRamExitApi() Invalid > Error - [Status: 0x%08X]\n", Status)); > + Status =3D EFI_DEVICE_ERROR; // Force to known error. > + break; > + } > // > // This is the end of the TempRamExit API > // Give control back to the boot loader > // > - DEBUG ((DEBUG_INFO | DEBUG_INIT, "TempRamExitApi() - End\n")); > + DEBUG ((DEBUG_INFO | DEBUG_INIT, "TempRamExitApi() - [Status: > 0x%08X] - End\n", Status)); > SetFspMeasurePoint (FSP_PERF_ID_API_TEMP_RAM_EXIT_EXIT); > PERF_END_EX(&gFspPerformanceDataGuid, "EventRec", NULL, 0, > FSP_STATUS_CODE_TEMP_RAM_EXIT | > FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT); > REPORT_STATUS_CODE (EFI_PROGRESS_CODE, > FSP_STATUS_CODE_TEMP_RAM_EXIT | > FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT); > - SetFspApiReturnStatus (EFI_SUCCESS); > - Pei2LoaderSwitchStack (); > - > + do { > + SetFspApiReturnStatus (Status); > + Pei2LoaderSwitchStack (); > + if (Status !=3D EFI_SUCCESS) { > + DEBUG ((DEBUG_ERROR, "!!!ERROR: TempRamExitApi() - [Status: > 0x%08X] - Error encountered during previous API and cannot proceed > further\n", Status)); > + } > + } while (Status !=3D EFI_SUCCESS); > SetPhaseStatusCode (FSP_STATUS_CODE_SILICON_INIT); > SetFspMeasurePoint (FSP_PERF_ID_API_FSP_SILICON_INIT_ENTRY); > PERF_START_EX(&gFspPerformanceDataGuid, "EventRec", NULL, 0, > FSP_STATUS_CODE_SILICON_INIT | FSP_STATUS_CODE_COMMON_CODE | > FSP_STATUS_CODE_API_ENTRY); > @@ -266,9 +328,7 @@ FspWaitForNotify ( > } > } >=20 > - SetFspApiReturnStatus(Status); > DEBUG ((DEBUG_INFO | DEBUG_INIT, "NotifyPhaseApi() - End > [Status: 0x%08X]\n", Status)); > - > SetFspMeasurePoint (FSP_PERF_ID_API_NOTIFY_POST_PCI_EXIT + > Count); >=20 > if ((NotificationCount - 1) =3D=3D 0) { > @@ -281,7 +341,13 @@ FspWaitForNotify ( > PERF_END_EX(&gFspPerformanceDataGuid, "EventRec", NULL, 0, > FSP_STATUS_CODE_END_OF_FIRMWARE_NOTIFICATION | > FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT); > REPORT_STATUS_CODE (EFI_PROGRESS_CODE, > FSP_STATUS_CODE_END_OF_FIRMWARE_NOTIFICATION | > FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT); > } > - Pei2LoaderSwitchStack(); > + do { > + SetFspApiReturnStatus(Status); > + Pei2LoaderSwitchStack(); > + if (Status !=3D EFI_SUCCESS) { > + DEBUG ((DEBUG_ERROR, "!!!ERROR: NotifyPhaseApi() > [Phase: %08X] - Failed - [Status: 0x%08X]\n", NotificationValue, Status))= ; > + } > + } while (Status !=3D EFI_SUCCESS); > } >=20 > // > @@ -290,3 +356,42 @@ FspWaitForNotify ( > // > } >=20 > +/** > + This function transfer control back to BootLoader after FspSiliconInit= . > + > +**/ > +VOID > +EFIAPI > +FspSiliconInitDone ( > + VOID > + ) > +{ > + FspSiliconInitDone2 (EFI_SUCCESS); > +} > + > +/** > + This function returns control to BootLoader after MemoryInitApi. > + > + @param[in,out] HobListPtr The address of HobList pointer. > +**/ > +VOID > +EFIAPI > +FspMemoryInitDone ( > + IN OUT VOID **HobListPtr > + ) > +{ > + FspMemoryInitDone2 (EFI_SUCCESS, HobListPtr); > +} > + > +/** > + This function returns control to BootLoader after TempRamExitApi. > + > +**/ > +VOID > +EFIAPI > +FspTempRamExitDone ( > + VOID > + ) > +{ > + FspTempRamExitDone2 (EFI_SUCCESS); > +} > -- > 2.9.0.windows.1