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();
	}
}
Example #2
0
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();
}