From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) (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 01CA381C94 for ; Wed, 9 Nov 2016 21:11:55 -0800 (PST) Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga105.jf.intel.com with ESMTP; 09 Nov 2016 21:11:59 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.31,617,1473145200"; d="scan'208";a="1057693050" Received: from orsmsx106.amr.corp.intel.com ([10.22.225.133]) by orsmga001.jf.intel.com with ESMTP; 09 Nov 2016 21:11:59 -0800 Received: from orsmsx156.amr.corp.intel.com (10.22.240.22) by ORSMSX106.amr.corp.intel.com (10.22.225.133) with Microsoft SMTP Server (TLS) id 14.3.248.2; Wed, 9 Nov 2016 21:11:59 -0800 Received: from orsmsx113.amr.corp.intel.com ([169.254.9.250]) by ORSMSX156.amr.corp.intel.com ([10.22.240.22]) with mapi id 14.03.0248.002; Wed, 9 Nov 2016 21:11:58 -0800 From: "Mudusuru, Giri P" To: "Mudusuru, Giri P" , "Thomaiyar, Richard Marian" , "edk2-devel@lists.01.org" CC: "Yao, Jiewen" Thread-Topic: [PATCH] IntelFsp2Pkg: Support to return error status from FSP API done Thread-Index: AQHSOaTv01PxRwpuTki6+x6Kooq6p6DPrcuggAGm5jA= Date: Thu, 10 Nov 2016 05:11:57 +0000 Message-ID: <4666AEFED60F8E4198B42BB01DCEABDF76F4022E@ORSMSX113.amr.corp.intel.com> References: <20161108094525.35036-1-richard.marian.thomaiyar@intel.com> <4666AEFED60F8E4198B42BB01DCEABDF76F3CAB9@ORSMSX113.amr.corp.intel.com> In-Reply-To: <4666AEFED60F8E4198B42BB01DCEABDF76F3CAB9@ORSMSX113.amr.corp.intel.com> Accept-Language: en-US, hi-IN X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.22.254.140] 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:11:56 -0000 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Thanks Richard. Can you please add comments in the code to describe it? Oth= er than that it looks good to me. Reviewed-by: Giri P Mudusuru > -----Original Message----- > From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf Of > Mudusuru, Giri P > Sent: Tuesday, November 8, 2016 2:39 PM > To: Thomaiyar, Richard Marian ; edk2- > devel@lists.01.org > Cc: Yao, Jiewen > Subject: Re: [edk2] [PATCH] IntelFsp2Pkg: Support to return error status = from > FSP API done >=20 > Hi Richard, >=20 > In the below snippet the debug message is based on the API status and wil= l not > be display if the switch stack already happened right? Also since it is i= n a do while > loop "cannot proceed further" is not necessarily accurate. >=20 > > - SetFspApiReturnStatus (EFI_SUCCESS); > > - > > - Pei2LoaderSwitchStack(); > > - > > + do { > > + SetFspApiReturnStatus (Status); > > + Pei2LoaderSwitchStack (); > > + if (Status !=3D EFI_SUCCESS) { > > + DEBUG ((DEBUG_ERROR, "!!!ERROR: FspSiliconInitApi() - [Status: 0= x%08X] > - > > Error encountered during previous API and cannot proceed further\n", St= atus)); > > + } > > + } while (Status !=3D EFI_SUCCESS); > Thanks, > -Giri >=20 > > -----Original Message----- > > From: Thomaiyar, Richard Marian > > Sent: Tuesday, November 8, 2016 1:45 AM > > 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 = API > done > > > > 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. > > > > 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(-) > > > > 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 > > ); > > > > +/** > > + This function transfer control back to BootLoader after FspSiliconIn= it. > > + > > + @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 FspSiliconIn= it. > > > > + @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 Er= ror - > > [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: 0= x%08X] > - > > Error encountered during previous API and cannot proceed further\n", St= atus)); > > + } > > + } while (Status !=3D EFI_SUCCESS); > > } > > > > /** > > This function returns control to BootLoader after MemoryInitApi. > > > > - @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, w= ill 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 Err= or > > [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); > > > > // > > // The TempRamExitApi is called > > @@ -185,25 +228,44 @@ FspMemoryInitDone ( > > /** > > This function returns control to BootLoader after TempRamExitApi. > > > > + @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", St= atus)); > > + } > > + } 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 ( > > } > > } > > > > - SetFspApiReturnStatus(Status); > > DEBUG ((DEBUG_INFO | DEBUG_INIT, "NotifyPhaseApi() - End [Status: > > 0x%08X]\n", Status)); > > - > > SetFspMeasurePoint (FSP_PERF_ID_API_NOTIFY_POST_PCI_EXIT + Count); > > > > 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); > > } > > > > // > > @@ -290,3 +356,42 @@ FspWaitForNotify ( > > // > > } > > > > +/** > > + This function transfer control back to BootLoader after FspSiliconIn= it. > > + > > +**/ > > +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 >=20 > _______________________________________________ > edk2-devel mailing list > edk2-devel@lists.01.org > https://lists.01.org/mailman/listinfo/edk2-devel