static int __init twd_local_timer_common_register(void) { int err; twd_evt = alloc_percpu(struct clock_event_device *); if (!twd_evt) { err = -ENOMEM; goto out_free; } err = request_percpu_irq(twd_ppi, twd_handler, "twd", twd_evt); if (err) { pr_err("twd: can't register interrupt %d (%d)\n", twd_ppi, err); goto out_free; } err = local_timer_register(&twd_lt_ops); if (err) goto out_irq; return 0; out_irq: free_percpu_irq(twd_ppi, twd_evt); out_free: iounmap(twd_base); twd_base = NULL; free_percpu(twd_evt); return err; }
static int __init twd_local_timer_common_register(void) { int err; twd_evt = alloc_percpu(struct clock_event_device *); if (!twd_evt) { err = -ENOMEM; goto out_free; } err = request_percpu_irq(twd_ppi, twd_handler, "twd", twd_evt); if (err) { pr_err("twd: can't register interrupt %d (%d)\n", twd_ppi, err); goto out_free; } err = local_timer_register(&twd_lt_ops); if (err) goto out_irq; #ifdef CONFIG_IPIPE_DEBUG_INTERNAL __ipipe_mach_hrtimer_debug = &twd_hrtimer_debug; #endif /* CONFIG_IPIPE_DEBUG_INTERNAL */ return 0; out_irq: free_percpu_irq(twd_ppi, twd_evt); out_free: iounmap(twd_base); twd_base = NULL; free_percpu(twd_evt); return err; }
void __init apb_timer_init(void) { int cpu; tmr_group0_config(); tmr_group1_config(); tmr_group2_config(); setup_sched_clock(mmp_read_sched_clock, 32, CLOCK_TICK_RATE_32KHZ); clockevents_calc_mult_shift(&ckevt, CLOCK_TICK_RATE_32KHZ, 4); ckevt.max_delta_ns = clockevent_delta2ns(MAX_DELTA, &ckevt); ckevt.min_delta_ns = clockevent_delta2ns(MIN_DELTA, &ckevt); ckevt.cpumask = cpumask_of(0); ckevt.irq = IRQ_PXA1088_AP3_TIMER1; setup_irq(ckevt.irq, &timer_irq); clocksource_register_hz(&cksrc, CLOCK_TICK_RATE_32KHZ); clockevents_register_device(&ckevt); for (cpu = 0; cpu < num_possible_cpus(); cpu++) { setup_irq(irq_map[cpu].irq, &irq_map[cpu].irq_act); disable_irq(irq_map[cpu].irq); } local_timer_register(&mmp_percpu_timer_ops); }
void __init sci_timer_init(void) { #ifdef CONFIG_LOCAL_TIMERS #if !defined (CONFIG_HAVE_ARM_ARCH_TIMER) int i = 0, ret = 0; local_timer_register(&sprd_local_timer_ops); for (i = 0; i < CONFIG_NR_CPUS; i++) { ret = request_irq(irq_nr[i], __gptimer_interrupt, IRQF_TIMER | IRQF_NOBALANCING | IRQF_DISABLED | IRQF_PERCPU, "local_timer", local_evt); if (ret) { printk(KERN_ERR "request local timer irq %d failed\n", irq_nr[i]); } } #endif #endif /* setup aon timer timer1 and syscnt as clocksource */ __gptimer_clocksource_init(); __syscnt_clocksource_init("syscnt", 1000); /* setup timer1 of aon timer as clockevent. */ sprd_gptimer_clockevent_init(BC_IRQ, "bctimer", 32768); register_persistent_clock(NULL, sprd_read_persistent_clock); printk(KERN_INFO "sci_timer_init\n"); }
static void __init sirfsoc_clockevent_init(void) { clockevents_calc_mult_shift(&sirfsoc_clockevent, CLOCK_TICK_RATE, 60); sirfsoc_clockevent.max_delta_ns = clockevent_delta2ns(-2, &sirfsoc_clockevent); sirfsoc_clockevent.min_delta_ns = clockevent_delta2ns(2, &sirfsoc_clockevent); sirfsoc_clockevent.cpumask = cpumask_of(0); clockevents_register_device(&sirfsoc_clockevent); #ifdef CONFIG_LOCAL_TIMERS local_timer_register(&sirfsoc_local_timer_ops); #endif }
/** 20140920 * twd를 percpu irq로 등록하고, local timer로 등록한다. **/ static int __init twd_local_timer_common_register(void) { int err; /** 20140913 * clock_event_device용 percpu 변수 할당. **/ twd_evt = alloc_percpu(struct clock_event_device *); if (!twd_evt) { err = -ENOMEM; goto out_free; } /** 20140920 * percpu irq로 twd_ppi(IRQ_LOCALTIMER, 29) 등록. * handler는 twd_handler * dev_id는 twd_evt **/ err = request_percpu_irq(twd_ppi, twd_handler, "twd", twd_evt); if (err) { pr_err("twd: can't register interrupt %d (%d)\n", twd_ppi, err); goto out_free; } /** 20140920 * twd_lt_ops를 local timer operations (lt_ops)로 지정한다. **/ err = local_timer_register(&twd_lt_ops); if (err) goto out_irq; return 0; out_irq: free_percpu_irq(twd_ppi, twd_evt); out_free: iounmap(twd_base); twd_base = NULL; free_percpu(twd_evt); return err; }
static void __init exynos4_timer_resources(void) { struct clk *mct_clk; mct_clk = clk_get(NULL, "xtal"); clk_rate = clk_get_rate(mct_clk); #ifdef CONFIG_LOCAL_TIMERS if (mct_int_type == MCT_INT_PPI) { int err; err = request_percpu_irq(IRQ_MCT_LOCALTIMER, exynos4_mct_tick_isr, "MCT", &percpu_mct_tick); WARN(err, "MCT: can't request IRQ %d (%d)\n", IRQ_MCT_LOCALTIMER, err); } local_timer_register(&exynos4_mct_tick_ops); #endif /* CONFIG_LOCAL_TIMERS */ }
int __init generic_timer_register(void) { int err; if (timer_evt) return -EBUSY; timer_ppi = GIC_PPI_PRIVATE_TIMER; timer_evt = alloc_percpu(struct clock_event_device *); if (!timer_evt) { err = -ENOMEM; goto out_exit; } err = request_percpu_irq(timer_ppi, timer_handler, "timer", timer_evt); if (err) { pr_err("generic timer: can't register interrupt %d (%d)\n", timer_ppi, err); goto out_free; } err = local_timer_register(&generic_timer_ops); if (err) goto out_irq; return 0; out_irq: free_percpu_irq(timer_ppi, timer_evt); out_free: free_percpu(timer_evt); timer_evt = NULL; out_exit: return err; }
void __init tegra_init_late_timer(void) { local_timer_register(&tegra_local_timer_ops); }