static void sprd_init_time(void) { if(of_have_populated_dt()){ sc8830_pmu_init(); of_clk_init(NULL); clocksource_of_init(); }else{ sci_clock_init(); sci_enable_timer_early(); sci_timer_init(); } }
static void __init sprd_init_timer(struct device_node *np) { struct resource res; int i, ret; int syscnt_irqnr = 0; printk("%s \n", __func__); ret = of_address_to_resource(np, 0, &res); if (ret < 0) panic("Can't get syscnt registers!\n"); base_syscnt = ioremap_nocache(res.start, res.end - res.start); if (!base_syscnt) panic("ioremap_nocache failed!"); syscnt_irqnr = irq_of_parse_and_map(np, 5); if (syscnt_irqnr < 0) panic("Can't map ap system timer irq!\n"); ret = request_irq(syscnt_irqnr, sys_cnt_isr, IRQF_TRIGGER_HIGH | IRQF_NO_SUSPEND, "sys_cnt", NULL); if (ret) panic("sys cnt isr register failed\n"); for (i = 0; i < LOCAL_TIMER_CNT; i++) { void *vaddr; ret = of_address_to_resource(np, i + 1, &res); if (ret < 0) panic("Can't get timer %d registers for local timer", i + 1); vaddr = ioremap_nocache(res.start, resource_size(&res)); if (vaddr) base_gptimer[i] = vaddr; else panic("ioremap_nocache failed!"); } BC_IRQ = irq_of_parse_and_map(np, 0); if (BC_IRQ < 0) panic("Can't map bc irq"); for (i = 0; i < LOCAL_TIMER_CNT; i++) { *(irq_nr + i) = irq_of_parse_and_map(np, i + 1); if (*(irq_nr + i) < 0) panic("Can't map bc irq"); } of_node_put(np); sci_enable_timer_early(); sci_timer_init(); }