On 8/22/2018 6:25 PM, Leif Lindholm wrote:
(Commenting on the v3 patch since I know it supersedes the v2 patch.)
On Thu, Aug 16, 2018 at 08:12:10PM +0800, Ming Huang wrote:
This patch is relative to D06 SasDxe driver. The SasDxe set a variable to notice this libray. Here Wait for all disk ready for 15S at most.
D06: For using straight-through hard disk backboard, some disk need 15 seconds to ready. Actually, wait less 15 seconds here(minus the time from end of SAS driver to here). For using expander backboard, wait less 6 seconds here(minus the time from end of SAS driver to here).
D03/D05: As Sas driver don't install PLATFORM_SAS_NOTIFY Protocol, D03/D05 will skip waiting here.
Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Ming Huang ming.huang@linaro.org
Silicon/Hisilicon/HisiPkg.dec | 1 + Silicon/Hisilicon/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf | 3 ++ Silicon/Hisilicon/Include/Protocol/PlatformSasNotify.h | 27 ++++++++++++++ Silicon/Hisilicon/Library/PlatformBootManagerLib/PlatformBm.c | 37 ++++++++++++++++++++ 4 files changed, 68 insertions(+)
diff --git a/Silicon/Hisilicon/HisiPkg.dec b/Silicon/Hisilicon/HisiPkg.dec index 35bea970ec..0595790df8 100644 --- a/Silicon/Hisilicon/HisiPkg.dec +++ b/Silicon/Hisilicon/HisiPkg.dec @@ -39,6 +39,7 @@ gPlatformSasProtocolGuid = {0x40e9829f, 0x3a2c, 0x479a, {0x9a, 0x93, 0x45, 0x7d, 0x13, 0x50, 0x96, 0x5d}} gHisiPlatformSasProtocolGuid = {0x20e9829f, 0x3a2c, 0x479a, {0x9a, 0x93, 0x45, 0x7d, 0x13, 0x50, 0x96, 0x6d}} gHisiSnpPlatformProtocolGuid = {0x81321f27, 0xff58, 0x4a1d, {0x99, 0x97, 0xd, 0xcc, 0xfa, 0x82, 0xf4, 0x6f}}
- gPlatformSasNotifyProtocolGuid = {0xac62b9a5, 0x9939, 0x41d3, {0xff, 0x5c, 0xc5, 0x80, 0x32, 0x7d, 0x9b, 0x29}}
Ideally, I would like to see a new package declaration file added in edk2-non-osi/Silicon/Hisilicon. Maybe HisiliconNonOsi.dec. And this guid added there.
[Guids] gHisiTokenSpaceGuid = {0xc8bc553e, 0x12bf, 0x11e6, {0x97, 0x4f, 0x87, 0xf7, 0x7c, 0xfd, 0x52, 0x1d}} diff --git a/Silicon/Hisilicon/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf b/Silicon/Hisilicon/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf index 7a53befc44..96a46da8c5 100644 --- a/Silicon/Hisilicon/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf +++ b/Silicon/Hisilicon/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf @@ -49,6 +49,7 @@ MemoryAllocationLib PcdLib PrintLib
- TimerLib UefiBootManagerLib UefiBootServicesTableLib UefiLib
@@ -67,8 +68,10 @@ [Guids] gEfiEndOfDxeEventGroupGuid gEfiTtyTermGuid
- gOemConfigGuid
[Protocols] gEfiGenericMemTestProtocolGuid gEfiLoadedImageProtocolGuid gEsrtManagementProtocolGuid
- gPlatformSasNotifyProtocolGuid
diff --git a/Silicon/Hisilicon/Include/Protocol/PlatformSasNotify.h b/Silicon/Hisilicon/Include/Protocol/PlatformSasNotify.h new file mode 100644 index 0000000000..54fd30fc68 --- /dev/null +++ b/Silicon/Hisilicon/Include/Protocol/PlatformSasNotify.h
And similarly, this file added under edk2-non-osi/Silicon/Hisilicon/Include/Protocol.
Other than that, I am happy with this patch.
(Yes, I know we have not enforced this in the past, but it is way cleaner and makes API-updates a single patch in a single repository.)
OK, do it in v4. Thanks.
/ Leif
@@ -0,0 +1,27 @@ +/** @file +* +* Copyright (c) 2018, Hisilicon Limited. All rights reserved. +* Copyright (c) 2018, Linaro Limited. All rights reserved. +* +* This program and the accompanying materials +* are licensed and made available under the terms and conditions of the BSD License +* which accompanies this distribution. The full text of the license may be found at +* http://opensource.org/licenses/bsd-license.php +* +* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +* +**/
+#ifndef _PLATFORM_SAS_NOTIFY_H_ +#define _PLATFORM_SAS_NOTIFY_H_
+typedef struct _PLATFORM_SAS_NOTIFY PLATFORM_SAS_NOTIFY;
+struct _PLATFORM_SAS_NOTIFY {
- EFI_EVENT WaitDiskEvent;
+};
+extern EFI_GUID gPlatformSasNotifyProtocolGuid;
+#endif diff --git a/Silicon/Hisilicon/Library/PlatformBootManagerLib/PlatformBm.c b/Silicon/Hisilicon/Library/PlatformBootManagerLib/PlatformBm.c index 7dd5ba615c..eaa6ce78d0 100644 --- a/Silicon/Hisilicon/Library/PlatformBootManagerLib/PlatformBm.c +++ b/Silicon/Hisilicon/Library/PlatformBootManagerLib/PlatformBm.c @@ -20,6 +20,7 @@ #include <Library/BmcConfigBootLib.h> #include <Library/DevicePathLib.h> #include <Library/PcdLib.h> +#include <Library/TimerLib.h> #include <Library/UefiBootManagerLib.h> #include <Library/UefiLib.h> #include <Protocol/DevicePath.h> @@ -29,6 +30,7 @@ #include <Protocol/LoadedImage.h> #include <Protocol/PciIo.h> #include <Protocol/PciRootBridgeIo.h> +#include <Protocol/PlatformSasNotify.h> #include <Guid/EventGroup.h> #include <Guid/TtyTerm.h> @@ -554,6 +556,40 @@ PlatformBootManagerBeforeConsole ( PlatformRegisterOptionsAndKeys (); } +STATIC +VOID +WaitForDiskReady (
- VOID
- )
+{
- EFI_STATUS Status;
- UINT32 Index;
- PLATFORM_SAS_NOTIFY *SasNotify;
- Status = gBS->LocateProtocol (
&gPlatformSasNotifyProtocolGuid,
NULL,
(VOID **)&SasNotify);
- if (EFI_ERROR (Status)) {
- DEBUG ((DEBUG_INFO, "Locate SasPlatformNotify:%r\n", Status));
- return;
- }
- // Wait for 30 seconds at most.
- for (Index = 0; Index < 30; Index++) {
- Status = gBS->CheckEvent (SasNotify->WaitDiskEvent);
- if (!EFI_ERROR (Status)) {
DEBUG ((DEBUG_INFO, "WaitDiskEvent is signaled.\n"));
EfiBootManagerConnectAll ();
break;
- }
- DEBUG ((DEBUG_ERROR, "%a", Index == 0 ? "Wait for disk." : "."));
- MicroSecondDelay (1000 * 1000);
- }
- return;
+}
/** Do the platform specific action after the console is ready Possible things that can be done in PlatformBootManagerAfterConsole: @@ -583,6 +619,7 @@ PlatformBootManagerAfterConsole ( // Connect the rest of the devices. // EfiBootManagerConnectAll ();
- WaitForDiskReady ();
// // Enumerate all possible boot options. -- 2.17.0