\r
// Send CMD1 to get OCR (MMC)\r
// This command only valid for MMC and eMMC\r
- Status = MmcHost->SendCommand (MmcHost, MMC_CMD1, EMMC_CMD1_CAPACITY_GREATER_THAN_2GB);\r
- if (Status == EFI_SUCCESS) {\r
+ Timeout = MAX_RETRY_COUNT;\r
+ do {\r
+ Status = MmcHost->SendCommand (MmcHost, MMC_CMD1, EMMC_CMD1_CAPACITY_GREATER_THAN_2GB);\r
+ if (EFI_ERROR (Status))\r
+ break;\r
Status = MmcHost->ReceiveResponse (MmcHost, MMC_RESPONSE_TYPE_OCR, (UINT32 *)&OcrResponse);\r
if (EFI_ERROR (Status)) {\r
DEBUG ((EFI_D_ERROR, "MmcIdentificationMode() : Failed to receive OCR, Status=%r.\n", Status));\r
return Status;\r
}\r
-\r
+ Timeout--;\r
+ } while (!OcrResponse.Ocr.PowerUp && (Timeout > 0));\r
+ if (Status == EFI_SUCCESS) {\r
if (!OcrResponse.Ocr.PowerUp) {\r
DEBUG ((EFI_D_ERROR, "MmcIdentificationMode(MMC_CMD1): Card initialisation failure, Status=%r.\n", Status));\r
return EFI_DEVICE_ERROR;\r