|
@@ -41,6 +41,7 @@
|
|
|
#define MPIC_TIMER_TCR_ROVR_OFFSET 24
|
|
|
|
|
|
#define TIMER_STOP 0x80000000
|
|
|
+#define GTCCR_TOG 0x80000000
|
|
|
#define TIMERS_PER_GROUP 4
|
|
|
#define MAX_TICKS (~0U >> 1)
|
|
|
#define MAX_TICKS_CASCADE (~0U)
|
|
@@ -327,11 +328,13 @@ void mpic_get_remain_time(struct mpic_timer *handle, struct timeval *time)
|
|
|
casc_priv = priv->timer[handle->num].cascade_handle;
|
|
|
if (casc_priv) {
|
|
|
tmp_ticks = in_be32(&priv->regs[handle->num].gtccr);
|
|
|
+ tmp_ticks &= ~GTCCR_TOG;
|
|
|
ticks = ((u64)tmp_ticks & UINT_MAX) * (u64)MAX_TICKS_CASCADE;
|
|
|
tmp_ticks = in_be32(&priv->regs[handle->num - 1].gtccr);
|
|
|
ticks += tmp_ticks;
|
|
|
} else {
|
|
|
ticks = in_be32(&priv->regs[handle->num].gtccr);
|
|
|
+ ticks &= ~GTCCR_TOG;
|
|
|
}
|
|
|
|
|
|
convert_ticks_to_time(priv, ticks, time);
|