rk29: timer: try to fix stop on "Calibrating delay loop" bug
author黄涛 <huangtao@rock-chips.com>
Wed, 23 Mar 2011 07:13:08 +0000 (15:13 +0800)
committer黄涛 <huangtao@rock-chips.com>
Wed, 23 Mar 2011 07:16:02 +0000 (15:16 +0800)
arch/arm/mach-rk29/timer.c

index 89f24857346be545bb64f0fb42be2ddfffbf5805..c390129d268f41083621333ba7640f951e994835 100644 (file)
@@ -95,9 +95,12 @@ static void rk29_timer_set_mode(enum clock_event_mode mode, struct clock_event_d
 {
        switch (mode) {
        case CLOCK_EVT_MODE_PERIODIC:
-               RK_TIMER_DISABLE(TIMER_CLKEVT);
-               RK_TIMER_SETCOUNT(TIMER_CLKEVT, 24000000/HZ - 1);
-               RK_TIMER_ENABLE(TIMER_CLKEVT);
+               do {
+                       RK_TIMER_DISABLE(TIMER_CLKEVT);
+                       RK_TIMER_SETCOUNT(TIMER_CLKEVT, 24000000/HZ - 1);
+                       RK_TIMER_ENABLE(TIMER_CLKEVT);
+               } while (RK_TIMER_READVALUE(TIMER_CLKEVT) > (24000000/HZ - 1));
+               break;
        case CLOCK_EVT_MODE_RESUME:
        case CLOCK_EVT_MODE_ONESHOT:
                break;