From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jaehoon Chung Date: Thu, 29 Aug 2013 12:16:05 +0900 Subject: [U-Boot] [PATCH] mmc:sdhci: Fix card ready status timeout. In-Reply-To: <1377708592-16702-1-git-send-email-p.marczak@samsung.com> References: <1377708592-16702-1-git-send-email-p.marczak@samsung.com> Message-ID: <521EBCF5.3020007@samsung.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hi Przemyslaw, Could you give me the test-case? I want to test this problem. On 08/29/2013 01:49 AM, Przemyslaw Marczak wrote: > According to JEDEC eMMC specification, after data transfer > (multiple or single block) host must wait for card ready > status. This is done by waiting for command and data lines > to be at idle state after transfer. JEDEC does not specify > maximum timeout. > > Before this change max timeout was 10 ms but in case of UMS > - when system do multiple read/write operations on random > card blocks - timeout causes I/O errors. > The timeout has been increased to 200ms after data transfer. > For other transfers it stays unchanged. > > Tested on Goni and Trats. > > Signed-off-by: Przemyslaw Marczak > Cc: Pantelis Antoniou > --- > drivers/mmc/sdhci.c | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/drivers/mmc/sdhci.c b/drivers/mmc/sdhci.c > index 4261991..22c18d1 100644 > --- a/drivers/mmc/sdhci.c > +++ b/drivers/mmc/sdhci.c > @@ -121,8 +121,10 @@ int sdhci_send_command(struct mmc *mmc, struct mmc_cmd *cmd, > unsigned int timeout, start_addr = 0; > unsigned int retry = 10000; > > - /* Wait max 10 ms */ > - timeout = 10; > + if (!data) > + timeout = 200; > + else > + timeout = 10; And timeout = data ? 10 : 200; ? Best Regards, Jaehoon Chung > > sdhci_writel(host, SDHCI_INT_ALL_MASK, SDHCI_INT_STATUS); > mask = SDHCI_CMD_INHIBIT | SDHCI_DATA_INHIBIT; >