Message ID | 1391529538-21685-4-git-send-email-ulf.hansson@linaro.org (mailing list archive) |
---|---|
State | Not Applicable |
Headers | show |
On Tue, Feb 04, 2014 at 04:58:44PM +0100, Ulf Hansson 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. So, what happens when this patch is applied, and a SDIO card is attached which expects to receive interrupts at any moment? Given that I've run into this during the last week with a SDHCI controller, I'm not that thrilled with other interfaces doing the same broken thing.
On 18 February 2014 17:05, Russell King - ARM Linux <linux@arm.linux.org.uk> wrote: > On Tue, Feb 04, 2014 at 04:58:44PM +0100, Ulf Hansson 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. > > So, what happens when this patch is applied, and a SDIO card is attached > which expects to receive interrupts at any moment? Currently, no variant implements SDIO irq. The SDIO irq polling mode from the sdio core will still be functional, as of today. So, this patch will not break SDIO. > > Given that I've run into this during the last week with a SDHCI controller, > I'm not that thrilled with other interfaces doing the same broken thing. If we add SDIO irq support to mmci in future; parts of that implementation includes a re-route of DAT1 to a GPIO irq when entering runtime suspend state. The mmci HW will in runtime suspend state, not be responsible for handling irqs, which is the same as of today. Kind regards Ulf Hansson > > -- > FTTC broadband for 0.8mile line: 5.8Mbps down 500kbps up. Estimation > in database were 13.1 to 19Mbit for a good line, about 7.5+ for a bad. > Estimate before purchase was "up to 13.2Mbit". -- To unsubscribe from this list: send the line "unsubscribe linux-spi" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Tue, Feb 18, 2014 at 05:36:52PM +0100, Ulf Hansson wrote: > If we add SDIO irq support to mmci in future; parts of that > implementation includes a re-route of DAT1 to a GPIO irq when entering > runtime suspend state. The mmci HW will in runtime suspend state, not > be responsible for handling irqs, which is the same as of today. Note that the "irq thread" in sdio_irq is scheduled for destruction - it's buggy when the system is under high load and a driver claims a SDIO irq. Sched people hate it too...
On 18 February 2014 17:46, Russell King - ARM Linux <linux@arm.linux.org.uk> wrote: > On Tue, Feb 18, 2014 at 05:36:52PM +0100, Ulf Hansson wrote: >> If we add SDIO irq support to mmci in future; parts of that >> implementation includes a re-route of DAT1 to a GPIO irq when entering >> runtime suspend state. The mmci HW will in runtime suspend state, not >> be responsible for handling irqs, which is the same as of today. > > Note that the "irq thread" in sdio_irq is scheduled for destruction - > it's buggy when the system is under high load and a driver claims a > SDIO irq. Sched people hate it too... We kind of realized that too, in the early days for ux500. At that point we converted it to a use a dedicated work queue, which improved the behaviour, don't remember the details why, but maybe I should collect the patches and send them out. :-) Finally we moved to use a separate GPIO irq as a dedicated SDIO irq line for our cw1200 wlan chip, mostly due to gain a bit of performance. That happened to simplified the mmci part as well, which was welcome. > > -- > FTTC broadband for 0.8mile line: 5.8Mbps down 500kbps up. Estimation > in database were 13.1 to 19Mbit for a good line, about 7.5+ for a bad. > Estimate before purchase was "up to 13.2Mbit". -- To unsubscribe from this list: send the line "unsubscribe linux-spi" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Tue, Feb 18, 2014 at 5:36 PM, Ulf Hansson <ulf.hansson@linaro.org> wrote: > On 18 February 2014 17:05, Russell King - ARM Linux > <linux@arm.linux.org.uk> wrote: >> On Tue, Feb 04, 2014 at 04:58:44PM +0100, Ulf Hansson 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. >> >> So, what happens when this patch is applied, and a SDIO card is attached >> which expects to receive interrupts at any moment? > > Currently, no variant implements SDIO irq. > > The SDIO irq polling mode from the sdio core will still be functional, > as of today. So, this patch will not break SDIO. > >> >> Given that I've run into this during the last week with a SDHCI controller, >> I'm not that thrilled with other interfaces doing the same broken thing. > > If we add SDIO irq support to mmci in future; parts of that > implementation includes a re-route of DAT1 to a GPIO irq when entering > runtime suspend state. The mmci HW will in runtime suspend state, not > be responsible for handling irqs, which is the same as of today. [Just smalltalk] Switching DAT1 to "gpio mode" (which is something of a fallacy, see explanation in Documentation/pinctrl.txt) is not at all possible in all implementations of the PL18x, as it depends on exploiting properties on an assumed pin controller. Systems that don't have such wakeup features on their pins are unlikely to support deepsleep in any capacity, and if they do they are ill-designed from the top level as this needs to be taken into account when devising the hardware :-/ Yours, Linus Walleij -- To unsubscribe from this list: send the line "unsubscribe linux-spi" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
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)
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@arm.linux.org.uk> Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org> --- drivers/mmc/host/mmci.c | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-)