static int sys_timer_notifier(struct clk *clk, unsigned int cmd, unsigned long wparam, unsigned long lparam) { int ret = 0; struct clk *p; switch(cmd) { case HISILICON_CLK_REGISTER: case HISILICON_CLK_PARENT_SETRATE: p = clk_get_parent(clk); if(p==NULL) break; hisilicon_timer_reload = BUSCLK_TO_TIMER_RELOAD(clk_get_rate(p)); writel(hisilicon_timer_reload, CFG_TIMER_VABASE + REG_TIMER_RELOAD); clk->rate = clk_get_rate(p)/CFG_TIMER_PRESCALE; break; default: ret = hisilicon_clk_default_notifier(clk, cmd, wparam, lparam); break; } return ret; }
static void early_init(void) { unsigned long busclk; edb_trace(); busclk = get_bus_clk(); godarm_timer_reload = BUSCLK_TO_TIMER_RELOAD(busclk); timer0_clk_hz = BUSCLK_TO_TIMER0_CLK_HZ(busclk); timer0_clk_khz = BUSCLK_TO_TIMER0_CLK_KHZ(busclk); timer1_clk_hz = BUSCLK_TO_TIMER1_CLK_HZ(busclk); timer1_clk_khz = BUSCLK_TO_TIMER1_CLK_KHZ(busclk); }