Hi
Working with i.MX51 SDHC and trying to issue CMD0.
Instead of resulting in CC bit set in Interrupt Status register
I keep getting CRC err and Timeout Interrupt Status bits set
which indicate Cmd Line Conflict.
I check CIHB and CDIHB before issuing CMD0 even though
only CIHB needs to be checked since CMD0 does not use the
data lines.
Anyone know how to resolve a cmd line conflict like this?
Thank you.
解決済! 解決策の投稿を見る。
Hi hallet1,
Here's how MaxTsai responded to your question:
hi, I didn't get hallet1's point. Regarding to i.MX51/53 mmc host driver, there is a timer waiting for CIHB is clear.
---
"drivers/mmc/host/mx_sdhci.c"
static void sdhci_send_command(struct sdhci_host *host,
struct mmc_command *cmd){
...
mask = SDHCI_CMD_INHIBIT;
...
while (readl(host->ioaddr + SDHCI_PRESENT_STATE) & mask) {
if (timeout == 0) {
printk(KERN_ERR "%s: Controller never released ""inhibit bit(s).\n", mmc_hostname(host->mmc));
sdhci_dumpregs(host);
cmd->error = -EIO;
queue_work(host->workqueue, &host->finish_wq);
return;}
timeout--;
udelay(20);}
---
Max, if you have any questions for hallet1, feel free to ask him.
Regards,
Grant
Hi hallet1,
Here's how MaxTsai responded to your question:
hi, I didn't get hallet1's point. Regarding to i.MX51/53 mmc host driver, there is a timer waiting for CIHB is clear.
---
"drivers/mmc/host/mx_sdhci.c"
static void sdhci_send_command(struct sdhci_host *host,
struct mmc_command *cmd){
...
mask = SDHCI_CMD_INHIBIT;
...
while (readl(host->ioaddr + SDHCI_PRESENT_STATE) & mask) {
if (timeout == 0) {
printk(KERN_ERR "%s: Controller never released ""inhibit bit(s).\n", mmc_hostname(host->mmc));
sdhci_dumpregs(host);
cmd->error = -EIO;
queue_work(host->workqueue, &host->finish_wq);
return;}
timeout--;
udelay(20);}
---
Max, if you have any questions for hallet1, feel free to ask him.
Regards,
Grant