linux/arch/arm/mach-at91
Johan Hovold 6de714c21a ARM: at91: fix hanged boot due to early rtc-interrupt
Make sure the RTC-interrupts are masked at boot by adding a new helper
function to be used at SOC-init.

This fixes hanged boot on all AT91 SOCs with an RTC (but RM9200), for
example, after a reset during an RTC-update or if an RTC-alarm goes off
after shutdown (e.g. when using RTC wakeup).

The RTC and RTT-peripherals are powered by backup power (VDDBU) (on all
AT91 SOCs but RM9200) and are not reset on wake-up, user, watchdog or
software reset. This means that their interrupts may be enabled during
early boot if, for example, they where not disabled during a previous
shutdown (e.g. due to a buggy driver or a non-clean shutdown such as a
user reset). Furthermore, an RTC or RTT-alarm may also be active.

The RTC and RTT-interrupts use the shared system-interrupt line, which
is also used by the PIT, and if an interrupt occurs before a handler
(e.g. RTC-driver) has been installed this leads to the system interrupt
being disabled and prevents the system from booting.

Note that when boot hangs due to an early RTC or RTT-interrupt, the only
way to get the system to start again is to remove the backup power (e.g.
battery) or to disable the interrupt manually from the bootloader. In
particular, a user reset is not sufficient.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com>
Cc: stable@vger.kernel.org # 3.11.x
2013-11-15 12:13:33 +01:00
..
include/mach ARM: at91: fix hanged boot due to early rtc-interrupt 2013-11-15 12:13:33 +01:00
Kconfig ARM: at91: Fix link breakage when !CONFIG_PHYLIB 2013-06-18 10:20:22 +02:00
Kconfig.non_dt ARM SoC device tree changes 2013-07-02 14:23:01 -07:00
Makefile ARM: at91: fix hanged boot due to early rtc-interrupt 2013-11-15 12:13:33 +01:00
Makefile.boot ARM: move all dtb targets out of Makefile.boot 2012-09-14 09:22:04 -05:00
at91_aic.h arm: at91 move at91_aic.h to arch/arm/mach-at91 2012-11-06 20:29:41 +08:00
at91_rstc.h ARM: at91: remove trailing semicolon from macros 2013-04-08 17:47:44 +02:00
at91_shdwc.h ARM: at91: remove trailing semicolon from macros 2013-04-08 17:47:44 +02:00
at91_tc.h arn: at91: move at91_tc.h to arch/arm/mach-at91 2012-11-06 20:29:44 +08:00
at91rm9200.c reboot: arm: change reboot_mode to use enum reboot_mode 2013-07-09 10:33:29 -07:00
at91rm9200_devices.c Sound updates for 3.8-rc1 2012-12-13 11:51:23 -08:00
at91rm9200_time.c ARM: at91: rm9200 fix time support 2013-05-15 12:37:45 +02:00
at91sam9_alt_reset.S arm: at91: move reset controller header to arm/arm/mach-at91 2012-11-06 20:30:48 +08:00
at91sam9g45.c ARM: at91: fix hanged boot due to early rtc-interrupt 2013-11-15 12:13:33 +01:00
at91sam9g45_devices.c ARM: arm-soc driver changes for 3.10 2013-05-04 12:31:18 -07:00
at91sam9g45_reset.S arm: at91: move reset controller header to arm/arm/mach-at91 2012-11-06 20:30:48 +08:00
at91sam9n12.c ARM: at91: fix hanged boot due to early rtc-interrupt 2013-11-15 12:13:33 +01:00
at91sam9rl.c ARM: at91: fix hanged boot due to early rtc-interrupt 2013-11-15 12:13:33 +01:00
at91sam9rl_devices.c ARM: at91/avr32/atmel_lcdfb: add platform device-id table 2013-03-13 11:05:12 +01:00
at91sam9x5.c ARM: at91: fix hanged boot due to early rtc-interrupt 2013-11-15 12:13:33 +01:00
at91sam926x_time.c ARM: delete struct sys_timer 2012-12-24 09:36:38 -07:00
at91sam9260.c ARM: at91: fix at91_extern_irq usage for non-dt boards 2013-06-21 16:35:26 +02:00
at91sam9260_devices.c Sound updates for 3.8-rc1 2012-12-13 11:51:23 -08:00
at91sam9261.c ARM: at91: fix at91_extern_irq usage for non-dt boards 2013-06-21 16:35:26 +02:00
at91sam9261_devices.c ARM: at91/avr32/atmel_lcdfb: add platform device-id table 2013-03-13 11:05:12 +01:00
at91sam9263.c ARM: at91: fix at91_extern_irq usage for non-dt boards 2013-06-21 16:35:26 +02:00
at91sam9263_devices.c ARM: at91/avr32/atmel_lcdfb: add platform device-id table 2013-03-13 11:05:12 +01:00
at91x40.c ARM: at91: fix at91_extern_irq usage for non-dt boards 2013-06-21 16:35:26 +02:00
at91x40_time.c ARM: at91: remove trailing semicolon from macros 2013-04-08 17:47:44 +02:00
board-1arm.c ARM: delete struct sys_timer 2012-12-24 09:36:38 -07:00
board-afeb-9260v1.c ARM: delete struct sys_timer 2012-12-24 09:36:38 -07:00
board-cam60.c ARM: delete struct sys_timer 2012-12-24 09:36:38 -07:00
board-carmeva.c ARM: delete struct sys_timer 2012-12-24 09:36:38 -07:00
board-cpu9krea.c ARM: delete struct sys_timer 2012-12-24 09:36:38 -07:00
board-cpuat91.c ARM: delete struct sys_timer 2012-12-24 09:36:38 -07:00
board-csb337.c ARM: delete struct sys_timer 2012-12-24 09:36:38 -07:00
board-csb637.c ARM: delete struct sys_timer 2012-12-24 09:36:38 -07:00
board-dt-rm9200.c ARM: at91: renamme rm9200 dt file 2013-03-13 17:28:14 +01:00
board-dt-sam9.c ARM: at91: rename board-dt to more specific name board-dt-sam9 2013-03-13 17:18:00 +01:00
board-dt-sama5.c phy: micrel: Add definitions for common Micrel PHY registers 2013-08-22 23:20:54 +08:00
board-eb01.c ARM: delete struct sys_timer 2012-12-24 09:36:38 -07:00
board-eb9200.c ARM: delete struct sys_timer 2012-12-24 09:36:38 -07:00
board-ecbat91.c ARM: delete struct sys_timer 2012-12-24 09:36:38 -07:00
board-eco920.c ARM: delete struct sys_timer 2012-12-24 09:36:38 -07:00
board-flexibity.c ARM: delete struct sys_timer 2012-12-24 09:36:38 -07:00
board-foxg20.c ARM: w1-gpio: fix erroneous gpio requests 2013-03-12 16:20:45 -07:00
board-gsia18s.c ARM: delete struct sys_timer 2012-12-24 09:36:38 -07:00
board-kafa.c ARM: delete struct sys_timer 2012-12-24 09:36:38 -07:00
board-kb9202.c ARM: delete struct sys_timer 2012-12-24 09:36:38 -07:00
board-pcontrol-g20.c ARM: delete struct sys_timer 2012-12-24 09:36:38 -07:00
board-picotux200.c ARM: delete struct sys_timer 2012-12-24 09:36:38 -07:00
board-qil-a9260.c ARM: delete struct sys_timer 2012-12-24 09:36:38 -07:00
board-rm9200ek.c ARM: delete struct sys_timer 2012-12-24 09:36:38 -07:00
board-rsi-ews.c ARM: delete struct sys_timer 2012-12-24 09:36:38 -07:00
board-sam9-l9260.c ARM: delete struct sys_timer 2012-12-24 09:36:38 -07:00
board-sam9g20ek.c ARM: delete struct sys_timer 2012-12-24 09:36:38 -07:00
board-sam9m10g45ek.c ARM: delete struct sys_timer 2012-12-24 09:36:38 -07:00
board-sam9rlek.c ARM: delete struct sys_timer 2012-12-24 09:36:38 -07:00
board-sam9260ek.c ARM: delete struct sys_timer 2012-12-24 09:36:38 -07:00
board-sam9261ek.c ARM: at91: udpate defconfigs 2013-05-17 15:05:08 +02:00
board-sam9263ek.c ARM: delete struct sys_timer 2012-12-24 09:36:38 -07:00
board-snapper9260.c gpio: (gpio-pca953x) move header to linux/platform_data/ 2013-08-29 12:33:52 -07:00
board-stamp9g20.c ARM: w1-gpio: fix erroneous gpio requests 2013-03-12 16:20:45 -07:00
board-yl-9200.c ARM: delete struct sys_timer 2012-12-24 09:36:38 -07:00
board.h ARM: arm-soc: Header cleanups 2012-12-12 11:45:16 -08:00
clock.c ARM: at91/PMC: use at91_usb_rate() for UTMI PLL 2013-06-26 15:24:11 +02:00
clock.h ARM: at91: introduce SAMA5 support 2013-03-26 12:18:04 +01:00
cpuidle.c ARM: at91: cpuidle: Fix target_residency 2013-06-21 16:52:00 +02:00
generic.h ARM: at91: fix hanged boot due to early rtc-interrupt 2013-11-15 12:13:33 +01:00
gpio.c arm: Move chained_irq_(enter|exit) to a generic file 2013-03-26 16:11:43 +00:00
gsia18s.h arm: at91: move board header to arch/arm/mach-at91 2012-11-06 20:29:48 +08:00
irq.c ARM: at91: fix at91_extern_irq usage for non-dt boards 2013-06-21 16:35:26 +02:00
leds.c arm: at91 move board.h to arch/arm/mach-at91 2012-11-06 20:29:37 +08:00
pm.c ARM: at91: fix at91_extern_irq usage for non-dt boards 2013-06-21 16:35:26 +02:00
pm.h ARM: at91: suspend both memory controllers on at91sam9263 2013-04-18 16:31:02 +02:00
pm_slowclock.S ARN: at91: introduce SOC_AT91xxx define to allow to compile SoC core support 2012-04-17 14:47:21 +02:00
sam9_smc.c ARM: at91: add accessor to manage SMC 2012-02-13 18:31:36 +01:00
sam9_smc.h ARM: at91: add accessor to manage SMC 2012-02-13 18:31:36 +01:00
sama5d3.c ARM: at91: fix hanged boot due to early rtc-interrupt 2013-11-15 12:13:33 +01:00
setup.c ARM: at91: fix at91_extern_irq usage for non-dt boards 2013-06-21 16:35:26 +02:00
soc.h ARM: at91: fix at91_extern_irq usage for non-dt boards 2013-06-21 16:35:26 +02:00
stamp9g20.h arm: at91: move board header to arch/arm/mach-at91 2012-11-06 20:29:48 +08:00
sysirq_mask.c ARM: at91: fix hanged boot due to early rtc-interrupt 2013-11-15 12:13:33 +01:00