/** @file\r
*\r
-* Copyright (c) 2011-2014, ARM Limited. All rights reserved.\r
+* Copyright (c) 2011-2015, ARM Limited. All rights reserved.\r
*\r
* This program and the accompanying materials\r
* are licensed and made available under the terms and conditions of the BSD License\r
*\r
**/\r
\r
-#include <Library/TimerLib.h>\r
-\r
#include "Mmc.h"\r
\r
typedef union {\r
return Status;\r
}\r
\r
- // Send CMD1 to get OCR (SD / MMC)\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
Status = MmcHost->ReceiveResponse (MmcHost, MMC_RESPONSE_TYPE_OCR, (UINT32 *)&OcrResponse);\r
else {\r
MmcHostInstance->CardInfo.OCRData.AccessMode = 0x0;\r
}\r
+ // Check whether MMC or eMMC\r
if (OcrResponse.Raw == EMMC_CMD1_CAPACITY_GREATER_THAN_2GB ||\r
OcrResponse.Raw == EMMC_CMD1_CAPACITY_LESS_THAN_2GB) {\r
return EmmcIdentificationMode (MmcHostInstance, OcrResponse);\r
}\r
- } else {\r
- DEBUG ((EFI_D_ERROR, "MmcIdentificationMode(MMC_CMD1) : Failed to send command, Status=%r.\n", Status));\r
- return Status;\r
}\r
\r
// Are we using SDIO ?\r
\r
if (!EFI_ERROR (Status)) {\r
if (!MmcHostInstance->CardInfo.OCRData.PowerUp) {\r
- MicroSecondDelay (1);\r
+ gBS->Stall (1);\r
Timeout--;\r
} else {\r
if ((MmcHostInstance->CardInfo.CardType == SD_CARD_2) && (MmcHostInstance->CardInfo.OCRData.AccessMode & BIT1)) {\r
break; // The MMC/SD card is ready. Continue the Identification Mode\r
}\r
} else {\r
- MicroSecondDelay (1);\r
+ gBS->Stall (1);\r
Timeout--;\r
}\r
}\r