On 8 October 2012 17:59, Yuvaraj CD <yuvaraj...@gmail.com> wrote:
> As mmc_start_host is getting called before enabling the dw_mmc controller
> interrupt, there is a problem of missing the SDMMC_INT_CMD_DONE for the
> very first command sent by the sdio_reset.
> This problem occurs only when we disable MMC debugging i.e, MMC_DEBUG [=n].
> Hence this patch enables the dw_mmc controller interrupt before
> mmc_start_host.
>
> Signed-off-by: Yuvaraj CD <yuvaraj...@samsung.com>
> ---
> drivers/mmc/host/dw_mmc.c | 29 +++++++++++++++--------------
> 1 file changed, 15 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c
> index a23af77..729c031 100644
> --- a/drivers/mmc/host/dw_mmc.c
> +++ b/drivers/mmc/host/dw_mmc.c
> @@ -2233,6 +2233,21 @@ int dw_mci_probe(struct dw_mci *host)
> else
> host->num_slots = ((mci_readl(host, HCON) >> 1) & 0x1F) + 1;
>
> + /*
> + * Enable interrupts for command done, data over, data empty, card
> det,
> + * receive ready and error such as transmit, receive timeout, crc
> error
> + */
> + mci_writel(host, RINTSTS, 0xFFFFFFFF);
> + mci_writel(host, INTMASK, SDMMC_INT_CMD_DONE | SDMMC_INT_DATA_OVER |
> + SDMMC_INT_TXDR | SDMMC_INT_RXDR |
> + DW_MCI_ERROR_FLAGS | SDMMC_INT_CD);
> + mci_writel(host, CTRL, SDMMC_CTRL_INT_ENABLE); /* Enable mci
> interrupt */
> +
> + dev_info(host->dev, "DW MMC controller at irq %d, "
> + "%d bit host data width, "
> + "%u deep fifo\n",
> + host->irq, width, fifo_size);
> +
Makes sense
Reviewed By: Girish K S <girish.shivananja...@linaro.org>
> /* We need at least one slot to succeed */
> for (i = 0; i < host->num_slots; i++) {
> ret = dw_mci_init_slot(host, i);
> @@ -2262,20 +2277,6 @@ int dw_mci_probe(struct dw_mci *host)
> else
> host->data_offset = DATA_240A_OFFSET;
>
> - /*
> - * Enable interrupts for command done, data over, data empty, card
> det,
> - * receive ready and error such as transmit, receive timeout, crc
> error
> - */
> - mci_writel(host, RINTSTS, 0xFFFFFFFF);
> - mci_writel(host, INTMASK, SDMMC_INT_CMD_DONE | SDMMC_INT_DATA_OVER |
> - SDMMC_INT_TXDR | SDMMC_INT_RXDR |
> - DW_MCI_ERROR_FLAGS | SDMMC_INT_CD);
> - mci_writel(host, CTRL, SDMMC_CTRL_INT_ENABLE); /* Enable mci
> interrupt */
> -
> - dev_info(host->dev, "DW MMC controller at irq %d, "
> - "%d bit host data width, "
> - "%u deep fifo\n",
> - host->irq, width, fifo_size);
> if (host->quirks & DW_MCI_QUIRK_IDMAC_DTO)
> dev_info(host->dev, "Internal DMAC interrupt fix enabled.\n");
>
> --
> 1.7.9.5
>
--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to majord...@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html