lkml.org 
[lkml]   [2017]   [Dec]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 29/75] mmc: sdhci-msm: fix issue with power irq
    Date
    4.14-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Subhash Jadavani <subhashj@codeaurora.org>


    [ Upstream commit c7ccee224d2d551f712752c4a16947f6529d6506 ]

    SDCC controller reset (SW_RST) during probe may trigger power irq if
    previous status of PWRCTL was either BUS_ON or IO_HIGH_V. So before we
    enable the power irq interrupt in GIC (by registering the interrupt
    handler), we need to ensure that any pending power irq interrupt status
    is acknowledged otherwise power irq interrupt handler would be fired
    prematurely.

    Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
    Signed-off-by: Vijay Viswanath <vviswana@codeaurora.org>
    Acked-by: Adrian Hunter <adrian.hunter@intel.com>
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/mmc/host/sdhci-msm.c | 18 ++++++++++++++++++
    1 file changed, 18 insertions(+)

    --- a/drivers/mmc/host/sdhci-msm.c
    +++ b/drivers/mmc/host/sdhci-msm.c
    @@ -1251,6 +1251,21 @@ static int sdhci_msm_probe(struct platfo
    CORE_VENDOR_SPEC_CAPABILITIES0);
    }

    + /*
    + * Power on reset state may trigger power irq if previous status of
    + * PWRCTL was either BUS_ON or IO_HIGH_V. So before enabling pwr irq
    + * interrupt in GIC, any pending power irq interrupt should be
    + * acknowledged. Otherwise power irq interrupt handler would be
    + * fired prematurely.
    + */
    + sdhci_msm_voltage_switch(host);
    +
    + /*
    + * Ensure that above writes are propogated before interrupt enablement
    + * in GIC.
    + */
    + mb();
    +
    /* Setup IRQ for handling power/voltage tasks with PMIC */
    msm_host->pwr_irq = platform_get_irq_byname(pdev, "pwr_irq");
    if (msm_host->pwr_irq < 0) {
    @@ -1260,6 +1275,9 @@ static int sdhci_msm_probe(struct platfo
    goto clk_disable;
    }

    + /* Enable pwr irq interrupts */
    + writel_relaxed(INT_MASK, msm_host->core_mem + CORE_PWRCTL_MASK);
    +
    ret = devm_request_threaded_irq(&pdev->dev, msm_host->pwr_irq, NULL,
    sdhci_msm_pwr_irq, IRQF_ONESHOT,
    dev_name(&pdev->dev), host);

    \
     
     \ /
      Last update: 2017-12-07 14:32    [W:4.097 / U:0.080 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site