Commit b1e3be06 authored by Linus Walleij's avatar Linus Walleij

clocksource: fixup ux500 build problems

Based on a patch from Arnd Bergmann this fixes up the build
problem of assigning a non-existing global when the ux500 PRCMU
timer is not linked in by passing its base address to the init
function. We also add a missing <linux/errno.h> inclusion and
staticize the dummy function.

Cc: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent bb219dba
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
* Author: Mattias Wallin <mattias.wallin@stericsson.com> for ST-Ericsson * Author: Mattias Wallin <mattias.wallin@stericsson.com> for ST-Ericsson
*/ */
#include <linux/io.h> #include <linux/io.h>
#include <linux/errno.h>
#include <linux/clksrc-dbx500-prcmu.h> #include <linux/clksrc-dbx500-prcmu.h>
#include <asm/localtimer.h> #include <asm/localtimer.h>
...@@ -16,18 +17,20 @@ ...@@ -16,18 +17,20 @@
static void __init ux500_timer_init(void) static void __init ux500_timer_init(void)
{ {
void __iomem *prcmu_timer_base;
if (cpu_is_u5500()) { if (cpu_is_u5500()) {
#ifdef CONFIG_LOCAL_TIMERS #ifdef CONFIG_LOCAL_TIMERS
twd_base = __io_address(U5500_TWD_BASE); twd_base = __io_address(U5500_TWD_BASE);
#endif #endif
mtu_base = __io_address(U5500_MTU0_BASE); mtu_base = __io_address(U5500_MTU0_BASE);
clksrc_dbx500_timer_base = __io_address(U5500_PRCMU_TIMER_3_BASE); prcmu_timer_base = __io_address(U5500_PRCMU_TIMER_3_BASE);
} else if (cpu_is_u8500()) { } else if (cpu_is_u8500()) {
#ifdef CONFIG_LOCAL_TIMERS #ifdef CONFIG_LOCAL_TIMERS
twd_base = __io_address(U8500_TWD_BASE); twd_base = __io_address(U8500_TWD_BASE);
#endif #endif
mtu_base = __io_address(U8500_MTU0_BASE); mtu_base = __io_address(U8500_MTU0_BASE);
clksrc_dbx500_timer_base = __io_address(U8500_PRCMU_TIMER_4_BASE); prcmu_timer_base = __io_address(U8500_PRCMU_TIMER_4_BASE);
} else { } else {
ux500_unknown_soc(); ux500_unknown_soc();
} }
...@@ -50,7 +53,7 @@ static void __init ux500_timer_init(void) ...@@ -50,7 +53,7 @@ static void __init ux500_timer_init(void)
*/ */
nmdk_timer_init(); nmdk_timer_init();
clksrc_dbx500_prcmu_init(); clksrc_dbx500_prcmu_init(prcmu_timer_base);
} }
static void ux500_timer_reset(void) static void ux500_timer_reset(void)
......
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
#define SCHED_CLOCK_MIN_WRAP 131072 /* 2^32 / 32768 */ #define SCHED_CLOCK_MIN_WRAP 131072 /* 2^32 / 32768 */
void __iomem *clksrc_dbx500_timer_base; static void __iomem *clksrc_dbx500_timer_base;
static cycle_t clksrc_dbx500_prcmu_read(struct clocksource *cs) static cycle_t clksrc_dbx500_prcmu_read(struct clocksource *cs)
{ {
...@@ -79,8 +79,10 @@ static void notrace clksrc_dbx500_prcmu_update_sched_clock(void) ...@@ -79,8 +79,10 @@ static void notrace clksrc_dbx500_prcmu_update_sched_clock(void)
} }
#endif #endif
void __init clksrc_dbx500_prcmu_init(void) void __init clksrc_dbx500_prcmu_init(void __iomem *base)
{ {
clksrc_dbx500_timer_base = base;
/* /*
* The A9 sub system expects the timer to be configured as * The A9 sub system expects the timer to be configured as
* a continous looping timer. * a continous looping timer.
......
...@@ -11,12 +11,10 @@ ...@@ -11,12 +11,10 @@
#include <linux/init.h> #include <linux/init.h>
#include <linux/io.h> #include <linux/io.h>
extern void __iomem *clksrc_dbx500_timer_base;
#ifdef CONFIG_CLKSRC_DBX500_PRCMU #ifdef CONFIG_CLKSRC_DBX500_PRCMU
void __init clksrc_dbx500_prcmu_init(void); void __init clksrc_dbx500_prcmu_init(void __iomem *base);
#else #else
void __init clksrc_dbx500_prcmu_init(void) {} static inline void __init clksrc_dbx500_prcmu_init(void __iomem *base) {}
#endif #endif
#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