i.MX51 SDHC CMD0 Results In Cmd Line Conflict

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

i.MX51 SDHC CMD0 Results In Cmd Line Conflict

Jump to solution
1,416 Views
hallet1
Contributor I

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.

Labels (1)
Tags (2)
0 Kudos
Reply
1 Solution
999 Views
admin
Specialist II

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

View solution in original post

0 Kudos
Reply
1 Reply
1,000 Views
admin
Specialist II

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

0 Kudos
Reply