Commit 3bdd58a4dfaf284868e7b34f29ae74c60ad23ac9
1 parent
9617efe8
Correct the number of PXA255 GPIO lines. Reuse the PXA timers struct for PXA27x additional timers.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2789 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
2 changed files
with
17 additions
and
22 deletions
hw/pxa2xx.c
| ... | ... | @@ -1645,7 +1645,7 @@ struct pxa2xx_state_s *pxa255_init(unsigned int sdram_size, |
| 1645 | 1645 | |
| 1646 | 1646 | pxa25x_timer_init(0x40a00000, &s->pic[PXA2XX_PIC_OST_0], s->env); |
| 1647 | 1647 | |
| 1648 | - s->gpio = pxa2xx_gpio_init(0x40e00000, s->env, s->pic, 121); | |
| 1648 | + s->gpio = pxa2xx_gpio_init(0x40e00000, s->env, s->pic, 85); | |
| 1649 | 1649 | |
| 1650 | 1650 | s->mmc = pxa2xx_mmci_init(0x41100000, s->pic[PXA2XX_PIC_MMC], s->dma); |
| 1651 | 1651 | ... | ... |
hw/pxa2xx_timer.c
| ... | ... | @@ -66,12 +66,7 @@ struct pxa2xx_timer0_s { |
| 66 | 66 | }; |
| 67 | 67 | |
| 68 | 68 | struct pxa2xx_timer4_s { |
| 69 | - uint32_t value; | |
| 70 | - int level; | |
| 71 | - qemu_irq irq; | |
| 72 | - QEMUTimer *qtimer; | |
| 73 | - int num; | |
| 74 | - void *info; | |
| 69 | + struct pxa2xx_timer0_s tm; | |
| 75 | 70 | int32_t oldclock; |
| 76 | 71 | int32_t clock; |
| 77 | 72 | uint64_t lastload; |
| ... | ... | @@ -134,7 +129,7 @@ static void pxa2xx_timer_update4(void *opaque, uint64_t now_qemu, int n) |
| 134 | 129 | s->tm4[counter].lastload, |
| 135 | 130 | s->tm4[counter].freq, ticks_per_sec); |
| 136 | 131 | |
| 137 | - new_qemu = now_qemu + muldiv64((uint32_t) (s->tm4[n].value - now_vm), | |
| 132 | + new_qemu = now_qemu + muldiv64((uint32_t) (s->tm4[n].tm.value - now_vm), | |
| 138 | 133 | ticks_per_sec, s->tm4[counter].freq); |
| 139 | 134 | qemu_mod_timer(s->timer[n].qtimer, new_qemu); |
| 140 | 135 | } |
| ... | ... | @@ -162,7 +157,7 @@ static uint32_t pxa2xx_timer_read(void *opaque, target_phys_addr_t offset) |
| 162 | 157 | case OSMR4: |
| 163 | 158 | if (!s->tm4) |
| 164 | 159 | goto badreg; |
| 165 | - return s->tm4[tm].value; | |
| 160 | + return s->tm4[tm].tm.value; | |
| 166 | 161 | case OSCR: |
| 167 | 162 | return s->clock + muldiv64(qemu_get_clock(vm_clock) - |
| 168 | 163 | s->lastload, s->freq, ticks_per_sec); |
| ... | ... | @@ -245,7 +240,7 @@ static void pxa2xx_timer_write(void *opaque, target_phys_addr_t offset, |
| 245 | 240 | case OSMR4: |
| 246 | 241 | if (!s->tm4) |
| 247 | 242 | goto badreg; |
| 248 | - s->tm4[tm].value = value; | |
| 243 | + s->tm4[tm].tm.value = value; | |
| 249 | 244 | pxa2xx_timer_update4(s, qemu_get_clock(vm_clock), tm); |
| 250 | 245 | break; |
| 251 | 246 | case OSCR: |
| ... | ... | @@ -282,10 +277,10 @@ static void pxa2xx_timer_write(void *opaque, target_phys_addr_t offset, |
| 282 | 277 | } |
| 283 | 278 | if (s->tm4) { |
| 284 | 279 | for (i = 0; i < 8; i ++, value >>= 1) |
| 285 | - if (s->tm4[i].level && (value & 1)) | |
| 286 | - s->tm4[i].level = 0; | |
| 280 | + if (s->tm4[i].tm.level && (value & 1)) | |
| 281 | + s->tm4[i].tm.level = 0; | |
| 287 | 282 | if (!(s->events & 0xff0)) |
| 288 | - qemu_irq_lower(s->tm4->irq); | |
| 283 | + qemu_irq_lower(s->tm4->tm.irq); | |
| 289 | 284 | } |
| 290 | 285 | break; |
| 291 | 286 | case OWER: /* XXX: Reset on OSMR3 match? */ |
| ... | ... | @@ -362,13 +357,13 @@ static void pxa2xx_timer_tick(void *opaque) |
| 362 | 357 | static void pxa2xx_timer_tick4(void *opaque) |
| 363 | 358 | { |
| 364 | 359 | struct pxa2xx_timer4_s *t = (struct pxa2xx_timer4_s *) opaque; |
| 365 | - pxa2xx_timer_info *i = (pxa2xx_timer_info *) t->info; | |
| 360 | + pxa2xx_timer_info *i = (pxa2xx_timer_info *) t->tm.info; | |
| 366 | 361 | |
| 367 | - pxa2xx_timer_tick(opaque); | |
| 362 | + pxa2xx_timer_tick(&t->tm); | |
| 368 | 363 | if (t->control & (1 << 3)) |
| 369 | 364 | t->clock = 0; |
| 370 | 365 | if (t->control & (1 << 6)) |
| 371 | - pxa2xx_timer_update4(i, qemu_get_clock(vm_clock), t->num - 4); | |
| 366 | + pxa2xx_timer_update4(i, qemu_get_clock(vm_clock), t->tm.num - 4); | |
| 372 | 367 | } |
| 373 | 368 | |
| 374 | 369 | static pxa2xx_timer_info *pxa2xx_timer_init(target_phys_addr_t base, |
| ... | ... | @@ -420,14 +415,14 @@ void pxa27x_timer_init(target_phys_addr_t base, |
| 420 | 415 | s->tm4 = (struct pxa2xx_timer4_s *) qemu_mallocz(8 * |
| 421 | 416 | sizeof(struct pxa2xx_timer4_s)); |
| 422 | 417 | for (i = 0; i < 8; i ++) { |
| 423 | - s->tm4[i].value = 0; | |
| 424 | - s->tm4[i].irq = irq4; | |
| 425 | - s->tm4[i].info = s; | |
| 426 | - s->tm4[i].num = i + 4; | |
| 427 | - s->tm4[i].level = 0; | |
| 418 | + s->tm4[i].tm.value = 0; | |
| 419 | + s->tm4[i].tm.irq = irq4; | |
| 420 | + s->tm4[i].tm.info = s; | |
| 421 | + s->tm4[i].tm.num = i + 4; | |
| 422 | + s->tm4[i].tm.level = 0; | |
| 428 | 423 | s->tm4[i].freq = 0; |
| 429 | 424 | s->tm4[i].control = 0x0; |
| 430 | - s->tm4[i].qtimer = qemu_new_timer(vm_clock, | |
| 425 | + s->tm4[i].tm.qtimer = qemu_new_timer(vm_clock, | |
| 431 | 426 | pxa2xx_timer_tick4, &s->tm4[i]); |
| 432 | 427 | } |
| 433 | 428 | } | ... | ... |