ARM: ux500: Move timer code to separate file
Just split off the timer code to its own file so we have a more fine-grained file tree. Cc: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Jonas Aaberg <jonas.aberg@stericsson.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
parent
7ed00af7a9
commit
5f5663a436
|
@ -3,7 +3,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
obj-y := clock.o cpu.o devices.o devices-common.o \
|
obj-y := clock.o cpu.o devices.o devices-common.o \
|
||||||
id.o usb.o
|
id.o usb.o timer.o
|
||||||
obj-$(CONFIG_UX500_SOC_DB5500) += cpu-db5500.o dma-db5500.o
|
obj-$(CONFIG_UX500_SOC_DB5500) += cpu-db5500.o dma-db5500.o
|
||||||
obj-$(CONFIG_UX500_SOC_DB8500) += cpu-db8500.o devices-db8500.o
|
obj-$(CONFIG_UX500_SOC_DB8500) += cpu-db8500.o devices-db8500.o
|
||||||
obj-$(CONFIG_MACH_U8500) += board-mop500.o board-mop500-sdi.o \
|
obj-$(CONFIG_MACH_U8500) += board-mop500.o board-mop500-sdi.o \
|
||||||
|
|
|
@ -18,7 +18,6 @@
|
||||||
#include <asm/mach/map.h>
|
#include <asm/mach/map.h>
|
||||||
#include <asm/localtimer.h>
|
#include <asm/localtimer.h>
|
||||||
|
|
||||||
#include <plat/mtu.h>
|
|
||||||
#include <mach/hardware.h>
|
#include <mach/hardware.h>
|
||||||
#include <mach/setup.h>
|
#include <mach/setup.h>
|
||||||
#include <mach/devices.h>
|
#include <mach/devices.h>
|
||||||
|
@ -120,38 +119,3 @@ static int ux500_l2x0_init(void)
|
||||||
}
|
}
|
||||||
early_initcall(ux500_l2x0_init);
|
early_initcall(ux500_l2x0_init);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void __init ux500_timer_init(void)
|
|
||||||
{
|
|
||||||
#ifdef CONFIG_LOCAL_TIMERS
|
|
||||||
/* Setup the local timer base */
|
|
||||||
if (cpu_is_u5500())
|
|
||||||
twd_base = __io_address(U5500_TWD_BASE);
|
|
||||||
else if (cpu_is_u8500())
|
|
||||||
twd_base = __io_address(U8500_TWD_BASE);
|
|
||||||
else
|
|
||||||
ux500_unknown_soc();
|
|
||||||
#endif
|
|
||||||
if (cpu_is_u5500())
|
|
||||||
mtu_base = __io_address(U5500_MTU0_BASE);
|
|
||||||
else if (cpu_is_u8500ed())
|
|
||||||
mtu_base = __io_address(U8500_MTU0_BASE_ED);
|
|
||||||
else if (cpu_is_u8500())
|
|
||||||
mtu_base = __io_address(U8500_MTU0_BASE);
|
|
||||||
else
|
|
||||||
ux500_unknown_soc();
|
|
||||||
|
|
||||||
if (cpu_is_u8500())
|
|
||||||
clksrc_dbx500_timer_base = __io_address(U8500_PRCMU_TIMER_4_BASE);
|
|
||||||
else if (cpu_is_u5500())
|
|
||||||
clksrc_dbx500_timer_base = __io_address(U5500_PRCMU_TIMER_3_BASE);
|
|
||||||
else
|
|
||||||
ux500_unknown_soc();
|
|
||||||
|
|
||||||
nmdk_timer_init();
|
|
||||||
clksrc_dbx500_prcmu_init();
|
|
||||||
}
|
|
||||||
|
|
||||||
struct sys_timer ux500_timer = {
|
|
||||||
.init = ux500_timer_init,
|
|
||||||
};
|
|
||||||
|
|
58
arch/arm/mach-ux500/timer.c
Normal file
58
arch/arm/mach-ux500/timer.c
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) ST-Ericsson SA 2011
|
||||||
|
*
|
||||||
|
* License Terms: GNU General Public License v2
|
||||||
|
* Author: Mattias Wallin <mattias.wallin@stericsson.com> for ST-Ericsson
|
||||||
|
*/
|
||||||
|
#include <linux/io.h>
|
||||||
|
#include <linux/clksrc-dbx500-prcmu.h>
|
||||||
|
|
||||||
|
#include <asm/localtimer.h>
|
||||||
|
|
||||||
|
#include <plat/mtu.h>
|
||||||
|
|
||||||
|
#include <mach/setup.h>
|
||||||
|
#include <mach/hardware.h>
|
||||||
|
|
||||||
|
static void __init ux500_timer_init(void)
|
||||||
|
{
|
||||||
|
if (cpu_is_u5500()) {
|
||||||
|
#ifdef CONFIG_LOCAL_TIMERS
|
||||||
|
twd_base = __io_address(U5500_TWD_BASE);
|
||||||
|
#endif
|
||||||
|
mtu_base = __io_address(U5500_MTU0_BASE);
|
||||||
|
clksrc_dbx500_timer_base = __io_address(U5500_PRCMU_TIMER_3_BASE);
|
||||||
|
} else if (cpu_is_u8500()) {
|
||||||
|
#ifdef CONFIG_LOCAL_TIMERS
|
||||||
|
twd_base = __io_address(U8500_TWD_BASE);
|
||||||
|
#endif
|
||||||
|
mtu_base = __io_address(U8500_MTU0_BASE);
|
||||||
|
clksrc_dbx500_timer_base = __io_address(U8500_PRCMU_TIMER_4_BASE);
|
||||||
|
} else {
|
||||||
|
ux500_unknown_soc();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Here we register the timerblocks active in the system.
|
||||||
|
* Localtimers (twd) is started when both cpu is up and running.
|
||||||
|
* MTU register a clocksource, clockevent and sched_clock.
|
||||||
|
* Since the MTU is located in the VAPE power domain
|
||||||
|
* it will be cleared in sleep which makes it unsuitable.
|
||||||
|
* We however need it as a timer tick (clockevent)
|
||||||
|
* during boot to calibrate delay until twd is started.
|
||||||
|
* RTC-RTT have problems as timer tick during boot since it is
|
||||||
|
* depending on delay which is not yet calibrated. RTC-RTT is in the
|
||||||
|
* always-on powerdomain and is used as clockevent instead of twd when
|
||||||
|
* sleeping.
|
||||||
|
* The PRCMU timer 4(3 for DB5500) register a clocksource and
|
||||||
|
* sched_clock with higher rating then MTU since is always-on.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
nmdk_timer_init();
|
||||||
|
clksrc_dbx500_prcmu_init();
|
||||||
|
}
|
||||||
|
|
||||||
|
struct sys_timer ux500_timer = {
|
||||||
|
.init = ux500_timer_init,
|
||||||
|
};
|
Loading…
Reference in a new issue