]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.10-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 20 Jun 2014 20:16:27 +0000 (13:16 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 20 Jun 2014 20:16:27 +0000 (13:16 -0700)
added patches:
arm-at91-fix-at91_sysirq_mask_rtc-for-sam9x5-socs.patch

queue-3.10/arm-at91-fix-at91_sysirq_mask_rtc-for-sam9x5-socs.patch [new file with mode: 0644]
queue-3.10/series

diff --git a/queue-3.10/arm-at91-fix-at91_sysirq_mask_rtc-for-sam9x5-socs.patch b/queue-3.10/arm-at91-fix-at91_sysirq_mask_rtc-for-sam9x5-socs.patch
new file mode 100644 (file)
index 0000000..a81dbce
--- /dev/null
@@ -0,0 +1,73 @@
+From 9dcc87fec8947308e0111c65dcd881e6aa5b1673 Mon Sep 17 00:00:00 2001
+From: Boris BREZILLON <boris.brezillon@free-electrons.com>
+Date: Fri, 6 Jun 2014 14:36:11 -0700
+Subject: ARM: at91: fix at91_sysirq_mask_rtc for sam9x5 SoCs
+
+From: Boris BREZILLON <boris.brezillon@free-electrons.com>
+
+commit 9dcc87fec8947308e0111c65dcd881e6aa5b1673 upstream.
+
+sam9x5 SoCs have the following errata:
+ "RTC: Interrupt Mask Register cannot be used
+  Interrupt Mask Register read always returns 0."
+
+Hence we should not rely on what IMR claims about already masked IRQs
+and just disable all IRQs.
+
+Signed-off-by: Boris BREZILLON <boris.brezillon@free-electrons.com>
+Reported-by: Bryan Evenson <bevenson@melinkcorp.com>
+Reviewed-by: Johan Hovold <johan@hovold.com>
+Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>
+Cc: Bryan Evenson <bevenson@melinkcorp.com>
+Cc: Andrew Victor <linux@maxim.org.za>
+Cc: Jean-Christophe Plagniol-Villard <plagnioj@jcrosoft.com>
+Cc: Alessandro Zummo <a.zummo@towertech.it>
+Cc: Mark Roszko <mark.roszko@gmail.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/arm/mach-at91/sysirq_mask.c |   22 +++++++++++++---------
+ 1 file changed, 13 insertions(+), 9 deletions(-)
+
+--- a/arch/arm/mach-at91/sysirq_mask.c
++++ b/arch/arm/mach-at91/sysirq_mask.c
+@@ -25,24 +25,28 @@
+ #include "generic.h"
+-#define AT91_RTC_IDR  0x24    /* Interrupt Disable Register */
+-#define AT91_RTC_IMR  0x28    /* Interrupt Mask Register */
++#define AT91_RTC_IDR          0x24    /* Interrupt Disable Register */
++#define AT91_RTC_IMR          0x28    /* Interrupt Mask Register */
++#define AT91_RTC_IRQ_MASK     0x1f    /* Available IRQs mask */
+ void __init at91_sysirq_mask_rtc(u32 rtc_base)
+ {
+       void __iomem *base;
+-      u32 mask;
+       base = ioremap(rtc_base, 64);
+       if (!base)
+               return;
+-      mask = readl_relaxed(base + AT91_RTC_IMR);
+-      if (mask) {
+-              pr_info("AT91: Disabling rtc irq\n");
+-              writel_relaxed(mask, base + AT91_RTC_IDR);
+-              (void)readl_relaxed(base + AT91_RTC_IMR);       /* flush */
+-      }
++      /*
++       * sam9x5 SoCs have the following errata:
++       * "RTC: Interrupt Mask Register cannot be used
++       *  Interrupt Mask Register read always returns 0."
++       *
++       * Hence we're not relying on IMR values to disable
++       * interrupts.
++       */
++      writel_relaxed(AT91_RTC_IRQ_MASK, base + AT91_RTC_IDR);
++      (void)readl_relaxed(base + AT91_RTC_IMR);       /* flush */
+       iounmap(base);
+ }
index b9ba66910864fbd344cb18aedaac2afe92b1a021..eb03b5189601987f868fec83e7e676870af505a0 100644 (file)
@@ -24,3 +24,4 @@ rtnetlink-fix-userspace-api-breakage-for-iproute2-v3.9.0.patch
 vxlan-use-dev-needed_headroom-instead-of-dev-hard_header_len.patch
 net-mlx4_core-pass-pci_device_id.driver_data-to-__mlx4_init_one-during-reset.patch
 net-mlx4_core-preserve-pci_dev_data-after-__mlx4_remove_one.patch
+arm-at91-fix-at91_sysirq_mask_rtc-for-sam9x5-socs.patch