Re: [PATCH] mmc: dw_mmc: enable controller interrupt before calling mmc_start_host
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.ho...@imgtec.com 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...@samsung.com 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) = 9984Hz (slot req 30Hz, actual 298922HZ div = 167) mmc0: error -110 whilst initialising SD card mmc_host mmc0: Bus speed (slot 0) = 9984Hz (slot req 20Hz, actual 199680HZ div = 250) mmc0: error -110 whilst initialising SD card mmc_host mmc0: Bus speed (slot 0) = 9984Hz (slot req 195765Hz, actual 195764HZ div = 255) mmc0: error -110 whilst initialising SD card mmc_host mmc0: Bus speed (slot 0) = 9984Hz (slot req 40Hz, actual 399360HZ div = 125) mmc0: error -110 whilst initialising SD card mmc_host mmc0: Bus speed (slot 0) = 9984Hz (slot req 30Hz, actual 298922HZ div = 167) mmc0: error -110 whilst initialising SD card mmc_host mmc0: Bus speed (slot 0) = 9984Hz (slot req 20Hz, actual 199680HZ div = 250) mmc0: error -110 whilst initialising SD card mmc_host mmc0: Bus speed (slot 0) = 9984Hz (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, 0x); 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, 0x); + 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, 0x); - 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,
Re: [PATCH] mmc: dw_mmc: enable controller interrupt before calling mmc_start_host
Hi All, Well, i didn't find the James's error message. But i confused about the clock value. Bus speed : 9984Hz request : 20Hz 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.ho...@imgtec.com 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...@samsung.com 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) = 9984Hz (slot req 30Hz, actual 298922HZ div = 167) mmc0: error -110 whilst initialising SD card mmc_host mmc0: Bus speed (slot 0) = 9984Hz (slot req 20Hz, actual 199680HZ div = 250) mmc0: error -110 whilst initialising SD card mmc_host mmc0: Bus speed (slot 0) = 9984Hz (slot req 195765Hz, actual 195764HZ div = 255) mmc0: error -110 whilst initialising SD card mmc_host mmc0: Bus speed (slot 0) = 9984Hz (slot req 40Hz, actual 399360HZ div = 125) mmc0: error -110 whilst initialising SD card mmc_host mmc0: Bus speed (slot 0) = 9984Hz (slot req 30Hz, actual 298922HZ div = 167) mmc0: error -110 whilst initialising SD card mmc_host mmc0: Bus speed (slot 0) = 9984Hz (slot req 20Hz, actual 199680HZ div = 250) mmc0: error -110 whilst initialising SD card mmc_host mmc0: Bus speed (slot 0) = 9984Hz (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, 0x); 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, 0x); + 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
Re: [PATCH] mmc: dw_mmc: enable controller interrupt before calling mmc_start_host
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...@samsung.com 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) = 9984Hz (slot req 30Hz, actual 298922HZ div = 167) mmc0: error -110 whilst initialising SD card mmc_host mmc0: Bus speed (slot 0) = 9984Hz (slot req 20Hz, actual 199680HZ div = 250) mmc0: error -110 whilst initialising SD card mmc_host mmc0: Bus speed (slot 0) = 9984Hz (slot req 195765Hz, actual 195764HZ div = 255) mmc0: error -110 whilst initialising SD card mmc_host mmc0: Bus speed (slot 0) = 9984Hz (slot req 40Hz, actual 399360HZ div = 125) mmc0: error -110 whilst initialising SD card mmc_host mmc0: Bus speed (slot 0) = 9984Hz (slot req 30Hz, actual 298922HZ div = 167) mmc0: error -110 whilst initialising SD card mmc_host mmc0: Bus speed (slot 0) = 9984Hz (slot req 20Hz, actual 199680HZ div = 250) mmc0: error -110 whilst initialising SD card mmc_host mmc0: Bus speed (slot 0) = 9984Hz (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, 0x); 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, 0x); + 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, 0x); - 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 -- James Hogan -- To
Re: [PATCH] mmc: dw_mmc: enable controller interrupt before calling mmc_start_host
Dear James, 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. Best Regards Yuvaraj On Mon, Nov 19, 2012 at 6:50 PM, James Hogan james.ho...@imgtec.com 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...@samsung.com 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) = 9984Hz (slot req 30Hz, actual 298922HZ div = 167) mmc0: error -110 whilst initialising SD card mmc_host mmc0: Bus speed (slot 0) = 9984Hz (slot req 20Hz, actual 199680HZ div = 250) mmc0: error -110 whilst initialising SD card mmc_host mmc0: Bus speed (slot 0) = 9984Hz (slot req 195765Hz, actual 195764HZ div = 255) mmc0: error -110 whilst initialising SD card mmc_host mmc0: Bus speed (slot 0) = 9984Hz (slot req 40Hz, actual 399360HZ div = 125) mmc0: error -110 whilst initialising SD card mmc_host mmc0: Bus speed (slot 0) = 9984Hz (slot req 30Hz, actual 298922HZ div = 167) mmc0: error -110 whilst initialising SD card mmc_host mmc0: Bus speed (slot 0) = 9984Hz (slot req 20Hz, actual 199680HZ div = 250) mmc0: error -110 whilst initialising SD card mmc_host mmc0: Bus speed (slot 0) = 9984Hz (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, 0x); 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, 0x); + 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, 0x); - 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
Re: [PATCH] mmc: dw_mmc: enable controller interrupt before calling mmc_start_host
Yes,its legal name.Yuvaraj C D. On Wed, Oct 24, 2012 at 2:49 AM, Chris Ball c...@laptop.org wrote: Hi, On Mon, Oct 08 2012, 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...@samsung.com Is Yuvaraj CD your legal name? We should use your full name so that we can track copyright attribution properly. Thanks! - Chris. -- Chris Ball c...@laptop.org http://printf.net/ One Laptop Per Child -- To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH] mmc: dw_mmc: enable controller interrupt before calling mmc_start_host
Hi, On Thu, Oct 25 2012, Yuvaraj CD wrote: Yes,its legal name.Yuvaraj C D. Thanks for letting me know; pushed to mmc-next for 3.7. - Chris. -- Chris Ball c...@laptop.org http://printf.net/ One Laptop Per Child -- To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH] mmc: dw_mmc: enable controller interrupt before calling mmc_start_host
Hi, On Mon, Oct 08 2012, 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...@samsung.com Is Yuvaraj CD your legal name? We should use your full name so that we can track copyright attribution properly. Thanks! - Chris. -- Chris Ball c...@laptop.org http://printf.net/ One Laptop Per Child -- To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH] mmc: dw_mmc: enable controller interrupt before calling mmc_start_host
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, 0x); + 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, 0x); - 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-samsung-soc in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH] mmc: dw_mmc: enable controller interrupt before calling mmc_start_host
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, 0x); + 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, 0x); - 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-samsung-soc in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH] mmc: dw_mmc: enable controller interrupt before calling mmc_start_host
On Mon, Oct 8, 2012 at 9:59 AM, 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(-) Ideally I think it would be cleaner to break up the slot initialization into two parts, one that allocates and sets up the slot and the other that calls mmc_add_host, but that's a more substantial bit of work and would also complicate the error handling. This looks like it should be safe though, so: Acked-by: Will Newton will.new...@imgtec.com -- To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html