From f8e393a0692d5cff59e90e2b288e14c137e99d91 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 20 Jun 2014 13:16:32 -0700 Subject: [PATCH] 3.15-stable patches added patches: arm-at91-fix-at91_sysirq_mask_rtc-for-sam9x5-socs.patch --- ...at91_sysirq_mask_rtc-for-sam9x5-socs.patch | 73 +++++++++++++++++++ queue-3.15/series | 1 + 2 files changed, 74 insertions(+) create mode 100644 queue-3.15/arm-at91-fix-at91_sysirq_mask_rtc-for-sam9x5-socs.patch diff --git a/queue-3.15/arm-at91-fix-at91_sysirq_mask_rtc-for-sam9x5-socs.patch b/queue-3.15/arm-at91-fix-at91_sysirq_mask_rtc-for-sam9x5-socs.patch new file mode 100644 index 00000000000..a81dbced3a8 --- /dev/null +++ b/queue-3.15/arm-at91-fix-at91_sysirq_mask_rtc-for-sam9x5-socs.patch @@ -0,0 +1,73 @@ +From 9dcc87fec8947308e0111c65dcd881e6aa5b1673 Mon Sep 17 00:00:00 2001 +From: Boris BREZILLON +Date: Fri, 6 Jun 2014 14:36:11 -0700 +Subject: ARM: at91: fix at91_sysirq_mask_rtc for sam9x5 SoCs + +From: Boris BREZILLON + +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 +Reported-by: Bryan Evenson +Reviewed-by: Johan Hovold +Acked-by: Nicolas Ferre +Cc: Bryan Evenson +Cc: Andrew Victor +Cc: Jean-Christophe Plagniol-Villard +Cc: Alessandro Zummo +Cc: Mark Roszko +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + +--- + 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); + } diff --git a/queue-3.15/series b/queue-3.15/series index 276fe24764b..d8ec1ba4884 100644 --- a/queue-3.15/series +++ b/queue-3.15/series @@ -19,3 +19,4 @@ sctp-fix-sk_ack_backlog-wrap-around-problem.patch rtnetlink-fix-userspace-api-breakage-for-iproute2.patch vxlan-use-dev-needed_headroom-instead-of.patch udp-ipv4-do-not-waste-time-in.patch +arm-at91-fix-at91_sysirq_mask_rtc-for-sam9x5-socs.patch -- 2.47.3