Commit 6d9db39cd9c31084ab782f6ffd2d67e606fb0802
1 parent
d315c888
MCF5208 timer fix.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2926 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
8 additions
and
5 deletions
hw/mcf5208.c
... | ... | @@ -62,9 +62,9 @@ static void m5208_timer_write(m5208_timer_state *s, int offset, |
62 | 62 | prescale = 1 << ((s->pcsr & PCSR_PRE_MASK) >> PCSR_PRE_SHIFT); |
63 | 63 | ptimer_set_freq(s->timer, (SYS_FREQ / 2) / prescale); |
64 | 64 | if (s->pcsr & PCSR_RLD) |
65 | - limit = 0xffff; | |
66 | - else | |
67 | 65 | limit = s->pmr; |
66 | + else | |
67 | + limit = 0xffff; | |
68 | 68 | ptimer_set_limit(s->timer, limit, 0); |
69 | 69 | |
70 | 70 | if (s->pcsr & PCSR_EN) |
... | ... | @@ -73,9 +73,12 @@ static void m5208_timer_write(m5208_timer_state *s, int offset, |
73 | 73 | case 2: |
74 | 74 | s->pmr = value; |
75 | 75 | s->pcsr &= ~PCSR_PIF; |
76 | - if (s->pcsr & PCSR_RLD) | |
77 | - value = 0xffff; | |
78 | - ptimer_set_limit(s->timer, value, s->pcsr & PCSR_OVW); | |
76 | + if ((s->pcsr & PCSR_RLD) == 0) { | |
77 | + if (s->pcsr & PCSR_OVW) | |
78 | + ptimer_set_count(s->timer, value); | |
79 | + } else { | |
80 | + ptimer_set_limit(s->timer, value, s->pcsr & PCSR_OVW); | |
81 | + } | |
79 | 82 | break; |
80 | 83 | case 4: |
81 | 84 | break; | ... | ... |