Re: omap_hsmmc + gta04 + sdio irq + runtime_suspend + 4 bit = trouble

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

 



On Thu, 18 Oct 2018 10:45:07 -0700
Tony Lindgren <tony@xxxxxxxxxxx> wrote:

> Hi,
> 
> * Andreas Kemnade <andreas@xxxxxxxxxxxx> [181011 20:07]:
> > Tony Lindgren <tony@xxxxxxxxxxx> wrote:  
> > > Sounds like you're unnecessarily remapping dat1 to gpio for wake.
> > > With omap3 just configure the dat1 padconf irq as the "wakeup".
> > >   
> > Is there anything bad with it, so that it does not work (besides
> > being not optimal)? I just trust that gpio level interrupt more.  
> 
> Well using gpio works only anything in the gpio bank1
> that is always powered for deeper idle states. The other
> gpio banks still need to rely on padconf wake-up events,
> which is the dat1 padconf irq.
> 
well, having the gpio active there should prevent deeper
idle states? Well, not that I want that...

> The gpio here is the sdmmc2_dat1/gpio_133, right?
> 
yes,
> Leaving out the unnecessary muxing will also prevent
> possible glitches, not sure if that could be an issue
> here, probably not.
> 
> > To my understanding, pinctrl irq is an edge irq. So we detect level
> > changes for that pad. To my understanding, that does not work during
> > normal operation, but when the module behind that pad is off.  
> 
> Correct, it gets enabled for runtime suspend only to
> prevent extra load with duplicate interrupts on the dat
> lines.
> 
> Note that when the padconf interrupt gets a wake-up event,
> the sdio_dat1 interrupt is still there on wake as it's a
> level interrupt.
> 
> > So what about the gap in omap_hsmmc_runtime_suspend() between
> > switching off IRQs and switching off the module finally?
> > Are there chances that we loose an irq?  
> 
> No, we enable the padconf irq first before runtime suspend
> for the device.
> 
If I understand the code correctly, wakeirq gets enabled before
the omap_hsmmc_runtime_suspend() function is called.
Then there is 
 OMAP_HSMMC_WRITE(host->base, ISE, 0);
 OMAP_HSMMC_WRITE(host->base, IE, 0);
and the mmc irq is turned off.
But if I understand the trm correcly, the pinctl irq only
works when the corresponding hwmod is off.
But the hsmmc hwmod is turned off *after* that.

Maybe I am wrong. Do you have a cite from the trm? 

> > > Care to try something like this in the in omap3-gta04.dtsi:
> > > 
> > > &mmc2 {
> > >       interrupts-extended = <&intc 86 &omap3_pmx_core 0x12e>;
> > >       interrupt-names = "irq", "wakeup";
> > >       vmmc-supply = <&vaux4>;
> > >       bus-width = <4>;
> > >       ti,non-removable;
> > >       cap-power-off-card;
> > >       mmc-pwrseq = <&wifi_pwrseq>;
> > > };
> > > 
> > > Untested..   
> > No, tested, 
> > see my previous mails in the thread.
> > 
> > But I retested it in case of some PEBCAK issues.
> > plain 4.19.0-rc6 + dt patches  
> 
> Hmm it should just work(TM). Care to post your patch for that?
> 
https://misc.andi.de1.cc/0001-arm-omap-dts-add-wakeirq-for-mmc2-of-gta04.patch
defconfig used:
https://misc.andi.de1.cc/ml-defconfig
on top of
next-20181031 (where all the latest dtb patches are in,
 didn't want to wait for 4.20-rc1), to rule out that I did funny things
while applying dt patches.

Now it is tested on several devices. So it is not my device
somehow strange.


> And do you see interrupts with grep wake /proc/interrupts?
> 
The additional interrupt is there, but count stays at 1-2.

Regards,
Andreas

Attachment: pgpgAnAOCJ43f.pgp
Description: OpenPGP digital signature


[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux