Correct NAND erase block size. Misc fixes in Spitz code.
[qemu] / hw / pxa2xx.c
1 /*
2  * Intel XScale PXA255/270 processor support.
3  *
4  * Copyright (c) 2006 Openedhand Ltd.
5  * Written by Andrzej Zaborowski <balrog@zabor.org>
6  *
7  * This code is licenced under the GPL.
8  */
9
10 # include "vl.h"
11
12 static struct {
13     target_phys_addr_t io_base;
14     int irqn;
15 } pxa255_serial[] = {
16     { 0x40100000, PXA2XX_PIC_FFUART },
17     { 0x40200000, PXA2XX_PIC_BTUART },
18     { 0x40700000, PXA2XX_PIC_STUART },
19     { 0x41600000, PXA25X_PIC_HWUART },
20     { 0, 0 }
21 }, pxa270_serial[] = {
22     { 0x40100000, PXA2XX_PIC_FFUART },
23     { 0x40200000, PXA2XX_PIC_BTUART },
24     { 0x40700000, PXA2XX_PIC_STUART },
25     { 0, 0 }
26 };
27
28 static struct {
29     target_phys_addr_t io_base;
30     int irqn;
31 } pxa250_ssp[] = {
32     { 0x41000000, PXA2XX_PIC_SSP },
33     { 0, 0 }
34 }, pxa255_ssp[] = {
35     { 0x41000000, PXA2XX_PIC_SSP },
36     { 0x41400000, PXA25X_PIC_NSSP },
37     { 0, 0 }
38 }, pxa26x_ssp[] = {
39     { 0x41000000, PXA2XX_PIC_SSP },
40     { 0x41400000, PXA25X_PIC_NSSP },
41     { 0x41500000, PXA26X_PIC_ASSP },
42     { 0, 0 }
43 }, pxa27x_ssp[] = {
44     { 0x41000000, PXA2XX_PIC_SSP },
45     { 0x41700000, PXA27X_PIC_SSP2 },
46     { 0x41900000, PXA2XX_PIC_SSP3 },
47     { 0, 0 }
48 };
49
50 #define PMCR    0x00    /* Power Manager Control register */
51 #define PSSR    0x04    /* Power Manager Sleep Status register */
52 #define PSPR    0x08    /* Power Manager Scratch-Pad register */
53 #define PWER    0x0c    /* Power Manager Wake-Up Enable register */
54 #define PRER    0x10    /* Power Manager Rising-Edge Detect Enable register */
55 #define PFER    0x14    /* Power Manager Falling-Edge Detect Enable register */
56 #define PEDR    0x18    /* Power Manager Edge-Detect Status register */
57 #define PCFR    0x1c    /* Power Manager General Configuration register */
58 #define PGSR0   0x20    /* Power Manager GPIO Sleep-State register 0 */
59 #define PGSR1   0x24    /* Power Manager GPIO Sleep-State register 1 */
60 #define PGSR2   0x28    /* Power Manager GPIO Sleep-State register 2 */
61 #define PGSR3   0x2c    /* Power Manager GPIO Sleep-State register 3 */
62 #define RCSR    0x30    /* Reset Controller Status register */
63 #define PSLR    0x34    /* Power Manager Sleep Configuration register */
64 #define PTSR    0x38    /* Power Manager Standby Configuration register */
65 #define PVCR    0x40    /* Power Manager Voltage Change Control register */
66 #define PUCR    0x4c    /* Power Manager USIM Card Control/Status register */
67 #define PKWR    0x50    /* Power Manager Keyboard Wake-Up Enable register */
68 #define PKSR    0x54    /* Power Manager Keyboard Level-Detect Status */
69 #define PCMD0   0x80    /* Power Manager I2C Command register File 0 */
70 #define PCMD31  0xfc    /* Power Manager I2C Command register File 31 */
71
72 static uint32_t pxa2xx_pm_read(void *opaque, target_phys_addr_t addr)
73 {
74     struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
75     addr -= s->pm_base;
76
77     switch (addr) {
78     case PMCR ... PCMD31:
79         if (addr & 3)
80             goto fail;
81
82         return s->pm_regs[addr >> 2];
83     default:
84     fail:
85         printf("%s: Bad register " REG_FMT "\n", __FUNCTION__, addr);
86         break;
87     }
88     return 0;
89 }
90
91 static void pxa2xx_pm_write(void *opaque, target_phys_addr_t addr,
92                 uint32_t value)
93 {
94     struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
95     addr -= s->pm_base;
96
97     switch (addr) {
98     case PMCR:
99         s->pm_regs[addr >> 2] &= 0x15 & ~(value & 0x2a);
100         s->pm_regs[addr >> 2] |= value & 0x15;
101         break;
102
103     case PSSR:  /* Read-clean registers */
104     case RCSR:
105     case PKSR:
106         s->pm_regs[addr >> 2] &= ~value;
107         break;
108
109     default:    /* Read-write registers */
110         if (addr >= PMCR && addr <= PCMD31 && !(addr & 3)) {
111             s->pm_regs[addr >> 2] = value;
112             break;
113         }
114
115         printf("%s: Bad register " REG_FMT "\n", __FUNCTION__, addr);
116         break;
117     }
118 }
119
120 static CPUReadMemoryFunc *pxa2xx_pm_readfn[] = {
121     pxa2xx_pm_read,
122     pxa2xx_pm_read,
123     pxa2xx_pm_read,
124 };
125
126 static CPUWriteMemoryFunc *pxa2xx_pm_writefn[] = {
127     pxa2xx_pm_write,
128     pxa2xx_pm_write,
129     pxa2xx_pm_write,
130 };
131
132 #define CCCR    0x00    /* Core Clock Configuration register */
133 #define CKEN    0x04    /* Clock Enable register */
134 #define OSCC    0x08    /* Oscillator Configuration register */
135 #define CCSR    0x0c    /* Core Clock Status register */
136
137 static uint32_t pxa2xx_cm_read(void *opaque, target_phys_addr_t addr)
138 {
139     struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
140     addr -= s->cm_base;
141
142     switch (addr) {
143     case CCCR:
144     case CKEN:
145     case OSCC:
146         return s->cm_regs[addr >> 2];
147
148     case CCSR:
149         return s->cm_regs[CCCR >> 2] | (3 << 28);
150
151     default:
152         printf("%s: Bad register " REG_FMT "\n", __FUNCTION__, addr);
153         break;
154     }
155     return 0;
156 }
157
158 static void pxa2xx_cm_write(void *opaque, target_phys_addr_t addr,
159                 uint32_t value)
160 {
161     struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
162     addr -= s->cm_base;
163
164     switch (addr) {
165     case CCCR:
166     case CKEN:
167         s->cm_regs[addr >> 2] = value;
168         break;
169
170     case OSCC:
171         s->cm_regs[addr >> 2] &= ~0x6c;
172         s->cm_regs[addr >> 2] |= value & 0x6e;
173         if ((value >> 1) & 1)                   /* OON */
174             s->cm_regs[addr >> 2] |= 1 << 0;    /* Oscillator is now stable */
175         break;
176
177     default:
178         printf("%s: Bad register " REG_FMT "\n", __FUNCTION__, addr);
179         break;
180     }
181 }
182
183 static CPUReadMemoryFunc *pxa2xx_cm_readfn[] = {
184     pxa2xx_cm_read,
185     pxa2xx_cm_read,
186     pxa2xx_cm_read,
187 };
188
189 static CPUWriteMemoryFunc *pxa2xx_cm_writefn[] = {
190     pxa2xx_cm_write,
191     pxa2xx_cm_write,
192     pxa2xx_cm_write,
193 };
194
195 static uint32_t pxa2xx_clkpwr_read(void *opaque, int op2, int reg, int crm)
196 {
197     struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
198
199     switch (reg) {
200     case 6:     /* Clock Configuration register */
201         return s->clkcfg;
202
203     case 7:     /* Power Mode register */
204         return 0;
205
206     default:
207         printf("%s: Bad register 0x%x\n", __FUNCTION__, reg);
208         break;
209     }
210     return 0;
211 }
212
213 static void pxa2xx_clkpwr_write(void *opaque, int op2, int reg, int crm,
214                 uint32_t value)
215 {
216     struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
217     static const char *pwrmode[8] = {
218         "Normal", "Idle", "Deep-idle", "Standby",
219         "Sleep", "reserved (!)", "reserved (!)", "Deep-sleep",
220     };
221
222     switch (reg) {
223     case 6:     /* Clock Configuration register */
224         s->clkcfg = value & 0xf;
225         if (value & 2)
226             printf("%s: CPU frequency change attempt\n", __FUNCTION__);
227         break;
228
229     case 7:     /* Power Mode register */
230         if (value & 8)
231             printf("%s: CPU voltage change attempt\n", __FUNCTION__);
232         switch (value & 7) {
233         case 0:
234             /* Do nothing */
235             break;
236
237         case 1:
238             /* Idle */
239             if (!(s->cm_regs[CCCR] & (1 << 31))) {      /* CPDIS */
240                 cpu_interrupt(s->env, CPU_INTERRUPT_HALT);
241                 break;
242             }
243             /* Fall through.  */
244
245         case 2:
246             /* Deep-Idle */
247             cpu_interrupt(s->env, CPU_INTERRUPT_HALT);
248             s->pm_regs[RCSR >> 2] |= 0x8;       /* Set GPR */
249             goto message;
250
251         case 3:
252             s->env->uncached_cpsr =
253                     ARM_CPU_MODE_SVC | CPSR_A | CPSR_F | CPSR_I;
254             s->env->cp15.c1_sys = 0;
255             s->env->cp15.c1_coproc = 0;
256             s->env->cp15.c2_base = 0;
257             s->env->cp15.c3 = 0;
258             s->pm_regs[PSSR >> 2] |= 0x8;       /* Set STS */
259             s->pm_regs[RCSR >> 2] |= 0x8;       /* Set GPR */
260
261             /*
262              * The scratch-pad register is almost universally used
263              * for storing the return address on suspend.  For the
264              * lack of a resuming bootloader, perform a jump
265              * directly to that address.
266              */
267             memset(s->env->regs, 0, 4 * 15);
268             s->env->regs[15] = s->pm_regs[PSPR >> 2];
269
270 #if 0
271             buffer = 0xe59ff000;        /* ldr     pc, [pc, #0] */
272             cpu_physical_memory_write(0, &buffer, 4);
273             buffer = s->pm_regs[PSPR >> 2];
274             cpu_physical_memory_write(8, &buffer, 4);
275 #endif
276
277             /* Suspend */
278             cpu_interrupt(cpu_single_env, CPU_INTERRUPT_HALT);
279
280             goto message;
281
282         default:
283         message:
284             printf("%s: machine entered %s mode\n", __FUNCTION__,
285                             pwrmode[value & 7]);
286         }
287         break;
288
289     default:
290         printf("%s: Bad register 0x%x\n", __FUNCTION__, reg);
291         break;
292     }
293 }
294
295 /* Performace Monitoring Registers */
296 #define CPPMNC          0       /* Performance Monitor Control register */
297 #define CPCCNT          1       /* Clock Counter register */
298 #define CPINTEN         4       /* Interrupt Enable register */
299 #define CPFLAG          5       /* Overflow Flag register */
300 #define CPEVTSEL        8       /* Event Selection register */
301
302 #define CPPMN0          0       /* Performance Count register 0 */
303 #define CPPMN1          1       /* Performance Count register 1 */
304 #define CPPMN2          2       /* Performance Count register 2 */
305 #define CPPMN3          3       /* Performance Count register 3 */
306
307 static uint32_t pxa2xx_perf_read(void *opaque, int op2, int reg, int crm)
308 {
309     struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
310
311     switch (reg) {
312     case CPPMNC:
313         return s->pmnc;
314     case CPCCNT:
315         if (s->pmnc & 1)
316             return qemu_get_clock(vm_clock);
317         else
318             return 0;
319     case CPINTEN:
320     case CPFLAG:
321     case CPEVTSEL:
322         return 0;
323
324     default:
325         printf("%s: Bad register 0x%x\n", __FUNCTION__, reg);
326         break;
327     }
328     return 0;
329 }
330
331 static void pxa2xx_perf_write(void *opaque, int op2, int reg, int crm,
332                 uint32_t value)
333 {
334     struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
335
336     switch (reg) {
337     case CPPMNC:
338         s->pmnc = value;
339         break;
340
341     case CPCCNT:
342     case CPINTEN:
343     case CPFLAG:
344     case CPEVTSEL:
345         break;
346
347     default:
348         printf("%s: Bad register 0x%x\n", __FUNCTION__, reg);
349         break;
350     }
351 }
352
353 static uint32_t pxa2xx_cp14_read(void *opaque, int op2, int reg, int crm)
354 {
355     switch (crm) {
356     case 0:
357         return pxa2xx_clkpwr_read(opaque, op2, reg, crm);
358     case 1:
359         return pxa2xx_perf_read(opaque, op2, reg, crm);
360     case 2:
361         switch (reg) {
362         case CPPMN0:
363         case CPPMN1:
364         case CPPMN2:
365         case CPPMN3:
366             return 0;
367         }
368         /* Fall through */
369     default:
370         printf("%s: Bad register 0x%x\n", __FUNCTION__, reg);
371         break;
372     }
373     return 0;
374 }
375
376 static void pxa2xx_cp14_write(void *opaque, int op2, int reg, int crm,
377                 uint32_t value)
378 {
379     switch (crm) {
380     case 0:
381         pxa2xx_clkpwr_write(opaque, op2, reg, crm, value);
382         break;
383     case 1:
384         pxa2xx_perf_write(opaque, op2, reg, crm, value);
385         break;
386     case 2:
387         switch (reg) {
388         case CPPMN0:
389         case CPPMN1:
390         case CPPMN2:
391         case CPPMN3:
392             return;
393         }
394         /* Fall through */
395     default:
396         printf("%s: Bad register 0x%x\n", __FUNCTION__, reg);
397         break;
398     }
399 }
400
401 #define MDCNFG          0x00    /* SDRAM Configuration register */
402 #define MDREFR          0x04    /* SDRAM Refresh Control register */
403 #define MSC0            0x08    /* Static Memory Control register 0 */
404 #define MSC1            0x0c    /* Static Memory Control register 1 */
405 #define MSC2            0x10    /* Static Memory Control register 2 */
406 #define MECR            0x14    /* Expansion Memory Bus Config register */
407 #define SXCNFG          0x1c    /* Synchronous Static Memory Config register */
408 #define MCMEM0          0x28    /* PC Card Memory Socket 0 Timing register */
409 #define MCMEM1          0x2c    /* PC Card Memory Socket 1 Timing register */
410 #define MCATT0          0x30    /* PC Card Attribute Socket 0 register */
411 #define MCATT1          0x34    /* PC Card Attribute Socket 1 register */
412 #define MCIO0           0x38    /* PC Card I/O Socket 0 Timing register */
413 #define MCIO1           0x3c    /* PC Card I/O Socket 1 Timing register */
414 #define MDMRS           0x40    /* SDRAM Mode Register Set Config register */
415 #define BOOT_DEF        0x44    /* Boot-time Default Configuration register */
416 #define ARB_CNTL        0x48    /* Arbiter Control register */
417 #define BSCNTR0         0x4c    /* Memory Buffer Strength Control register 0 */
418 #define BSCNTR1         0x50    /* Memory Buffer Strength Control register 1 */
419 #define LCDBSCNTR       0x54    /* LCD Buffer Strength Control register */
420 #define MDMRSLP         0x58    /* Low Power SDRAM Mode Set Config register */
421 #define BSCNTR2         0x5c    /* Memory Buffer Strength Control register 2 */
422 #define BSCNTR3         0x60    /* Memory Buffer Strength Control register 3 */
423 #define SA1110          0x64    /* SA-1110 Memory Compatibility register */
424
425 static uint32_t pxa2xx_mm_read(void *opaque, target_phys_addr_t addr)
426 {
427     struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
428     addr -= s->mm_base;
429
430     switch (addr) {
431     case MDCNFG ... SA1110:
432         if ((addr & 3) == 0)
433             return s->mm_regs[addr >> 2];
434
435     default:
436         printf("%s: Bad register " REG_FMT "\n", __FUNCTION__, addr);
437         break;
438     }
439     return 0;
440 }
441
442 static void pxa2xx_mm_write(void *opaque, target_phys_addr_t addr,
443                 uint32_t value)
444 {
445     struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
446     addr -= s->mm_base;
447
448     switch (addr) {
449     case MDCNFG ... SA1110:
450         if ((addr & 3) == 0) {
451             s->mm_regs[addr >> 2] = value;
452             break;
453         }
454
455     default:
456         printf("%s: Bad register " REG_FMT "\n", __FUNCTION__, addr);
457         break;
458     }
459 }
460
461 static CPUReadMemoryFunc *pxa2xx_mm_readfn[] = {
462     pxa2xx_mm_read,
463     pxa2xx_mm_read,
464     pxa2xx_mm_read,
465 };
466
467 static CPUWriteMemoryFunc *pxa2xx_mm_writefn[] = {
468     pxa2xx_mm_write,
469     pxa2xx_mm_write,
470     pxa2xx_mm_write,
471 };
472
473 /* Synchronous Serial Ports */
474 struct pxa2xx_ssp_s {
475     target_phys_addr_t base;
476     qemu_irq irq;
477     int enable;
478
479     uint32_t sscr[2];
480     uint32_t sspsp;
481     uint32_t ssto;
482     uint32_t ssitr;
483     uint32_t sssr;
484     uint8_t sstsa;
485     uint8_t ssrsa;
486     uint8_t ssacd;
487
488     uint32_t rx_fifo[16];
489     int rx_level;
490     int rx_start;
491
492     uint32_t (*readfn)(void *opaque);
493     void (*writefn)(void *opaque, uint32_t value);
494     void *opaque;
495 };
496
497 #define SSCR0   0x00    /* SSP Control register 0 */
498 #define SSCR1   0x04    /* SSP Control register 1 */
499 #define SSSR    0x08    /* SSP Status register */
500 #define SSITR   0x0c    /* SSP Interrupt Test register */
501 #define SSDR    0x10    /* SSP Data register */
502 #define SSTO    0x28    /* SSP Time-Out register */
503 #define SSPSP   0x2c    /* SSP Programmable Serial Protocol register */
504 #define SSTSA   0x30    /* SSP TX Time Slot Active register */
505 #define SSRSA   0x34    /* SSP RX Time Slot Active register */
506 #define SSTSS   0x38    /* SSP Time Slot Status register */
507 #define SSACD   0x3c    /* SSP Audio Clock Divider register */
508
509 /* Bitfields for above registers */
510 #define SSCR0_SPI(x)    (((x) & 0x30) == 0x00)
511 #define SSCR0_SSP(x)    (((x) & 0x30) == 0x10)
512 #define SSCR0_UWIRE(x)  (((x) & 0x30) == 0x20)
513 #define SSCR0_PSP(x)    (((x) & 0x30) == 0x30)
514 #define SSCR0_SSE       (1 << 7)
515 #define SSCR0_RIM       (1 << 22)
516 #define SSCR0_TIM       (1 << 23)
517 #define SSCR0_MOD       (1 << 31)
518 #define SSCR0_DSS(x)    (((((x) >> 16) & 0x10) | ((x) & 0xf)) + 1)
519 #define SSCR1_RIE       (1 << 0)
520 #define SSCR1_TIE       (1 << 1)
521 #define SSCR1_LBM       (1 << 2)
522 #define SSCR1_MWDS      (1 << 5)
523 #define SSCR1_TFT(x)    ((((x) >> 6) & 0xf) + 1)
524 #define SSCR1_RFT(x)    ((((x) >> 10) & 0xf) + 1)
525 #define SSCR1_EFWR      (1 << 14)
526 #define SSCR1_PINTE     (1 << 18)
527 #define SSCR1_TINTE     (1 << 19)
528 #define SSCR1_RSRE      (1 << 20)
529 #define SSCR1_TSRE      (1 << 21)
530 #define SSCR1_EBCEI     (1 << 29)
531 #define SSITR_INT       (7 << 5)
532 #define SSSR_TNF        (1 << 2)
533 #define SSSR_RNE        (1 << 3)
534 #define SSSR_TFS        (1 << 5)
535 #define SSSR_RFS        (1 << 6)
536 #define SSSR_ROR        (1 << 7)
537 #define SSSR_PINT       (1 << 18)
538 #define SSSR_TINT       (1 << 19)
539 #define SSSR_EOC        (1 << 20)
540 #define SSSR_TUR        (1 << 21)
541 #define SSSR_BCE        (1 << 23)
542 #define SSSR_RW         0x00bc0080
543
544 static void pxa2xx_ssp_int_update(struct pxa2xx_ssp_s *s)
545 {
546     int level = 0;
547
548     level |= s->ssitr & SSITR_INT;
549     level |= (s->sssr & SSSR_BCE)  &&  (s->sscr[1] & SSCR1_EBCEI);
550     level |= (s->sssr & SSSR_TUR)  && !(s->sscr[0] & SSCR0_TIM);
551     level |= (s->sssr & SSSR_EOC)  &&  (s->sssr & (SSSR_TINT | SSSR_PINT));
552     level |= (s->sssr & SSSR_TINT) &&  (s->sscr[1] & SSCR1_TINTE);
553     level |= (s->sssr & SSSR_PINT) &&  (s->sscr[1] & SSCR1_PINTE);
554     level |= (s->sssr & SSSR_ROR)  && !(s->sscr[0] & SSCR0_RIM);
555     level |= (s->sssr & SSSR_RFS)  &&  (s->sscr[1] & SSCR1_RIE);
556     level |= (s->sssr & SSSR_TFS)  &&  (s->sscr[1] & SSCR1_TIE);
557     qemu_set_irq(s->irq, !!level);
558 }
559
560 static void pxa2xx_ssp_fifo_update(struct pxa2xx_ssp_s *s)
561 {
562     s->sssr &= ~(0xf << 12);    /* Clear RFL */
563     s->sssr &= ~(0xf << 8);     /* Clear TFL */
564     s->sssr &= ~SSSR_TNF;
565     if (s->enable) {
566         s->sssr |= ((s->rx_level - 1) & 0xf) << 12;
567         if (s->rx_level >= SSCR1_RFT(s->sscr[1]))
568             s->sssr |= SSSR_RFS;
569         else
570             s->sssr &= ~SSSR_RFS;
571         if (0 <= SSCR1_TFT(s->sscr[1]))
572             s->sssr |= SSSR_TFS;
573         else
574             s->sssr &= ~SSSR_TFS;
575         if (s->rx_level)
576             s->sssr |= SSSR_RNE;
577         else
578             s->sssr &= ~SSSR_RNE;
579         s->sssr |= SSSR_TNF;
580     }
581
582     pxa2xx_ssp_int_update(s);
583 }
584
585 static uint32_t pxa2xx_ssp_read(void *opaque, target_phys_addr_t addr)
586 {
587     struct pxa2xx_ssp_s *s = (struct pxa2xx_ssp_s *) opaque;
588     uint32_t retval;
589     addr -= s->base;
590
591     switch (addr) {
592     case SSCR0:
593         return s->sscr[0];
594     case SSCR1:
595         return s->sscr[1];
596     case SSPSP:
597         return s->sspsp;
598     case SSTO:
599         return s->ssto;
600     case SSITR:
601         return s->ssitr;
602     case SSSR:
603         return s->sssr | s->ssitr;
604     case SSDR:
605         if (!s->enable)
606             return 0xffffffff;
607         if (s->rx_level < 1) {
608             printf("%s: SSP Rx Underrun\n", __FUNCTION__);
609             return 0xffffffff;
610         }
611         s->rx_level --;
612         retval = s->rx_fifo[s->rx_start ++];
613         s->rx_start &= 0xf;
614         pxa2xx_ssp_fifo_update(s);
615         return retval;
616     case SSTSA:
617         return s->sstsa;
618     case SSRSA:
619         return s->ssrsa;
620     case SSTSS:
621         return 0;
622     case SSACD:
623         return s->ssacd;
624     default:
625         printf("%s: Bad register " REG_FMT "\n", __FUNCTION__, addr);
626         break;
627     }
628     return 0;
629 }
630
631 static void pxa2xx_ssp_write(void *opaque, target_phys_addr_t addr,
632                 uint32_t value)
633 {
634     struct pxa2xx_ssp_s *s = (struct pxa2xx_ssp_s *) opaque;
635     addr -= s->base;
636
637     switch (addr) {
638     case SSCR0:
639         s->sscr[0] = value & 0xc7ffffff;
640         s->enable = value & SSCR0_SSE;
641         if (value & SSCR0_MOD)
642             printf("%s: Attempt to use network mode\n", __FUNCTION__);
643         if (s->enable && SSCR0_DSS(value) < 4)
644             printf("%s: Wrong data size: %i bits\n", __FUNCTION__,
645                             SSCR0_DSS(value));
646         if (!(value & SSCR0_SSE)) {
647             s->sssr = 0;
648             s->ssitr = 0;
649             s->rx_level = 0;
650         }
651         pxa2xx_ssp_fifo_update(s);
652         break;
653
654     case SSCR1:
655         s->sscr[1] = value;
656         if (value & (SSCR1_LBM | SSCR1_EFWR))
657             printf("%s: Attempt to use SSP test mode\n", __FUNCTION__);
658         pxa2xx_ssp_fifo_update(s);
659         break;
660
661     case SSPSP:
662         s->sspsp = value;
663         break;
664
665     case SSTO:
666         s->ssto = value;
667         break;
668
669     case SSITR:
670         s->ssitr = value & SSITR_INT;
671         pxa2xx_ssp_int_update(s);
672         break;
673
674     case SSSR:
675         s->sssr &= ~(value & SSSR_RW);
676         pxa2xx_ssp_int_update(s);
677         break;
678
679     case SSDR:
680         if (SSCR0_UWIRE(s->sscr[0])) {
681             if (s->sscr[1] & SSCR1_MWDS)
682                 value &= 0xffff;
683             else
684                 value &= 0xff;
685         } else
686             /* Note how 32bits overflow does no harm here */
687             value &= (1 << SSCR0_DSS(s->sscr[0])) - 1;
688
689         /* Data goes from here to the Tx FIFO and is shifted out from
690          * there directly to the slave, no need to buffer it.
691          */
692         if (s->enable) {
693             if (s->writefn)
694                 s->writefn(s->opaque, value);
695
696             if (s->rx_level < 0x10) {
697                 if (s->readfn)
698                     s->rx_fifo[(s->rx_start + s->rx_level ++) & 0xf] =
699                             s->readfn(s->opaque);
700                 else
701                     s->rx_fifo[(s->rx_start + s->rx_level ++) & 0xf] = 0x0;
702             } else
703                 s->sssr |= SSSR_ROR;
704         }
705         pxa2xx_ssp_fifo_update(s);
706         break;
707
708     case SSTSA:
709         s->sstsa = value;
710         break;
711
712     case SSRSA:
713         s->ssrsa = value;
714         break;
715
716     case SSACD:
717         s->ssacd = value;
718         break;
719
720     default:
721         printf("%s: Bad register " REG_FMT "\n", __FUNCTION__, addr);
722         break;
723     }
724 }
725
726 void pxa2xx_ssp_attach(struct pxa2xx_ssp_s *port,
727                 uint32_t (*readfn)(void *opaque),
728                 void (*writefn)(void *opaque, uint32_t value), void *opaque)
729 {
730     if (!port) {
731         printf("%s: no such SSP\n", __FUNCTION__);
732         exit(-1);
733     }
734
735     port->opaque = opaque;
736     port->readfn = readfn;
737     port->writefn = writefn;
738 }
739
740 static CPUReadMemoryFunc *pxa2xx_ssp_readfn[] = {
741     pxa2xx_ssp_read,
742     pxa2xx_ssp_read,
743     pxa2xx_ssp_read,
744 };
745
746 static CPUWriteMemoryFunc *pxa2xx_ssp_writefn[] = {
747     pxa2xx_ssp_write,
748     pxa2xx_ssp_write,
749     pxa2xx_ssp_write,
750 };
751
752 /* Real-Time Clock */
753 #define RCNR            0x00    /* RTC Counter register */
754 #define RTAR            0x04    /* RTC Alarm register */
755 #define RTSR            0x08    /* RTC Status register */
756 #define RTTR            0x0c    /* RTC Timer Trim register */
757 #define RDCR            0x10    /* RTC Day Counter register */
758 #define RYCR            0x14    /* RTC Year Counter register */
759 #define RDAR1           0x18    /* RTC Wristwatch Day Alarm register 1 */
760 #define RYAR1           0x1c    /* RTC Wristwatch Year Alarm register 1 */
761 #define RDAR2           0x20    /* RTC Wristwatch Day Alarm register 2 */
762 #define RYAR2           0x24    /* RTC Wristwatch Year Alarm register 2 */
763 #define SWCR            0x28    /* RTC Stopwatch Counter register */
764 #define SWAR1           0x2c    /* RTC Stopwatch Alarm register 1 */
765 #define SWAR2           0x30    /* RTC Stopwatch Alarm register 2 */
766 #define RTCPICR         0x34    /* RTC Periodic Interrupt Counter register */
767 #define PIAR            0x38    /* RTC Periodic Interrupt Alarm register */
768
769 static inline void pxa2xx_rtc_int_update(struct pxa2xx_state_s *s)
770 {
771     qemu_set_irq(s->pic[PXA2XX_PIC_RTCALARM], !!(s->rtsr & 0x2553));
772 }
773
774 static void pxa2xx_rtc_hzupdate(struct pxa2xx_state_s *s)
775 {
776     int64_t rt = qemu_get_clock(rt_clock);
777     s->last_rcnr += ((rt - s->last_hz) << 15) /
778             (1000 * ((s->rttr & 0xffff) + 1));
779     s->last_rdcr += ((rt - s->last_hz) << 15) /
780             (1000 * ((s->rttr & 0xffff) + 1));
781     s->last_hz = rt;
782 }
783
784 static void pxa2xx_rtc_swupdate(struct pxa2xx_state_s *s)
785 {
786     int64_t rt = qemu_get_clock(rt_clock);
787     if (s->rtsr & (1 << 12))
788         s->last_swcr += (rt - s->last_sw) / 10;
789     s->last_sw = rt;
790 }
791
792 static void pxa2xx_rtc_piupdate(struct pxa2xx_state_s *s)
793 {
794     int64_t rt = qemu_get_clock(rt_clock);
795     if (s->rtsr & (1 << 15))
796         s->last_swcr += rt - s->last_pi;
797     s->last_pi = rt;
798 }
799
800 static inline void pxa2xx_rtc_alarm_update(struct pxa2xx_state_s *s,
801                 uint32_t rtsr)
802 {
803     if ((rtsr & (1 << 2)) && !(rtsr & (1 << 0)))
804         qemu_mod_timer(s->rtc_hz, s->last_hz +
805                 (((s->rtar - s->last_rcnr) * 1000 *
806                   ((s->rttr & 0xffff) + 1)) >> 15));
807     else
808         qemu_del_timer(s->rtc_hz);
809
810     if ((rtsr & (1 << 5)) && !(rtsr & (1 << 4)))
811         qemu_mod_timer(s->rtc_rdal1, s->last_hz +
812                 (((s->rdar1 - s->last_rdcr) * 1000 *
813                   ((s->rttr & 0xffff) + 1)) >> 15)); /* TODO: fixup */
814     else
815         qemu_del_timer(s->rtc_rdal1);
816
817     if ((rtsr & (1 << 7)) && !(rtsr & (1 << 6)))
818         qemu_mod_timer(s->rtc_rdal2, s->last_hz +
819                 (((s->rdar2 - s->last_rdcr) * 1000 *
820                   ((s->rttr & 0xffff) + 1)) >> 15)); /* TODO: fixup */
821     else
822         qemu_del_timer(s->rtc_rdal2);
823
824     if ((rtsr & 0x1200) == 0x1200 && !(rtsr & (1 << 8)))
825         qemu_mod_timer(s->rtc_swal1, s->last_sw +
826                         (s->swar1 - s->last_swcr) * 10); /* TODO: fixup */
827     else
828         qemu_del_timer(s->rtc_swal1);
829
830     if ((rtsr & 0x1800) == 0x1800 && !(rtsr & (1 << 10)))
831         qemu_mod_timer(s->rtc_swal2, s->last_sw +
832                         (s->swar2 - s->last_swcr) * 10); /* TODO: fixup */
833     else
834         qemu_del_timer(s->rtc_swal2);
835
836     if ((rtsr & 0xc000) == 0xc000 && !(rtsr & (1 << 13)))
837         qemu_mod_timer(s->rtc_pi, s->last_pi +
838                         (s->piar & 0xffff) - s->last_rtcpicr);
839     else
840         qemu_del_timer(s->rtc_pi);
841 }
842
843 static inline void pxa2xx_rtc_hz_tick(void *opaque)
844 {
845     struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
846     s->rtsr |= (1 << 0);
847     pxa2xx_rtc_alarm_update(s, s->rtsr);
848     pxa2xx_rtc_int_update(s);
849 }
850
851 static inline void pxa2xx_rtc_rdal1_tick(void *opaque)
852 {
853     struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
854     s->rtsr |= (1 << 4);
855     pxa2xx_rtc_alarm_update(s, s->rtsr);
856     pxa2xx_rtc_int_update(s);
857 }
858
859 static inline void pxa2xx_rtc_rdal2_tick(void *opaque)
860 {
861     struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
862     s->rtsr |= (1 << 6);
863     pxa2xx_rtc_alarm_update(s, s->rtsr);
864     pxa2xx_rtc_int_update(s);
865 }
866
867 static inline void pxa2xx_rtc_swal1_tick(void *opaque)
868 {
869     struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
870     s->rtsr |= (1 << 8);
871     pxa2xx_rtc_alarm_update(s, s->rtsr);
872     pxa2xx_rtc_int_update(s);
873 }
874
875 static inline void pxa2xx_rtc_swal2_tick(void *opaque)
876 {
877     struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
878     s->rtsr |= (1 << 10);
879     pxa2xx_rtc_alarm_update(s, s->rtsr);
880     pxa2xx_rtc_int_update(s);
881 }
882
883 static inline void pxa2xx_rtc_pi_tick(void *opaque)
884 {
885     struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
886     s->rtsr |= (1 << 13);
887     pxa2xx_rtc_piupdate(s);
888     s->last_rtcpicr = 0;
889     pxa2xx_rtc_alarm_update(s, s->rtsr);
890     pxa2xx_rtc_int_update(s);
891 }
892
893 static uint32_t pxa2xx_rtc_read(void *opaque, target_phys_addr_t addr)
894 {
895     struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
896     addr -= s->rtc_base;
897
898     switch (addr) {
899     case RTTR:
900         return s->rttr;
901     case RTSR:
902         return s->rtsr;
903     case RTAR:
904         return s->rtar;
905     case RDAR1:
906         return s->rdar1;
907     case RDAR2:
908         return s->rdar2;
909     case RYAR1:
910         return s->ryar1;
911     case RYAR2:
912         return s->ryar2;
913     case SWAR1:
914         return s->swar1;
915     case SWAR2:
916         return s->swar2;
917     case PIAR:
918         return s->piar;
919     case RCNR:
920         return s->last_rcnr + ((qemu_get_clock(rt_clock) - s->last_hz) << 15) /
921                 (1000 * ((s->rttr & 0xffff) + 1));
922     case RDCR:
923         return s->last_rdcr + ((qemu_get_clock(rt_clock) - s->last_hz) << 15) /
924                 (1000 * ((s->rttr & 0xffff) + 1));
925     case RYCR:
926         return s->last_rycr;
927     case SWCR:
928         if (s->rtsr & (1 << 12))
929             return s->last_swcr + (qemu_get_clock(rt_clock) - s->last_sw) / 10;
930         else
931             return s->last_swcr;
932     default:
933         printf("%s: Bad register " REG_FMT "\n", __FUNCTION__, addr);
934         break;
935     }
936     return 0;
937 }
938
939 static void pxa2xx_rtc_write(void *opaque, target_phys_addr_t addr,
940                 uint32_t value)
941 {
942     struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
943     addr -= s->rtc_base;
944
945     switch (addr) {
946     case RTTR:
947         if (!(s->rttr & (1 << 31))) {
948             pxa2xx_rtc_hzupdate(s);
949             s->rttr = value;
950             pxa2xx_rtc_alarm_update(s, s->rtsr);
951         }
952         break;
953
954     case RTSR:
955         if ((s->rtsr ^ value) & (1 << 15))
956             pxa2xx_rtc_piupdate(s);
957
958         if ((s->rtsr ^ value) & (1 << 12))
959             pxa2xx_rtc_swupdate(s);
960
961         if (((s->rtsr ^ value) & 0x4aac) | (value & ~0xdaac))
962             pxa2xx_rtc_alarm_update(s, value);
963
964         s->rtsr = (value & 0xdaac) | (s->rtsr & ~(value & ~0xdaac));
965         pxa2xx_rtc_int_update(s);
966         break;
967
968     case RTAR:
969         s->rtar = value;
970         pxa2xx_rtc_alarm_update(s, s->rtsr);
971         break;
972
973     case RDAR1:
974         s->rdar1 = value;
975         pxa2xx_rtc_alarm_update(s, s->rtsr);
976         break;
977
978     case RDAR2:
979         s->rdar2 = value;
980         pxa2xx_rtc_alarm_update(s, s->rtsr);
981         break;
982
983     case RYAR1:
984         s->ryar1 = value;
985         pxa2xx_rtc_alarm_update(s, s->rtsr);
986         break;
987
988     case RYAR2:
989         s->ryar2 = value;
990         pxa2xx_rtc_alarm_update(s, s->rtsr);
991         break;
992
993     case SWAR1:
994         pxa2xx_rtc_swupdate(s);
995         s->swar1 = value;
996         s->last_swcr = 0;
997         pxa2xx_rtc_alarm_update(s, s->rtsr);
998         break;
999
1000     case SWAR2:
1001         s->swar2 = value;
1002         pxa2xx_rtc_alarm_update(s, s->rtsr);
1003         break;
1004
1005     case PIAR:
1006         s->piar = value;
1007         pxa2xx_rtc_alarm_update(s, s->rtsr);
1008         break;
1009
1010     case RCNR:
1011         pxa2xx_rtc_hzupdate(s);
1012         s->last_rcnr = value;
1013         pxa2xx_rtc_alarm_update(s, s->rtsr);
1014         break;
1015
1016     case RDCR:
1017         pxa2xx_rtc_hzupdate(s);
1018         s->last_rdcr = value;
1019         pxa2xx_rtc_alarm_update(s, s->rtsr);
1020         break;
1021
1022     case RYCR:
1023         s->last_rycr = value;
1024         break;
1025
1026     case SWCR:
1027         pxa2xx_rtc_swupdate(s);
1028         s->last_swcr = value;
1029         pxa2xx_rtc_alarm_update(s, s->rtsr);
1030         break;
1031
1032     case RTCPICR:
1033         pxa2xx_rtc_piupdate(s);
1034         s->last_rtcpicr = value & 0xffff;
1035         pxa2xx_rtc_alarm_update(s, s->rtsr);
1036         break;
1037
1038     default:
1039         printf("%s: Bad register " REG_FMT "\n", __FUNCTION__, addr);
1040     }
1041 }
1042
1043 static void pxa2xx_rtc_reset(struct pxa2xx_state_s *s)
1044 {
1045     struct tm *tm;
1046     time_t ti;
1047     int wom;
1048
1049     s->rttr = 0x7fff;
1050     s->rtsr = 0;
1051
1052     time(&ti);
1053     if (rtc_utc)
1054         tm = gmtime(&ti);
1055     else
1056         tm = localtime(&ti);
1057     wom = ((tm->tm_mday - 1) / 7) + 1;
1058
1059     s->last_rcnr = (uint32_t) ti;
1060     s->last_rdcr = (wom << 20) | ((tm->tm_wday + 1) << 17) |
1061             (tm->tm_hour << 12) | (tm->tm_min << 6) | tm->tm_sec;
1062     s->last_rycr = ((tm->tm_year + 1900) << 9) |
1063             ((tm->tm_mon + 1) << 5) | tm->tm_mday;
1064     s->last_swcr = (tm->tm_hour << 19) |
1065             (tm->tm_min << 13) | (tm->tm_sec << 7);
1066     s->last_rtcpicr = 0;
1067     s->last_hz = s->last_sw = s->last_pi = qemu_get_clock(rt_clock);
1068
1069     s->rtc_hz    = qemu_new_timer(rt_clock, pxa2xx_rtc_hz_tick,    s);
1070     s->rtc_rdal1 = qemu_new_timer(rt_clock, pxa2xx_rtc_rdal1_tick, s);
1071     s->rtc_rdal2 = qemu_new_timer(rt_clock, pxa2xx_rtc_rdal2_tick, s);
1072     s->rtc_swal1 = qemu_new_timer(rt_clock, pxa2xx_rtc_swal1_tick, s);
1073     s->rtc_swal2 = qemu_new_timer(rt_clock, pxa2xx_rtc_swal2_tick, s);
1074     s->rtc_pi    = qemu_new_timer(rt_clock, pxa2xx_rtc_pi_tick,    s);
1075 }
1076
1077 static CPUReadMemoryFunc *pxa2xx_rtc_readfn[] = {
1078     pxa2xx_rtc_read,
1079     pxa2xx_rtc_read,
1080     pxa2xx_rtc_read,
1081 };
1082
1083 static CPUWriteMemoryFunc *pxa2xx_rtc_writefn[] = {
1084     pxa2xx_rtc_write,
1085     pxa2xx_rtc_write,
1086     pxa2xx_rtc_write,
1087 };
1088
1089 /* PXA Inter-IC Sound Controller */
1090 static void pxa2xx_i2s_reset(struct pxa2xx_i2s_s *i2s)
1091 {
1092     i2s->rx_len = 0;
1093     i2s->tx_len = 0;
1094     i2s->fifo_len = 0;
1095     i2s->clk = 0x1a;
1096     i2s->control[0] = 0x00;
1097     i2s->control[1] = 0x00;
1098     i2s->status = 0x00;
1099     i2s->mask = 0x00;
1100 }
1101
1102 #define SACR_TFTH(val)  ((val >> 8) & 0xf)
1103 #define SACR_RFTH(val)  ((val >> 12) & 0xf)
1104 #define SACR_DREC(val)  (val & (1 << 3))
1105 #define SACR_DPRL(val)  (val & (1 << 4))
1106
1107 static inline void pxa2xx_i2s_update(struct pxa2xx_i2s_s *i2s)
1108 {
1109     int rfs, tfs;
1110     rfs = SACR_RFTH(i2s->control[0]) < i2s->rx_len &&
1111             !SACR_DREC(i2s->control[1]);
1112     tfs = (i2s->tx_len || i2s->fifo_len < SACR_TFTH(i2s->control[0])) &&
1113             i2s->enable && !SACR_DPRL(i2s->control[1]);
1114
1115     pxa2xx_dma_request(i2s->dma, PXA2XX_RX_RQ_I2S, rfs);
1116     pxa2xx_dma_request(i2s->dma, PXA2XX_TX_RQ_I2S, tfs);
1117
1118     i2s->status &= 0xe0;
1119     if (i2s->rx_len)
1120         i2s->status |= 1 << 1;                  /* RNE */
1121     if (i2s->enable)
1122         i2s->status |= 1 << 2;                  /* BSY */
1123     if (tfs)
1124         i2s->status |= 1 << 3;                  /* TFS */
1125     if (rfs)
1126         i2s->status |= 1 << 4;                  /* RFS */
1127     if (!(i2s->tx_len && i2s->enable))
1128         i2s->status |= i2s->fifo_len << 8;      /* TFL */
1129     i2s->status |= MAX(i2s->rx_len, 0xf) << 12; /* RFL */
1130
1131     qemu_set_irq(i2s->irq, i2s->status & i2s->mask);
1132 }
1133
1134 #define SACR0   0x00    /* Serial Audio Global Control register */
1135 #define SACR1   0x04    /* Serial Audio I2S/MSB-Justified Control register */
1136 #define SASR0   0x0c    /* Serial Audio Interface and FIFO Status register */
1137 #define SAIMR   0x14    /* Serial Audio Interrupt Mask register */
1138 #define SAICR   0x18    /* Serial Audio Interrupt Clear register */
1139 #define SADIV   0x60    /* Serial Audio Clock Divider register */
1140 #define SADR    0x80    /* Serial Audio Data register */
1141
1142 static uint32_t pxa2xx_i2s_read(void *opaque, target_phys_addr_t addr)
1143 {
1144     struct pxa2xx_i2s_s *s = (struct pxa2xx_i2s_s *) opaque;
1145     addr -= s->base;
1146
1147     switch (addr) {
1148     case SACR0:
1149         return s->control[0];
1150     case SACR1:
1151         return s->control[1];
1152     case SASR0:
1153         return s->status;
1154     case SAIMR:
1155         return s->mask;
1156     case SAICR:
1157         return 0;
1158     case SADIV:
1159         return s->clk;
1160     case SADR:
1161         if (s->rx_len > 0) {
1162             s->rx_len --;
1163             pxa2xx_i2s_update(s);
1164             return s->codec_in(s->opaque);
1165         }
1166         return 0;
1167     default:
1168         printf("%s: Bad register " REG_FMT "\n", __FUNCTION__, addr);
1169         break;
1170     }
1171     return 0;
1172 }
1173
1174 static void pxa2xx_i2s_write(void *opaque, target_phys_addr_t addr,
1175                 uint32_t value)
1176 {
1177     struct pxa2xx_i2s_s *s = (struct pxa2xx_i2s_s *) opaque;
1178     uint32_t *sample;
1179     addr -= s->base;
1180
1181     switch (addr) {
1182     case SACR0:
1183         if (value & (1 << 3))                           /* RST */
1184             pxa2xx_i2s_reset(s);
1185         s->control[0] = value & 0xff3d;
1186         if (!s->enable && (value & 1) && s->tx_len) {   /* ENB */
1187             for (sample = s->fifo; s->fifo_len > 0; s->fifo_len --, sample ++)
1188                 s->codec_out(s->opaque, *sample);
1189             s->status &= ~(1 << 7);                     /* I2SOFF */
1190         }
1191         if (value & (1 << 4))                           /* EFWR */
1192             printf("%s: Attempt to use special function\n", __FUNCTION__);
1193         s->enable = ((value ^ 4) & 5) == 5;             /* ENB && !RST*/
1194         pxa2xx_i2s_update(s);
1195         break;
1196     case SACR1:
1197         s->control[1] = value & 0x0039;
1198         if (value & (1 << 5))                           /* ENLBF */
1199             printf("%s: Attempt to use loopback function\n", __FUNCTION__);
1200         if (value & (1 << 4))                           /* DPRL */
1201             s->fifo_len = 0;
1202         pxa2xx_i2s_update(s);
1203         break;
1204     case SAIMR:
1205         s->mask = value & 0x0078;
1206         pxa2xx_i2s_update(s);
1207         break;
1208     case SAICR:
1209         s->status &= ~(value & (3 << 5));
1210         pxa2xx_i2s_update(s);
1211         break;
1212     case SADIV:
1213         s->clk = value & 0x007f;
1214         break;
1215     case SADR:
1216         if (s->tx_len && s->enable) {
1217             s->tx_len --;
1218             pxa2xx_i2s_update(s);
1219             s->codec_out(s->opaque, value);
1220         } else if (s->fifo_len < 16) {
1221             s->fifo[s->fifo_len ++] = value;
1222             pxa2xx_i2s_update(s);
1223         }
1224         break;
1225     default:
1226         printf("%s: Bad register " REG_FMT "\n", __FUNCTION__, addr);
1227     }
1228 }
1229
1230 static CPUReadMemoryFunc *pxa2xx_i2s_readfn[] = {
1231     pxa2xx_i2s_read,
1232     pxa2xx_i2s_read,
1233     pxa2xx_i2s_read,
1234 };
1235
1236 static CPUWriteMemoryFunc *pxa2xx_i2s_writefn[] = {
1237     pxa2xx_i2s_write,
1238     pxa2xx_i2s_write,
1239     pxa2xx_i2s_write,
1240 };
1241
1242 static void pxa2xx_i2s_data_req(void *opaque, int tx, int rx)
1243 {
1244     struct pxa2xx_i2s_s *s = (struct pxa2xx_i2s_s *) opaque;
1245     uint32_t *sample;
1246
1247     /* Signal FIFO errors */
1248     if (s->enable && s->tx_len)
1249         s->status |= 1 << 5;            /* TUR */
1250     if (s->enable && s->rx_len)
1251         s->status |= 1 << 6;            /* ROR */
1252
1253     /* Should be tx - MIN(tx, s->fifo_len) but we don't really need to
1254      * handle the cases where it makes a difference.  */
1255     s->tx_len = tx - s->fifo_len;
1256     s->rx_len = rx;
1257     /* Note that is s->codec_out wasn't set, we wouldn't get called.  */
1258     if (s->enable)
1259         for (sample = s->fifo; s->fifo_len; s->fifo_len --, sample ++)
1260             s->codec_out(s->opaque, *sample);
1261     pxa2xx_i2s_update(s);
1262 }
1263
1264 static struct pxa2xx_i2s_s *pxa2xx_i2s_init(target_phys_addr_t base,
1265                 qemu_irq irq, struct pxa2xx_dma_state_s *dma)
1266 {
1267     int iomemtype;
1268     struct pxa2xx_i2s_s *s = (struct pxa2xx_i2s_s *)
1269             qemu_mallocz(sizeof(struct pxa2xx_i2s_s));
1270
1271     s->base = base;
1272     s->irq = irq;
1273     s->dma = dma;
1274     s->data_req = pxa2xx_i2s_data_req;
1275
1276     pxa2xx_i2s_reset(s);
1277
1278     iomemtype = cpu_register_io_memory(0, pxa2xx_i2s_readfn,
1279                     pxa2xx_i2s_writefn, s);
1280     cpu_register_physical_memory(s->base & 0xfff00000, 0xfffff, iomemtype);
1281
1282     return s;
1283 }
1284
1285 /* PXA Fast Infra-red Communications Port */
1286 struct pxa2xx_fir_s {
1287     target_phys_addr_t base;
1288     qemu_irq irq;
1289     struct pxa2xx_dma_state_s *dma;
1290     int enable;
1291     CharDriverState *chr;
1292
1293     uint8_t control[3];
1294     uint8_t status[2];
1295
1296     int rx_len;
1297     int rx_start;
1298     uint8_t rx_fifo[64];
1299 };
1300
1301 static void pxa2xx_fir_reset(struct pxa2xx_fir_s *s)
1302 {
1303     s->control[0] = 0x00;
1304     s->control[1] = 0x00;
1305     s->control[2] = 0x00;
1306     s->status[0] = 0x00;
1307     s->status[1] = 0x00;
1308     s->enable = 0;
1309 }
1310
1311 static inline void pxa2xx_fir_update(struct pxa2xx_fir_s *s)
1312 {
1313     static const int tresh[4] = { 8, 16, 32, 0 };
1314     int intr = 0;
1315     if ((s->control[0] & (1 << 4)) &&                   /* RXE */
1316                     s->rx_len >= tresh[s->control[2] & 3])      /* TRIG */
1317         s->status[0] |= 1 << 4;                         /* RFS */
1318     else
1319         s->status[0] &= ~(1 << 4);                      /* RFS */
1320     if (s->control[0] & (1 << 3))                       /* TXE */
1321         s->status[0] |= 1 << 3;                         /* TFS */
1322     else
1323         s->status[0] &= ~(1 << 3);                      /* TFS */
1324     if (s->rx_len)
1325         s->status[1] |= 1 << 2;                         /* RNE */
1326     else
1327         s->status[1] &= ~(1 << 2);                      /* RNE */
1328     if (s->control[0] & (1 << 4))                       /* RXE */
1329         s->status[1] |= 1 << 0;                         /* RSY */
1330     else
1331         s->status[1] &= ~(1 << 0);                      /* RSY */
1332
1333     intr |= (s->control[0] & (1 << 5)) &&               /* RIE */
1334             (s->status[0] & (1 << 4));                  /* RFS */
1335     intr |= (s->control[0] & (1 << 6)) &&               /* TIE */
1336             (s->status[0] & (1 << 3));                  /* TFS */
1337     intr |= (s->control[2] & (1 << 4)) &&               /* TRAIL */
1338             (s->status[0] & (1 << 6));                  /* EOC */
1339     intr |= (s->control[0] & (1 << 2)) &&               /* TUS */
1340             (s->status[0] & (1 << 1));                  /* TUR */
1341     intr |= s->status[0] & 0x25;                        /* FRE, RAB, EIF */
1342
1343     pxa2xx_dma_request(s->dma, PXA2XX_RX_RQ_ICP, (s->status[0] >> 4) & 1);
1344     pxa2xx_dma_request(s->dma, PXA2XX_TX_RQ_ICP, (s->status[0] >> 3) & 1);
1345
1346     qemu_set_irq(s->irq, intr && s->enable);
1347 }
1348
1349 #define ICCR0   0x00    /* FICP Control register 0 */
1350 #define ICCR1   0x04    /* FICP Control register 1 */
1351 #define ICCR2   0x08    /* FICP Control register 2 */
1352 #define ICDR    0x0c    /* FICP Data register */
1353 #define ICSR0   0x14    /* FICP Status register 0 */
1354 #define ICSR1   0x18    /* FICP Status register 1 */
1355 #define ICFOR   0x1c    /* FICP FIFO Occupancy Status register */
1356
1357 static uint32_t pxa2xx_fir_read(void *opaque, target_phys_addr_t addr)
1358 {
1359     struct pxa2xx_fir_s *s = (struct pxa2xx_fir_s *) opaque;
1360     uint8_t ret;
1361     addr -= s->base;
1362
1363     switch (addr) {
1364     case ICCR0:
1365         return s->control[0];
1366     case ICCR1:
1367         return s->control[1];
1368     case ICCR2:
1369         return s->control[2];
1370     case ICDR:
1371         s->status[0] &= ~0x01;
1372         s->status[1] &= ~0x72;
1373         if (s->rx_len) {
1374             s->rx_len --;
1375             ret = s->rx_fifo[s->rx_start ++];
1376             s->rx_start &= 63;
1377             pxa2xx_fir_update(s);
1378             return ret;
1379         }
1380         printf("%s: Rx FIFO underrun.\n", __FUNCTION__);
1381         break;
1382     case ICSR0:
1383         return s->status[0];
1384     case ICSR1:
1385         return s->status[1] | (1 << 3);                 /* TNF */
1386     case ICFOR:
1387         return s->rx_len;
1388     default:
1389         printf("%s: Bad register " REG_FMT "\n", __FUNCTION__, addr);
1390         break;
1391     }
1392     return 0;
1393 }
1394
1395 static void pxa2xx_fir_write(void *opaque, target_phys_addr_t addr,
1396                 uint32_t value)
1397 {
1398     struct pxa2xx_fir_s *s = (struct pxa2xx_fir_s *) opaque;
1399     uint8_t ch;
1400     addr -= s->base;
1401
1402     switch (addr) {
1403     case ICCR0:
1404         s->control[0] = value;
1405         if (!(value & (1 << 4)))                        /* RXE */
1406             s->rx_len = s->rx_start = 0;
1407         if (!(value & (1 << 3)))                        /* TXE */
1408             /* Nop */;
1409         s->enable = value & 1;                          /* ITR */
1410         if (!s->enable)
1411             s->status[0] = 0;
1412         pxa2xx_fir_update(s);
1413         break;
1414     case ICCR1:
1415         s->control[1] = value;
1416         break;
1417     case ICCR2:
1418         s->control[2] = value & 0x3f;
1419         pxa2xx_fir_update(s);
1420         break;
1421     case ICDR:
1422         if (s->control[2] & (1 << 2))                   /* TXP */
1423             ch = value;
1424         else
1425             ch = ~value;
1426         if (s->chr && s->enable && (s->control[0] & (1 << 3)))  /* TXE */
1427             qemu_chr_write(s->chr, &ch, 1);
1428         break;
1429     case ICSR0:
1430         s->status[0] &= ~(value & 0x66);
1431         pxa2xx_fir_update(s);
1432         break;
1433     case ICFOR:
1434         break;
1435     default:
1436         printf("%s: Bad register " REG_FMT "\n", __FUNCTION__, addr);
1437     }
1438 }
1439
1440 static CPUReadMemoryFunc *pxa2xx_fir_readfn[] = {
1441     pxa2xx_fir_read,
1442     pxa2xx_fir_read,
1443     pxa2xx_fir_read,
1444 };
1445
1446 static CPUWriteMemoryFunc *pxa2xx_fir_writefn[] = {
1447     pxa2xx_fir_write,
1448     pxa2xx_fir_write,
1449     pxa2xx_fir_write,
1450 };
1451
1452 static int pxa2xx_fir_is_empty(void *opaque)
1453 {
1454     struct pxa2xx_fir_s *s = (struct pxa2xx_fir_s *) opaque;
1455     return (s->rx_len < 64);
1456 }
1457
1458 static void pxa2xx_fir_rx(void *opaque, const uint8_t *buf, int size)
1459 {
1460     struct pxa2xx_fir_s *s = (struct pxa2xx_fir_s *) opaque;
1461     if (!(s->control[0] & (1 << 4)))                    /* RXE */
1462         return;
1463
1464     while (size --) {
1465         s->status[1] |= 1 << 4;                         /* EOF */
1466         if (s->rx_len >= 64) {
1467             s->status[1] |= 1 << 6;                     /* ROR */
1468             break;
1469         }
1470
1471         if (s->control[2] & (1 << 3))                   /* RXP */
1472             s->rx_fifo[(s->rx_start + s->rx_len ++) & 63] = *(buf ++);
1473         else
1474             s->rx_fifo[(s->rx_start + s->rx_len ++) & 63] = ~*(buf ++);
1475     }
1476
1477     pxa2xx_fir_update(s);
1478 }
1479
1480 static void pxa2xx_fir_event(void *opaque, int event)
1481 {
1482 }
1483
1484 static struct pxa2xx_fir_s *pxa2xx_fir_init(target_phys_addr_t base,
1485                 qemu_irq irq, struct pxa2xx_dma_state_s *dma,
1486                 CharDriverState *chr)
1487 {
1488     int iomemtype;
1489     struct pxa2xx_fir_s *s = (struct pxa2xx_fir_s *)
1490             qemu_mallocz(sizeof(struct pxa2xx_fir_s));
1491
1492     s->base = base;
1493     s->irq = irq;
1494     s->dma = dma;
1495     s->chr = chr;
1496
1497     pxa2xx_fir_reset(s);
1498
1499     iomemtype = cpu_register_io_memory(0, pxa2xx_fir_readfn,
1500                     pxa2xx_fir_writefn, s);
1501     cpu_register_physical_memory(s->base, 0xfff, iomemtype);
1502
1503     if (chr)
1504         qemu_chr_add_handlers(chr, pxa2xx_fir_is_empty,
1505                         pxa2xx_fir_rx, pxa2xx_fir_event, s);
1506
1507     return s;
1508 }
1509
1510 void pxa2xx_reset(int line, int level, void *opaque)
1511 {
1512     struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
1513     if (level && (s->pm_regs[PCFR >> 2] & 0x10)) {      /* GPR_EN */
1514         cpu_reset(s->env);
1515         /* TODO: reset peripherals */
1516     }
1517 }
1518
1519 /* Initialise a PXA270 integrated chip (ARM based core).  */
1520 struct pxa2xx_state_s *pxa270_init(unsigned int sdram_size,
1521                 DisplayState *ds, const char *revision)
1522 {
1523     struct pxa2xx_state_s *s;
1524     struct pxa2xx_ssp_s *ssp;
1525     int iomemtype, i;
1526     s = (struct pxa2xx_state_s *) qemu_mallocz(sizeof(struct pxa2xx_state_s));
1527
1528     if (revision && strncmp(revision, "pxa27", 5)) {
1529         fprintf(stderr, "Machine requires a PXA27x processor.\n");
1530         exit(1);
1531     }
1532
1533     s->env = cpu_init();
1534     cpu_arm_set_model(s->env, revision ?: "pxa270");
1535
1536     /* SDRAM & Internal Memory Storage */
1537     cpu_register_physical_memory(PXA2XX_SDRAM_BASE,
1538                     sdram_size, qemu_ram_alloc(sdram_size) | IO_MEM_RAM);
1539     cpu_register_physical_memory(PXA2XX_INTERNAL_BASE,
1540                     0x40000, qemu_ram_alloc(0x40000) | IO_MEM_RAM);
1541
1542     s->pic = pxa2xx_pic_init(0x40d00000, s->env);
1543
1544     s->dma = pxa27x_dma_init(0x40000000, s->pic[PXA2XX_PIC_DMA]);
1545
1546     pxa27x_timer_init(0x40a00000, &s->pic[PXA2XX_PIC_OST_0],
1547                     s->pic[PXA27X_PIC_OST_4_11], s->env);
1548
1549     s->gpio = pxa2xx_gpio_init(0x40e00000, s->env, s->pic, 121);
1550
1551     s->mmc = pxa2xx_mmci_init(0x41100000, s->pic[PXA2XX_PIC_MMC], s->dma);
1552
1553     for (i = 0; pxa270_serial[i].io_base; i ++)
1554         if (serial_hds[i])
1555             serial_mm_init(pxa270_serial[i].io_base, 2,
1556                             s->pic[pxa270_serial[i].irqn], serial_hds[i], 1);
1557         else
1558             break;
1559     if (serial_hds[i])
1560         s->fir = pxa2xx_fir_init(0x40800000, s->pic[PXA2XX_PIC_ICP],
1561                         s->dma, serial_hds[i]);
1562
1563     if (ds)
1564         s->lcd = pxa2xx_lcdc_init(0x44000000, s->pic[PXA2XX_PIC_LCD], ds);
1565
1566     s->cm_base = 0x41300000;
1567     s->cm_regs[CCCR >> 4] = 0x02000210; /* 416.0 MHz */
1568     s->clkcfg = 0x00000009;             /* Turbo mode active */
1569     iomemtype = cpu_register_io_memory(0, pxa2xx_cm_readfn,
1570                     pxa2xx_cm_writefn, s);
1571     cpu_register_physical_memory(s->cm_base, 0xfff, iomemtype);
1572
1573     cpu_arm_set_cp_io(s->env, 14, pxa2xx_cp14_read, pxa2xx_cp14_write, s);
1574
1575     s->mm_base = 0x48000000;
1576     s->mm_regs[MDMRS >> 2] = 0x00020002;
1577     s->mm_regs[MDREFR >> 2] = 0x03ca4000;
1578     s->mm_regs[MECR >> 2] = 0x00000001; /* Two PC Card sockets */
1579     iomemtype = cpu_register_io_memory(0, pxa2xx_mm_readfn,
1580                     pxa2xx_mm_writefn, s);
1581     cpu_register_physical_memory(s->mm_base, 0xfff, iomemtype);
1582
1583     for (i = 0; pxa27x_ssp[i].io_base; i ++);
1584     s->ssp = (struct pxa2xx_ssp_s **)
1585             qemu_mallocz(sizeof(struct pxa2xx_ssp_s *) * i);
1586     ssp = (struct pxa2xx_ssp_s *)
1587             qemu_mallocz(sizeof(struct pxa2xx_ssp_s) * i);
1588     for (i = 0; pxa27x_ssp[i].io_base; i ++) {
1589         s->ssp[i] = &ssp[i];
1590         ssp[i].base = pxa27x_ssp[i].io_base;
1591         ssp[i].irq = s->pic[pxa27x_ssp[i].irqn];
1592
1593         iomemtype = cpu_register_io_memory(0, pxa2xx_ssp_readfn,
1594                         pxa2xx_ssp_writefn, &ssp[i]);
1595         cpu_register_physical_memory(ssp[i].base, 0xfff, iomemtype);
1596     }
1597
1598     if (usb_enabled) {
1599         usb_ohci_init_pxa(0x4c000000, 3, -1, s->pic[PXA2XX_PIC_USBH1]);
1600     }
1601
1602     s->pcmcia[0] = pxa2xx_pcmcia_init(0x20000000);
1603     s->pcmcia[1] = pxa2xx_pcmcia_init(0x30000000);
1604
1605     s->rtc_base = 0x40900000;
1606     iomemtype = cpu_register_io_memory(0, pxa2xx_rtc_readfn,
1607                     pxa2xx_rtc_writefn, s);
1608     cpu_register_physical_memory(s->rtc_base, 0xfff, iomemtype);
1609     pxa2xx_rtc_reset(s);
1610
1611     s->pm_base = 0x40f00000;
1612     iomemtype = cpu_register_io_memory(0, pxa2xx_pm_readfn,
1613                     pxa2xx_pm_writefn, s);
1614     cpu_register_physical_memory(s->pm_base, 0xfff, iomemtype);
1615
1616     s->i2s = pxa2xx_i2s_init(0x40400000, s->pic[PXA2XX_PIC_I2S], s->dma);
1617
1618     /* GPIO1 resets the processor */
1619     /* The handler can be overriden by board-specific code */
1620     pxa2xx_gpio_handler_set(s->gpio, 1, pxa2xx_reset, s);
1621     return s;
1622 }
1623
1624 /* Initialise a PXA255 integrated chip (ARM based core).  */
1625 struct pxa2xx_state_s *pxa255_init(unsigned int sdram_size,
1626                 DisplayState *ds)
1627 {
1628     struct pxa2xx_state_s *s;
1629     struct pxa2xx_ssp_s *ssp;
1630     int iomemtype, i;
1631     s = (struct pxa2xx_state_s *) qemu_mallocz(sizeof(struct pxa2xx_state_s));
1632
1633     s->env = cpu_init();
1634     cpu_arm_set_model(s->env, "pxa255");
1635
1636     /* SDRAM & Internal Memory Storage */
1637     cpu_register_physical_memory(PXA2XX_SDRAM_BASE, sdram_size,
1638                     qemu_ram_alloc(sdram_size) | IO_MEM_RAM);
1639     cpu_register_physical_memory(PXA2XX_INTERNAL_BASE, PXA2XX_INTERNAL_SIZE,
1640                     qemu_ram_alloc(PXA2XX_INTERNAL_SIZE) | IO_MEM_RAM);
1641
1642     s->pic = pxa2xx_pic_init(0x40d00000, s->env);
1643
1644     s->dma = pxa255_dma_init(0x40000000, s->pic[PXA2XX_PIC_DMA]);
1645
1646     pxa25x_timer_init(0x40a00000, &s->pic[PXA2XX_PIC_OST_0], s->env);
1647
1648     s->gpio = pxa2xx_gpio_init(0x40e00000, s->env, s->pic, 85);
1649
1650     s->mmc = pxa2xx_mmci_init(0x41100000, s->pic[PXA2XX_PIC_MMC], s->dma);
1651
1652     for (i = 0; pxa255_serial[i].io_base; i ++)
1653         if (serial_hds[i])
1654             serial_mm_init(pxa255_serial[i].io_base, 2,
1655                             s->pic[pxa255_serial[i].irqn], serial_hds[i], 1);
1656         else
1657             break;
1658     if (serial_hds[i])
1659         s->fir = pxa2xx_fir_init(0x40800000, s->pic[PXA2XX_PIC_ICP],
1660                         s->dma, serial_hds[i]);
1661
1662     if (ds)
1663         s->lcd = pxa2xx_lcdc_init(0x44000000, s->pic[PXA2XX_PIC_LCD], ds);
1664
1665     s->cm_base = 0x41300000;
1666     s->cm_regs[CCCR >> 4] = 0x02000210; /* 416.0 MHz */
1667     s->clkcfg = 0x00000009;             /* Turbo mode active */
1668     iomemtype = cpu_register_io_memory(0, pxa2xx_cm_readfn,
1669                     pxa2xx_cm_writefn, s);
1670     cpu_register_physical_memory(s->cm_base, 0xfff, iomemtype);
1671
1672     cpu_arm_set_cp_io(s->env, 14, pxa2xx_cp14_read, pxa2xx_cp14_write, s);
1673
1674     s->mm_base = 0x48000000;
1675     s->mm_regs[MDMRS >> 2] = 0x00020002;
1676     s->mm_regs[MDREFR >> 2] = 0x03ca4000;
1677     s->mm_regs[MECR >> 2] = 0x00000001; /* Two PC Card sockets */
1678     iomemtype = cpu_register_io_memory(0, pxa2xx_mm_readfn,
1679                     pxa2xx_mm_writefn, s);
1680     cpu_register_physical_memory(s->mm_base, 0xfff, iomemtype);
1681
1682     for (i = 0; pxa255_ssp[i].io_base; i ++);
1683     s->ssp = (struct pxa2xx_ssp_s **)
1684             qemu_mallocz(sizeof(struct pxa2xx_ssp_s *) * i);
1685     ssp = (struct pxa2xx_ssp_s *)
1686             qemu_mallocz(sizeof(struct pxa2xx_ssp_s) * i);
1687     for (i = 0; pxa255_ssp[i].io_base; i ++) {
1688         s->ssp[i] = &ssp[i];
1689         ssp[i].base = pxa255_ssp[i].io_base;
1690         ssp[i].irq = s->pic[pxa255_ssp[i].irqn];
1691
1692         iomemtype = cpu_register_io_memory(0, pxa2xx_ssp_readfn,
1693                         pxa2xx_ssp_writefn, &ssp[i]);
1694         cpu_register_physical_memory(ssp[i].base, 0xfff, iomemtype);
1695     }
1696
1697     if (usb_enabled) {
1698         usb_ohci_init_pxa(0x4c000000, 3, -1, s->pic[PXA2XX_PIC_USBH1]);
1699     }
1700
1701     s->pcmcia[0] = pxa2xx_pcmcia_init(0x20000000);
1702     s->pcmcia[1] = pxa2xx_pcmcia_init(0x30000000);
1703
1704     s->rtc_base = 0x40900000;
1705     iomemtype = cpu_register_io_memory(0, pxa2xx_rtc_readfn,
1706                     pxa2xx_rtc_writefn, s);
1707     cpu_register_physical_memory(s->rtc_base, 0xfff, iomemtype);
1708     pxa2xx_rtc_reset(s);
1709
1710     s->pm_base = 0x40f00000;
1711     iomemtype = cpu_register_io_memory(0, pxa2xx_pm_readfn,
1712                     pxa2xx_pm_writefn, s);
1713     cpu_register_physical_memory(s->pm_base, 0xfff, iomemtype);
1714
1715     s->i2s = pxa2xx_i2s_init(0x40400000, s->pic[PXA2XX_PIC_I2S], s->dma);
1716
1717     /* GPIO1 resets the processor */
1718     /* The handler can be overriden by board-specific code */
1719     pxa2xx_gpio_handler_set(s->gpio, 1, pxa2xx_reset, s);
1720     return s;
1721 }