Hi Jaehoon,

> Hi All,
> 
> I think this problem is produced when card is running write/erase
> operation. We used the mmc_send_status() into driver/mmc/mmc.c.
> When That command is sending, i found the inhibit released log.
> 
> I think problem that SDHCI_DATA_INHIBIT is set at every command.
> if didn't have data and response type is not busy-wait type,
> SDHCI_DATA_INHIBIT didn't need to set.
> 
> How about this? It is more reasonable than increasing timeout value.
> 
> @@ -141,7 +143,10 @@ int sdhci_send_command(struct mmc *mmc, struct
> mmc_cmd *cmd, timeout = 10;
>  
>       sdhci_writel(host, SDHCI_INT_ALL_MASK, SDHCI_INT_STATUS);
> -     mask = SDHCI_CMD_INHIBIT | SDHCI_DATA_INHIBIT;
> +     mask = SDHCI_CMD_INHIBIT;
> +
> +     if ((data != NULL) || (cmd->resp_type & MMC_RSP_BUSY))
> +             mask |= SDHCI_DATA_INHIBIT;
>  

Ive tested this code and data abort appears when used with ext4.

I think, that we need to look around for another solution.

>       /* We shouldn't wait for data inihibit for stop commands,
> even though they might use busy signaling */
> 
> Best Regards,
> Jaehoon Chung
> 
> On 01/10/2013 05:12 AM, Wolfgang Denk wrote:
> > Dear Lukasz Majewski,
> > 
> > In message
> > <1357665792-8141-1-git-send-email-l.majew...@samsung.com> you wrote:
> >> I'd like to ask for your opinion about the following problem:
> > 
> > I cannot comment on the problem - only a bit about the proposed
> > patch ;-)
> > 
> >> From a brief checking I can say that it happens when we are doing
> >> consecutive MMC operations (i.e. many reads), and the 10ms timeout
> >> might be too short when eMMC firmware is forced to do some internal
> >> time consuming operations (e.g. flash blocks management, wear
> >> leveling).
> >> In this situation, the SDHCI_CMD_INHIBIT bit is set, which means
> >> that SDHCI controller didn't received response from eMMC.
> >>
> >> One proposition would be to define the per device/per memory chip
> >> specific timeouts, to replace those defined
> >> at ./drivers/mmc/sdhci.c file.
> > 
> > Is there no way to ask the device and/or controller when it is done,
> > so we can poll for ready state instead of adding delays, which will
> > always have to be tailored for the so far known worst case, i. e.
> > they will be always too long on all almost all systems.
> > 
> >> --- a/drivers/mmc/sdhci.c
> >> +++ b/drivers/mmc/sdhci.c
> >> @@ -137,8 +137,8 @@ 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;
> >> +  /* Wait max 100 ms */
> >> +  timeout = 100;
> > 
> > We have cases where we struggle for sub-second boot times.  Adding
> > 100 ms delay here is clearly prohbitive.  [Even the 10 ms are way
> > too long IMHO.]  There must be a better way to handle this.
> > 
> > Best regards,
> > 
> > Wolfgang Denk
> > 
> 



-- 
Best regards,

Lukasz Majewski

Samsung R&D Poland (SRPOL) | Linux Platform Group
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to