Commit 3bdd58a4dfaf284868e7b34f29ae74c60ad23ac9

Authored by balrog
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,7 +1645,7 @@ struct pxa2xx_state_s *pxa255_init(unsigned int sdram_size,
1645 1645
1646 pxa25x_timer_init(0x40a00000, &s->pic[PXA2XX_PIC_OST_0], s->env); 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 s->mmc = pxa2xx_mmci_init(0x41100000, s->pic[PXA2XX_PIC_MMC], s->dma); 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,12 +66,7 @@ struct pxa2xx_timer0_s {
66 }; 66 };
67 67
68 struct pxa2xx_timer4_s { 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 int32_t oldclock; 70 int32_t oldclock;
76 int32_t clock; 71 int32_t clock;
77 uint64_t lastload; 72 uint64_t lastload;
@@ -134,7 +129,7 @@ static void pxa2xx_timer_update4(void *opaque, uint64_t now_qemu, int n) @@ -134,7 +129,7 @@ static void pxa2xx_timer_update4(void *opaque, uint64_t now_qemu, int n)
134 s->tm4[counter].lastload, 129 s->tm4[counter].lastload,
135 s->tm4[counter].freq, ticks_per_sec); 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 ticks_per_sec, s->tm4[counter].freq); 133 ticks_per_sec, s->tm4[counter].freq);
139 qemu_mod_timer(s->timer[n].qtimer, new_qemu); 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,7 +157,7 @@ static uint32_t pxa2xx_timer_read(void *opaque, target_phys_addr_t offset)
162 case OSMR4: 157 case OSMR4:
163 if (!s->tm4) 158 if (!s->tm4)
164 goto badreg; 159 goto badreg;
165 - return s->tm4[tm].value; 160 + return s->tm4[tm].tm.value;
166 case OSCR: 161 case OSCR:
167 return s->clock + muldiv64(qemu_get_clock(vm_clock) - 162 return s->clock + muldiv64(qemu_get_clock(vm_clock) -
168 s->lastload, s->freq, ticks_per_sec); 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,7 +240,7 @@ static void pxa2xx_timer_write(void *opaque, target_phys_addr_t offset,
245 case OSMR4: 240 case OSMR4:
246 if (!s->tm4) 241 if (!s->tm4)
247 goto badreg; 242 goto badreg;
248 - s->tm4[tm].value = value; 243 + s->tm4[tm].tm.value = value;
249 pxa2xx_timer_update4(s, qemu_get_clock(vm_clock), tm); 244 pxa2xx_timer_update4(s, qemu_get_clock(vm_clock), tm);
250 break; 245 break;
251 case OSCR: 246 case OSCR:
@@ -282,10 +277,10 @@ static void pxa2xx_timer_write(void *opaque, target_phys_addr_t offset, @@ -282,10 +277,10 @@ static void pxa2xx_timer_write(void *opaque, target_phys_addr_t offset,
282 } 277 }
283 if (s->tm4) { 278 if (s->tm4) {
284 for (i = 0; i < 8; i ++, value >>= 1) 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 if (!(s->events & 0xff0)) 282 if (!(s->events & 0xff0))
288 - qemu_irq_lower(s->tm4->irq); 283 + qemu_irq_lower(s->tm4->tm.irq);
289 } 284 }
290 break; 285 break;
291 case OWER: /* XXX: Reset on OSMR3 match? */ 286 case OWER: /* XXX: Reset on OSMR3 match? */
@@ -362,13 +357,13 @@ static void pxa2xx_timer_tick(void *opaque) @@ -362,13 +357,13 @@ static void pxa2xx_timer_tick(void *opaque)
362 static void pxa2xx_timer_tick4(void *opaque) 357 static void pxa2xx_timer_tick4(void *opaque)
363 { 358 {
364 struct pxa2xx_timer4_s *t = (struct pxa2xx_timer4_s *) opaque; 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 if (t->control & (1 << 3)) 363 if (t->control & (1 << 3))
369 t->clock = 0; 364 t->clock = 0;
370 if (t->control & (1 << 6)) 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 static pxa2xx_timer_info *pxa2xx_timer_init(target_phys_addr_t base, 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,14 +415,14 @@ void pxa27x_timer_init(target_phys_addr_t base,
420 s->tm4 = (struct pxa2xx_timer4_s *) qemu_mallocz(8 * 415 s->tm4 = (struct pxa2xx_timer4_s *) qemu_mallocz(8 *
421 sizeof(struct pxa2xx_timer4_s)); 416 sizeof(struct pxa2xx_timer4_s));
422 for (i = 0; i < 8; i ++) { 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 s->tm4[i].freq = 0; 423 s->tm4[i].freq = 0;
429 s->tm4[i].control = 0x0; 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 pxa2xx_timer_tick4, &s->tm4[i]); 426 pxa2xx_timer_tick4, &s->tm4[i]);
432 } 427 }
433 } 428 }