aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/clocksource/bcm_kona_timer.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/clocksource/bcm_kona_timer.c')
-rw-r--r--drivers/clocksource/bcm_kona_timer.c54
1 files changed, 29 insertions, 25 deletions
diff --git a/drivers/clocksource/bcm_kona_timer.c b/drivers/clocksource/bcm_kona_timer.c
index 0d7d8c3ed6b2..0595dc6c453e 100644
--- a/drivers/clocksource/bcm_kona_timer.c
+++ b/drivers/clocksource/bcm_kona_timer.c
@@ -17,6 +17,7 @@
17#include <linux/jiffies.h> 17#include <linux/jiffies.h>
18#include <linux/clockchips.h> 18#include <linux/clockchips.h>
19#include <linux/types.h> 19#include <linux/types.h>
20#include <linux/clk.h>
20 21
21#include <linux/io.h> 22#include <linux/io.h>
22#include <asm/mach/time.h> 23#include <asm/mach/time.h>
@@ -98,30 +99,6 @@ kona_timer_get_counter(void *timer_base, uint32_t *msw, uint32_t *lsw)
98 return; 99 return;
99} 100}
100 101
101static const struct of_device_id bcm_timer_ids[] __initconst = {
102 {.compatible = "brcm,kona-timer"},
103 {.compatible = "bcm,kona-timer"}, /* deprecated name */
104 {},
105};
106
107static void __init kona_timers_init(struct device_node *node)
108{
109 u32 freq;
110
111 if (!of_property_read_u32(node, "clock-frequency", &freq))
112 arch_timer_rate = freq;
113 else
114 panic("clock-frequency not set in the .dts file");
115
116 /* Setup IRQ numbers */
117 timers.tmr_irq = irq_of_parse_and_map(node, 0);
118
119 /* Setup IO addresses */
120 timers.tmr_regs = of_iomap(node, 0);
121
122 kona_timer_disable_and_clear(timers.tmr_regs);
123}
124
125static int kona_timer_set_next_event(unsigned long clc, 102static int kona_timer_set_next_event(unsigned long clc,
126 struct clock_event_device *unused) 103 struct clock_event_device *unused)
127{ 104{
@@ -196,7 +173,34 @@ static struct irqaction kona_timer_irq = {
196 173
197static void __init kona_timer_init(struct device_node *node) 174static void __init kona_timer_init(struct device_node *node)
198{ 175{
199 kona_timers_init(node); 176 u32 freq;
177 struct clk *external_clk;
178
179 if (!of_device_is_available(node)) {
180 pr_info("Kona Timer v1 marked as disabled in device tree\n");
181 return;
182 }
183
184 external_clk = of_clk_get_by_name(node, NULL);
185
186 if (!IS_ERR(external_clk)) {
187 arch_timer_rate = clk_get_rate(external_clk);
188 clk_prepare_enable(external_clk);
189 } else if (!of_property_read_u32(node, "clock-frequency", &freq)) {
190 arch_timer_rate = freq;
191 } else {
192 pr_err("Kona Timer v1 unable to determine clock-frequency");
193 return;
194 }
195
196 /* Setup IRQ numbers */
197 timers.tmr_irq = irq_of_parse_and_map(node, 0);
198
199 /* Setup IO addresses */
200 timers.tmr_regs = of_iomap(node, 0);
201
202 kona_timer_disable_and_clear(timers.tmr_regs);
203
200 kona_timer_clockevents_init(); 204 kona_timer_clockevents_init();
201 setup_irq(timers.tmr_irq, &kona_timer_irq); 205 setup_irq(timers.tmr_irq, &kona_timer_irq);
202 kona_timer_set_next_event((arch_timer_rate / HZ), NULL); 206 kona_timer_set_next_event((arch_timer_rate / HZ), NULL);