Commit 9fbf0c85 authored by Thomas Abraham's avatar Thomas Abraham Committed by Kukjin Kim

ARM: EXYNOS: allow dt based discovery of mct controller using clocksource_of_init

Add entries to __clksrc_of_table so that Exynos MCT controller is
discoverable using call to clocksource_of_init. With this change,
it would be appropriate to rename the function 'exynos4_timer_init'
as 'mct_init' since it aptly describes this function. Additionally,
the 'init_time' callback of all machine descriptors for exynos
platforms that were previously set to 'exynos4_timer_init' are now
set to either 'mct_init' or 'clocksource_of_init'.

Cc: Changhwan Youn <chaos.youn@samsung.com>
Signed-off-by: default avatarThomas Abraham <thomas.abraham@linaro.org>
Reviewed-by: default avatarStephen Warren <swarren@nvidia.com>
Signed-off-by: default avatarKukjin Kim <kgene.kim@samsung.com>
parent 36ba5d52
...@@ -406,6 +406,7 @@ config MACH_EXYNOS4_DT ...@@ -406,6 +406,7 @@ config MACH_EXYNOS4_DT
bool "Samsung Exynos4 Machine using device tree" bool "Samsung Exynos4 Machine using device tree"
depends on ARCH_EXYNOS4 depends on ARCH_EXYNOS4
select ARM_AMBA select ARM_AMBA
select CLKSRC_OF
select CPU_EXYNOS4210 select CPU_EXYNOS4210
select HAVE_SAMSUNG_KEYPAD if INPUT_KEYBOARD select HAVE_SAMSUNG_KEYPAD if INPUT_KEYBOARD
select PINCTRL select PINCTRL
...@@ -422,6 +423,7 @@ config MACH_EXYNOS5_DT ...@@ -422,6 +423,7 @@ config MACH_EXYNOS5_DT
default y default y
depends on ARCH_EXYNOS5 depends on ARCH_EXYNOS5
select ARM_AMBA select ARM_AMBA
select CLKSRC_OF
select USE_OF select USE_OF
help help
Machine support for Samsung EXYNOS5 machine with device tree enabled. Machine support for Samsung EXYNOS5 machine with device tree enabled.
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
#ifndef __ARCH_ARM_MACH_EXYNOS_COMMON_H #ifndef __ARCH_ARM_MACH_EXYNOS_COMMON_H
#define __ARCH_ARM_MACH_EXYNOS_COMMON_H #define __ARCH_ARM_MACH_EXYNOS_COMMON_H
extern void exynos4_timer_init(void); extern void mct_init(void);
struct map_desc; struct map_desc;
void exynos_init_io(struct map_desc *mach_desc, int size); void exynos_init_io(struct map_desc *mach_desc, int size);
......
...@@ -202,6 +202,6 @@ MACHINE_START(ARMLEX4210, "ARMLEX4210") ...@@ -202,6 +202,6 @@ MACHINE_START(ARMLEX4210, "ARMLEX4210")
.map_io = armlex4210_map_io, .map_io = armlex4210_map_io,
.init_machine = armlex4210_machine_init, .init_machine = armlex4210_machine_init,
.init_late = exynos_init_late, .init_late = exynos_init_late,
.init_time = exynos4_timer_init, .init_time = mct_init,
.restart = exynos4_restart, .restart = exynos4_restart,
MACHINE_END MACHINE_END
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include <linux/of_platform.h> #include <linux/of_platform.h>
#include <linux/serial_core.h> #include <linux/serial_core.h>
#include <linux/clocksource.h>
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
#include <mach/map.h> #include <mach/map.h>
...@@ -142,7 +143,7 @@ DT_MACHINE_START(EXYNOS4210_DT, "Samsung Exynos4 (Flattened Device Tree)") ...@@ -142,7 +143,7 @@ DT_MACHINE_START(EXYNOS4210_DT, "Samsung Exynos4 (Flattened Device Tree)")
.map_io = exynos4_dt_map_io, .map_io = exynos4_dt_map_io,
.init_machine = exynos4_dt_machine_init, .init_machine = exynos4_dt_machine_init,
.init_late = exynos_init_late, .init_late = exynos_init_late,
.init_time = exynos4_timer_init, .init_time = clocksource_of_init,
.dt_compat = exynos4_dt_compat, .dt_compat = exynos4_dt_compat,
.restart = exynos4_restart, .restart = exynos4_restart,
MACHINE_END MACHINE_END
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include <linux/serial_core.h> #include <linux/serial_core.h>
#include <linux/memblock.h> #include <linux/memblock.h>
#include <linux/io.h> #include <linux/io.h>
#include <linux/clocksource.h>
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
#include <mach/map.h> #include <mach/map.h>
...@@ -216,7 +217,7 @@ DT_MACHINE_START(EXYNOS5_DT, "SAMSUNG EXYNOS5 (Flattened Device Tree)") ...@@ -216,7 +217,7 @@ DT_MACHINE_START(EXYNOS5_DT, "SAMSUNG EXYNOS5 (Flattened Device Tree)")
.map_io = exynos5_dt_map_io, .map_io = exynos5_dt_map_io,
.init_machine = exynos5_dt_machine_init, .init_machine = exynos5_dt_machine_init,
.init_late = exynos_init_late, .init_late = exynos_init_late,
.init_time = exynos4_timer_init, .init_time = clocksource_of_init,
.dt_compat = exynos5_dt_compat, .dt_compat = exynos5_dt_compat,
.restart = exynos5_restart, .restart = exynos5_restart,
.reserve = exynos5_reserve, .reserve = exynos5_reserve,
......
...@@ -1380,7 +1380,7 @@ MACHINE_START(NURI, "NURI") ...@@ -1380,7 +1380,7 @@ MACHINE_START(NURI, "NURI")
.map_io = nuri_map_io, .map_io = nuri_map_io,
.init_machine = nuri_machine_init, .init_machine = nuri_machine_init,
.init_late = exynos_init_late, .init_late = exynos_init_late,
.init_time = exynos4_timer_init, .init_time = mct_init,
.reserve = &nuri_reserve, .reserve = &nuri_reserve,
.restart = exynos4_restart, .restart = exynos4_restart,
MACHINE_END MACHINE_END
...@@ -815,7 +815,7 @@ MACHINE_START(ORIGEN, "ORIGEN") ...@@ -815,7 +815,7 @@ MACHINE_START(ORIGEN, "ORIGEN")
.map_io = origen_map_io, .map_io = origen_map_io,
.init_machine = origen_machine_init, .init_machine = origen_machine_init,
.init_late = exynos_init_late, .init_late = exynos_init_late,
.init_time = exynos4_timer_init, .init_time = mct_init,
.reserve = &origen_reserve, .reserve = &origen_reserve,
.restart = exynos4_restart, .restart = exynos4_restart,
MACHINE_END MACHINE_END
...@@ -376,7 +376,7 @@ MACHINE_START(SMDK4212, "SMDK4212") ...@@ -376,7 +376,7 @@ MACHINE_START(SMDK4212, "SMDK4212")
.init_irq = exynos4_init_irq, .init_irq = exynos4_init_irq,
.map_io = smdk4x12_map_io, .map_io = smdk4x12_map_io,
.init_machine = smdk4x12_machine_init, .init_machine = smdk4x12_machine_init,
.init_time = exynos4_timer_init, .init_time = mct_init,
.restart = exynos4_restart, .restart = exynos4_restart,
.reserve = &smdk4x12_reserve, .reserve = &smdk4x12_reserve,
MACHINE_END MACHINE_END
...@@ -390,7 +390,7 @@ MACHINE_START(SMDK4412, "SMDK4412") ...@@ -390,7 +390,7 @@ MACHINE_START(SMDK4412, "SMDK4412")
.map_io = smdk4x12_map_io, .map_io = smdk4x12_map_io,
.init_machine = smdk4x12_machine_init, .init_machine = smdk4x12_machine_init,
.init_late = exynos_init_late, .init_late = exynos_init_late,
.init_time = exynos4_timer_init, .init_time = mct_init,
.restart = exynos4_restart, .restart = exynos4_restart,
.reserve = &smdk4x12_reserve, .reserve = &smdk4x12_reserve,
MACHINE_END MACHINE_END
...@@ -423,7 +423,7 @@ MACHINE_START(SMDKV310, "SMDKV310") ...@@ -423,7 +423,7 @@ MACHINE_START(SMDKV310, "SMDKV310")
.init_irq = exynos4_init_irq, .init_irq = exynos4_init_irq,
.map_io = smdkv310_map_io, .map_io = smdkv310_map_io,
.init_machine = smdkv310_machine_init, .init_machine = smdkv310_machine_init,
.init_time = exynos4_timer_init, .init_time = mct_init,
.reserve = &smdkv310_reserve, .reserve = &smdkv310_reserve,
.restart = exynos4_restart, .restart = exynos4_restart,
MACHINE_END MACHINE_END
...@@ -436,7 +436,7 @@ MACHINE_START(SMDKC210, "SMDKC210") ...@@ -436,7 +436,7 @@ MACHINE_START(SMDKC210, "SMDKC210")
.map_io = smdkv310_map_io, .map_io = smdkv310_map_io,
.init_machine = smdkv310_machine_init, .init_machine = smdkv310_machine_init,
.init_late = exynos_init_late, .init_late = exynos_init_late,
.init_time = exynos4_timer_init, .init_time = mct_init,
.reserve = &smdkv310_reserve, .reserve = &smdkv310_reserve,
.restart = exynos4_restart, .restart = exynos4_restart,
MACHINE_END MACHINE_END
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
#include <linux/of.h> #include <linux/of.h>
#include <linux/of_irq.h> #include <linux/of_irq.h>
#include <linux/of_address.h> #include <linux/of_address.h>
#include <linux/clocksource.h>
#include <asm/arch_timer.h> #include <asm/arch_timer.h>
#include <asm/localtimer.h> #include <asm/localtimer.h>
...@@ -507,17 +508,12 @@ static const struct of_device_id exynos_mct_ids[] = { ...@@ -507,17 +508,12 @@ static const struct of_device_id exynos_mct_ids[] = {
{ .compatible = "samsung,exynos4412-mct", .data = (void *)MCT_INT_PPI }, { .compatible = "samsung,exynos4412-mct", .data = (void *)MCT_INT_PPI },
}; };
void __init exynos4_timer_init(void) void __init mct_init(void)
{ {
struct device_node *np = NULL; struct device_node *np = NULL;
const struct of_device_id *match; const struct of_device_id *match;
u32 nr_irqs, i; u32 nr_irqs, i;
if (soc_is_exynos5440()) {
arch_timer_of_register();
return;
}
#ifdef CONFIG_OF #ifdef CONFIG_OF
np = of_find_matching_node_and_match(NULL, exynos_mct_ids, &match); np = of_find_matching_node_and_match(NULL, exynos_mct_ids, &match);
#endif #endif
...@@ -550,3 +546,5 @@ void __init exynos4_timer_init(void) ...@@ -550,3 +546,5 @@ void __init exynos4_timer_init(void)
exynos4_clocksource_init(); exynos4_clocksource_init();
exynos4_clockevent_init(); exynos4_clockevent_init();
} }
CLOCKSOURCE_OF_DECLARE(exynos4210, "samsung,exynos4210-mct", mct_init)
CLOCKSOURCE_OF_DECLARE(exynos4412, "samsung,exynos4412-mct", mct_init)
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment