On Thu, Oct 13, 2011 at 2:57 PM, Anton Staaf <robot...@chromium.org> wrote: > Currently when no expected completion condition occures in the > mmc_send_cmd while loop that is waiting for a data transfer to > complete the MMC driver just hangs. > > This patch adds an arbitrary 2 second timeout. If nothing we > recognize occures within 2 seconds some diagnostic information > is printed and we fail out. > > Signed-off-by: Anton Staaf <robot...@chromium.org> > Cc: Tom Warren <twar...@nvidia.com> > Cc: Stephen Warren <swar...@nvidia.com>
Adding Albert to CC. -Anton > --- > drivers/mmc/tegra2_mmc.c | 14 ++++++++++++++ > 1 files changed, 14 insertions(+), 0 deletions(-) > > diff --git a/drivers/mmc/tegra2_mmc.c b/drivers/mmc/tegra2_mmc.c > index 195f89d..27564b0 100644 > --- a/drivers/mmc/tegra2_mmc.c > +++ b/drivers/mmc/tegra2_mmc.c > @@ -246,6 +246,8 @@ static int mmc_send_cmd(struct mmc *mmc, struct mmc_cmd > *cmd, > } > > if (data) { > + unsigned long start = get_timer(0); > + > while (1) { > mask = readl(&host->reg->norintsts); > > @@ -269,6 +271,18 @@ static int mmc_send_cmd(struct mmc *mmc, struct mmc_cmd > *cmd, > /* Transfer Complete */ > debug("r/w is done\n"); > break; > + } else if (get_timer(start) > 2000UL) { > + writel(mask, &host->reg->norintsts); > + printf("%s: MMC Timeout\n" > + " Interrupt status 0x%08x\n" > + " Interrupt status enable 0x%08x\n" > + " Interrupt signal enable 0x%08x\n" > + " Present status 0x%08x\n", > + __func__, mask, > + readl(&host->reg->norintstsen), > + readl(&host->reg->norintsigen), > + readl(&host->reg->prnsts)); > + return -1; > } > } > writel(mask, &host->reg->norintsts); > -- > 1.7.3.1 > > _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot