void __init time_init(void) { unsigned int year, mon, day, hour, min, sec; extern void arch_gettod(int *year, int *mon, int *day, int *hour, int *min, int *sec); unsigned ctrl; arch_gettod(&year, &mon, &day, &hour, &min, &sec); if ((year += 1900) < 1970) year += 100; xtime.tv_sec = mktime(year, mon, day, hour, min, sec); xtime.tv_nsec = 0; wall_to_monotonic.tv_sec = -xtime.tv_sec; timer_membase = (unsigned long)ioremap((unsigned long)na_timer0, 32); setup_irq(na_timer0_irq, &nios2_timer_irq); write_timerperiod(NIOS2_TIMER_PERIOD - 1); /* clocksource initialize */ nios2_timer.mult = clocksource_hz2mult(nasys_clock_freq, nios2_timer.shift); clocksource_register(&nios2_timer); /* interrupt enable + continuous + start */ ctrl = ALTERA_TIMER_CONTROL_ITO_MSK | ALTERA_TIMER_CONTROL_CONT_MSK | ALTERA_TIMER_CONTROL_START_MSK; outw(ctrl, timer_membase + ALTERA_TIMER_CONTROL_REG); }
static void __init nios2_time_init(struct device_node *timer) { int irq; unsigned int ctrl; timer_membase = of_iomap(timer, 0); if (!timer_membase) panic("Unable to map timer resource\n"); if (of_property_read_u32(timer, "clock-frequency", &timer_freq)) panic("Unable to get timer clock frequency\n"); irq = irq_of_parse_and_map(timer, 0); if (irq < 0) panic("Unable to parse timer irq\n"); if (setup_irq(irq, &nios2_timer_irq)) panic("Unable to setup timer irq\n"); write_timerperiod(NIOS2_TIMER_PERIOD - 1); /* clocksource initialize */ nios2_timer.mult = clocksource_hz2mult(timer_freq, nios2_timer.shift); clocksource_register(&nios2_timer); /* interrupt enable + continuous + start */ ctrl = ALTERA_TIMER_CONTROL_ITO_MSK | ALTERA_TIMER_CONTROL_CONT_MSK | ALTERA_TIMER_CONTROL_START_MSK; outw(ctrl, timer_membase + ALTERA_TIMER_CONTROL_REG); }
void __init nios2_late_time_init(void) { u32 irq; unsigned int ctrl; struct device_node *timer = of_find_compatible_node(NULL, NULL, "ALTR,timer-1.0"); BUG_ON(!timer); timer_membase = of_iomap(timer, 0); if (WARN_ON(!timer_membase)) return; if (of_property_read_u32(timer, "clock-frequency", &timer_freq)) { pr_err("Can't get timer clock-frequency from device tree\n"); return; } irq = irq_of_parse_and_map(timer, 0); if (irq < 0) { pr_err("Can't get timer interrupt\n"); return; } setup_irq(irq, &nios2_timer_irq); write_timerperiod(NIOS2_TIMER_PERIOD - 1); /* clocksource initialize */ nios2_timer.mult = clocksource_hz2mult(timer_freq, nios2_timer.shift); clocksource_register(&nios2_timer); /* interrupt enable + continuous + start */ ctrl = ALTERA_TIMER_CONTROL_ITO_MSK | ALTERA_TIMER_CONTROL_CONT_MSK | ALTERA_TIMER_CONTROL_START_MSK; outw(ctrl, timer_membase + ALTERA_TIMER_CONTROL_REG); }