Hi Balaji, On Sat, Jun 29 2013, Francesco Lavra wrote: > Commit 1f6b9fa40e76fffaaa0b3bd6a0bfdcf1cdc06efa consolidated writes to > the STAT register in one location, moving them from omap_hsmmc_do_irq() > to omap_hsmmc_irq(). This move has the unwanted side effect that the > controller status flags are potentially cleared after a new command has > been started as a consequence of reading the previous status flags. > This means that if the new command changes the status flags before the > IRQ routine returns, those flags may be cleared without handling the > event which asserted them, and thus missing the event. > Move the writing of the STAT register back in omap_hsmmc_do_irq(), > before handling the status flags which generated the interrupt. > > Signed-off-by: Francesco Lavra <francescolavra.fl@xxxxxxxxx> > --- > drivers/mmc/host/omap_hsmmc.c | 2 +- > 1 files changed, 1 insertions(+), 1 deletions(-) > > diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c > index eccedc7..301cb7e 100644 > --- a/drivers/mmc/host/omap_hsmmc.c > +++ b/drivers/mmc/host/omap_hsmmc.c > @@ -1041,6 +1041,7 @@ static void omap_hsmmc_do_irq(struct omap_hsmmc_host *host, int status) > } > } > > + OMAP_HSMMC_WRITE(host->base, STAT, status); > if (end_cmd || ((status & CC_EN) && host->cmd)) > omap_hsmmc_cmd_done(host, host->cmd); > if ((end_trans || (status & TC_EN)) && host->mrq) > @@ -1060,7 +1061,6 @@ static irqreturn_t omap_hsmmc_irq(int irq, void *dev_id) > omap_hsmmc_do_irq(host, status); > > /* Flush posted write */ > - OMAP_HSMMC_WRITE(host->base, STAT, status); > status = OMAP_HSMMC_READ(host->base, STAT); > } Please could you review this patch? Thanks, - Chris. -- Chris Ball <cjb@xxxxxxxxxx> <http://printf.net/> -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html