Messages in this thread | | | From | Georgi Djakov <> | Subject | Re: [PATCH] mmc: sdhci-msm: Add sdhci_reset() implementation | Date | Mon, 28 Nov 2016 17:51:05 +0200 |
| |
On 11/24/2016 06:06 PM, Ritesh Harjani wrote: > Hi Georgi, > > I collected some info on this problem. May be below info might help you. > > I think "Reset 0x1" problem is occurring because of below call stack. > SDHCI_RESET_ALL to SDHCI_SOFTWARE_RESET register will anyway trigger the > sdhci_msm_pwr_irq. > > But I think the problem is that the above occurs in spinlock context > and because of only one core the IRQ will never be serviced, hence you > were seeing (Reset 0x1) error. >
Hi Ritesh, Thanks for looking into this. So yes, its called in spinlock context and what we need to do is just handle the power irq after writing to reset register.
[..] > > To prove above I tried this and the problem goes away. But I still dont > think that the below approach is correct. As it will still trigger a > pwr_irq as well. > > > diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c > index 62aedf1..01e611c 100644 > --- a/drivers/mmc/host/sdhci.c > +++ b/drivers/mmc/host/sdhci.c > @@ -174,6 +174,8 @@ void sdhci_reset(struct sdhci_host *host, u8 mask) > /* Reset-all turns off SD Bus Power */ > if (host->quirks2 & SDHCI_QUIRK2_CARD_ON_NEEDS_BUS_ON) > sdhci_runtime_pm_bus_off(host); > + if (host->ops->voltage_switch) > + host->ops->voltage_switch(host); > } >
Yes, our own reset() function that additionally handles the irq will work.
Thanks, Georgi
| |