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