void coldfire_timer_init(void (*handler)(int, void *, struct pt_regs *)) { volatile unsigned short *timerp; volatile unsigned char *icrp; /* Set up TIMER 1 as poll clock */ timerp = (volatile unsigned short *) (MCF_MBAR + MCFTIMER_BASE1); timerp[MCFTIMER_TMR] = MCFTIMER_TMR_DISABLE; timerp[MCFTIMER_TRR] = (unsigned short) ((MCF_BUSCLK / 16) / HZ); timerp[MCFTIMER_TMR] = MCFTIMER_TMR_ENORI | MCFTIMER_TMR_CLK16 | MCFTIMER_TMR_RESTART | MCFTIMER_TMR_ENABLE; icrp = (volatile unsigned char *) (MCF_MBAR + MCFSIM_TIMER1ICR); #if defined(CONFIG_FLASH_SNAPGEAR) || defined(CONFIG_CLEOPATRA) *icrp = MCFSIM_ICR_AUTOVEC | MCFSIM_ICR_LEVEL6 | MCFSIM_ICR_PRI3; request_irq(30, handler, SA_INTERRUPT, "ColdFire Timer", NULL); #else *icrp = MCFSIM_ICR_AUTOVEC | MCFSIM_ICR_LEVEL5 | MCFSIM_ICR_PRI3; request_irq(29, handler, SA_INTERRUPT, "ColdFire Timer", NULL); #endif #ifdef CONFIG_RESETSWITCH /* This is not really the right place to do this... */ reset_setupbutton(); #endif #ifdef CONFIG_HIGHPROFILE coldfire_profile_init(); #endif mcf_setimr(mcf_getimr() & ~MCFSIM_IMR_TIMER1); }
void hw_timer_init(void) { setup_irq(mcf_timervector, &mcftmr_timer_irq); __raw_writew(MCFTIMER_TMR_DISABLE, TA(MCFTIMER_TMR)); mcftmr_cycles_per_jiffy = FREQ / HZ; /* * The coldfire timer runs from 0 to TRR included, then 0 * again and so on. It counts thus actually TRR + 1 steps * for 1 tick, not TRR. So if you want n cycles, * initialize TRR with n - 1. */ __raw_writetrr(mcftmr_cycles_per_jiffy - 1, TA(MCFTIMER_TRR)); __raw_writew(MCFTIMER_TMR_ENORI | MCFTIMER_TMR_CLK16 | MCFTIMER_TMR_RESTART | MCFTIMER_TMR_ENABLE, TA(MCFTIMER_TMR)); mcftmr_clk.mult = clocksource_hz2mult(FREQ, mcftmr_clk.shift); clocksource_register(&mcftmr_clk); mcf_settimericr(1, mcf_timerlevel); #ifdef CONFIG_HIGHPROFILE coldfire_profile_init(); #endif }
void coldfire_timer_init(irqreturn_t (*handler)(int, void *, struct pt_regs *)) { /* Set up an internal TIMER as poll clock */ mcf_timerp = (volatile struct mcftimer *) (MCF_MBAR + MCFTIMER_BASE1); mcf_timerp->tmr = MCFTIMER_TMR_DISABLE; mcf_timerp->trr = (unsigned short) ((MCF_BUSCLK / 16) / HZ); mcf_timerp->tmr = MCFTIMER_TMR_ENORI | MCFTIMER_TMR_CLK16 | MCFTIMER_TMR_RESTART | MCFTIMER_TMR_ENABLE; request_irq(mcf_timervector, handler, SA_INTERRUPT, "timer", NULL); mcf_settimericr(1, mcf_timerlevel); #ifdef CONFIG_HIGHPROFILE coldfire_profile_init(); #endif }
void coldfire_timer_init(void (*handler)(int, void *, struct pt_regs *)) { volatile unsigned short *timerp; volatile unsigned char *icrp; /* Set up TIMER 1 as poll clock */ timerp = (volatile unsigned short *) (MCF_MBAR + MCFTIMER_BASE1); timerp[MCFTIMER_TMR] = MCFTIMER_TMR_DISABLE; timerp[MCFTIMER_TRR] = (unsigned short) ((MCF_BUSCLK / 16) / HZ); timerp[MCFTIMER_TMR] = MCFTIMER_TMR_ENORI | MCFTIMER_TMR_CLK16 | MCFTIMER_TMR_RESTART | MCFTIMER_TMR_ENABLE; icrp = (volatile unsigned char *) (MCF_MBAR + MCFSIM_TIMER1ICR); *icrp = MCFSIM_ICR_AUTOVEC | MCFSIM_ICR_LEVEL5 | MCFSIM_ICR_PRI3; request_irq(29, handler, SA_INTERRUPT, "ColdFire Timer", NULL); #ifdef CONFIG_HIGHPROFILE coldfire_profile_init(); #endif mcf_setimr(mcf_getimr() & ~MCFSIM_IMR_TIMER1); }
void hw_timer_init(irq_handler_t handler) { __raw_writew(MCFTIMER_TMR_DISABLE, TA(MCFTIMER_TMR)); mcftmr_cycles_per_jiffy = FREQ / HZ; /* * The coldfire timer runs from 0 to TRR included, then 0 * again and so on. It counts thus actually TRR + 1 steps * for 1 tick, not TRR. So if you want n cycles, * initialize TRR with n - 1. */ __raw_writetrr(mcftmr_cycles_per_jiffy - 1, TA(MCFTIMER_TRR)); __raw_writew(MCFTIMER_TMR_ENORI | MCFTIMER_TMR_CLK16 | MCFTIMER_TMR_RESTART | MCFTIMER_TMR_ENABLE, TA(MCFTIMER_TMR)); clocksource_register_hz(&mcftmr_clk, FREQ); timer_interrupt = handler; init_timer_irq(); setup_irq(MCF_IRQ_TIMER, &mcftmr_timer_irq); #ifdef CONFIG_HIGHPROFILE coldfire_profile_init(); #endif }