-#include <debug_uart.h>
#include <fdtdec.h>
#include <asm/io.h>
+#include <asm/global_data.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+/* Timer constants */
+#define APBC_COUNTER_CLK_SEL 0xd4015064
+#define COUNTER_BASE 0xd4101000
+#define COUNTER_EN BIT(0)
+#define COUNTER_HALT_ON_DEBUG BIT(1)
int timer_init(void)
{
- u32 tmp = readl(0xd4015064);
+ u32 tmp = readl(APBC_COUNTER_CLK_SEL);
+
if ((tmp >> 16) != 0x319)
return -1;
- writel(tmp | 1, 0xd4015064);
- writel(3, 0xd4101000);
+ /* Set timer frequency to 26MHz */
+ writel(tmp | 1, APBC_COUNTER_CLK_SEL);
+ writel(COUNTER_EN | COUNTER_HALT_ON_DEBUG, COUNTER_BASE);
+
+ gd->arch.timer_rate_hz = 26000000;
+
return 0;
}