diff options
Diffstat (limited to 'drivers/clocksource/mips-gic-timer.c')
-rw-r--r-- | drivers/clocksource/mips-gic-timer.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/drivers/clocksource/mips-gic-timer.c b/drivers/clocksource/mips-gic-timer.c index 3bd31b1321f6..b81ed1a5342d 100644 --- a/drivers/clocksource/mips-gic-timer.c +++ b/drivers/clocksource/mips-gic-timer.c | |||
@@ -5,6 +5,7 @@ | |||
5 | * | 5 | * |
6 | * Copyright (C) 2012 MIPS Technologies, Inc. All rights reserved. | 6 | * Copyright (C) 2012 MIPS Technologies, Inc. All rights reserved. |
7 | */ | 7 | */ |
8 | #include <linux/clk.h> | ||
8 | #include <linux/clockchips.h> | 9 | #include <linux/clockchips.h> |
9 | #include <linux/cpu.h> | 10 | #include <linux/cpu.h> |
10 | #include <linux/init.h> | 11 | #include <linux/init.h> |
@@ -133,6 +134,9 @@ static void __init __gic_clocksource_init(void) | |||
133 | clocksource_register_hz(&gic_clocksource, gic_frequency); | 134 | clocksource_register_hz(&gic_clocksource, gic_frequency); |
134 | 135 | ||
135 | gic_clockevent_init(); | 136 | gic_clockevent_init(); |
137 | |||
138 | /* And finally start the counter */ | ||
139 | gic_start_count(); | ||
136 | } | 140 | } |
137 | 141 | ||
138 | void __init gic_clocksource_init(unsigned int frequency) | 142 | void __init gic_clocksource_init(unsigned int frequency) |
@@ -146,11 +150,18 @@ void __init gic_clocksource_init(unsigned int frequency) | |||
146 | 150 | ||
147 | static void __init gic_clocksource_of_init(struct device_node *node) | 151 | static void __init gic_clocksource_of_init(struct device_node *node) |
148 | { | 152 | { |
153 | struct clk *clk; | ||
154 | |||
149 | if (WARN_ON(!gic_present || !node->parent || | 155 | if (WARN_ON(!gic_present || !node->parent || |
150 | !of_device_is_compatible(node->parent, "mti,gic"))) | 156 | !of_device_is_compatible(node->parent, "mti,gic"))) |
151 | return; | 157 | return; |
152 | 158 | ||
153 | if (of_property_read_u32(node, "clock-frequency", &gic_frequency)) { | 159 | clk = of_clk_get(node, 0); |
160 | if (!IS_ERR(clk)) { | ||
161 | gic_frequency = clk_get_rate(clk); | ||
162 | clk_put(clk); | ||
163 | } else if (of_property_read_u32(node, "clock-frequency", | ||
164 | &gic_frequency)) { | ||
154 | pr_err("GIC frequency not specified.\n"); | 165 | pr_err("GIC frequency not specified.\n"); |
155 | return; | 166 | return; |
156 | } | 167 | } |