Commit bd7e2875fe99ca9621c02666e11389602b512f4b
1 parent
6fa13c17
Fix count calculation when counter limit set to 0 (Robert Reif)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3840 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
7 additions
and
2 deletions
hw/slavio_timer.c
@@ -97,9 +97,14 @@ static int slavio_timer_is_user(SLAVIO_TIMERState *s) | @@ -97,9 +97,14 @@ static int slavio_timer_is_user(SLAVIO_TIMERState *s) | ||
97 | // Convert from ptimer countdown units | 97 | // Convert from ptimer countdown units |
98 | static void slavio_timer_get_out(SLAVIO_TIMERState *s) | 98 | static void slavio_timer_get_out(SLAVIO_TIMERState *s) |
99 | { | 99 | { |
100 | - uint64_t count; | 100 | + uint64_t count, limit; |
101 | 101 | ||
102 | - count = s->limit - PERIODS_TO_LIMIT(ptimer_get_count(s->timer)); | 102 | + if (s->limit == 0) /* free-run processor or system counter */ |
103 | + limit = TIMER_MAX_COUNT32; | ||
104 | + else | ||
105 | + limit = s->limit; | ||
106 | + | ||
107 | + count = limit - PERIODS_TO_LIMIT(ptimer_get_count(s->timer)); | ||
103 | DPRINTF("get_out: limit %" PRIx64 " count %x%08x\n", s->limit, | 108 | DPRINTF("get_out: limit %" PRIx64 " count %x%08x\n", s->limit, |
104 | s->counthigh, s->count); | 109 | s->counthigh, s->count); |
105 | s->count = count & TIMER_COUNT_MASK32; | 110 | s->count = count & TIMER_COUNT_MASK32; |