diff options
author | Gary S. Robertson <gary.robertson@linaro.org> | 2014-07-16 17:57:27 -0500 |
---|---|---|
committer | Gary S. Robertson <gary.robertson@linaro.org> | 2014-07-16 17:57:27 -0500 |
commit | 5d8c39dfa92c11553a1091717407aeaddc3de603 (patch) | |
tree | 0df1e82ebdde6b9e3722fd16f9195be36a73c144 /arch/arm/mach-at91/sysirq_mask.c | |
parent | 0993b170ac452761d5b49bca4f7022f2f14c50bc (diff) | |
parent | c0cbbdebe91a944d653ca75670b77bbf57498150 (diff) |
Merge tag 'v3.14.12' of git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable into linux-lng-v3.14.xlinux-lng-3.14.12-2014.07
This is the 3.14.12 stable release
Conflicts:
arch/arm/mm/proc-v7-3level.S
kernel/hrtimer.c
mm/hugetlb.c
Diffstat (limited to 'arch/arm/mach-at91/sysirq_mask.c')
-rw-r--r-- | arch/arm/mach-at91/sysirq_mask.c | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/arch/arm/mach-at91/sysirq_mask.c b/arch/arm/mach-at91/sysirq_mask.c index 2ba694f9626b..f8bc3511a8c8 100644 --- 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); } |