[PATCH v6 07/16] ARM: Exynos: Initialize the clocks prior to timer initialization
Kyungmin Park
kmpark at infradead.org
Mon Feb 18 19:32:45 EST 2013
On Mon, Feb 18, 2013 at 5:21 PM, Thomas Abraham
<thomas.abraham at linaro.org> wrote:
> Since the clock initialization should be completed prior to the mct timer
> initialization, create a new function 'exynos_init_time' that first sets up
> the clock and then invokes the timer initialization function. The 'init_time'
> callback in the board files are updated to invoke this new wrapper function.
>
> Cc: Kukjin Kim <kgene.kim at samsung.com>
> Signed-off-by: Thomas Abraham <thomas.abraham at linaro.org>
> ---
> arch/arm/mach-exynos/common.c | 16 ++++++++++++++++
> arch/arm/mach-exynos/mach-armlex4210.c | 2 +-
> arch/arm/mach-exynos/mach-exynos4-dt.c | 2 +-
> arch/arm/mach-exynos/mach-exynos5-dt.c | 2 +-
> arch/arm/mach-exynos/mach-nuri.c | 2 +-
> arch/arm/mach-exynos/mach-origen.c | 2 +-
> arch/arm/mach-exynos/mach-smdk4x12.c | 4 ++--
> arch/arm/mach-exynos/mach-smdkv310.c | 4 ++--
> arch/arm/mach-exynos/mach-universal_c210.c | 8 +++++++-
> 9 files changed, 32 insertions(+), 10 deletions(-)
>
> diff --git a/arch/arm/mach-exynos/common.c b/arch/arm/mach-exynos/common.c
> index 8e4a25c..64585af 100644
> --- a/arch/arm/mach-exynos/common.c
> +++ b/arch/arm/mach-exynos/common.c
> @@ -23,6 +23,8 @@
> #include <linux/export.h>
> #include <linux/irqdomain.h>
> #include <linux/of_address.h>
> +#include <linux/clocksource.h>
> +#include <linux/clk-provider.h>
>
> #include <asm/proc-fns.h>
> #include <asm/exception.h>
> @@ -436,6 +438,20 @@ static void __init exynos5440_map_io(void)
> iotable_init(exynos5440_iodesc0, ARRAY_SIZE(exynos5440_iodesc0));
> }
>
> +void __init exynos_init_time(void)
> +{
> + if (of_have_populated_dt()) {
> +#ifdef CONFIG_OF
> + of_clk_init(NULL);
> + clocksource_of_init();
> +#endif
> + } else {
> + /* todo: remove after migrating legacy E4 platforms to dt */
> + exynos4_clk_init(NULL);
> + mct_init();
> + }
> +}
> +
> #define COMBINER_ENABLE_SET 0x0
> #define COMBINER_ENABLE_CLEAR 0x4
> #define COMBINER_INT_STATUS 0xC
> diff --git a/arch/arm/mach-exynos/mach-armlex4210.c b/arch/arm/mach-exynos/mach-armlex4210.c
> index e45b4b4..3518ac8 100644
> --- a/arch/arm/mach-exynos/mach-armlex4210.c
> +++ b/arch/arm/mach-exynos/mach-armlex4210.c
> @@ -203,6 +203,6 @@ MACHINE_START(ARMLEX4210, "ARMLEX4210")
> .handle_irq = gic_handle_irq,
> .init_machine = armlex4210_machine_init,
> .init_late = exynos_init_late,
> - .init_time = mct_init,
> + .init_time = exynos_init_time,
> .restart = exynos4_restart,
> MACHINE_END
> diff --git a/arch/arm/mach-exynos/mach-exynos4-dt.c b/arch/arm/mach-exynos/mach-exynos4-dt.c
> index 2c25f2c..6c5e068 100644
> --- a/arch/arm/mach-exynos/mach-exynos4-dt.c
> +++ b/arch/arm/mach-exynos/mach-exynos4-dt.c
> @@ -127,7 +127,7 @@ DT_MACHINE_START(EXYNOS4210_DT, "Samsung Exynos4 (Flattened Device Tree)")
> .init_early = exynos_firmware_init,
> .init_machine = exynos4_dt_machine_init,
> .init_late = exynos_init_late,
> - .init_time = clocksource_of_init,
> + .init_time = exynos_init_time,
> .dt_compat = exynos4_dt_compat,
> .restart = exynos4_restart,
> .reserve = exynos4_reserve,
> diff --git a/arch/arm/mach-exynos/mach-exynos5-dt.c b/arch/arm/mach-exynos/mach-exynos5-dt.c
> index b5f9549..dfe51ee 100644
> --- a/arch/arm/mach-exynos/mach-exynos5-dt.c
> +++ b/arch/arm/mach-exynos/mach-exynos5-dt.c
> @@ -179,7 +179,7 @@ DT_MACHINE_START(EXYNOS5_DT, "SAMSUNG EXYNOS5 (Flattened Device Tree)")
> .handle_irq = gic_handle_irq,
> .init_machine = exynos5_dt_machine_init,
> .init_late = exynos_init_late,
> - .init_time = clocksource_of_init,
> + .init_time = exynos_init_time,
> .dt_compat = exynos5_dt_compat,
> .restart = exynos5_restart,
> .reserve = exynos5_reserve,
> diff --git a/arch/arm/mach-exynos/mach-nuri.c b/arch/arm/mach-exynos/mach-nuri.c
> index c49ec9d..cdae74b 100644
> --- a/arch/arm/mach-exynos/mach-nuri.c
> +++ b/arch/arm/mach-exynos/mach-nuri.c
> @@ -1381,7 +1381,7 @@ MACHINE_START(NURI, "NURI")
> .handle_irq = gic_handle_irq,
> .init_machine = nuri_machine_init,
> .init_late = exynos_init_late,
> - .init_time = mct_init,
> + .init_time = exynos_init_time,
> .reserve = &nuri_reserve,
> .restart = exynos4_restart,
> MACHINE_END
> diff --git a/arch/arm/mach-exynos/mach-origen.c b/arch/arm/mach-exynos/mach-origen.c
> index 656967d..e9ab921 100644
> --- a/arch/arm/mach-exynos/mach-origen.c
> +++ b/arch/arm/mach-exynos/mach-origen.c
> @@ -816,7 +816,7 @@ MACHINE_START(ORIGEN, "ORIGEN")
> .handle_irq = gic_handle_irq,
> .init_machine = origen_machine_init,
> .init_late = exynos_init_late,
> - .init_time = mct_init,
> + .init_time = exynos_init_time,
> .reserve = &origen_reserve,
> .restart = exynos4_restart,
> MACHINE_END
> diff --git a/arch/arm/mach-exynos/mach-smdk4x12.c b/arch/arm/mach-exynos/mach-smdk4x12.c
> index c56cc21..71422ad 100644
> --- a/arch/arm/mach-exynos/mach-smdk4x12.c
> +++ b/arch/arm/mach-exynos/mach-smdk4x12.c
> @@ -377,7 +377,7 @@ MACHINE_START(SMDK4212, "SMDK4212")
> .map_io = smdk4x12_map_io,
> .handle_irq = gic_handle_irq,
> .init_machine = smdk4x12_machine_init,
> - .init_time = mct_init,
> + .init_time = exynos_init_time,
> .restart = exynos4_restart,
> .reserve = &smdk4x12_reserve,
> MACHINE_END
> @@ -392,7 +392,7 @@ MACHINE_START(SMDK4412, "SMDK4412")
> .handle_irq = gic_handle_irq,
> .init_machine = smdk4x12_machine_init,
> .init_late = exynos_init_late,
> - .init_time = mct_init,
> + .init_time = exynos_init_time,
> .restart = exynos4_restart,
> .reserve = &smdk4x12_reserve,
> MACHINE_END
> diff --git a/arch/arm/mach-exynos/mach-smdkv310.c b/arch/arm/mach-exynos/mach-smdkv310.c
> index 9d511f5..eb51c06 100644
> --- a/arch/arm/mach-exynos/mach-smdkv310.c
> +++ b/arch/arm/mach-exynos/mach-smdkv310.c
> @@ -424,7 +424,7 @@ MACHINE_START(SMDKV310, "SMDKV310")
> .map_io = smdkv310_map_io,
> .handle_irq = gic_handle_irq,
> .init_machine = smdkv310_machine_init,
> - .init_time = mct_init,
> + .init_time = exynos_init_time,
> .reserve = &smdkv310_reserve,
> .restart = exynos4_restart,
> MACHINE_END
> @@ -438,7 +438,7 @@ MACHINE_START(SMDKC210, "SMDKC210")
> .handle_irq = gic_handle_irq,
> .init_machine = smdkv310_machine_init,
> .init_late = exynos_init_late,
> - .init_time = mct_init,
> + .init_time = exynos_init_time,
> .reserve = &smdkv310_reserve,
> .restart = exynos4_restart,
> MACHINE_END
> diff --git a/arch/arm/mach-exynos/mach-universal_c210.c b/arch/arm/mach-exynos/mach-universal_c210.c
> index 3998c81..53de074 100644
> --- a/arch/arm/mach-exynos/mach-universal_c210.c
> +++ b/arch/arm/mach-exynos/mach-universal_c210.c
> @@ -1144,6 +1144,12 @@ static void __init universal_machine_init(void)
> platform_add_devices(universal_devices, ARRAY_SIZE(universal_devices));
> }
>
> +static void __init universal_init_time(void)
> +{
> + exynos4_clk_init(NULL);
> + mct_init();
No, It's not support MCT timer at universal board, please don't modify
universal board at this time.
Others are okay.
Thank you,
Kyungmin Park
> +}
> +
> MACHINE_START(UNIVERSAL_C210, "UNIVERSAL_C210")
> /* Maintainer: Kyungmin Park <kyungmin.park at samsung.com> */
> .atag_offset = 0x100,
> @@ -1153,7 +1159,7 @@ MACHINE_START(UNIVERSAL_C210, "UNIVERSAL_C210")
> .handle_irq = gic_handle_irq,
> .init_machine = universal_machine_init,
> .init_late = exynos_init_late,
> - .init_time = samsung_timer_init,
> + .init_time = universal_init_time,
> .reserve = &universal_reserve,
> .restart = exynos4_restart,
> MACHINE_END
> --
> 1.7.5.4
>
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
More information about the devicetree-discuss
mailing list