From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752220AbeEOGSg (ORCPT ); Tue, 15 May 2018 02:18:36 -0400 Received: from mail-qt0-f193.google.com ([209.85.216.193]:42601 "EHLO mail-qt0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752084AbeEOGSe (ORCPT ); Tue, 15 May 2018 02:18:34 -0400 X-Google-Smtp-Source: AB8JxZqIkuHFbA3jGF2GtYa5Ksytu9s7ZQ2At+yZJ/rbWhdRXYXoXV7LIQyzD1ItFUm6H/dI9WJVZg== Subject: Re: [PATCH] mmc: sdhci-pxav3: don't disable clocks when we might get an interrupt To: Adrian Hunter , linux-kernel@vger.kernel.org Cc: Ulf Hansson , "open list:SECURE DIGITAL HOST CONTROLLER INTERFACE (SDHCI...)" References: <20180514215645.17592-1-tommyhebb@gmail.com> From: Tom Hebb Message-ID: Date: Tue, 15 May 2018 02:18:31 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.7.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi, On 05/15/2018 01:59 AM, Adrian Hunter wrote: > On 15/05/18 00:56, Thomas Hebb wrote: >> Currently, runtime_suspend() unconditionally disables the clock gates >> for the controller, which means that it's unable to receive interrupts >> generated by connected SDIO cards. > > We currently get / put runtime pm with enable / disable of the SDIO IRQ > (refer sdhci_enable_sdio_irq()) so are you sure this is needed? You're correct; this patch is unnecessary. I wrote it before 923713b35745 ("mmc: sdhci: Disable runtime pm when the sdio_irq is enabled"), and it was needed then. Sorry for the noise. FYI, sdhci-esdhc-imx still checks the IRQ in its suspend/resume functions. That's one of the things that misled me to think this patch was still relevant. >> >> Signed-off-by: Thomas Hebb >> --- >> drivers/mmc/host/sdhci-pxav3.c | 16 ++++++++++------ >> 1 file changed, 10 insertions(+), 6 deletions(-) >> >> diff --git a/drivers/mmc/host/sdhci-pxav3.c b/drivers/mmc/host/sdhci-pxav3.c >> index a34434166ca7..59760f3cc1d7 100644 >> --- a/drivers/mmc/host/sdhci-pxav3.c >> +++ b/drivers/mmc/host/sdhci-pxav3.c >> @@ -562,9 +562,11 @@ static int sdhci_pxav3_runtime_suspend(struct device *dev) >> if (host->tuning_mode != SDHCI_TUNING_MODE_3) >> mmc_retune_needed(host->mmc); >> >> - clk_disable_unprepare(pxa->clk_io); >> - if (!IS_ERR(pxa->clk_core)) >> - clk_disable_unprepare(pxa->clk_core); >> + if (!sdhci_sdio_irq_enabled(host)) { >> + clk_disable_unprepare(pxa->clk_io); >> + if (!IS_ERR(pxa->clk_core)) >> + clk_disable_unprepare(pxa->clk_core); >> + } >> >> return 0; >> } >> @@ -575,9 +577,11 @@ static int sdhci_pxav3_runtime_resume(struct device *dev) >> struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); >> struct sdhci_pxa *pxa = sdhci_pltfm_priv(pltfm_host); >> >> - clk_prepare_enable(pxa->clk_io); >> - if (!IS_ERR(pxa->clk_core)) >> - clk_prepare_enable(pxa->clk_core); >> + if (!sdhci_sdio_irq_enabled(host)) { >> + clk_prepare_enable(pxa->clk_io); >> + if (!IS_ERR(pxa->clk_core)) >> + clk_prepare_enable(pxa->clk_core); >> + } >> >> return sdhci_runtime_resume_host(host); >> } >> >