From: "Ni, Ruiyu" <ruiyu.ni@Intel.com>
To: Ming Huang <ming.huang@linaro.org>,
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
Subject: Re: [RFC MdeModulePkg/UefiBootManagerLib v1 1/1] MdeModulePkg/UefiBootManagerLib: Fix raid card repair fail issue
Date: Tue, 18 Sep 2018 17:40:21 +0800 [thread overview]
Message-ID: <e6400256-8c2c-0c47-5360-176f3b4d53d3@Intel.com> (raw)
In-Reply-To: <20180915063656.6250-2-ming.huang@linaro.org>
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 <ming.huang@linaro.org>
> ---
> 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
next prev parent reply other threads:[~2018-09-18 9:39 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-09-15 6:36 [RFC MdeModulePkg/UefiBootManagerLib v1 0/1] Fix raid card repair fail issue Ming Huang
2018-09-15 6:36 ` [RFC MdeModulePkg/UefiBootManagerLib v1 1/1] MdeModulePkg/UefiBootManagerLib: " Ming Huang
2018-09-18 9:40 ` Ni, Ruiyu [this message]
2018-09-19 2:10 ` Ming Huang
2018-09-26 5:00 ` Ni, Ruiyu
2018-09-28 6:18 ` Ming Huang
2018-10-08 6:39 ` Ni, Ruiyu
2018-10-08 12:15 ` Laszlo Ersek
-- strict thread matches above, loose matches on Subject: below --
2018-09-15 6:33 [RFC MdeModulePkg/UefiBootManagerLib v1 0/1] " Ming Huang
2018-09-15 6:33 ` [RFC MdeModulePkg/UefiBootManagerLib v1 1/1] MdeModulePkg/UefiBootManagerLib: " Ming Huang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=e6400256-8c2c-0c47-5360-176f3b4d53d3@Intel.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox