|
@@ -130,13 +130,17 @@ static int fttmr010_timer_set_next_event(unsigned long cycles,
|
|
|
cr &= ~fttmr010->t1_enable_val;
|
|
|
writel(cr, fttmr010->base + TIMER_CR);
|
|
|
|
|
|
- /* Setup the match register forward/backward in time */
|
|
|
- cr = readl(fttmr010->base + TIMER1_COUNT);
|
|
|
- if (fttmr010->count_down)
|
|
|
- cr -= cycles;
|
|
|
- else
|
|
|
- cr += cycles;
|
|
|
- writel(cr, fttmr010->base + TIMER1_MATCH1);
|
|
|
+ if (fttmr010->count_down) {
|
|
|
+ /*
|
|
|
+ * ASPEED Timer Controller will load TIMER1_LOAD register
|
|
|
+ * into TIMER1_COUNT register when the timer is re-enabled.
|
|
|
+ */
|
|
|
+ writel(cycles, fttmr010->base + TIMER1_LOAD);
|
|
|
+ } else {
|
|
|
+ /* Setup the match register forward in time */
|
|
|
+ cr = readl(fttmr010->base + TIMER1_COUNT);
|
|
|
+ writel(cr + cycles, fttmr010->base + TIMER1_MATCH1);
|
|
|
+ }
|
|
|
|
|
|
/* Start */
|
|
|
cr = readl(fttmr010->base + TIMER_CR);
|