2006-01-09 17:05:41 +00:00
|
|
|
/*
|
2007-02-05 10:42:07 +00:00
|
|
|
* linux/arch/arm/mach-at91/generic.h
|
2006-01-09 17:05:41 +00:00
|
|
|
*
|
|
|
|
* Copyright (C) 2005 David Brownell
|
|
|
|
*
|
|
|
|
* This program is free software; you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU General Public License version 2 as
|
|
|
|
* published by the Free Software Foundation.
|
|
|
|
*/
|
|
|
|
|
2014-07-01 09:33:15 +00:00
|
|
|
#ifndef _AT91_GENERIC_H
|
|
|
|
#define _AT91_GENERIC_H
|
|
|
|
|
2012-02-14 17:08:14 +00:00
|
|
|
#include <linux/of.h>
|
2013-07-08 23:01:40 +00:00
|
|
|
#include <linux/reboot.h>
|
2011-02-02 06:27:07 +00:00
|
|
|
|
2011-04-28 12:19:32 +00:00
|
|
|
/* Map io */
|
2011-04-23 07:28:34 +00:00
|
|
|
extern void __init at91_map_io(void);
|
2014-09-15 16:15:55 +00:00
|
|
|
extern void __init at91_alt_map_io(void);
|
2011-05-09 19:20:09 +00:00
|
|
|
extern void __init at91_init_sram(int bank, unsigned long base,
|
|
|
|
unsigned int length);
|
2011-04-28 12:19:32 +00:00
|
|
|
|
2006-09-27 09:50:59 +00:00
|
|
|
/* Processors */
|
2011-04-24 03:40:22 +00:00
|
|
|
extern void __init at91rm9200_set_type(int type);
|
2012-10-28 18:31:09 +00:00
|
|
|
extern void __init at91rm9200_dt_initialize(void);
|
2012-02-28 05:57:51 +00:00
|
|
|
extern void __init at91_dt_initialize(void);
|
2006-09-27 09:50:59 +00:00
|
|
|
|
2006-07-05 16:22:52 +00:00
|
|
|
/* Interrupts */
|
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-10-16 09:56:14 +00:00
|
|
|
extern void __init at91_sysirq_mask_rtc(u32 rtc_base);
|
ARM: at91: fix hanged boot due to early rtt-interrupt
Make sure the RTT-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 RTT, for example, if an
RTT-alarm goes off after a non-clean 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-10-16 09:56:15 +00:00
|
|
|
extern void __init at91_sysirq_mask_rtt(u32 rtt_base);
|
2012-02-14 17:08:14 +00:00
|
|
|
|
2006-07-05 16:22:52 +00:00
|
|
|
/* Timer */
|
2012-11-08 19:40:59 +00:00
|
|
|
extern void at91rm9200_timer_init(void);
|
2006-01-09 17:05:41 +00:00
|
|
|
|
2012-02-05 12:25:32 +00:00
|
|
|
/* idle */
|
|
|
|
extern void at91sam9_idle(void);
|
|
|
|
|
2011-11-27 15:15:50 +00:00
|
|
|
/* Matrix */
|
|
|
|
extern void at91_ioremap_matrix(u32 base_addr);
|
2014-07-01 09:33:15 +00:00
|
|
|
#endif /* _AT91_GENERIC_H */
|