diff --git a/BootloaderCommonPkg/Library/UfsBlockIoLib/UfsBlockIoLib.c b/BootloaderCommonPkg/Library/UfsBlockIoLib/UfsBlockIoLib.c index 215ebbc5..8cc651cd 100644 --- a/BootloaderCommonPkg/Library/UfsBlockIoLib/UfsBlockIoLib.c +++ b/BootloaderCommonPkg/Library/UfsBlockIoLib/UfsBlockIoLib.c @@ -1293,8 +1293,8 @@ UfsFinishDeviceInitialization ( ) { EFI_STATUS Status; - UINT8 DeviceInitStatus; - UINT8 Timeout; + UINT8 DeviceInitStatus; + UINT32 Timeout; DeviceInitStatus = 0xFF; @@ -1306,7 +1306,7 @@ UfsFinishDeviceInitialization ( return Status; } - Timeout = 5; + Timeout = UFS_INIT_COMPLETION_TIMEOUT; do { Status = UfsReadFlag (Private, UfsFlagDevInit, &DeviceInitStatus); if (EFI_ERROR (Status)) { @@ -1316,7 +1316,13 @@ UfsFinishDeviceInitialization ( Timeout--; } while (DeviceInitStatus != 0 && Timeout != 0); - return EFI_SUCCESS; + if (Timeout == 0) { + DEBUG ((DEBUG_ERROR, "%a: DeviceInitStatus = %x EFI_TIMEOUT \n", __func__, DeviceInitStatus)); + return EFI_TIMEOUT; + } else { + DEBUG ((DEBUG_INFO, "%a: Timeout left = %x EFI_SUCCESS \n", __func__, Timeout)); + return EFI_SUCCESS; + } } /** @@ -1496,6 +1502,9 @@ InitializeUfs ( continue; } + // + // Check the UFS device is initialized completed. + // Status = UfsFinishDeviceInitialization (Private); if (EFI_ERROR (Status)) { DEBUG ((DEBUG_ERROR, "Device failed to finish initialization, Status = %r\n", Status));