From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=134.134.136.24; helo=mga09.intel.com; envelope-from=ruiyu.ni@intel.com; receiver=edk2-devel@lists.01.org Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) (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 6B42321A07A82 for ; Tue, 18 Sep 2018 02:39:50 -0700 (PDT) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga002.jf.intel.com ([10.7.209.21]) by orsmga102.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 18 Sep 2018 02:39:49 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.53,389,1531810800"; d="scan'208";a="92710554" Received: from ray-dev.ccr.corp.intel.com (HELO [10.239.9.8]) ([10.239.9.8]) by orsmga002.jf.intel.com with ESMTP; 18 Sep 2018 02:39:28 -0700 To: Ming Huang , linaro-uefi@lists.linaro.org, edk2-devel@lists.01.org, star.zeng@intel.com, eric.dong@intel.com Cc: huangming23@huawei.com, zhangjinsong2@huawei.com, liming.gao@intel.com, michael.d.kinney@intel.com, waip23@126.com, wanghuiqiang@huawei.com, huangdaode@hisilicon.com References: <20180915063656.6250-1-ming.huang@linaro.org> <20180915063656.6250-2-ming.huang@linaro.org> From: "Ni, Ruiyu" Message-ID: Date: Tue, 18 Sep 2018 17:40:21 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 MIME-Version: 1.0 In-Reply-To: <20180915063656.6250-2-ming.huang@linaro.org> Subject: Re: [RFC MdeModulePkg/UefiBootManagerLib v1 1/1] MdeModulePkg/UefiBootManagerLib: Fix raid card repair fail issue X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 18 Sep 2018 09:39:50 -0000 Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit On 9/15/2018 2:36 PM, Ming Huang wrote: > When some type raid cards is not healthy, such as Broadcom 3108/3508 > raid card, board will enter endless loop in BmRepairAllControllers() > and can't show configuration formset which need to repair raid card. > > DriverHealthManagerDxe is added to platform dsc/fdf, driver health > manager menu can show drivers which are not healthy, but raid card > can not be repaired by the menus under Device Manager. This modification > of BmRepairAllControllers() can show configuration formset for repair > when booting an option. I developed that driver and the driver health related code in BDS library. But I a bit forgot the details. Can you explain why the driver health manager driver cannot handle such case? > > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Ming Huang > --- > MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf | 2 + > MdeModulePkg/Library/UefiBootManagerLib/BmDriverHealth.c | 48 +++++++++++++++++++- > 2 files changed, 49 insertions(+), 1 deletion(-) > > diff --git a/MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf b/MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf > index 228b91033695..b9f96c763ff6 100644 > --- a/MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf > +++ b/MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf > @@ -89,6 +89,8 @@ [Guids] > gEfiDiskInfoIdeInterfaceGuid ## SOMETIMES_CONSUMES ## GUID > gEfiDiskInfoScsiInterfaceGuid ## SOMETIMES_CONSUMES ## GUID > gEfiDiskInfoSdMmcInterfaceGuid ## SOMETIMES_CONSUMES ## GUID > + gEfiHiiDriverHealthFormsetGuid > + gEfiHiiPlatformSetupFormsetGuid > > [Protocols] > gEfiPciRootBridgeIoProtocolGuid ## CONSUMES > diff --git a/MdeModulePkg/Library/UefiBootManagerLib/BmDriverHealth.c b/MdeModulePkg/Library/UefiBootManagerLib/BmDriverHealth.c > index ecd01bbb81e3..fd47651ec937 100644 > --- a/MdeModulePkg/Library/UefiBootManagerLib/BmDriverHealth.c > +++ b/MdeModulePkg/Library/UefiBootManagerLib/BmDriverHealth.c > @@ -421,6 +421,47 @@ EfiBootManagerFreeDriverHealthInfo ( > return gBS->FreePool (DriverHealthInfo); > } > > +STATIC > +VOID > +ShowConfigureForm ( > + EFI_FORM_BROWSER2_PROTOCOL *FormBrowser2, > + EFI_BOOT_MANAGER_DRIVER_HEALTH_INFO *DriverHealthInfo > + ) > +{ > + EFI_STATUS Status; > + EFI_HII_HANDLE FormHiiHandle; > + EFI_DRIVER_HEALTH_STATUS HealthStatus; > + > + if (DriverHealthInfo != NULL) { > + Status = DriverHealthInfo->DriverHealth->GetHealthStatus ( > + DriverHealthInfo->DriverHealth, > + DriverHealthInfo->ControllerHandle, > + DriverHealthInfo->ChildHandle, > + &HealthStatus, > + NULL, > + &FormHiiHandle > + ); > + if (!EFI_ERROR (Status) && > + (HealthStatus == EfiDriverHealthStatusConfigurationRequired) && > + (FormHiiHandle != NULL)) { > + Status = FormBrowser2->SendForm ( > + FormBrowser2, > + &FormHiiHandle, > + 1, > + &gEfiHiiPlatformSetupFormsetGuid, > + 0, > + NULL, > + NULL > + ); > + if (EFI_ERROR (Status)) { > + Print (L"Show configurae menu:%r\n", Status); > + } > + } > + } > + > + return; > +} > + > /** > Repair all the controllers according to the Driver Health status queried. > > @@ -434,6 +475,7 @@ BmRepairAllControllers ( > { > EFI_STATUS Status; > EFI_BOOT_MANAGER_DRIVER_HEALTH_INFO *DriverHealthInfo; > + EFI_BOOT_MANAGER_DRIVER_HEALTH_INFO *InfoConfigurationRequired; > EFI_DRIVER_HEALTH_STATUS HealthStatus; > UINTN Count; > UINTN Index; > @@ -462,6 +504,7 @@ BmRepairAllControllers ( > do { > RepairRequired = FALSE; > ConfigurationRequired = FALSE; > + InfoConfigurationRequired = NULL; > > // > // Deal with Repair Required > @@ -470,6 +513,7 @@ BmRepairAllControllers ( > for (Index = 0; Index < Count; Index++) { > if (DriverHealthInfo[Index].HealthStatus == EfiDriverHealthStatusConfigurationRequired) { > ConfigurationRequired = TRUE; > + InfoConfigurationRequired = &DriverHealthInfo[Index]; > } > > if (DriverHealthInfo[Index].HealthStatus == EfiDriverHealthStatusRepairRequired) { > @@ -494,6 +538,7 @@ BmRepairAllControllers ( > ); > if (!EFI_ERROR (Status) && (HealthStatus == EfiDriverHealthStatusConfigurationRequired)) { > ConfigurationRequired = TRUE; > + InfoConfigurationRequired = &DriverHealthInfo[Index]; > } > } > } > @@ -507,12 +552,13 @@ BmRepairAllControllers ( > FormBrowser2, > &HiiHandles[Index], > 1, > - PcdGetPtr (PcdDriverHealthConfigureForm), > + &gEfiHiiDriverHealthFormsetGuid, > 0, > NULL, > NULL > ); > if (!EFI_ERROR (Status)) { > + ShowConfigureForm (FormBrowser2, InfoConfigurationRequired); > break; > } > } > -- Thanks, Ray