This is a note to let you know that I've just added the patch titled

    bus: omap_l3_noc: Add resume hook to restore context

to the 3.18-stable tree which can be found at:
    
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     bus-omap_l3_noc-add-resume-hook-to-restore-context.patch
and it can be found in the queue-3.18 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <[email protected]> know about it.


>From 61b43d4e919e8fa5e10c77ee32ba328da07e0264 Mon Sep 17 00:00:00 2001
From: Keerthy <[email protected]>
Date: Mon, 10 Nov 2014 23:49:47 +0530
Subject: bus: omap_l3_noc: Add resume hook to restore context

From: Keerthy <[email protected]>

commit 61b43d4e919e8fa5e10c77ee32ba328da07e0264 upstream.

On certain SoCs such as AM437x SoC, L3_noc error registers are
maintained in power domain such as per domain which looses context as part
of low power state such as RTC+DDR mode. On these platforms when we
mask interrupts which we cannot handle, the source of these interrupts
still remain on resume, however, the flag mux registers now contain
their reset value (unmasked) - this breaks the system with infinite
interrupts since we do not these interrupts to take place ever again.

To handle this: restore the masking of interrupts which we have
already recorded in the system as ones we cannot handle.

Fixes: 2100b595b7 ("bus: omap_l3_noc: ignore masked out unclearable targets")
Acked-by: Nishanth Menon <[email protected]>
Signed-off-by: Keerthy <[email protected]>
Signed-off-by: Tony Lindgren <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>

---
 drivers/bus/omap_l3_noc.c |   55 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 55 insertions(+)

--- a/drivers/bus/omap_l3_noc.c
+++ b/drivers/bus/omap_l3_noc.c
@@ -296,11 +296,66 @@ static int omap_l3_probe(struct platform
        return ret;
 }
 
+#ifdef CONFIG_PM
+
+/**
+ * l3_resume_noirq() - resume function for l3_noc
+ * @dev:       pointer to l3_noc device structure
+ *
+ * We only have the resume handler only since we
+ * have already maintained the delta register
+ * configuration as part of configuring the system
+ */
+static int l3_resume_noirq(struct device *dev)
+{
+       struct omap_l3 *l3 = dev_get_drvdata(dev);
+       int i;
+       struct l3_flagmux_data *flag_mux;
+       void __iomem *base, *mask_regx = NULL;
+       u32 mask_val;
+
+       for (i = 0; i < l3->num_modules; i++) {
+               base = l3->l3_base[i];
+               flag_mux = l3->l3_flagmux[i];
+               if (!flag_mux->mask_app_bits && !flag_mux->mask_dbg_bits)
+                       continue;
+
+               mask_regx = base + flag_mux->offset + L3_FLAGMUX_MASK0 +
+                          (L3_APPLICATION_ERROR << 3);
+               mask_val = readl_relaxed(mask_regx);
+               mask_val &= ~(flag_mux->mask_app_bits);
+
+               writel_relaxed(mask_val, mask_regx);
+               mask_regx = base + flag_mux->offset + L3_FLAGMUX_MASK0 +
+                          (L3_DEBUG_ERROR << 3);
+               mask_val = readl_relaxed(mask_regx);
+               mask_val &= ~(flag_mux->mask_dbg_bits);
+
+               writel_relaxed(mask_val, mask_regx);
+       }
+
+       /* Dummy read to force OCP barrier */
+       if (mask_regx)
+               (void)readl(mask_regx);
+
+       return 0;
+}
+
+static const struct dev_pm_ops l3_dev_pm_ops = {
+       .resume_noirq           = l3_resume_noirq,
+};
+
+#define L3_DEV_PM_OPS (&l3_dev_pm_ops)
+#else
+#define L3_DEV_PM_OPS NULL
+#endif
+
 static struct platform_driver omap_l3_driver = {
        .probe          = omap_l3_probe,
        .driver         = {
                .name           = "omap_l3_noc",
                .owner          = THIS_MODULE,
+               .pm             = L3_DEV_PM_OPS,
                .of_match_table = of_match_ptr(l3_noc_match),
        },
 };


Patches currently in stable-queue which might be from [email protected] are

queue-3.18/bus-omap_l3_noc-correct-returning-irq_handled.patch
queue-3.18/bus-omap_l3_noc-add-resume-hook-to-restore-context.patch
--
To unsubscribe from this list: send the line "unsubscribe stable" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to