RE: [PATCH v2] mmc: sdio: add a delay to call sdio_irq_work when sdio bus resume

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

 



> -----Original Message-----
> From: Ulf Hansson [mailto:ulf.hansson@xxxxxxxxxx]
> Sent: 2020年8月21日 15:59
> To: Bough Chen <haibo.chen@xxxxxxx>
> Cc: Adrian Hunter <adrian.hunter@xxxxxxxxx>; linux-mmc@xxxxxxxxxxxxxxx;
> dl-linux-imx <linux-imx@xxxxxxx>; Matthias Kaehlcke <mka@xxxxxxxxxxxx>;
> huyue2@xxxxxxxxxx; Doug Anderson <dianders@xxxxxxxxxxxx>; Pali Rohár
> <pali@xxxxxxxxxx>
> Subject: Re: [PATCH v2] mmc: sdio: add a delay to call sdio_irq_work when sdio
> bus resume
> 
> On Wed, 19 Aug 2020 at 13:24, <haibo.chen@xxxxxxx> wrote:
> >
> > From: Haibo Chen <haibo.chen@xxxxxxx>
> >
> > Find this issue on i.MX7D-sdb board with broadcom sdio wifi.
> > When system resume, sometimes this wifi meet the tuning fail issue.
> > All tuning command get command timeout error. This is because
> > sdio_irq_work on system_wq was executed before the broadcom wifi
> > driver resume. Due to broadcom wifi driver set the wifi in Sleep sate
> > in system suspend, need to set the wifi to Wake state first. So need
> > to make sure wifi driver resume first, then do the sdio_irq_work.
> >
> > Fixes: 51133850bce2 ("mmc: core: Fixup processing of SDIO IRQs during
> > system suspend/resume")
> > Signed-off-by: Haibo Chen <haibo.chen@xxxxxxx>
> > ---
> >  drivers/mmc/core/sdio.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/drivers/mmc/core/sdio.c b/drivers/mmc/core/sdio.c index
> > 7b40553d3934..101632617f69 100644
> > --- a/drivers/mmc/core/sdio.c
> > +++ b/drivers/mmc/core/sdio.c
> > @@ -1047,7 +1047,7 @@ static int mmc_sdio_resume(struct mmc_host
> *host)
> >                 if (!(host->caps2 & MMC_CAP2_SDIO_IRQ_NOTHREAD))
> >                         wake_up_process(host->sdio_irq_thread);
> >                 else if (host->caps & MMC_CAP_SDIO_IRQ)
> > -                       queue_delayed_work(system_wq,
> &host->sdio_irq_work, 0);
> > +                       queue_delayed_work(system_wq,
> > + &host->sdio_irq_work, 1);
> 
> This looks fragile, as there is really no guarantee that the WiFi driver is
> resumed prior to the SDIO irq work being executed.

Yes, agree.

> 
> Instead, it looks like you shouldn't keep the SDIO irqs enabled during system
> suspend, because those aren't system wakeup capable. Correct?
> 
> In other words, I think the WiFi driver should call sdio_release_irq() in the
> ->suspend() callback and sdio_claim_irq() in the ->resume() callback.

Let me double check the WIFI driver. Thanks for the suggestion!

Best Regards
Haibo Chen
> 
> >         }
> >
> >  out:
> > --
> > 2.17.1
> >
> 
> Kind regards
> Uffe




[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