

DongAisheng Mar 13, 2014 2:20 AM (in response to jimmychan)
There's an errata ENGcm09399 eSDHCv2: eSDH C misses SDIO interrupt wh en CINT is disabled.
http://cache.freescale.com/files/dsp/doc/errata/MCIMX51CE.pdf
Customer's issue is a bit different from the errata description since they did not miss the interrupt but not set in interrupt status register.
I wonder did customer enable WECINT bit in protocol control register(0x28)?
Anyway, you can ask if customer's code include this errata fix?
If not please try it. It may helps.
Reference code:
static void esdhc_writel_le(struct sdhci_host *host, u32 val, int reg)
{
struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
struct pltfm_imx_data *imx_data = pltfm_host->priv;
u32 data;
if (unlikely(reg == SDHCI_INT_ENABLE || reg == SDHCI_SIGNAL_ENABLE)) {
if (val & SDHCI_INT_CARD_INT) {
/*
* Clear and then set D3CD bit to avoid missing the
* card interrupt. This is a eSDHC controller problem
* so we need to apply the following workaround: clear
* and set D3CD bit will make eSDHC re-sample the card
* interrupt. In case a card interrupt was lost,
* re-sample it by the following steps.
*/
data = readl(host->ioaddr + SDHCI_HOST_CONTROL);
data &= ~ESDHC_CTRL_D3CD;
writel(data, host->ioaddr + SDHCI_HOST_CONTROL);
data |= ESDHC_CTRL_D3CD;
writel(data, host->ioaddr + SDHCI_HOST_CONTROL);
}
}
.......
}