|
@@ -22,6 +22,7 @@
|
|
|
#include <linux/of_address.h>
|
|
|
#include <linux/of_irq.h>
|
|
|
#include <linux/clk.h>
|
|
|
+#include <linux/reset.h>
|
|
|
#include <linux/sched_clock.h>
|
|
|
|
|
|
static void __init timer_get_base_and_rate(struct device_node *np,
|
|
@@ -29,12 +30,23 @@ static void __init timer_get_base_and_rate(struct device_node *np,
|
|
|
{
|
|
|
struct clk *timer_clk;
|
|
|
struct clk *pclk;
|
|
|
+ struct reset_control *rstc;
|
|
|
|
|
|
*base = of_iomap(np, 0);
|
|
|
|
|
|
if (!*base)
|
|
|
panic("Unable to map regs for %pOFn", np);
|
|
|
|
|
|
+ /*
|
|
|
+ * Reset the timer if the reset control is available, wiping
|
|
|
+ * out the state the firmware may have left it
|
|
|
+ */
|
|
|
+ rstc = of_reset_control_get(np, NULL);
|
|
|
+ if (!IS_ERR(rstc)) {
|
|
|
+ reset_control_assert(rstc);
|
|
|
+ reset_control_deassert(rstc);
|
|
|
+ }
|
|
|
+
|
|
|
/*
|
|
|
* Not all implementations use a periphal clock, so don't panic
|
|
|
* if it's not present
|