Commit bd7e2875fe99ca9621c02666e11389602b512f4b

Authored by blueswir1
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;