summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorYousong Zhou <yszhou4tech@gmail.com>2015-08-29 13:26:11 (GMT)
committerHans de Goede <hdegoede@redhat.com>2015-08-31 06:43:42 (GMT)
commit28f69b9a229108834af34da099949076d9fd4ff3 (patch)
tree74d06914180309cde6026b9f77b20237986fab5a /drivers
parent92369844ec7bf0e63de51e19b281fe3739e01397 (diff)
downloadu-boot-28f69b9a229108834af34da099949076d9fd4ff3.tar.xz
sunxi: mmc: set transfer timeout according to byte_cnt.
Originally a timeout value of 2 seconds was used regardless of the size of data to be transfered. This prevented slow devices from working correctly while there was no much gain for faster devices, e.g. it takes 3708ms for a transfer of uImage of size 1899008 bytes. Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com> Acked-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/mmc/sunxi_mmc.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/mmc/sunxi_mmc.c b/drivers/mmc/sunxi_mmc.c
index f9b9493..25f18ad 100644
--- a/drivers/mmc/sunxi_mmc.c
+++ b/drivers/mmc/sunxi_mmc.c
@@ -257,9 +257,11 @@ static int mmc_trans_data_by_cpu(struct mmc *mmc, struct mmc_data *data)
const uint32_t status_bit = reading ? SUNXI_MMC_STATUS_FIFO_EMPTY :
SUNXI_MMC_STATUS_FIFO_FULL;
unsigned i;
- unsigned byte_cnt = data->blocksize * data->blocks;
- unsigned timeout_msecs = 2000;
unsigned *buff = (unsigned int *)(reading ? data->dest : data->src);
+ unsigned byte_cnt = data->blocksize * data->blocks;
+ unsigned timeout_msecs = byte_cnt >> 8;
+ if (timeout_msecs < 2000)
+ timeout_msecs = 2000;
/* Always read / write data through the CPU */
setbits_le32(&mmchost->reg->gctrl, SUNXI_MMC_GCTRL_ACCESS_BY_AHB);