Hi All, Well, i didn't find the James's error message. But i confused about the clock value. Bus speed : 99840000Hz request : 200000Hz Div : 250 If bus_speed is divided with div, then actual value should be 399360Hz. But this log is produced 199680Hz. What's wrong? I think this message can be confused to debug. Best Regards, Jaehoon Chung On 11/20/2012 06:39 PM, James Hogan wrote: > Hi Yuvaraj, > > On 20/11/12 05:35, Yuvaraj Kumar wrote: >> Its not sufficient.In my case, sdio_reset command was submitted to >> dw_mmc controller before interrupts are enabled. >> By looking at your log,it seems something wrong with frequency set by >> your U-boot. > > I'm not using U-boot, I'm booting with JTAG. In any case it works if I > revert your patch so I think the clocks are fine. I'll continue > debugging it and see if I can figure out what's happening. > > Cheers > James > >> >> Best Regards >> Yuvaraj >> >> On Mon, Nov 19, 2012 at 6:50 PM, James Hogan <james.hogan@xxxxxxxxxx> wrote: >>> On 19/11/12 13:01, Yuvaraj CD 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.cd@xxxxxxxxxxx> >>> >>> Hi Yuvaraj, >>> >>> I get the following errors after this patch is applied >>> (2da1d7f2948900cd50d38643db39f790edb3cc96, merged in v3.7-rc5) and the >>> driver doesn't work as a result. Reverting it fixes the problem. >>> >>> mmc0: error -110 whilst initialising SD card >>> mmc_host mmc0: Bus speed (slot 0) = 99840000Hz (slot req 300000Hz, actual 298922HZ div = 167) >>> mmc0: error -110 whilst initialising SD card >>> mmc_host mmc0: Bus speed (slot 0) = 99840000Hz (slot req 200000Hz, actual 199680HZ div = 250) >>> mmc0: error -110 whilst initialising SD card >>> mmc_host mmc0: Bus speed (slot 0) = 99840000Hz (slot req 195765Hz, actual 195764HZ div = 255) >>> mmc0: error -110 whilst initialising SD card >>> mmc_host mmc0: Bus speed (slot 0) = 99840000Hz (slot req 400000Hz, actual 399360HZ div = 125) >>> mmc0: error -110 whilst initialising SD card >>> mmc_host mmc0: Bus speed (slot 0) = 99840000Hz (slot req 300000Hz, actual 298922HZ div = 167) >>> mmc0: error -110 whilst initialising SD card >>> mmc_host mmc0: Bus speed (slot 0) = 99840000Hz (slot req 200000Hz, actual 199680HZ div = 250) >>> mmc0: error -110 whilst initialising SD card >>> mmc_host mmc0: Bus speed (slot 0) = 99840000Hz (slot req 195765Hz, actual 195764HZ div = 255) >>> mmc0: error -110 whilst initialising SD card >>> >>> The interrupts are already cleared and disabled at the beginning of the >>> probe function, so is the following sufficient (after reverting your >>> patch) to fix the problem you've been observing? >>> >>> Thanks >>> James >>> >>> diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c >>> index ec9b5a8..2be9899 100644 >>> --- a/drivers/mmc/host/dw_mmc.c >>> +++ b/drivers/mmc/host/dw_mmc.c >>> @@ -2266,7 +2266,6 @@ int dw_mci_probe(struct dw_mci *host) >>> * 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); >>> >>> >>>> --- >>>> 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); >>>> + >>>> /* 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 majordomo@xxxxxxxxxxxxxxx >>>> More majordomo info at http://vger.kernel.org/majordomo-info.html >>>> >>>> >>>> -- >>>> James Hogan >>>> >>> > > -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html