diff mbox series

[U-Boot,v2,11/11] mmc: retry a few times if a partition switch failed

Message ID 20190702085358.27368-12-jjhiblot@ti.com
State Accepted
Commit 0538477c53237230c36b78cfe5fa26aed81c9d87
Delegated to: Peng Fan
Headers show
Series Improvements on the MMC switch | expand

Commit Message

Jean-Jacques Hiblot July 2, 2019, 8:53 a.m. UTC
This operation may fail. Retry it a few times before giving up and report
a failure.

Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>

---

Changes in v2: None

 drivers/mmc/mmc.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)
diff mbox series

Patch

diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c
index 709733747a..cec39a9acf 100644
--- a/drivers/mmc/mmc.c
+++ b/drivers/mmc/mmc.c
@@ -958,10 +958,14 @@  static int mmc_set_capacity(struct mmc *mmc, int part_num)
 int mmc_switch_part(struct mmc *mmc, unsigned int part_num)
 {
 	int ret;
+	int retry = 3;
 
-	ret = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_PART_CONF,
-			 (mmc->part_config & ~PART_ACCESS_MASK)
-			 | (part_num & PART_ACCESS_MASK));
+	do {
+		ret = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
+				 EXT_CSD_PART_CONF,
+				 (mmc->part_config & ~PART_ACCESS_MASK)
+				 | (part_num & PART_ACCESS_MASK));
+	} while (ret && retry--);
 
 	/*
 	 * Set the capacity if the switch succeeded or was intended