On Thu, May 10, 2012 at 11:33:19AM +0200, Dirk Behme wrote: > From: RichardZhu <richard.zhu@xxxxxxxxxx> > > Some SD cards insertions will cause a glitch on SD dat1 > which is also a card interrupt signal. Thus the wrongly > generated card interrupt will make system panic because > there's no registered sdio interrupt handler. > This patch fixes this issue. > > Note: This is a workaround for i.MX6 version 1.0 silicon. It's > fixed in hardware in version 1.1 silicon. > > Signed-off-by: Tony Lin <tony.lin@xxxxxxxxxxxxx> > Signed-off-by: RichardZhu <richard.zhu@xxxxxxxxxx> > --- > drivers/mmc/host/sdhci-esdhc-imx.c | 18 +++++++++++++++++- > 1 files changed, 17 insertions(+), 1 deletions(-) > > diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c b/drivers/mmc/host/sdhci-esdhc-imx.c > index a13e75b..50a72a4 100644 > --- a/drivers/mmc/host/sdhci-esdhc-imx.c > +++ b/drivers/mmc/host/sdhci-esdhc-imx.c > @@ -486,6 +486,7 @@ static int __devinit sdhci_esdhc_imx_probe(struct platform_device *pdev) > struct clk *clk; > int err; > struct pltfm_imx_data *imx_data; > + u32 reg; > > host = sdhci_pltfm_init(pdev, &sdhci_esdhc_imx_pdata); > if (IS_ERR(host)) > @@ -513,7 +514,22 @@ static int __devinit sdhci_esdhc_imx_probe(struct platform_device *pdev) > clk_prepare_enable(clk); > pltfm_host->clk = clk; > > - host->quirks |= SDHCI_QUIRK_BROKEN_TIMEOUT_VAL; > + /* disable card interrupt enable bit, and clear status bit > + * the default value of this enable bit is 1, but it should > + * be 0 regarding to standard host controller spec 2.1.3. > + * if this bit is 1, it may cause some problems. Very minor: "the following problem"? > + * there's dat1 glitch when some cards inserting into the slot, > + * thus wrongly generate a card interrupt that will cause > + * system panic because it lacks of sdio handler > + * following code will solve the problem. > + */ > + reg = sdhci_readl(host, SDHCI_INT_ENABLE); > + reg &= ~SDHCI_INT_CARD_INT; > + sdhci_writel(host, reg, SDHCI_INT_ENABLE); > + sdhci_writel(host, SDHCI_INT_CARD_INT, SDHCI_INT_STATUS); > + > + if (!is_imx25_esdhc(imx_data)) > + host->quirks |= SDHCI_QUIRK_BROKEN_TIMEOUT_VAL; NACK on the last two lines. Wrong rebase conflict resolution? Regards, Wolfram -- Pengutronix e.K. | Wolfram Sang | Industrial Linux Solutions | http://www.pengutronix.de/ |
Attachment:
signature.asc
Description: Digital signature