[PATCH 6/8] mmc: mmci: Mask IRQs for all variants during runtime suspend

Ulf Hansson ulf.hansson at linaro.org
Mon Mar 10 08:49:37 EDT 2014


On 10 March 2014 13:46, Ulf Hansson <ulf.hansson at linaro.org> wrote:
> On 1 March 2014 11:56, Ulf Hansson <ulf.hansson at linaro.org> wrote:
>> In runtime suspended state, we are not expecting IRQs and thus we can
>> safely mask them, not only for pwrreg_nopower variants but for all.
>>
>> Obviously we then also need to make sure we restore the IRQ mask while
>> becoming runtime resumed.
>>
>> Cc: Russell King <linux at arm.linux.org.uk>
>> Signed-off-by: Ulf Hansson <ulf.hansson at linaro.org>
>
> Hi Russell,
>
> I suppose we have discussed and sorted out the concerns you had around
> this patch!?
>
> It's available in your patch tracker, would be nice to get it merged
> for 3.15, if that's possible.
>
> Kind regards
> Uffe

Sorry for spamming, this went to the wrong addresses. Let's try again.

Kind regards
Uffe

>
>> ---
>>  drivers/mmc/host/mmci.c |   23 +++++++++++------------
>>  1 file changed, 11 insertions(+), 12 deletions(-)
>>
>> diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c
>> index b931226..178868a 100644
>> --- a/drivers/mmc/host/mmci.c
>> +++ b/drivers/mmc/host/mmci.c
>> @@ -1758,35 +1758,34 @@ static void mmci_save(struct mmci_host *host)
>>  {
>>         unsigned long flags;
>>
>> -       if (host->variant->pwrreg_nopower) {
>> -               spin_lock_irqsave(&host->lock, flags);
>> +       spin_lock_irqsave(&host->lock, flags);
>>
>> -               writel(0, host->base + MMCIMASK0);
>> +       writel(0, host->base + MMCIMASK0);
>> +       if (host->variant->pwrreg_nopower) {
>>                 writel(0, host->base + MMCIDATACTRL);
>>                 writel(0, host->base + MMCIPOWER);
>>                 writel(0, host->base + MMCICLOCK);
>> -               mmci_reg_delay(host);
>> -
>> -               spin_unlock_irqrestore(&host->lock, flags);
>>         }
>> +       mmci_reg_delay(host);
>>
>> +       spin_unlock_irqrestore(&host->lock, flags);
>>  }
>>
>>  static void mmci_restore(struct mmci_host *host)
>>  {
>>         unsigned long flags;
>>
>> -       if (host->variant->pwrreg_nopower) {
>> -               spin_lock_irqsave(&host->lock, flags);
>> +       spin_lock_irqsave(&host->lock, flags);
>>
>> +       if (host->variant->pwrreg_nopower) {
>>                 writel(host->clk_reg, host->base + MMCICLOCK);
>>                 writel(host->datactrl_reg, host->base + MMCIDATACTRL);
>>                 writel(host->pwr_reg, host->base + MMCIPOWER);
>> -               writel(MCI_IRQENABLE, host->base + MMCIMASK0);
>> -               mmci_reg_delay(host);
>> -
>> -               spin_unlock_irqrestore(&host->lock, flags);
>>         }
>> +       writel(MCI_IRQENABLE, host->base + MMCIMASK0);
>> +       mmci_reg_delay(host);
>> +
>> +       spin_unlock_irqrestore(&host->lock, flags);
>>  }
>>
>>  static int mmci_runtime_suspend(struct device *dev)
>> --
>> 1.7.9.5
>>



More information about the linux-arm-kernel mailing list