Commit 9d2aa8c7 authored by Linus Walleij's avatar Linus Walleij Committed by Arnd Bergmann

ARM/clocksource: use automatic DT probing for ux500 PRCMU

The ARM core kernel already calls clocksource_of_init() so why
go to all the trouble of locating and probing this node in the
machine. CLOCKSOURCE_OF_DECLARE() will take care of it in the
clocksource driver, and thus we can also get rid of the
dangling header file <linux/clksrc-dbx500-prcmu.h>
Suggested-by: default avatarArnd Bergmann <arndb@linaro.org>
Acked-by: default avatarThomas Gleixner <tglx@linutronix.de>
Acked-by: default avatarDaniel Lezcano <daniel.lezcano@linaro.org>
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
parent 75305275
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
# Makefile for the linux kernel, U8500 machine. # Makefile for the linux kernel, U8500 machine.
# #
obj-y := cpu.o id.o timer.o pm.o obj-y := cpu.o id.o pm.o
obj-$(CONFIG_CACHE_L2X0) += cache-l2x0.o obj-$(CONFIG_CACHE_L2X0) += cache-l2x0.o
obj-$(CONFIG_UX500_SOC_DB8500) += cpu-db8500.o obj-$(CONFIG_UX500_SOC_DB8500) += cpu-db8500.o
obj-$(CONFIG_MACH_MOP500) += board-mop500-regulators.o \ obj-$(CONFIG_MACH_MOP500) += board-mop500-regulators.o \
......
...@@ -156,8 +156,6 @@ static const char * stericsson_dt_platform_compat[] = { ...@@ -156,8 +156,6 @@ static const char * stericsson_dt_platform_compat[] = {
DT_MACHINE_START(U8500_DT, "ST-Ericsson Ux5x0 platform (Device Tree Support)") DT_MACHINE_START(U8500_DT, "ST-Ericsson Ux5x0 platform (Device Tree Support)")
.map_io = u8500_map_io, .map_io = u8500_map_io,
.init_irq = ux500_init_irq, .init_irq = ux500_init_irq,
/* we re-use nomadik timer here */
.init_time = ux500_timer_init,
.init_machine = u8500_init_machine, .init_machine = u8500_init_machine,
.init_late = NULL, .init_late = NULL,
.dt_compat = stericsson_dt_platform_compat, .dt_compat = stericsson_dt_platform_compat,
......
...@@ -9,7 +9,6 @@ ...@@ -9,7 +9,6 @@
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/io.h> #include <linux/io.h>
#include <linux/mfd/dbx500-prcmu.h> #include <linux/mfd/dbx500-prcmu.h>
#include <linux/clksrc-dbx500-prcmu.h>
#include <linux/sys_soc.h> #include <linux/sys_soc.h>
#include <linux/err.h> #include <linux/err.h>
#include <linux/slab.h> #include <linux/slab.h>
......
...@@ -12,7 +12,6 @@ ...@@ -12,7 +12,6 @@
#define __ASM_ARCH_SETUP_H #define __ASM_ARCH_SETUP_H
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
#include <asm/mach/time.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/mfd/abx500/ab8500.h> #include <linux/mfd/abx500/ab8500.h>
...@@ -24,8 +23,6 @@ extern void __init ux500_init_irq(void); ...@@ -24,8 +23,6 @@ extern void __init ux500_init_irq(void);
extern struct device *ux500_soc_device_init(const char *soc_id); extern struct device *ux500_soc_device_init(const char *soc_id);
extern void ux500_timer_init(void);
extern void ux500_cpu_die(unsigned int cpu); extern void ux500_cpu_die(unsigned int cpu);
#endif /* __ASM_ARCH_SETUP_H */ #endif /* __ASM_ARCH_SETUP_H */
/*
* 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/errno.h>
#include <linux/clksrc-dbx500-prcmu.h>
#include <linux/clocksource.h>
#include <linux/of.h>
#include <linux/of_address.h>
#include "setup.h"
#include "db8500-regs.h"
#include "id.h"
static const struct of_device_id prcmu_timer_of_match[] __initconst = {
{ .compatible = "stericsson,db8500-prcmu-timer-4", },
{ },
};
void __init ux500_timer_init(void)
{
void __iomem *prcmu_timer_base;
void __iomem *tmp_base;
struct device_node *np;
if (cpu_is_u8500_family() || cpu_is_ux540_family())
prcmu_timer_base = __io_address(U8500_PRCMU_TIMER_4_BASE);
else
ux500_unknown_soc();
np = of_find_matching_node(NULL, prcmu_timer_of_match);
if (!np)
goto dt_fail;
tmp_base = of_iomap(np, 0);
if (!tmp_base)
goto dt_fail;
prcmu_timer_base = tmp_base;
dt_fail:
clksrc_dbx500_prcmu_init(prcmu_timer_base);
clocksource_probe();
}
...@@ -12,8 +12,9 @@ ...@@ -12,8 +12,9 @@
* power domain. We use the Timer 4 for our always-on clock * power domain. We use the Timer 4 for our always-on clock
* source on DB8500. * source on DB8500.
*/ */
#include <linux/of.h>
#include <linux/of_address.h>
#include <linux/clockchips.h> #include <linux/clockchips.h>
#include <linux/clksrc-dbx500-prcmu.h>
#include <linux/sched_clock.h> #include <linux/sched_clock.h>
#define RATE_32K 32768 #define RATE_32K 32768
...@@ -63,9 +64,9 @@ static u64 notrace dbx500_prcmu_sched_clock_read(void) ...@@ -63,9 +64,9 @@ static u64 notrace dbx500_prcmu_sched_clock_read(void)
#endif #endif
void __init clksrc_dbx500_prcmu_init(void __iomem *base) static void __init clksrc_dbx500_prcmu_init(struct device_node *node)
{ {
clksrc_dbx500_timer_base = base; clksrc_dbx500_timer_base = of_iomap(node, 0);
/* /*
* The A9 sub system expects the timer to be configured as * The A9 sub system expects the timer to be configured as
...@@ -85,3 +86,5 @@ void __init clksrc_dbx500_prcmu_init(void __iomem *base) ...@@ -85,3 +86,5 @@ void __init clksrc_dbx500_prcmu_init(void __iomem *base)
#endif #endif
clocksource_register_hz(&clocksource_dbx500_prcmu, RATE_32K); clocksource_register_hz(&clocksource_dbx500_prcmu, RATE_32K);
} }
CLOCKSOURCE_OF_DECLARE(dbx500_prcmu, "stericsson,db8500-prcmu-timer-4",
clksrc_dbx500_prcmu_init);
/*
* Copyright (C) ST-Ericsson SA 2011
*
* License Terms: GNU General Public License v2
* Author: Mattias Wallin <mattias.wallin@stericsson.com>
*
*/
#ifndef __CLKSRC_DBX500_PRCMU_H
#define __CLKSRC_DBX500_PRCMU_H
#include <linux/init.h>
#include <linux/io.h>
#ifdef CONFIG_CLKSRC_DBX500_PRCMU
void __init clksrc_dbx500_prcmu_init(void __iomem *base);
#else
static inline void __init clksrc_dbx500_prcmu_init(void __iomem *base) {}
#endif
#endif
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