aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHaojian Zhuang <haojian.zhuang@outlook.com>2016-08-05 20:59:37 +0000
committerandroid-build-merger <android-build-merger@google.com>2016-08-05 20:59:37 +0000
commitd6b6b6aa951df9035dc0808365f10e45e8acae28 (patch)
treee81d3bbba4fd99d1c8d1b4239f358c1e09955ba1
parent3f182a680816850d7cbcf0a928725c20d55a7980 (diff)
parent64ce757c93f78f82cc332cc155b61bd2ba9412af (diff)
downloaddevice_linaro_bootloader_OpenPlatformPkg-d6b6b6aa951df9035dc0808365f10e45e8acae28.tar.gz
device_linaro_bootloader_OpenPlatformPkg-d6b6b6aa951df9035dc0808365f10e45e8acae28.tar.bz2
device_linaro_bootloader_OpenPlatformPkg-d6b6b6aa951df9035dc0808365f10e45e8acae28.zip
Merge remote-tracking branch 'aosp/upstream-hikey-aosp' into opp am: dfb07b4751 am: 81c9474998
am: 64ce757c93 Change-Id: Ia0011d2c991d43421612582309fadd2011eb2d3e
-rw-r--r--Drivers/Mmc/DwSdDxe/DwSdDxe.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/Drivers/Mmc/DwSdDxe/DwSdDxe.c b/Drivers/Mmc/DwSdDxe/DwSdDxe.c
index 3eb8b1e..cbe6b77 100644
--- a/Drivers/Mmc/DwSdDxe/DwSdDxe.c
+++ b/Drivers/Mmc/DwSdDxe/DwSdDxe.c
@@ -37,6 +37,8 @@
#define DWSD_DMA_THRESHOLD 16
+#define MAX_IDLE_LOOPS 1000000
+
typedef struct {
UINT32 Des0;
UINT32 Des1;
@@ -165,7 +167,7 @@ DwSdSetClock (
IN UINTN ClockFreq
)
{
- UINT32 Divider, Rate, Data;
+ UINT32 Divider, Rate, Data, Count;
EFI_STATUS Status;
BOOLEAN Found = FALSE;
@@ -180,8 +182,11 @@ DwSdSetClock (
return EFI_NOT_FOUND;
// Wait until MMC is idle
+ Count = 0;
do {
Data = MmioRead32 (DWSD_STATUS);
+ if (Count++ > MAX_IDLE_LOOPS)
+ break;
} while (Data & DWSD_STS_DATA_BUSY);
// Disable MMC clock first
@@ -282,14 +287,17 @@ SendCommand (
IN UINT32 Argument
)
{
- UINT32 Data, ErrMask;
+ UINT32 Data, ErrMask, Count;
MmioWrite32 (DWSD_RINTSTS, ~0);
MmioWrite32 (DWSD_CMDARG, Argument);
MicroSecondDelay(500);
// Wait until MMC is idle
+ Count = 0;
do {
Data = MmioRead32 (DWSD_STATUS);
+ if (Count++ > MAX_IDLE_LOOPS)
+ break;
} while (Data & DWSD_STS_DATA_BUSY);
MmioWrite32 (DWSD_CMD, MmcCmd);