Re: MMC card remains RO since "mmc: sdhci-omap: drop ->get_ro() implementation"

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello Sebastian,

On Tue, 19 Mar 2019 18:27:37 +0100
Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx> wrote:

> Since commit 39ee32ce48675 ("mmc: sdhci-omap: drop ->get_ro()
> implementation") my
> |Model: TI AM5728 IDK
> |Board: AM572x IDK REV 1.3B
> 
> does not boot from MMC anymore:

Thanks for the feedback. It's really weird. Before my change, the
sdhci-omap driver was setting:

  host->mmc_host_ops.get_ro = mmc_gpio_get_ro;

But thanks to another change I did, the core is now doing:

        else if (host->ops->get_ro)
                is_readonly = host->ops->get_ro(host);
+       else if (mmc_can_gpio_ro(host->mmc))
+               is_readonly = mmc_gpio_get_ro(host->mmc);
        else
                is_readonly = !(sdhci_readl(host, SDHCI_PRESENT_STATE)
                                & SDHCI_WRITE_PROTECT);

So basically, if there's no host->ops->get_ro, it calls
mmc_gpio_get_ro(), which should do the exact same thing.

The only difference that I can see is that it only calls
mmc_gpio_get_ro() if mmc_can_gpio_ro() returns true. But looking at the
code of mmc_can_gpio_ro(), I don't see how it can be borked, and
mmc_gpio_get_ro() be working.

So there is something odd going on here. Do you have the time to add
some traces in sdhci_check_ro(), to see what is the return value of
mmc_can_gpio_ro(), whether we call mmc_gpio_get_ro(), and what does it
return ?

This would help debugging his issue. Thanks a lot!

Best regards,

Thomas
-- 
Thomas Petazzoni, CTO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com



[Index of Archives]     [Linux Memonry Technology]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux