All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dirk Behme <dirk.behme@de.bosch.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH] fsl_esdhc: Do not clear interrupt status bits until data processed
Date: Wed, 12 Jun 2013 07:16:04 +0200	[thread overview]
Message-ID: <51B80414.40808@de.bosch.com> (raw)
In-Reply-To: <1370964862-26947-1-git-send-email-andrew_gabbasov@mentor.com>

On 11.06.2013 17:34, Andrew Gabbasov wrote:
> After waiting for the command completion event, the interrupt status
> bits, that occured to be set by that time, are cleared by writing them
> back. It is supposed, that it should be command related bits (command
> complete and may be command errors).
>
> However, in some cases the DMA already completes by that time before
> the full transaction completes. The corresponding DINT bit gets set
> and then cleared before even entering the loop, waiting for data part
> completion. That waiting loop never gets this bit set, causing the
> operation to hang. This is reported to happen, for example, for write
> operation of 1 sector to upper area (block #7400000) of SanDisk Ultra II
> 8GB card.
>
> The solution could be to explicitly clear only command related interrupt
> status bits. However, since subsequent processing does not rely on
> any command bits state, it could be easier just to remove clearing
> of any bits at that point, leaving them all until all data processing
> completes. After that the whole register will be cleared at once.
>
> Also, on occasion, interrupts masking moved to before writing the command,
> just for the case there should be no chance of interrupt between the first
> command and interrupts masking.
>
> Reported-by: Dirk Behme <dirk.behme@de.bosch.com>
> Signed-off-by: Andrew Gabbasov <andrew_gabbasov@mentor.com>

Acked-by: Dirk Behme <dirk.behme@de.bosch.com>

Thanks

Dirk

> ---
>   drivers/mmc/fsl_esdhc.c |    7 +++----
>   1 file changed, 3 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/mmc/fsl_esdhc.c b/drivers/mmc/fsl_esdhc.c
> index 861f4b9..b501b4d 100644
> --- a/drivers/mmc/fsl_esdhc.c
> +++ b/drivers/mmc/fsl_esdhc.c
> @@ -310,6 +310,9 @@ esdhc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd, struct mmc_data *data)
>   	/* Figure out the transfer arguments */
>   	xfertyp = esdhc_xfertyp(cmd, data);
>
> +	/* Mask all irqs */
> +	esdhc_write32(&regs->irqsigen, 0);
> +
>   	/* Send the command */
>   	esdhc_write32(&regs->cmdarg, cmd->cmdarg);
>   #if defined(CONFIG_FSL_USDHC)
> @@ -320,15 +323,11 @@ esdhc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd, struct mmc_data *data)
>   	esdhc_write32(&regs->xfertyp, xfertyp);
>   #endif
>
> -	/* Mask all irqs */
> -	esdhc_write32(&regs->irqsigen, 0);
> -
>   	/* Wait for the command to complete */
>   	while (!(esdhc_read32(&regs->irqstat) & (IRQSTAT_CC | IRQSTAT_CTOE)))
>   		;
>
>   	irqstat = esdhc_read32(&regs->irqstat);
> -	esdhc_write32(&regs->irqstat, irqstat);
>
>   	/* Reset CMD and DATA portions on error */
>   	if (irqstat & (CMD_ERR | IRQSTAT_CTOE)) {

  reply	other threads:[~2013-06-12  5:16 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-04-08  9:06 [U-Boot] [Patch] fsl_esdhc: Fix DMA transfer completion waiting loop Andrew Gabbasov
2013-04-14  7:19 ` Dirk Behme
2013-04-14  9:25   ` Stefano Babic
2013-06-10 12:06 ` Dirk Behme
2013-06-10 14:51   ` Gabbasov, Andrew
2013-06-11  8:16     ` Dirk Behme
2013-06-11 15:24       ` Gabbasov, Andrew
2013-06-11 15:34         ` [U-Boot] [PATCH] fsl_esdhc: Do not clear interrupt status bits until data processed Andrew Gabbasov
2013-06-12  5:16           ` Dirk Behme [this message]
2013-06-14 18:55           ` [U-Boot] " Andy Fleming

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=51B80414.40808@de.bosch.com \
    --to=dirk.behme@de.bosch.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.