Statistics
| Branch: | Revision:

root / hw / pxa2xx.c @ 38641a52

History | View | Annotate | Download (64.5 kB)

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
typedef struct PXASSPDef {
29
    target_phys_addr_t io_base;
30
    int irqn;
31
} PXASSPDef;
32

    
33
#if 0
34
static PXASSPDef pxa250_ssp[] = {
35
    { 0x41000000, PXA2XX_PIC_SSP },
36
    { 0, 0 }
37
};
38
#endif
39

    
40
static PXASSPDef pxa255_ssp[] = {
41
    { 0x41000000, PXA2XX_PIC_SSP },
42
    { 0x41400000, PXA25X_PIC_NSSP },
43
    { 0, 0 }
44
};
45

    
46
#if 0
47
static PXASSPDef pxa26x_ssp[] = {
48
    { 0x41000000, PXA2XX_PIC_SSP },
49
    { 0x41400000, PXA25X_PIC_NSSP },
50
    { 0x41500000, PXA26X_PIC_ASSP },
51
    { 0, 0 }
52
};
53
#endif
54

    
55
static PXASSPDef pxa27x_ssp[] = {
56
    { 0x41000000, PXA2XX_PIC_SSP },
57
    { 0x41700000, PXA27X_PIC_SSP2 },
58
    { 0x41900000, PXA2XX_PIC_SSP3 },
59
    { 0, 0 }
60
};
61

    
62
#define PMCR        0x00        /* Power Manager Control register */
63
#define PSSR        0x04        /* Power Manager Sleep Status register */
64
#define PSPR        0x08        /* Power Manager Scratch-Pad register */
65
#define PWER        0x0c        /* Power Manager Wake-Up Enable register */
66
#define PRER        0x10        /* Power Manager Rising-Edge Detect Enable register */
67
#define PFER        0x14        /* Power Manager Falling-Edge Detect Enable register */
68
#define PEDR        0x18        /* Power Manager Edge-Detect Status register */
69
#define PCFR        0x1c        /* Power Manager General Configuration register */
70
#define PGSR0        0x20        /* Power Manager GPIO Sleep-State register 0 */
71
#define PGSR1        0x24        /* Power Manager GPIO Sleep-State register 1 */
72
#define PGSR2        0x28        /* Power Manager GPIO Sleep-State register 2 */
73
#define PGSR3        0x2c        /* Power Manager GPIO Sleep-State register 3 */
74
#define RCSR        0x30        /* Reset Controller Status register */
75
#define PSLR        0x34        /* Power Manager Sleep Configuration register */
76
#define PTSR        0x38        /* Power Manager Standby Configuration register */
77
#define PVCR        0x40        /* Power Manager Voltage Change Control register */
78
#define PUCR        0x4c        /* Power Manager USIM Card Control/Status register */
79
#define PKWR        0x50        /* Power Manager Keyboard Wake-Up Enable register */
80
#define PKSR        0x54        /* Power Manager Keyboard Level-Detect Status */
81
#define PCMD0        0x80        /* Power Manager I2C Command register File 0 */
82
#define PCMD31        0xfc        /* Power Manager I2C Command register File 31 */
83

    
84
static uint32_t pxa2xx_pm_read(void *opaque, target_phys_addr_t addr)
85
{
86
    struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
87
    addr -= s->pm_base;
88

    
89
    switch (addr) {
90
    case PMCR ... PCMD31:
91
        if (addr & 3)
92
            goto fail;
93

    
94
        return s->pm_regs[addr >> 2];
95
    default:
96
    fail:
97
        printf("%s: Bad register " REG_FMT "\n", __FUNCTION__, addr);
98
        break;
99
    }
100
    return 0;
101
}
102

    
103
static void pxa2xx_pm_write(void *opaque, target_phys_addr_t addr,
104
                uint32_t value)
105
{
106
    struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
107
    addr -= s->pm_base;
108

    
109
    switch (addr) {
110
    case PMCR:
111
        s->pm_regs[addr >> 2] &= 0x15 & ~(value & 0x2a);
112
        s->pm_regs[addr >> 2] |= value & 0x15;
113
        break;
114

    
115
    case PSSR:        /* Read-clean registers */
116
    case RCSR:
117
    case PKSR:
118
        s->pm_regs[addr >> 2] &= ~value;
119
        break;
120

    
121
    default:        /* Read-write registers */
122
        if (addr >= PMCR && addr <= PCMD31 && !(addr & 3)) {
123
            s->pm_regs[addr >> 2] = value;
124
            break;
125
        }
126

    
127
        printf("%s: Bad register " REG_FMT "\n", __FUNCTION__, addr);
128
        break;
129
    }
130
}
131

    
132
static CPUReadMemoryFunc *pxa2xx_pm_readfn[] = {
133
    pxa2xx_pm_read,
134
    pxa2xx_pm_read,
135
    pxa2xx_pm_read,
136
};
137

    
138
static CPUWriteMemoryFunc *pxa2xx_pm_writefn[] = {
139
    pxa2xx_pm_write,
140
    pxa2xx_pm_write,
141
    pxa2xx_pm_write,
142
};
143

    
144
static void pxa2xx_pm_save(QEMUFile *f, void *opaque)
145
{
146
    struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
147
    int i;
148

    
149
    for (i = 0; i < 0x40; i ++)
150
        qemu_put_be32s(f, &s->pm_regs[i]);
151
}
152

    
153
static int pxa2xx_pm_load(QEMUFile *f, void *opaque, int version_id)
154
{
155
    struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
156
    int i;
157

    
158
    for (i = 0; i < 0x40; i ++)
159
        qemu_get_be32s(f, &s->pm_regs[i]);
160

    
161
    return 0;
162
}
163

    
164
#define CCCR        0x00        /* Core Clock Configuration register */
165
#define CKEN        0x04        /* Clock Enable register */
166
#define OSCC        0x08        /* Oscillator Configuration register */
167
#define CCSR        0x0c        /* Core Clock Status register */
168

    
169
static uint32_t pxa2xx_cm_read(void *opaque, target_phys_addr_t addr)
170
{
171
    struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
172
    addr -= s->cm_base;
173

    
174
    switch (addr) {
175
    case CCCR:
176
    case CKEN:
177
    case OSCC:
178
        return s->cm_regs[addr >> 2];
179

    
180
    case CCSR:
181
        return s->cm_regs[CCCR >> 2] | (3 << 28);
182

    
183
    default:
184
        printf("%s: Bad register " REG_FMT "\n", __FUNCTION__, addr);
185
        break;
186
    }
187
    return 0;
188
}
189

    
190
static void pxa2xx_cm_write(void *opaque, target_phys_addr_t addr,
191
                uint32_t value)
192
{
193
    struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
194
    addr -= s->cm_base;
195

    
196
    switch (addr) {
197
    case CCCR:
198
    case CKEN:
199
        s->cm_regs[addr >> 2] = value;
200
        break;
201

    
202
    case OSCC:
203
        s->cm_regs[addr >> 2] &= ~0x6c;
204
        s->cm_regs[addr >> 2] |= value & 0x6e;
205
        if ((value >> 1) & 1)                        /* OON */
206
            s->cm_regs[addr >> 2] |= 1 << 0;        /* Oscillator is now stable */
207
        break;
208

    
209
    default:
210
        printf("%s: Bad register " REG_FMT "\n", __FUNCTION__, addr);
211
        break;
212
    }
213
}
214

    
215
static CPUReadMemoryFunc *pxa2xx_cm_readfn[] = {
216
    pxa2xx_cm_read,
217
    pxa2xx_cm_read,
218
    pxa2xx_cm_read,
219
};
220

    
221
static CPUWriteMemoryFunc *pxa2xx_cm_writefn[] = {
222
    pxa2xx_cm_write,
223
    pxa2xx_cm_write,
224
    pxa2xx_cm_write,
225
};
226

    
227
static void pxa2xx_cm_save(QEMUFile *f, void *opaque)
228
{
229
    struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
230
    int i;
231

    
232
    for (i = 0; i < 4; i ++)
233
        qemu_put_be32s(f, &s->cm_regs[i]);
234
    qemu_put_be32s(f, &s->clkcfg);
235
    qemu_put_be32s(f, &s->pmnc);
236
}
237

    
238
static int pxa2xx_cm_load(QEMUFile *f, void *opaque, int version_id)
239
{
240
    struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
241
    int i;
242

    
243
    for (i = 0; i < 4; i ++)
244
        qemu_get_be32s(f, &s->cm_regs[i]);
245
    qemu_get_be32s(f, &s->clkcfg);
246
    qemu_get_be32s(f, &s->pmnc);
247

    
248
    return 0;
249
}
250

    
251
static uint32_t pxa2xx_clkpwr_read(void *opaque, int op2, int reg, int crm)
252
{
253
    struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
254

    
255
    switch (reg) {
256
    case 6:        /* Clock Configuration register */
257
        return s->clkcfg;
258

    
259
    case 7:        /* Power Mode register */
260
        return 0;
261

    
262
    default:
263
        printf("%s: Bad register 0x%x\n", __FUNCTION__, reg);
264
        break;
265
    }
266
    return 0;
267
}
268

    
269
static void pxa2xx_clkpwr_write(void *opaque, int op2, int reg, int crm,
270
                uint32_t value)
271
{
272
    struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
273
    static const char *pwrmode[8] = {
274
        "Normal", "Idle", "Deep-idle", "Standby",
275
        "Sleep", "reserved (!)", "reserved (!)", "Deep-sleep",
276
    };
277

    
278
    switch (reg) {
279
    case 6:        /* Clock Configuration register */
280
        s->clkcfg = value & 0xf;
281
        if (value & 2)
282
            printf("%s: CPU frequency change attempt\n", __FUNCTION__);
283
        break;
284

    
285
    case 7:        /* Power Mode register */
286
        if (value & 8)
287
            printf("%s: CPU voltage change attempt\n", __FUNCTION__);
288
        switch (value & 7) {
289
        case 0:
290
            /* Do nothing */
291
            break;
292

    
293
        case 1:
294
            /* Idle */
295
            if (!(s->cm_regs[CCCR >> 2] & (1 << 31))) {        /* CPDIS */
296
                cpu_interrupt(s->env, CPU_INTERRUPT_HALT);
297
                break;
298
            }
299
            /* Fall through.  */
300

    
301
        case 2:
302
            /* Deep-Idle */
303
            cpu_interrupt(s->env, CPU_INTERRUPT_HALT);
304
            s->pm_regs[RCSR >> 2] |= 0x8;        /* Set GPR */
305
            goto message;
306

    
307
        case 3:
308
            s->env->uncached_cpsr =
309
                    ARM_CPU_MODE_SVC | CPSR_A | CPSR_F | CPSR_I;
310
            s->env->cp15.c1_sys = 0;
311
            s->env->cp15.c1_coproc = 0;
312
            s->env->cp15.c2_base0 = 0;
313
            s->env->cp15.c3 = 0;
314
            s->pm_regs[PSSR >> 2] |= 0x8;        /* Set STS */
315
            s->pm_regs[RCSR >> 2] |= 0x8;        /* Set GPR */
316

    
317
            /*
318
             * The scratch-pad register is almost universally used
319
             * for storing the return address on suspend.  For the
320
             * lack of a resuming bootloader, perform a jump
321
             * directly to that address.
322
             */
323
            memset(s->env->regs, 0, 4 * 15);
324
            s->env->regs[15] = s->pm_regs[PSPR >> 2];
325

    
326
#if 0
327
            buffer = 0xe59ff000;        /* ldr     pc, [pc, #0] */
328
            cpu_physical_memory_write(0, &buffer, 4);
329
            buffer = s->pm_regs[PSPR >> 2];
330
            cpu_physical_memory_write(8, &buffer, 4);
331
#endif
332

    
333
            /* Suspend */
334
            cpu_interrupt(cpu_single_env, CPU_INTERRUPT_HALT);
335

    
336
            goto message;
337

    
338
        default:
339
        message:
340
            printf("%s: machine entered %s mode\n", __FUNCTION__,
341
                            pwrmode[value & 7]);
342
        }
343
        break;
344

    
345
    default:
346
        printf("%s: Bad register 0x%x\n", __FUNCTION__, reg);
347
        break;
348
    }
349
}
350

    
351
/* Performace Monitoring Registers */
352
#define CPPMNC                0        /* Performance Monitor Control register */
353
#define CPCCNT                1        /* Clock Counter register */
354
#define CPINTEN                4        /* Interrupt Enable register */
355
#define CPFLAG                5        /* Overflow Flag register */
356
#define CPEVTSEL        8        /* Event Selection register */
357

    
358
#define CPPMN0                0        /* Performance Count register 0 */
359
#define CPPMN1                1        /* Performance Count register 1 */
360
#define CPPMN2                2        /* Performance Count register 2 */
361
#define CPPMN3                3        /* Performance Count register 3 */
362

    
363
static uint32_t pxa2xx_perf_read(void *opaque, int op2, int reg, int crm)
364
{
365
    struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
366

    
367
    switch (reg) {
368
    case CPPMNC:
369
        return s->pmnc;
370
    case CPCCNT:
371
        if (s->pmnc & 1)
372
            return qemu_get_clock(vm_clock);
373
        else
374
            return 0;
375
    case CPINTEN:
376
    case CPFLAG:
377
    case CPEVTSEL:
378
        return 0;
379

    
380
    default:
381
        printf("%s: Bad register 0x%x\n", __FUNCTION__, reg);
382
        break;
383
    }
384
    return 0;
385
}
386

    
387
static void pxa2xx_perf_write(void *opaque, int op2, int reg, int crm,
388
                uint32_t value)
389
{
390
    struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
391

    
392
    switch (reg) {
393
    case CPPMNC:
394
        s->pmnc = value;
395
        break;
396

    
397
    case CPCCNT:
398
    case CPINTEN:
399
    case CPFLAG:
400
    case CPEVTSEL:
401
        break;
402

    
403
    default:
404
        printf("%s: Bad register 0x%x\n", __FUNCTION__, reg);
405
        break;
406
    }
407
}
408

    
409
static uint32_t pxa2xx_cp14_read(void *opaque, int op2, int reg, int crm)
410
{
411
    switch (crm) {
412
    case 0:
413
        return pxa2xx_clkpwr_read(opaque, op2, reg, crm);
414
    case 1:
415
        return pxa2xx_perf_read(opaque, op2, reg, crm);
416
    case 2:
417
        switch (reg) {
418
        case CPPMN0:
419
        case CPPMN1:
420
        case CPPMN2:
421
        case CPPMN3:
422
            return 0;
423
        }
424
        /* Fall through */
425
    default:
426
        printf("%s: Bad register 0x%x\n", __FUNCTION__, reg);
427
        break;
428
    }
429
    return 0;
430
}
431

    
432
static void pxa2xx_cp14_write(void *opaque, int op2, int reg, int crm,
433
                uint32_t value)
434
{
435
    switch (crm) {
436
    case 0:
437
        pxa2xx_clkpwr_write(opaque, op2, reg, crm, value);
438
        break;
439
    case 1:
440
        pxa2xx_perf_write(opaque, op2, reg, crm, value);
441
        break;
442
    case 2:
443
        switch (reg) {
444
        case CPPMN0:
445
        case CPPMN1:
446
        case CPPMN2:
447
        case CPPMN3:
448
            return;
449
        }
450
        /* Fall through */
451
    default:
452
        printf("%s: Bad register 0x%x\n", __FUNCTION__, reg);
453
        break;
454
    }
455
}
456

    
457
#define MDCNFG                0x00        /* SDRAM Configuration register */
458
#define MDREFR                0x04        /* SDRAM Refresh Control register */
459
#define MSC0                0x08        /* Static Memory Control register 0 */
460
#define MSC1                0x0c        /* Static Memory Control register 1 */
461
#define MSC2                0x10        /* Static Memory Control register 2 */
462
#define MECR                0x14        /* Expansion Memory Bus Config register */
463
#define SXCNFG                0x1c        /* Synchronous Static Memory Config register */
464
#define MCMEM0                0x28        /* PC Card Memory Socket 0 Timing register */
465
#define MCMEM1                0x2c        /* PC Card Memory Socket 1 Timing register */
466
#define MCATT0                0x30        /* PC Card Attribute Socket 0 register */
467
#define MCATT1                0x34        /* PC Card Attribute Socket 1 register */
468
#define MCIO0                0x38        /* PC Card I/O Socket 0 Timing register */
469
#define MCIO1                0x3c        /* PC Card I/O Socket 1 Timing register */
470
#define MDMRS                0x40        /* SDRAM Mode Register Set Config register */
471
#define BOOT_DEF        0x44        /* Boot-time Default Configuration register */
472
#define ARB_CNTL        0x48        /* Arbiter Control register */
473
#define BSCNTR0                0x4c        /* Memory Buffer Strength Control register 0 */
474
#define BSCNTR1                0x50        /* Memory Buffer Strength Control register 1 */
475
#define LCDBSCNTR        0x54        /* LCD Buffer Strength Control register */
476
#define MDMRSLP                0x58        /* Low Power SDRAM Mode Set Config register */
477
#define BSCNTR2                0x5c        /* Memory Buffer Strength Control register 2 */
478
#define BSCNTR3                0x60        /* Memory Buffer Strength Control register 3 */
479
#define SA1110                0x64        /* SA-1110 Memory Compatibility register */
480

    
481
static uint32_t pxa2xx_mm_read(void *opaque, target_phys_addr_t addr)
482
{
483
    struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
484
    addr -= s->mm_base;
485

    
486
    switch (addr) {
487
    case MDCNFG ... SA1110:
488
        if ((addr & 3) == 0)
489
            return s->mm_regs[addr >> 2];
490

    
491
    default:
492
        printf("%s: Bad register " REG_FMT "\n", __FUNCTION__, addr);
493
        break;
494
    }
495
    return 0;
496
}
497

    
498
static void pxa2xx_mm_write(void *opaque, target_phys_addr_t addr,
499
                uint32_t value)
500
{
501
    struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
502
    addr -= s->mm_base;
503

    
504
    switch (addr) {
505
    case MDCNFG ... SA1110:
506
        if ((addr & 3) == 0) {
507
            s->mm_regs[addr >> 2] = value;
508
            break;
509
        }
510

    
511
    default:
512
        printf("%s: Bad register " REG_FMT "\n", __FUNCTION__, addr);
513
        break;
514
    }
515
}
516

    
517
static CPUReadMemoryFunc *pxa2xx_mm_readfn[] = {
518
    pxa2xx_mm_read,
519
    pxa2xx_mm_read,
520
    pxa2xx_mm_read,
521
};
522

    
523
static CPUWriteMemoryFunc *pxa2xx_mm_writefn[] = {
524
    pxa2xx_mm_write,
525
    pxa2xx_mm_write,
526
    pxa2xx_mm_write,
527
};
528

    
529
static void pxa2xx_mm_save(QEMUFile *f, void *opaque)
530
{
531
    struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
532
    int i;
533

    
534
    for (i = 0; i < 0x1a; i ++)
535
        qemu_put_be32s(f, &s->mm_regs[i]);
536
}
537

    
538
static int pxa2xx_mm_load(QEMUFile *f, void *opaque, int version_id)
539
{
540
    struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
541
    int i;
542

    
543
    for (i = 0; i < 0x1a; i ++)
544
        qemu_get_be32s(f, &s->mm_regs[i]);
545

    
546
    return 0;
547
}
548

    
549
/* Synchronous Serial Ports */
550
struct pxa2xx_ssp_s {
551
    target_phys_addr_t base;
552
    qemu_irq irq;
553
    int enable;
554

    
555
    uint32_t sscr[2];
556
    uint32_t sspsp;
557
    uint32_t ssto;
558
    uint32_t ssitr;
559
    uint32_t sssr;
560
    uint8_t sstsa;
561
    uint8_t ssrsa;
562
    uint8_t ssacd;
563

    
564
    uint32_t rx_fifo[16];
565
    int rx_level;
566
    int rx_start;
567

    
568
    uint32_t (*readfn)(void *opaque);
569
    void (*writefn)(void *opaque, uint32_t value);
570
    void *opaque;
571
};
572

    
573
#define SSCR0        0x00        /* SSP Control register 0 */
574
#define SSCR1        0x04        /* SSP Control register 1 */
575
#define SSSR        0x08        /* SSP Status register */
576
#define SSITR        0x0c        /* SSP Interrupt Test register */
577
#define SSDR        0x10        /* SSP Data register */
578
#define SSTO        0x28        /* SSP Time-Out register */
579
#define SSPSP        0x2c        /* SSP Programmable Serial Protocol register */
580
#define SSTSA        0x30        /* SSP TX Time Slot Active register */
581
#define SSRSA        0x34        /* SSP RX Time Slot Active register */
582
#define SSTSS        0x38        /* SSP Time Slot Status register */
583
#define SSACD        0x3c        /* SSP Audio Clock Divider register */
584

    
585
/* Bitfields for above registers */
586
#define SSCR0_SPI(x)        (((x) & 0x30) == 0x00)
587
#define SSCR0_SSP(x)        (((x) & 0x30) == 0x10)
588
#define SSCR0_UWIRE(x)        (((x) & 0x30) == 0x20)
589
#define SSCR0_PSP(x)        (((x) & 0x30) == 0x30)
590
#define SSCR0_SSE        (1 << 7)
591
#define SSCR0_RIM        (1 << 22)
592
#define SSCR0_TIM        (1 << 23)
593
#define SSCR0_MOD        (1 << 31)
594
#define SSCR0_DSS(x)        (((((x) >> 16) & 0x10) | ((x) & 0xf)) + 1)
595
#define SSCR1_RIE        (1 << 0)
596
#define SSCR1_TIE        (1 << 1)
597
#define SSCR1_LBM        (1 << 2)
598
#define SSCR1_MWDS        (1 << 5)
599
#define SSCR1_TFT(x)        ((((x) >> 6) & 0xf) + 1)
600
#define SSCR1_RFT(x)        ((((x) >> 10) & 0xf) + 1)
601
#define SSCR1_EFWR        (1 << 14)
602
#define SSCR1_PINTE        (1 << 18)
603
#define SSCR1_TINTE        (1 << 19)
604
#define SSCR1_RSRE        (1 << 20)
605
#define SSCR1_TSRE        (1 << 21)
606
#define SSCR1_EBCEI        (1 << 29)
607
#define SSITR_INT        (7 << 5)
608
#define SSSR_TNF        (1 << 2)
609
#define SSSR_RNE        (1 << 3)
610
#define SSSR_TFS        (1 << 5)
611
#define SSSR_RFS        (1 << 6)
612
#define SSSR_ROR        (1 << 7)
613
#define SSSR_PINT        (1 << 18)
614
#define SSSR_TINT        (1 << 19)
615
#define SSSR_EOC        (1 << 20)
616
#define SSSR_TUR        (1 << 21)
617
#define SSSR_BCE        (1 << 23)
618
#define SSSR_RW                0x00bc0080
619

    
620
static void pxa2xx_ssp_int_update(struct pxa2xx_ssp_s *s)
621
{
622
    int level = 0;
623

    
624
    level |= s->ssitr & SSITR_INT;
625
    level |= (s->sssr & SSSR_BCE)  &&  (s->sscr[1] & SSCR1_EBCEI);
626
    level |= (s->sssr & SSSR_TUR)  && !(s->sscr[0] & SSCR0_TIM);
627
    level |= (s->sssr & SSSR_EOC)  &&  (s->sssr & (SSSR_TINT | SSSR_PINT));
628
    level |= (s->sssr & SSSR_TINT) &&  (s->sscr[1] & SSCR1_TINTE);
629
    level |= (s->sssr & SSSR_PINT) &&  (s->sscr[1] & SSCR1_PINTE);
630
    level |= (s->sssr & SSSR_ROR)  && !(s->sscr[0] & SSCR0_RIM);
631
    level |= (s->sssr & SSSR_RFS)  &&  (s->sscr[1] & SSCR1_RIE);
632
    level |= (s->sssr & SSSR_TFS)  &&  (s->sscr[1] & SSCR1_TIE);
633
    qemu_set_irq(s->irq, !!level);
634
}
635

    
636
static void pxa2xx_ssp_fifo_update(struct pxa2xx_ssp_s *s)
637
{
638
    s->sssr &= ~(0xf << 12);        /* Clear RFL */
639
    s->sssr &= ~(0xf << 8);        /* Clear TFL */
640
    s->sssr &= ~SSSR_TNF;
641
    if (s->enable) {
642
        s->sssr |= ((s->rx_level - 1) & 0xf) << 12;
643
        if (s->rx_level >= SSCR1_RFT(s->sscr[1]))
644
            s->sssr |= SSSR_RFS;
645
        else
646
            s->sssr &= ~SSSR_RFS;
647
        if (0 <= SSCR1_TFT(s->sscr[1]))
648
            s->sssr |= SSSR_TFS;
649
        else
650
            s->sssr &= ~SSSR_TFS;
651
        if (s->rx_level)
652
            s->sssr |= SSSR_RNE;
653
        else
654
            s->sssr &= ~SSSR_RNE;
655
        s->sssr |= SSSR_TNF;
656
    }
657

    
658
    pxa2xx_ssp_int_update(s);
659
}
660

    
661
static uint32_t pxa2xx_ssp_read(void *opaque, target_phys_addr_t addr)
662
{
663
    struct pxa2xx_ssp_s *s = (struct pxa2xx_ssp_s *) opaque;
664
    uint32_t retval;
665
    addr -= s->base;
666

    
667
    switch (addr) {
668
    case SSCR0:
669
        return s->sscr[0];
670
    case SSCR1:
671
        return s->sscr[1];
672
    case SSPSP:
673
        return s->sspsp;
674
    case SSTO:
675
        return s->ssto;
676
    case SSITR:
677
        return s->ssitr;
678
    case SSSR:
679
        return s->sssr | s->ssitr;
680
    case SSDR:
681
        if (!s->enable)
682
            return 0xffffffff;
683
        if (s->rx_level < 1) {
684
            printf("%s: SSP Rx Underrun\n", __FUNCTION__);
685
            return 0xffffffff;
686
        }
687
        s->rx_level --;
688
        retval = s->rx_fifo[s->rx_start ++];
689
        s->rx_start &= 0xf;
690
        pxa2xx_ssp_fifo_update(s);
691
        return retval;
692
    case SSTSA:
693
        return s->sstsa;
694
    case SSRSA:
695
        return s->ssrsa;
696
    case SSTSS:
697
        return 0;
698
    case SSACD:
699
        return s->ssacd;
700
    default:
701
        printf("%s: Bad register " REG_FMT "\n", __FUNCTION__, addr);
702
        break;
703
    }
704
    return 0;
705
}
706

    
707
static void pxa2xx_ssp_write(void *opaque, target_phys_addr_t addr,
708
                uint32_t value)
709
{
710
    struct pxa2xx_ssp_s *s = (struct pxa2xx_ssp_s *) opaque;
711
    addr -= s->base;
712

    
713
    switch (addr) {
714
    case SSCR0:
715
        s->sscr[0] = value & 0xc7ffffff;
716
        s->enable = value & SSCR0_SSE;
717
        if (value & SSCR0_MOD)
718
            printf("%s: Attempt to use network mode\n", __FUNCTION__);
719
        if (s->enable && SSCR0_DSS(value) < 4)
720
            printf("%s: Wrong data size: %i bits\n", __FUNCTION__,
721
                            SSCR0_DSS(value));
722
        if (!(value & SSCR0_SSE)) {
723
            s->sssr = 0;
724
            s->ssitr = 0;
725
            s->rx_level = 0;
726
        }
727
        pxa2xx_ssp_fifo_update(s);
728
        break;
729

    
730
    case SSCR1:
731
        s->sscr[1] = value;
732
        if (value & (SSCR1_LBM | SSCR1_EFWR))
733
            printf("%s: Attempt to use SSP test mode\n", __FUNCTION__);
734
        pxa2xx_ssp_fifo_update(s);
735
        break;
736

    
737
    case SSPSP:
738
        s->sspsp = value;
739
        break;
740

    
741
    case SSTO:
742
        s->ssto = value;
743
        break;
744

    
745
    case SSITR:
746
        s->ssitr = value & SSITR_INT;
747
        pxa2xx_ssp_int_update(s);
748
        break;
749

    
750
    case SSSR:
751
        s->sssr &= ~(value & SSSR_RW);
752
        pxa2xx_ssp_int_update(s);
753
        break;
754

    
755
    case SSDR:
756
        if (SSCR0_UWIRE(s->sscr[0])) {
757
            if (s->sscr[1] & SSCR1_MWDS)
758
                value &= 0xffff;
759
            else
760
                value &= 0xff;
761
        } else
762
            /* Note how 32bits overflow does no harm here */
763
            value &= (1 << SSCR0_DSS(s->sscr[0])) - 1;
764

    
765
        /* Data goes from here to the Tx FIFO and is shifted out from
766
         * there directly to the slave, no need to buffer it.
767
         */
768
        if (s->enable) {
769
            if (s->writefn)
770
                s->writefn(s->opaque, value);
771

    
772
            if (s->rx_level < 0x10) {
773
                if (s->readfn)
774
                    s->rx_fifo[(s->rx_start + s->rx_level ++) & 0xf] =
775
                            s->readfn(s->opaque);
776
                else
777
                    s->rx_fifo[(s->rx_start + s->rx_level ++) & 0xf] = 0x0;
778
            } else
779
                s->sssr |= SSSR_ROR;
780
        }
781
        pxa2xx_ssp_fifo_update(s);
782
        break;
783

    
784
    case SSTSA:
785
        s->sstsa = value;
786
        break;
787

    
788
    case SSRSA:
789
        s->ssrsa = value;
790
        break;
791

    
792
    case SSACD:
793
        s->ssacd = value;
794
        break;
795

    
796
    default:
797
        printf("%s: Bad register " REG_FMT "\n", __FUNCTION__, addr);
798
        break;
799
    }
800
}
801

    
802
void pxa2xx_ssp_attach(struct pxa2xx_ssp_s *port,
803
                uint32_t (*readfn)(void *opaque),
804
                void (*writefn)(void *opaque, uint32_t value), void *opaque)
805
{
806
    if (!port) {
807
        printf("%s: no such SSP\n", __FUNCTION__);
808
        exit(-1);
809
    }
810

    
811
    port->opaque = opaque;
812
    port->readfn = readfn;
813
    port->writefn = writefn;
814
}
815

    
816
static CPUReadMemoryFunc *pxa2xx_ssp_readfn[] = {
817
    pxa2xx_ssp_read,
818
    pxa2xx_ssp_read,
819
    pxa2xx_ssp_read,
820
};
821

    
822
static CPUWriteMemoryFunc *pxa2xx_ssp_writefn[] = {
823
    pxa2xx_ssp_write,
824
    pxa2xx_ssp_write,
825
    pxa2xx_ssp_write,
826
};
827

    
828
static void pxa2xx_ssp_save(QEMUFile *f, void *opaque)
829
{
830
    struct pxa2xx_ssp_s *s = (struct pxa2xx_ssp_s *) opaque;
831
    int i;
832

    
833
    qemu_put_be32(f, s->enable);
834

    
835
    qemu_put_be32s(f, &s->sscr[0]);
836
    qemu_put_be32s(f, &s->sscr[1]);
837
    qemu_put_be32s(f, &s->sspsp);
838
    qemu_put_be32s(f, &s->ssto);
839
    qemu_put_be32s(f, &s->ssitr);
840
    qemu_put_be32s(f, &s->sssr);
841
    qemu_put_8s(f, &s->sstsa);
842
    qemu_put_8s(f, &s->ssrsa);
843
    qemu_put_8s(f, &s->ssacd);
844

    
845
    qemu_put_byte(f, s->rx_level);
846
    for (i = 0; i < s->rx_level; i ++)
847
        qemu_put_byte(f, s->rx_fifo[(s->rx_start + i) & 0xf]);
848
}
849

    
850
static int pxa2xx_ssp_load(QEMUFile *f, void *opaque, int version_id)
851
{
852
    struct pxa2xx_ssp_s *s = (struct pxa2xx_ssp_s *) opaque;
853
    int i;
854

    
855
    s->enable = qemu_get_be32(f);
856

    
857
    qemu_get_be32s(f, &s->sscr[0]);
858
    qemu_get_be32s(f, &s->sscr[1]);
859
    qemu_get_be32s(f, &s->sspsp);
860
    qemu_get_be32s(f, &s->ssto);
861
    qemu_get_be32s(f, &s->ssitr);
862
    qemu_get_be32s(f, &s->sssr);
863
    qemu_get_8s(f, &s->sstsa);
864
    qemu_get_8s(f, &s->ssrsa);
865
    qemu_get_8s(f, &s->ssacd);
866

    
867
    s->rx_level = qemu_get_byte(f);
868
    s->rx_start = 0;
869
    for (i = 0; i < s->rx_level; i ++)
870
        s->rx_fifo[i] = qemu_get_byte(f);
871

    
872
    return 0;
873
}
874

    
875
/* Real-Time Clock */
876
#define RCNR                0x00        /* RTC Counter register */
877
#define RTAR                0x04        /* RTC Alarm register */
878
#define RTSR                0x08        /* RTC Status register */
879
#define RTTR                0x0c        /* RTC Timer Trim register */
880
#define RDCR                0x10        /* RTC Day Counter register */
881
#define RYCR                0x14        /* RTC Year Counter register */
882
#define RDAR1                0x18        /* RTC Wristwatch Day Alarm register 1 */
883
#define RYAR1                0x1c        /* RTC Wristwatch Year Alarm register 1 */
884
#define RDAR2                0x20        /* RTC Wristwatch Day Alarm register 2 */
885
#define RYAR2                0x24        /* RTC Wristwatch Year Alarm register 2 */
886
#define SWCR                0x28        /* RTC Stopwatch Counter register */
887
#define SWAR1                0x2c        /* RTC Stopwatch Alarm register 1 */
888
#define SWAR2                0x30        /* RTC Stopwatch Alarm register 2 */
889
#define RTCPICR                0x34        /* RTC Periodic Interrupt Counter register */
890
#define PIAR                0x38        /* RTC Periodic Interrupt Alarm register */
891

    
892
static inline void pxa2xx_rtc_int_update(struct pxa2xx_state_s *s)
893
{
894
    qemu_set_irq(s->pic[PXA2XX_PIC_RTCALARM], !!(s->rtsr & 0x2553));
895
}
896

    
897
static void pxa2xx_rtc_hzupdate(struct pxa2xx_state_s *s)
898
{
899
    int64_t rt = qemu_get_clock(rt_clock);
900
    s->last_rcnr += ((rt - s->last_hz) << 15) /
901
            (1000 * ((s->rttr & 0xffff) + 1));
902
    s->last_rdcr += ((rt - s->last_hz) << 15) /
903
            (1000 * ((s->rttr & 0xffff) + 1));
904
    s->last_hz = rt;
905
}
906

    
907
static void pxa2xx_rtc_swupdate(struct pxa2xx_state_s *s)
908
{
909
    int64_t rt = qemu_get_clock(rt_clock);
910
    if (s->rtsr & (1 << 12))
911
        s->last_swcr += (rt - s->last_sw) / 10;
912
    s->last_sw = rt;
913
}
914

    
915
static void pxa2xx_rtc_piupdate(struct pxa2xx_state_s *s)
916
{
917
    int64_t rt = qemu_get_clock(rt_clock);
918
    if (s->rtsr & (1 << 15))
919
        s->last_swcr += rt - s->last_pi;
920
    s->last_pi = rt;
921
}
922

    
923
static inline void pxa2xx_rtc_alarm_update(struct pxa2xx_state_s *s,
924
                uint32_t rtsr)
925
{
926
    if ((rtsr & (1 << 2)) && !(rtsr & (1 << 0)))
927
        qemu_mod_timer(s->rtc_hz, s->last_hz +
928
                (((s->rtar - s->last_rcnr) * 1000 *
929
                  ((s->rttr & 0xffff) + 1)) >> 15));
930
    else
931
        qemu_del_timer(s->rtc_hz);
932

    
933
    if ((rtsr & (1 << 5)) && !(rtsr & (1 << 4)))
934
        qemu_mod_timer(s->rtc_rdal1, s->last_hz +
935
                (((s->rdar1 - s->last_rdcr) * 1000 *
936
                  ((s->rttr & 0xffff) + 1)) >> 15)); /* TODO: fixup */
937
    else
938
        qemu_del_timer(s->rtc_rdal1);
939

    
940
    if ((rtsr & (1 << 7)) && !(rtsr & (1 << 6)))
941
        qemu_mod_timer(s->rtc_rdal2, s->last_hz +
942
                (((s->rdar2 - s->last_rdcr) * 1000 *
943
                  ((s->rttr & 0xffff) + 1)) >> 15)); /* TODO: fixup */
944
    else
945
        qemu_del_timer(s->rtc_rdal2);
946

    
947
    if ((rtsr & 0x1200) == 0x1200 && !(rtsr & (1 << 8)))
948
        qemu_mod_timer(s->rtc_swal1, s->last_sw +
949
                        (s->swar1 - s->last_swcr) * 10); /* TODO: fixup */
950
    else
951
        qemu_del_timer(s->rtc_swal1);
952

    
953
    if ((rtsr & 0x1800) == 0x1800 && !(rtsr & (1 << 10)))
954
        qemu_mod_timer(s->rtc_swal2, s->last_sw +
955
                        (s->swar2 - s->last_swcr) * 10); /* TODO: fixup */
956
    else
957
        qemu_del_timer(s->rtc_swal2);
958

    
959
    if ((rtsr & 0xc000) == 0xc000 && !(rtsr & (1 << 13)))
960
        qemu_mod_timer(s->rtc_pi, s->last_pi +
961
                        (s->piar & 0xffff) - s->last_rtcpicr);
962
    else
963
        qemu_del_timer(s->rtc_pi);
964
}
965

    
966
static inline void pxa2xx_rtc_hz_tick(void *opaque)
967
{
968
    struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
969
    s->rtsr |= (1 << 0);
970
    pxa2xx_rtc_alarm_update(s, s->rtsr);
971
    pxa2xx_rtc_int_update(s);
972
}
973

    
974
static inline void pxa2xx_rtc_rdal1_tick(void *opaque)
975
{
976
    struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
977
    s->rtsr |= (1 << 4);
978
    pxa2xx_rtc_alarm_update(s, s->rtsr);
979
    pxa2xx_rtc_int_update(s);
980
}
981

    
982
static inline void pxa2xx_rtc_rdal2_tick(void *opaque)
983
{
984
    struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
985
    s->rtsr |= (1 << 6);
986
    pxa2xx_rtc_alarm_update(s, s->rtsr);
987
    pxa2xx_rtc_int_update(s);
988
}
989

    
990
static inline void pxa2xx_rtc_swal1_tick(void *opaque)
991
{
992
    struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
993
    s->rtsr |= (1 << 8);
994
    pxa2xx_rtc_alarm_update(s, s->rtsr);
995
    pxa2xx_rtc_int_update(s);
996
}
997

    
998
static inline void pxa2xx_rtc_swal2_tick(void *opaque)
999
{
1000
    struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
1001
    s->rtsr |= (1 << 10);
1002
    pxa2xx_rtc_alarm_update(s, s->rtsr);
1003
    pxa2xx_rtc_int_update(s);
1004
}
1005

    
1006
static inline void pxa2xx_rtc_pi_tick(void *opaque)
1007
{
1008
    struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
1009
    s->rtsr |= (1 << 13);
1010
    pxa2xx_rtc_piupdate(s);
1011
    s->last_rtcpicr = 0;
1012
    pxa2xx_rtc_alarm_update(s, s->rtsr);
1013
    pxa2xx_rtc_int_update(s);
1014
}
1015

    
1016
static uint32_t pxa2xx_rtc_read(void *opaque, target_phys_addr_t addr)
1017
{
1018
    struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
1019
    addr -= s->rtc_base;
1020

    
1021
    switch (addr) {
1022
    case RTTR:
1023
        return s->rttr;
1024
    case RTSR:
1025
        return s->rtsr;
1026
    case RTAR:
1027
        return s->rtar;
1028
    case RDAR1:
1029
        return s->rdar1;
1030
    case RDAR2:
1031
        return s->rdar2;
1032
    case RYAR1:
1033
        return s->ryar1;
1034
    case RYAR2:
1035
        return s->ryar2;
1036
    case SWAR1:
1037
        return s->swar1;
1038
    case SWAR2:
1039
        return s->swar2;
1040
    case PIAR:
1041
        return s->piar;
1042
    case RCNR:
1043
        return s->last_rcnr + ((qemu_get_clock(rt_clock) - s->last_hz) << 15) /
1044
                (1000 * ((s->rttr & 0xffff) + 1));
1045
    case RDCR:
1046
        return s->last_rdcr + ((qemu_get_clock(rt_clock) - s->last_hz) << 15) /
1047
                (1000 * ((s->rttr & 0xffff) + 1));
1048
    case RYCR:
1049
        return s->last_rycr;
1050
    case SWCR:
1051
        if (s->rtsr & (1 << 12))
1052
            return s->last_swcr + (qemu_get_clock(rt_clock) - s->last_sw) / 10;
1053
        else
1054
            return s->last_swcr;
1055
    default:
1056
        printf("%s: Bad register " REG_FMT "\n", __FUNCTION__, addr);
1057
        break;
1058
    }
1059
    return 0;
1060
}
1061

    
1062
static void pxa2xx_rtc_write(void *opaque, target_phys_addr_t addr,
1063
                uint32_t value)
1064
{
1065
    struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
1066
    addr -= s->rtc_base;
1067

    
1068
    switch (addr) {
1069
    case RTTR:
1070
        if (!(s->rttr & (1 << 31))) {
1071
            pxa2xx_rtc_hzupdate(s);
1072
            s->rttr = value;
1073
            pxa2xx_rtc_alarm_update(s, s->rtsr);
1074
        }
1075
        break;
1076

    
1077
    case RTSR:
1078
        if ((s->rtsr ^ value) & (1 << 15))
1079
            pxa2xx_rtc_piupdate(s);
1080

    
1081
        if ((s->rtsr ^ value) & (1 << 12))
1082
            pxa2xx_rtc_swupdate(s);
1083

    
1084
        if (((s->rtsr ^ value) & 0x4aac) | (value & ~0xdaac))
1085
            pxa2xx_rtc_alarm_update(s, value);
1086

    
1087
        s->rtsr = (value & 0xdaac) | (s->rtsr & ~(value & ~0xdaac));
1088
        pxa2xx_rtc_int_update(s);
1089
        break;
1090

    
1091
    case RTAR:
1092
        s->rtar = value;
1093
        pxa2xx_rtc_alarm_update(s, s->rtsr);
1094
        break;
1095

    
1096
    case RDAR1:
1097
        s->rdar1 = value;
1098
        pxa2xx_rtc_alarm_update(s, s->rtsr);
1099
        break;
1100

    
1101
    case RDAR2:
1102
        s->rdar2 = value;
1103
        pxa2xx_rtc_alarm_update(s, s->rtsr);
1104
        break;
1105

    
1106
    case RYAR1:
1107
        s->ryar1 = value;
1108
        pxa2xx_rtc_alarm_update(s, s->rtsr);
1109
        break;
1110

    
1111
    case RYAR2:
1112
        s->ryar2 = value;
1113
        pxa2xx_rtc_alarm_update(s, s->rtsr);
1114
        break;
1115

    
1116
    case SWAR1:
1117
        pxa2xx_rtc_swupdate(s);
1118
        s->swar1 = value;
1119
        s->last_swcr = 0;
1120
        pxa2xx_rtc_alarm_update(s, s->rtsr);
1121
        break;
1122

    
1123
    case SWAR2:
1124
        s->swar2 = value;
1125
        pxa2xx_rtc_alarm_update(s, s->rtsr);
1126
        break;
1127

    
1128
    case PIAR:
1129
        s->piar = value;
1130
        pxa2xx_rtc_alarm_update(s, s->rtsr);
1131
        break;
1132

    
1133
    case RCNR:
1134
        pxa2xx_rtc_hzupdate(s);
1135
        s->last_rcnr = value;
1136
        pxa2xx_rtc_alarm_update(s, s->rtsr);
1137
        break;
1138

    
1139
    case RDCR:
1140
        pxa2xx_rtc_hzupdate(s);
1141
        s->last_rdcr = value;
1142
        pxa2xx_rtc_alarm_update(s, s->rtsr);
1143
        break;
1144

    
1145
    case RYCR:
1146
        s->last_rycr = value;
1147
        break;
1148

    
1149
    case SWCR:
1150
        pxa2xx_rtc_swupdate(s);
1151
        s->last_swcr = value;
1152
        pxa2xx_rtc_alarm_update(s, s->rtsr);
1153
        break;
1154

    
1155
    case RTCPICR:
1156
        pxa2xx_rtc_piupdate(s);
1157
        s->last_rtcpicr = value & 0xffff;
1158
        pxa2xx_rtc_alarm_update(s, s->rtsr);
1159
        break;
1160

    
1161
    default:
1162
        printf("%s: Bad register " REG_FMT "\n", __FUNCTION__, addr);
1163
    }
1164
}
1165

    
1166
static CPUReadMemoryFunc *pxa2xx_rtc_readfn[] = {
1167
    pxa2xx_rtc_read,
1168
    pxa2xx_rtc_read,
1169
    pxa2xx_rtc_read,
1170
};
1171

    
1172
static CPUWriteMemoryFunc *pxa2xx_rtc_writefn[] = {
1173
    pxa2xx_rtc_write,
1174
    pxa2xx_rtc_write,
1175
    pxa2xx_rtc_write,
1176
};
1177

    
1178
static void pxa2xx_rtc_init(struct pxa2xx_state_s *s)
1179
{
1180
    struct tm *tm;
1181
    time_t ti;
1182
    int wom;
1183

    
1184
    s->rttr = 0x7fff;
1185
    s->rtsr = 0;
1186

    
1187
    time(&ti);
1188
    if (rtc_utc)
1189
        tm = gmtime(&ti);
1190
    else
1191
        tm = localtime(&ti);
1192
    wom = ((tm->tm_mday - 1) / 7) + 1;
1193

    
1194
    s->last_rcnr = (uint32_t) ti;
1195
    s->last_rdcr = (wom << 20) | ((tm->tm_wday + 1) << 17) |
1196
            (tm->tm_hour << 12) | (tm->tm_min << 6) | tm->tm_sec;
1197
    s->last_rycr = ((tm->tm_year + 1900) << 9) |
1198
            ((tm->tm_mon + 1) << 5) | tm->tm_mday;
1199
    s->last_swcr = (tm->tm_hour << 19) |
1200
            (tm->tm_min << 13) | (tm->tm_sec << 7);
1201
    s->last_rtcpicr = 0;
1202
    s->last_hz = s->last_sw = s->last_pi = qemu_get_clock(rt_clock);
1203

    
1204
    s->rtc_hz    = qemu_new_timer(rt_clock, pxa2xx_rtc_hz_tick,    s);
1205
    s->rtc_rdal1 = qemu_new_timer(rt_clock, pxa2xx_rtc_rdal1_tick, s);
1206
    s->rtc_rdal2 = qemu_new_timer(rt_clock, pxa2xx_rtc_rdal2_tick, s);
1207
    s->rtc_swal1 = qemu_new_timer(rt_clock, pxa2xx_rtc_swal1_tick, s);
1208
    s->rtc_swal2 = qemu_new_timer(rt_clock, pxa2xx_rtc_swal2_tick, s);
1209
    s->rtc_pi    = qemu_new_timer(rt_clock, pxa2xx_rtc_pi_tick,    s);
1210
}
1211

    
1212
static void pxa2xx_rtc_save(QEMUFile *f, void *opaque)
1213
{
1214
    struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
1215

    
1216
    pxa2xx_rtc_hzupdate(s);
1217
    pxa2xx_rtc_piupdate(s);
1218
    pxa2xx_rtc_swupdate(s);
1219

    
1220
    qemu_put_be32s(f, &s->rttr);
1221
    qemu_put_be32s(f, &s->rtsr);
1222
    qemu_put_be32s(f, &s->rtar);
1223
    qemu_put_be32s(f, &s->rdar1);
1224
    qemu_put_be32s(f, &s->rdar2);
1225
    qemu_put_be32s(f, &s->ryar1);
1226
    qemu_put_be32s(f, &s->ryar2);
1227
    qemu_put_be32s(f, &s->swar1);
1228
    qemu_put_be32s(f, &s->swar2);
1229
    qemu_put_be32s(f, &s->piar);
1230
    qemu_put_be32s(f, &s->last_rcnr);
1231
    qemu_put_be32s(f, &s->last_rdcr);
1232
    qemu_put_be32s(f, &s->last_rycr);
1233
    qemu_put_be32s(f, &s->last_swcr);
1234
    qemu_put_be32s(f, &s->last_rtcpicr);
1235
    qemu_put_be64s(f, &s->last_hz);
1236
    qemu_put_be64s(f, &s->last_sw);
1237
    qemu_put_be64s(f, &s->last_pi);
1238
}
1239

    
1240
static int pxa2xx_rtc_load(QEMUFile *f, void *opaque, int version_id)
1241
{
1242
    struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
1243

    
1244
    qemu_get_be32s(f, &s->rttr);
1245
    qemu_get_be32s(f, &s->rtsr);
1246
    qemu_get_be32s(f, &s->rtar);
1247
    qemu_get_be32s(f, &s->rdar1);
1248
    qemu_get_be32s(f, &s->rdar2);
1249
    qemu_get_be32s(f, &s->ryar1);
1250
    qemu_get_be32s(f, &s->ryar2);
1251
    qemu_get_be32s(f, &s->swar1);
1252
    qemu_get_be32s(f, &s->swar2);
1253
    qemu_get_be32s(f, &s->piar);
1254
    qemu_get_be32s(f, &s->last_rcnr);
1255
    qemu_get_be32s(f, &s->last_rdcr);
1256
    qemu_get_be32s(f, &s->last_rycr);
1257
    qemu_get_be32s(f, &s->last_swcr);
1258
    qemu_get_be32s(f, &s->last_rtcpicr);
1259
    qemu_get_be64s(f, &s->last_hz);
1260
    qemu_get_be64s(f, &s->last_sw);
1261
    qemu_get_be64s(f, &s->last_pi);
1262

    
1263
    pxa2xx_rtc_alarm_update(s, s->rtsr);
1264

    
1265
    return 0;
1266
}
1267

    
1268
/* I2C Interface */
1269
struct pxa2xx_i2c_s {
1270
    i2c_slave slave;
1271
    i2c_bus *bus;
1272
    target_phys_addr_t base;
1273
    qemu_irq irq;
1274

    
1275
    uint16_t control;
1276
    uint16_t status;
1277
    uint8_t ibmr;
1278
    uint8_t data;
1279
};
1280

    
1281
#define IBMR        0x80        /* I2C Bus Monitor register */
1282
#define IDBR        0x88        /* I2C Data Buffer register */
1283
#define ICR        0x90        /* I2C Control register */
1284
#define ISR        0x98        /* I2C Status register */
1285
#define ISAR        0xa0        /* I2C Slave Address register */
1286

    
1287
static void pxa2xx_i2c_update(struct pxa2xx_i2c_s *s)
1288
{
1289
    uint16_t level = 0;
1290
    level |= s->status & s->control & (1 << 10);                /* BED */
1291
    level |= (s->status & (1 << 7)) && (s->control & (1 << 9));        /* IRF */
1292
    level |= (s->status & (1 << 6)) && (s->control & (1 << 8));        /* ITE */
1293
    level |= s->status & (1 << 9);                                /* SAD */
1294
    qemu_set_irq(s->irq, !!level);
1295
}
1296

    
1297
/* These are only stubs now.  */
1298
static void pxa2xx_i2c_event(i2c_slave *i2c, enum i2c_event event)
1299
{
1300
    struct pxa2xx_i2c_s *s = (struct pxa2xx_i2c_s *) i2c;
1301

    
1302
    switch (event) {
1303
    case I2C_START_SEND:
1304
        s->status |= (1 << 9);                                /* set SAD */
1305
        s->status &= ~(1 << 0);                                /* clear RWM */
1306
        break;
1307
    case I2C_START_RECV:
1308
        s->status |= (1 << 9);                                /* set SAD */
1309
        s->status |= 1 << 0;                                /* set RWM */
1310
        break;
1311
    case I2C_FINISH:
1312
        s->status |= (1 << 4);                                /* set SSD */
1313
        break;
1314
    case I2C_NACK:
1315
        s->status |= 1 << 1;                                /* set ACKNAK */
1316
        break;
1317
    }
1318
    pxa2xx_i2c_update(s);
1319
}
1320

    
1321
static int pxa2xx_i2c_rx(i2c_slave *i2c)
1322
{
1323
    struct pxa2xx_i2c_s *s = (struct pxa2xx_i2c_s *) i2c;
1324
    if ((s->control & (1 << 14)) || !(s->control & (1 << 6)))
1325
        return 0;
1326

    
1327
    if (s->status & (1 << 0)) {                        /* RWM */
1328
        s->status |= 1 << 6;                        /* set ITE */
1329
    }
1330
    pxa2xx_i2c_update(s);
1331

    
1332
    return s->data;
1333
}
1334

    
1335
static int pxa2xx_i2c_tx(i2c_slave *i2c, uint8_t data)
1336
{
1337
    struct pxa2xx_i2c_s *s = (struct pxa2xx_i2c_s *) i2c;
1338
    if ((s->control & (1 << 14)) || !(s->control & (1 << 6)))
1339
        return 1;
1340

    
1341
    if (!(s->status & (1 << 0))) {                /* RWM */
1342
        s->status |= 1 << 7;                        /* set IRF */
1343
        s->data = data;
1344
    }
1345
    pxa2xx_i2c_update(s);
1346

    
1347
    return 1;
1348
}
1349

    
1350
static uint32_t pxa2xx_i2c_read(void *opaque, target_phys_addr_t addr)
1351
{
1352
    struct pxa2xx_i2c_s *s = (struct pxa2xx_i2c_s *) opaque;
1353
    addr -= s->base;
1354

    
1355
    switch (addr) {
1356
    case ICR:
1357
        return s->control;
1358
    case ISR:
1359
        return s->status | (i2c_bus_busy(s->bus) << 2);
1360
    case ISAR:
1361
        return s->slave.address;
1362
    case IDBR:
1363
        return s->data;
1364
    case IBMR:
1365
        if (s->status & (1 << 2))
1366
            s->ibmr ^= 3;        /* Fake SCL and SDA pin changes */
1367
        else
1368
            s->ibmr = 0;
1369
        return s->ibmr;
1370
    default:
1371
        printf("%s: Bad register " REG_FMT "\n", __FUNCTION__, addr);
1372
        break;
1373
    }
1374
    return 0;
1375
}
1376

    
1377
static void pxa2xx_i2c_write(void *opaque, target_phys_addr_t addr,
1378
                uint32_t value)
1379
{
1380
    struct pxa2xx_i2c_s *s = (struct pxa2xx_i2c_s *) opaque;
1381
    int ack;
1382
    addr -= s->base;
1383

    
1384
    switch (addr) {
1385
    case ICR:
1386
        s->control = value & 0xfff7;
1387
        if ((value & (1 << 3)) && (value & (1 << 6))) {        /* TB and IUE */
1388
            /* TODO: slave mode */
1389
            if (value & (1 << 0)) {                        /* START condition */
1390
                if (s->data & 1)
1391
                    s->status |= 1 << 0;                /* set RWM */
1392
                else
1393
                    s->status &= ~(1 << 0);                /* clear RWM */
1394
                ack = !i2c_start_transfer(s->bus, s->data >> 1, s->data & 1);
1395
            } else {
1396
                if (s->status & (1 << 0)) {                /* RWM */
1397
                    s->data = i2c_recv(s->bus);
1398
                    if (value & (1 << 2))                /* ACKNAK */
1399
                        i2c_nack(s->bus);
1400
                    ack = 1;
1401
                } else
1402
                    ack = !i2c_send(s->bus, s->data);
1403
            }
1404

    
1405
            if (value & (1 << 1))                        /* STOP condition */
1406
                i2c_end_transfer(s->bus);
1407

    
1408
            if (ack) {
1409
                if (value & (1 << 0))                        /* START condition */
1410
                    s->status |= 1 << 6;                /* set ITE */
1411
                else
1412
                    if (s->status & (1 << 0))                /* RWM */
1413
                        s->status |= 1 << 7;                /* set IRF */
1414
                    else
1415
                        s->status |= 1 << 6;                /* set ITE */
1416
                s->status &= ~(1 << 1);                        /* clear ACKNAK */
1417
            } else {
1418
                s->status |= 1 << 6;                        /* set ITE */
1419
                s->status |= 1 << 10;                        /* set BED */
1420
                s->status |= 1 << 1;                        /* set ACKNAK */
1421
            }
1422
        }
1423
        if (!(value & (1 << 3)) && (value & (1 << 6)))        /* !TB and IUE */
1424
            if (value & (1 << 4))                        /* MA */
1425
                i2c_end_transfer(s->bus);
1426
        pxa2xx_i2c_update(s);
1427
        break;
1428

    
1429
    case ISR:
1430
        s->status &= ~(value & 0x07f0);
1431
        pxa2xx_i2c_update(s);
1432
        break;
1433

    
1434
    case ISAR:
1435
        i2c_set_slave_address(&s->slave, value & 0x7f);
1436
        break;
1437

    
1438
    case IDBR:
1439
        s->data = value & 0xff;
1440
        break;
1441

    
1442
    default:
1443
        printf("%s: Bad register " REG_FMT "\n", __FUNCTION__, addr);
1444
    }
1445
}
1446

    
1447
static CPUReadMemoryFunc *pxa2xx_i2c_readfn[] = {
1448
    pxa2xx_i2c_read,
1449
    pxa2xx_i2c_read,
1450
    pxa2xx_i2c_read,
1451
};
1452

    
1453
static CPUWriteMemoryFunc *pxa2xx_i2c_writefn[] = {
1454
    pxa2xx_i2c_write,
1455
    pxa2xx_i2c_write,
1456
    pxa2xx_i2c_write,
1457
};
1458

    
1459
static void pxa2xx_i2c_save(QEMUFile *f, void *opaque)
1460
{
1461
    struct pxa2xx_i2c_s *s = (struct pxa2xx_i2c_s *) opaque;
1462

    
1463
    qemu_put_be16s(f, &s->control);
1464
    qemu_put_be16s(f, &s->status);
1465
    qemu_put_8s(f, &s->ibmr);
1466
    qemu_put_8s(f, &s->data);
1467

    
1468
    i2c_bus_save(f, s->bus);
1469
    i2c_slave_save(f, &s->slave);
1470
}
1471

    
1472
static int pxa2xx_i2c_load(QEMUFile *f, void *opaque, int version_id)
1473
{
1474
    struct pxa2xx_i2c_s *s = (struct pxa2xx_i2c_s *) opaque;
1475

    
1476
    qemu_get_be16s(f, &s->control);
1477
    qemu_get_be16s(f, &s->status);
1478
    qemu_get_8s(f, &s->ibmr);
1479
    qemu_get_8s(f, &s->data);
1480

    
1481
    i2c_bus_load(f, s->bus);
1482
    i2c_slave_load(f, &s->slave);
1483
    return 0;
1484
}
1485

    
1486
struct pxa2xx_i2c_s *pxa2xx_i2c_init(target_phys_addr_t base,
1487
                qemu_irq irq, uint32_t page_size)
1488
{
1489
    int iomemtype;
1490
    struct pxa2xx_i2c_s *s = (struct pxa2xx_i2c_s *)
1491
            i2c_slave_init(i2c_init_bus(), 0, sizeof(struct pxa2xx_i2c_s));
1492

    
1493
    s->base = base;
1494
    s->irq = irq;
1495
    s->slave.event = pxa2xx_i2c_event;
1496
    s->slave.recv = pxa2xx_i2c_rx;
1497
    s->slave.send = pxa2xx_i2c_tx;
1498
    s->bus = i2c_init_bus();
1499

    
1500
    iomemtype = cpu_register_io_memory(0, pxa2xx_i2c_readfn,
1501
                    pxa2xx_i2c_writefn, s);
1502
    cpu_register_physical_memory(s->base & ~page_size, page_size, iomemtype);
1503

    
1504
    register_savevm("pxa2xx_i2c", base, 0,
1505
                    pxa2xx_i2c_save, pxa2xx_i2c_load, s);
1506

    
1507
    return s;
1508
}
1509

    
1510
i2c_bus *pxa2xx_i2c_bus(struct pxa2xx_i2c_s *s)
1511
{
1512
    return s->bus;
1513
}
1514

    
1515
/* PXA Inter-IC Sound Controller */
1516
static void pxa2xx_i2s_reset(struct pxa2xx_i2s_s *i2s)
1517
{
1518
    i2s->rx_len = 0;
1519
    i2s->tx_len = 0;
1520
    i2s->fifo_len = 0;
1521
    i2s->clk = 0x1a;
1522
    i2s->control[0] = 0x00;
1523
    i2s->control[1] = 0x00;
1524
    i2s->status = 0x00;
1525
    i2s->mask = 0x00;
1526
}
1527

    
1528
#define SACR_TFTH(val)        ((val >> 8) & 0xf)
1529
#define SACR_RFTH(val)        ((val >> 12) & 0xf)
1530
#define SACR_DREC(val)        (val & (1 << 3))
1531
#define SACR_DPRL(val)        (val & (1 << 4))
1532

    
1533
static inline void pxa2xx_i2s_update(struct pxa2xx_i2s_s *i2s)
1534
{
1535
    int rfs, tfs;
1536
    rfs = SACR_RFTH(i2s->control[0]) < i2s->rx_len &&
1537
            !SACR_DREC(i2s->control[1]);
1538
    tfs = (i2s->tx_len || i2s->fifo_len < SACR_TFTH(i2s->control[0])) &&
1539
            i2s->enable && !SACR_DPRL(i2s->control[1]);
1540

    
1541
    pxa2xx_dma_request(i2s->dma, PXA2XX_RX_RQ_I2S, rfs);
1542
    pxa2xx_dma_request(i2s->dma, PXA2XX_TX_RQ_I2S, tfs);
1543

    
1544
    i2s->status &= 0xe0;
1545
    if (i2s->fifo_len < 16 || !i2s->enable)
1546
        i2s->status |= 1 << 0;                        /* TNF */
1547
    if (i2s->rx_len)
1548
        i2s->status |= 1 << 1;                        /* RNE */
1549
    if (i2s->enable)
1550
        i2s->status |= 1 << 2;                        /* BSY */
1551
    if (tfs)
1552
        i2s->status |= 1 << 3;                        /* TFS */
1553
    if (rfs)
1554
        i2s->status |= 1 << 4;                        /* RFS */
1555
    if (!(i2s->tx_len && i2s->enable))
1556
        i2s->status |= i2s->fifo_len << 8;        /* TFL */
1557
    i2s->status |= MAX(i2s->rx_len, 0xf) << 12;        /* RFL */
1558

    
1559
    qemu_set_irq(i2s->irq, i2s->status & i2s->mask);
1560
}
1561

    
1562
#define SACR0        0x00        /* Serial Audio Global Control register */
1563
#define SACR1        0x04        /* Serial Audio I2S/MSB-Justified Control register */
1564
#define SASR0        0x0c        /* Serial Audio Interface and FIFO Status register */
1565
#define SAIMR        0x14        /* Serial Audio Interrupt Mask register */
1566
#define SAICR        0x18        /* Serial Audio Interrupt Clear register */
1567
#define SADIV        0x60        /* Serial Audio Clock Divider register */
1568
#define SADR        0x80        /* Serial Audio Data register */
1569

    
1570
static uint32_t pxa2xx_i2s_read(void *opaque, target_phys_addr_t addr)
1571
{
1572
    struct pxa2xx_i2s_s *s = (struct pxa2xx_i2s_s *) opaque;
1573
    addr -= s->base;
1574

    
1575
    switch (addr) {
1576
    case SACR0:
1577
        return s->control[0];
1578
    case SACR1:
1579
        return s->control[1];
1580
    case SASR0:
1581
        return s->status;
1582
    case SAIMR:
1583
        return s->mask;
1584
    case SAICR:
1585
        return 0;
1586
    case SADIV:
1587
        return s->clk;
1588
    case SADR:
1589
        if (s->rx_len > 0) {
1590
            s->rx_len --;
1591
            pxa2xx_i2s_update(s);
1592
            return s->codec_in(s->opaque);
1593
        }
1594
        return 0;
1595
    default:
1596
        printf("%s: Bad register " REG_FMT "\n", __FUNCTION__, addr);
1597
        break;
1598
    }
1599
    return 0;
1600
}
1601

    
1602
static void pxa2xx_i2s_write(void *opaque, target_phys_addr_t addr,
1603
                uint32_t value)
1604
{
1605
    struct pxa2xx_i2s_s *s = (struct pxa2xx_i2s_s *) opaque;
1606
    uint32_t *sample;
1607
    addr -= s->base;
1608

    
1609
    switch (addr) {
1610
    case SACR0:
1611
        if (value & (1 << 3))                                /* RST */
1612
            pxa2xx_i2s_reset(s);
1613
        s->control[0] = value & 0xff3d;
1614
        if (!s->enable && (value & 1) && s->tx_len) {        /* ENB */
1615
            for (sample = s->fifo; s->fifo_len > 0; s->fifo_len --, sample ++)
1616
                s->codec_out(s->opaque, *sample);
1617
            s->status &= ~(1 << 7);                        /* I2SOFF */
1618
        }
1619
        if (value & (1 << 4))                                /* EFWR */
1620
            printf("%s: Attempt to use special function\n", __FUNCTION__);
1621
        s->enable = ((value ^ 4) & 5) == 5;                /* ENB && !RST*/
1622
        pxa2xx_i2s_update(s);
1623
        break;
1624
    case SACR1:
1625
        s->control[1] = value & 0x0039;
1626
        if (value & (1 << 5))                                /* ENLBF */
1627
            printf("%s: Attempt to use loopback function\n", __FUNCTION__);
1628
        if (value & (1 << 4))                                /* DPRL */
1629
            s->fifo_len = 0;
1630
        pxa2xx_i2s_update(s);
1631
        break;
1632
    case SAIMR:
1633
        s->mask = value & 0x0078;
1634
        pxa2xx_i2s_update(s);
1635
        break;
1636
    case SAICR:
1637
        s->status &= ~(value & (3 << 5));
1638
        pxa2xx_i2s_update(s);
1639
        break;
1640
    case SADIV:
1641
        s->clk = value & 0x007f;
1642
        break;
1643
    case SADR:
1644
        if (s->tx_len && s->enable) {
1645
            s->tx_len --;
1646
            pxa2xx_i2s_update(s);
1647
            s->codec_out(s->opaque, value);
1648
        } else if (s->fifo_len < 16) {
1649
            s->fifo[s->fifo_len ++] = value;
1650
            pxa2xx_i2s_update(s);
1651
        }
1652
        break;
1653
    default:
1654
        printf("%s: Bad register " REG_FMT "\n", __FUNCTION__, addr);
1655
    }
1656
}
1657

    
1658
static CPUReadMemoryFunc *pxa2xx_i2s_readfn[] = {
1659
    pxa2xx_i2s_read,
1660
    pxa2xx_i2s_read,
1661
    pxa2xx_i2s_read,
1662
};
1663

    
1664
static CPUWriteMemoryFunc *pxa2xx_i2s_writefn[] = {
1665
    pxa2xx_i2s_write,
1666
    pxa2xx_i2s_write,
1667
    pxa2xx_i2s_write,
1668
};
1669

    
1670
static void pxa2xx_i2s_save(QEMUFile *f, void *opaque)
1671
{
1672
    struct pxa2xx_i2s_s *s = (struct pxa2xx_i2s_s *) opaque;
1673

    
1674
    qemu_put_be32s(f, &s->control[0]);
1675
    qemu_put_be32s(f, &s->control[1]);
1676
    qemu_put_be32s(f, &s->status);
1677
    qemu_put_be32s(f, &s->mask);
1678
    qemu_put_be32s(f, &s->clk);
1679

    
1680
    qemu_put_be32(f, s->enable);
1681
    qemu_put_be32(f, s->rx_len);
1682
    qemu_put_be32(f, s->tx_len);
1683
    qemu_put_be32(f, s->fifo_len);
1684
}
1685

    
1686
static int pxa2xx_i2s_load(QEMUFile *f, void *opaque, int version_id)
1687
{
1688
    struct pxa2xx_i2s_s *s = (struct pxa2xx_i2s_s *) opaque;
1689

    
1690
    qemu_get_be32s(f, &s->control[0]);
1691
    qemu_get_be32s(f, &s->control[1]);
1692
    qemu_get_be32s(f, &s->status);
1693
    qemu_get_be32s(f, &s->mask);
1694
    qemu_get_be32s(f, &s->clk);
1695

    
1696
    s->enable = qemu_get_be32(f);
1697
    s->rx_len = qemu_get_be32(f);
1698
    s->tx_len = qemu_get_be32(f);
1699
    s->fifo_len = qemu_get_be32(f);
1700

    
1701
    return 0;
1702
}
1703

    
1704
static void pxa2xx_i2s_data_req(void *opaque, int tx, int rx)
1705
{
1706
    struct pxa2xx_i2s_s *s = (struct pxa2xx_i2s_s *) opaque;
1707
    uint32_t *sample;
1708

    
1709
    /* Signal FIFO errors */
1710
    if (s->enable && s->tx_len)
1711
        s->status |= 1 << 5;                /* TUR */
1712
    if (s->enable && s->rx_len)
1713
        s->status |= 1 << 6;                /* ROR */
1714

    
1715
    /* Should be tx - MIN(tx, s->fifo_len) but we don't really need to
1716
     * handle the cases where it makes a difference.  */
1717
    s->tx_len = tx - s->fifo_len;
1718
    s->rx_len = rx;
1719
    /* Note that is s->codec_out wasn't set, we wouldn't get called.  */
1720
    if (s->enable)
1721
        for (sample = s->fifo; s->fifo_len; s->fifo_len --, sample ++)
1722
            s->codec_out(s->opaque, *sample);
1723
    pxa2xx_i2s_update(s);
1724
}
1725

    
1726
static struct pxa2xx_i2s_s *pxa2xx_i2s_init(target_phys_addr_t base,
1727
                qemu_irq irq, struct pxa2xx_dma_state_s *dma)
1728
{
1729
    int iomemtype;
1730
    struct pxa2xx_i2s_s *s = (struct pxa2xx_i2s_s *)
1731
            qemu_mallocz(sizeof(struct pxa2xx_i2s_s));
1732

    
1733
    s->base = base;
1734
    s->irq = irq;
1735
    s->dma = dma;
1736
    s->data_req = pxa2xx_i2s_data_req;
1737

    
1738
    pxa2xx_i2s_reset(s);
1739

    
1740
    iomemtype = cpu_register_io_memory(0, pxa2xx_i2s_readfn,
1741
                    pxa2xx_i2s_writefn, s);
1742
    cpu_register_physical_memory(s->base & 0xfff00000, 0x100000, iomemtype);
1743

    
1744
    register_savevm("pxa2xx_i2s", base, 0,
1745
                    pxa2xx_i2s_save, pxa2xx_i2s_load, s);
1746

    
1747
    return s;
1748
}
1749

    
1750
/* PXA Fast Infra-red Communications Port */
1751
struct pxa2xx_fir_s {
1752
    target_phys_addr_t base;
1753
    qemu_irq irq;
1754
    struct pxa2xx_dma_state_s *dma;
1755
    int enable;
1756
    CharDriverState *chr;
1757

    
1758
    uint8_t control[3];
1759
    uint8_t status[2];
1760

    
1761
    int rx_len;
1762
    int rx_start;
1763
    uint8_t rx_fifo[64];
1764
};
1765

    
1766
static void pxa2xx_fir_reset(struct pxa2xx_fir_s *s)
1767
{
1768
    s->control[0] = 0x00;
1769
    s->control[1] = 0x00;
1770
    s->control[2] = 0x00;
1771
    s->status[0] = 0x00;
1772
    s->status[1] = 0x00;
1773
    s->enable = 0;
1774
}
1775

    
1776
static inline void pxa2xx_fir_update(struct pxa2xx_fir_s *s)
1777
{
1778
    static const int tresh[4] = { 8, 16, 32, 0 };
1779
    int intr = 0;
1780
    if ((s->control[0] & (1 << 4)) &&                        /* RXE */
1781
                    s->rx_len >= tresh[s->control[2] & 3])        /* TRIG */
1782
        s->status[0] |= 1 << 4;                                /* RFS */
1783
    else
1784
        s->status[0] &= ~(1 << 4);                        /* RFS */
1785
    if (s->control[0] & (1 << 3))                        /* TXE */
1786
        s->status[0] |= 1 << 3;                                /* TFS */
1787
    else
1788
        s->status[0] &= ~(1 << 3);                        /* TFS */
1789
    if (s->rx_len)
1790
        s->status[1] |= 1 << 2;                                /* RNE */
1791
    else
1792
        s->status[1] &= ~(1 << 2);                        /* RNE */
1793
    if (s->control[0] & (1 << 4))                        /* RXE */
1794
        s->status[1] |= 1 << 0;                                /* RSY */
1795
    else
1796
        s->status[1] &= ~(1 << 0);                        /* RSY */
1797

    
1798
    intr |= (s->control[0] & (1 << 5)) &&                /* RIE */
1799
            (s->status[0] & (1 << 4));                        /* RFS */
1800
    intr |= (s->control[0] & (1 << 6)) &&                /* TIE */
1801
            (s->status[0] & (1 << 3));                        /* TFS */
1802
    intr |= (s->control[2] & (1 << 4)) &&                /* TRAIL */
1803
            (s->status[0] & (1 << 6));                        /* EOC */
1804
    intr |= (s->control[0] & (1 << 2)) &&                /* TUS */
1805
            (s->status[0] & (1 << 1));                        /* TUR */
1806
    intr |= s->status[0] & 0x25;                        /* FRE, RAB, EIF */
1807

    
1808
    pxa2xx_dma_request(s->dma, PXA2XX_RX_RQ_ICP, (s->status[0] >> 4) & 1);
1809
    pxa2xx_dma_request(s->dma, PXA2XX_TX_RQ_ICP, (s->status[0] >> 3) & 1);
1810

    
1811
    qemu_set_irq(s->irq, intr && s->enable);
1812
}
1813

    
1814
#define ICCR0        0x00        /* FICP Control register 0 */
1815
#define ICCR1        0x04        /* FICP Control register 1 */
1816
#define ICCR2        0x08        /* FICP Control register 2 */
1817
#define ICDR        0x0c        /* FICP Data register */
1818
#define ICSR0        0x14        /* FICP Status register 0 */
1819
#define ICSR1        0x18        /* FICP Status register 1 */
1820
#define ICFOR        0x1c        /* FICP FIFO Occupancy Status register */
1821

    
1822
static uint32_t pxa2xx_fir_read(void *opaque, target_phys_addr_t addr)
1823
{
1824
    struct pxa2xx_fir_s *s = (struct pxa2xx_fir_s *) opaque;
1825
    uint8_t ret;
1826
    addr -= s->base;
1827

    
1828
    switch (addr) {
1829
    case ICCR0:
1830
        return s->control[0];
1831
    case ICCR1:
1832
        return s->control[1];
1833
    case ICCR2:
1834
        return s->control[2];
1835
    case ICDR:
1836
        s->status[0] &= ~0x01;
1837
        s->status[1] &= ~0x72;
1838
        if (s->rx_len) {
1839
            s->rx_len --;
1840
            ret = s->rx_fifo[s->rx_start ++];
1841
            s->rx_start &= 63;
1842
            pxa2xx_fir_update(s);
1843
            return ret;
1844
        }
1845
        printf("%s: Rx FIFO underrun.\n", __FUNCTION__);
1846
        break;
1847
    case ICSR0:
1848
        return s->status[0];
1849
    case ICSR1:
1850
        return s->status[1] | (1 << 3);                        /* TNF */
1851
    case ICFOR:
1852
        return s->rx_len;
1853
    default:
1854
        printf("%s: Bad register " REG_FMT "\n", __FUNCTION__, addr);
1855
        break;
1856
    }
1857
    return 0;
1858
}
1859

    
1860
static void pxa2xx_fir_write(void *opaque, target_phys_addr_t addr,
1861
                uint32_t value)
1862
{
1863
    struct pxa2xx_fir_s *s = (struct pxa2xx_fir_s *) opaque;
1864
    uint8_t ch;
1865
    addr -= s->base;
1866

    
1867
    switch (addr) {
1868
    case ICCR0:
1869
        s->control[0] = value;
1870
        if (!(value & (1 << 4)))                        /* RXE */
1871
            s->rx_len = s->rx_start = 0;
1872
        if (!(value & (1 << 3)))                        /* TXE */
1873
            /* Nop */;
1874
        s->enable = value & 1;                                /* ITR */
1875
        if (!s->enable)
1876
            s->status[0] = 0;
1877
        pxa2xx_fir_update(s);
1878
        break;
1879
    case ICCR1:
1880
        s->control[1] = value;
1881
        break;
1882
    case ICCR2:
1883
        s->control[2] = value & 0x3f;
1884
        pxa2xx_fir_update(s);
1885
        break;
1886
    case ICDR:
1887
        if (s->control[2] & (1 << 2))                        /* TXP */
1888
            ch = value;
1889
        else
1890
            ch = ~value;
1891
        if (s->chr && s->enable && (s->control[0] & (1 << 3)))        /* TXE */
1892
            qemu_chr_write(s->chr, &ch, 1);
1893
        break;
1894
    case ICSR0:
1895
        s->status[0] &= ~(value & 0x66);
1896
        pxa2xx_fir_update(s);
1897
        break;
1898
    case ICFOR:
1899
        break;
1900
    default:
1901
        printf("%s: Bad register " REG_FMT "\n", __FUNCTION__, addr);
1902
    }
1903
}
1904

    
1905
static CPUReadMemoryFunc *pxa2xx_fir_readfn[] = {
1906
    pxa2xx_fir_read,
1907
    pxa2xx_fir_read,
1908
    pxa2xx_fir_read,
1909
};
1910

    
1911
static CPUWriteMemoryFunc *pxa2xx_fir_writefn[] = {
1912
    pxa2xx_fir_write,
1913
    pxa2xx_fir_write,
1914
    pxa2xx_fir_write,
1915
};
1916

    
1917
static int pxa2xx_fir_is_empty(void *opaque)
1918
{
1919
    struct pxa2xx_fir_s *s = (struct pxa2xx_fir_s *) opaque;
1920
    return (s->rx_len < 64);
1921
}
1922

    
1923
static void pxa2xx_fir_rx(void *opaque, const uint8_t *buf, int size)
1924
{
1925
    struct pxa2xx_fir_s *s = (struct pxa2xx_fir_s *) opaque;
1926
    if (!(s->control[0] & (1 << 4)))                        /* RXE */
1927
        return;
1928

    
1929
    while (size --) {
1930
        s->status[1] |= 1 << 4;                                /* EOF */
1931
        if (s->rx_len >= 64) {
1932
            s->status[1] |= 1 << 6;                        /* ROR */
1933
            break;
1934
        }
1935

    
1936
        if (s->control[2] & (1 << 3))                        /* RXP */
1937
            s->rx_fifo[(s->rx_start + s->rx_len ++) & 63] = *(buf ++);
1938
        else
1939
            s->rx_fifo[(s->rx_start + s->rx_len ++) & 63] = ~*(buf ++);
1940
    }
1941

    
1942
    pxa2xx_fir_update(s);
1943
}
1944

    
1945
static void pxa2xx_fir_event(void *opaque, int event)
1946
{
1947
}
1948

    
1949
static void pxa2xx_fir_save(QEMUFile *f, void *opaque)
1950
{
1951
    struct pxa2xx_fir_s *s = (struct pxa2xx_fir_s *) opaque;
1952
    int i;
1953

    
1954
    qemu_put_be32(f, s->enable);
1955

    
1956
    qemu_put_8s(f, &s->control[0]);
1957
    qemu_put_8s(f, &s->control[1]);
1958
    qemu_put_8s(f, &s->control[2]);
1959
    qemu_put_8s(f, &s->status[0]);
1960
    qemu_put_8s(f, &s->status[1]);
1961

    
1962
    qemu_put_byte(f, s->rx_len);
1963
    for (i = 0; i < s->rx_len; i ++)
1964
        qemu_put_byte(f, s->rx_fifo[(s->rx_start + i) & 63]);
1965
}
1966

    
1967
static int pxa2xx_fir_load(QEMUFile *f, void *opaque, int version_id)
1968
{
1969
    struct pxa2xx_fir_s *s = (struct pxa2xx_fir_s *) opaque;
1970
    int i;
1971

    
1972
    s->enable = qemu_get_be32(f);
1973

    
1974
    qemu_get_8s(f, &s->control[0]);
1975
    qemu_get_8s(f, &s->control[1]);
1976
    qemu_get_8s(f, &s->control[2]);
1977
    qemu_get_8s(f, &s->status[0]);
1978
    qemu_get_8s(f, &s->status[1]);
1979

    
1980
    s->rx_len = qemu_get_byte(f);
1981
    s->rx_start = 0;
1982
    for (i = 0; i < s->rx_len; i ++)
1983
        s->rx_fifo[i] = qemu_get_byte(f);
1984

    
1985
    return 0;
1986
}
1987

    
1988
static struct pxa2xx_fir_s *pxa2xx_fir_init(target_phys_addr_t base,
1989
                qemu_irq irq, struct pxa2xx_dma_state_s *dma,
1990
                CharDriverState *chr)
1991
{
1992
    int iomemtype;
1993
    struct pxa2xx_fir_s *s = (struct pxa2xx_fir_s *)
1994
            qemu_mallocz(sizeof(struct pxa2xx_fir_s));
1995

    
1996
    s->base = base;
1997
    s->irq = irq;
1998
    s->dma = dma;
1999
    s->chr = chr;
2000

    
2001
    pxa2xx_fir_reset(s);
2002

    
2003
    iomemtype = cpu_register_io_memory(0, pxa2xx_fir_readfn,
2004
                    pxa2xx_fir_writefn, s);
2005
    cpu_register_physical_memory(s->base, 0x1000, iomemtype);
2006

    
2007
    if (chr)
2008
        qemu_chr_add_handlers(chr, pxa2xx_fir_is_empty,
2009
                        pxa2xx_fir_rx, pxa2xx_fir_event, s);
2010

    
2011
    register_savevm("pxa2xx_fir", 0, 0, pxa2xx_fir_save, pxa2xx_fir_load, s);
2012

    
2013
    return s;
2014
}
2015

    
2016
static void pxa2xx_reset(void *opaque, int line, int level)
2017
{
2018
    struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
2019

    
2020
    if (level && (s->pm_regs[PCFR >> 2] & 0x10)) {        /* GPR_EN */
2021
        cpu_reset(s->env);
2022
        /* TODO: reset peripherals */
2023
    }
2024
}
2025

    
2026
/* Initialise a PXA270 integrated chip (ARM based core).  */
2027
struct pxa2xx_state_s *pxa270_init(unsigned int sdram_size,
2028
                DisplayState *ds, const char *revision)
2029
{
2030
    struct pxa2xx_state_s *s;
2031
    struct pxa2xx_ssp_s *ssp;
2032
    int iomemtype, i;
2033
    s = (struct pxa2xx_state_s *) qemu_mallocz(sizeof(struct pxa2xx_state_s));
2034

    
2035
    if (revision && strncmp(revision, "pxa27", 5)) {
2036
        fprintf(stderr, "Machine requires a PXA27x processor.\n");
2037
        exit(1);
2038
    }
2039
    if (!revision)
2040
        revision = "pxa270";
2041
    
2042
    s->env = cpu_init(revision);
2043
    if (!s->env) {
2044
        fprintf(stderr, "Unable to find CPU definition\n");
2045
        exit(1);
2046
    }
2047
    register_savevm("cpu", 0, ARM_CPU_SAVE_VERSION, cpu_save, cpu_load,
2048
                    s->env);
2049

    
2050
    s->reset = qemu_allocate_irqs(pxa2xx_reset, s, 1)[0];
2051

    
2052
    /* SDRAM & Internal Memory Storage */
2053
    cpu_register_physical_memory(PXA2XX_SDRAM_BASE,
2054
                    sdram_size, qemu_ram_alloc(sdram_size) | IO_MEM_RAM);
2055
    cpu_register_physical_memory(PXA2XX_INTERNAL_BASE,
2056
                    0x40000, qemu_ram_alloc(0x40000) | IO_MEM_RAM);
2057

    
2058
    s->pic = pxa2xx_pic_init(0x40d00000, s->env);
2059

    
2060
    s->dma = pxa27x_dma_init(0x40000000, s->pic[PXA2XX_PIC_DMA]);
2061

    
2062
    pxa27x_timer_init(0x40a00000, &s->pic[PXA2XX_PIC_OST_0],
2063
                    s->pic[PXA27X_PIC_OST_4_11]);
2064

    
2065
    s->gpio = pxa2xx_gpio_init(0x40e00000, s->env, s->pic, 121);
2066

    
2067
    s->mmc = pxa2xx_mmci_init(0x41100000, s->pic[PXA2XX_PIC_MMC], s->dma);
2068

    
2069
    for (i = 0; pxa270_serial[i].io_base; i ++)
2070
        if (serial_hds[i])
2071
            serial_mm_init(pxa270_serial[i].io_base, 2,
2072
                            s->pic[pxa270_serial[i].irqn], serial_hds[i], 1);
2073
        else
2074
            break;
2075
    if (serial_hds[i])
2076
        s->fir = pxa2xx_fir_init(0x40800000, s->pic[PXA2XX_PIC_ICP],
2077
                        s->dma, serial_hds[i]);
2078

    
2079
    if (ds)
2080
        s->lcd = pxa2xx_lcdc_init(0x44000000, s->pic[PXA2XX_PIC_LCD], ds);
2081

    
2082
    s->cm_base = 0x41300000;
2083
    s->cm_regs[CCCR >> 2] = 0x02000210;        /* 416.0 MHz */
2084
    s->clkcfg = 0x00000009;                /* Turbo mode active */
2085
    iomemtype = cpu_register_io_memory(0, pxa2xx_cm_readfn,
2086
                    pxa2xx_cm_writefn, s);
2087
    cpu_register_physical_memory(s->cm_base, 0x1000, iomemtype);
2088
    register_savevm("pxa2xx_cm", 0, 0, pxa2xx_cm_save, pxa2xx_cm_load, s);
2089

    
2090
    cpu_arm_set_cp_io(s->env, 14, pxa2xx_cp14_read, pxa2xx_cp14_write, s);
2091

    
2092
    s->mm_base = 0x48000000;
2093
    s->mm_regs[MDMRS >> 2] = 0x00020002;
2094
    s->mm_regs[MDREFR >> 2] = 0x03ca4000;
2095
    s->mm_regs[MECR >> 2] = 0x00000001;        /* Two PC Card sockets */
2096
    iomemtype = cpu_register_io_memory(0, pxa2xx_mm_readfn,
2097
                    pxa2xx_mm_writefn, s);
2098
    cpu_register_physical_memory(s->mm_base, 0x1000, iomemtype);
2099
    register_savevm("pxa2xx_mm", 0, 0, pxa2xx_mm_save, pxa2xx_mm_load, s);
2100

    
2101
    s->pm_base = 0x40f00000;
2102
    iomemtype = cpu_register_io_memory(0, pxa2xx_pm_readfn,
2103
                    pxa2xx_pm_writefn, s);
2104
    cpu_register_physical_memory(s->pm_base, 0x100, iomemtype);
2105
    register_savevm("pxa2xx_pm", 0, 0, pxa2xx_pm_save, pxa2xx_pm_load, s);
2106

    
2107
    for (i = 0; pxa27x_ssp[i].io_base; i ++);
2108
    s->ssp = (struct pxa2xx_ssp_s **)
2109
            qemu_mallocz(sizeof(struct pxa2xx_ssp_s *) * i);
2110
    ssp = (struct pxa2xx_ssp_s *)
2111
            qemu_mallocz(sizeof(struct pxa2xx_ssp_s) * i);
2112
    for (i = 0; pxa27x_ssp[i].io_base; i ++) {
2113
        s->ssp[i] = &ssp[i];
2114
        ssp[i].base = pxa27x_ssp[i].io_base;
2115
        ssp[i].irq = s->pic[pxa27x_ssp[i].irqn];
2116

    
2117
        iomemtype = cpu_register_io_memory(0, pxa2xx_ssp_readfn,
2118
                        pxa2xx_ssp_writefn, &ssp[i]);
2119
        cpu_register_physical_memory(ssp[i].base, 0x1000, iomemtype);
2120
        register_savevm("pxa2xx_ssp", i, 0,
2121
                        pxa2xx_ssp_save, pxa2xx_ssp_load, s);
2122
    }
2123

    
2124
    if (usb_enabled) {
2125
        usb_ohci_init_pxa(0x4c000000, 3, -1, s->pic[PXA2XX_PIC_USBH1]);
2126
    }
2127

    
2128
    s->pcmcia[0] = pxa2xx_pcmcia_init(0x20000000);
2129
    s->pcmcia[1] = pxa2xx_pcmcia_init(0x30000000);
2130

    
2131
    s->rtc_base = 0x40900000;
2132
    iomemtype = cpu_register_io_memory(0, pxa2xx_rtc_readfn,
2133
                    pxa2xx_rtc_writefn, s);
2134
    cpu_register_physical_memory(s->rtc_base, 0x1000, iomemtype);
2135
    pxa2xx_rtc_init(s);
2136
    register_savevm("pxa2xx_rtc", 0, 0, pxa2xx_rtc_save, pxa2xx_rtc_load, s);
2137

    
2138
    s->i2c[0] = pxa2xx_i2c_init(0x40301600, s->pic[PXA2XX_PIC_I2C], 0xffff);
2139
    s->i2c[1] = pxa2xx_i2c_init(0x40f00100, s->pic[PXA2XX_PIC_PWRI2C], 0xff);
2140

    
2141
    s->i2s = pxa2xx_i2s_init(0x40400000, s->pic[PXA2XX_PIC_I2S], s->dma);
2142

    
2143
    /* GPIO1 resets the processor */
2144
    /* The handler can be overridden by board-specific code */
2145
    pxa2xx_gpio_out_set(s->gpio, 1, s->reset);
2146
    return s;
2147
}
2148

    
2149
/* Initialise a PXA255 integrated chip (ARM based core).  */
2150
struct pxa2xx_state_s *pxa255_init(unsigned int sdram_size,
2151
                DisplayState *ds)
2152
{
2153
    struct pxa2xx_state_s *s;
2154
    struct pxa2xx_ssp_s *ssp;
2155
    int iomemtype, i;
2156

    
2157
    s = (struct pxa2xx_state_s *) qemu_mallocz(sizeof(struct pxa2xx_state_s));
2158

    
2159
    s->env = cpu_init("pxa255");
2160
    if (!s->env) {
2161
        fprintf(stderr, "Unable to find CPU definition\n");
2162
        exit(1);
2163
    }
2164
    register_savevm("cpu", 0, ARM_CPU_SAVE_VERSION, cpu_save, cpu_load,
2165
                    s->env);
2166

    
2167
    s->reset = qemu_allocate_irqs(pxa2xx_reset, s, 1)[0];
2168

    
2169
    /* SDRAM & Internal Memory Storage */
2170
    cpu_register_physical_memory(PXA2XX_SDRAM_BASE, sdram_size,
2171
                    qemu_ram_alloc(sdram_size) | IO_MEM_RAM);
2172
    cpu_register_physical_memory(PXA2XX_INTERNAL_BASE, PXA2XX_INTERNAL_SIZE,
2173
                    qemu_ram_alloc(PXA2XX_INTERNAL_SIZE) | IO_MEM_RAM);
2174

    
2175
    s->pic = pxa2xx_pic_init(0x40d00000, s->env);
2176

    
2177
    s->dma = pxa255_dma_init(0x40000000, s->pic[PXA2XX_PIC_DMA]);
2178

    
2179
    pxa25x_timer_init(0x40a00000, &s->pic[PXA2XX_PIC_OST_0]);
2180

    
2181
    s->gpio = pxa2xx_gpio_init(0x40e00000, s->env, s->pic, 85);
2182

    
2183
    s->mmc = pxa2xx_mmci_init(0x41100000, s->pic[PXA2XX_PIC_MMC], s->dma);
2184

    
2185
    for (i = 0; pxa255_serial[i].io_base; i ++)
2186
        if (serial_hds[i])
2187
            serial_mm_init(pxa255_serial[i].io_base, 2,
2188
                            s->pic[pxa255_serial[i].irqn], serial_hds[i], 1);
2189
        else
2190
            break;
2191
    if (serial_hds[i])
2192
        s->fir = pxa2xx_fir_init(0x40800000, s->pic[PXA2XX_PIC_ICP],
2193
                        s->dma, serial_hds[i]);
2194

    
2195
    if (ds)
2196
        s->lcd = pxa2xx_lcdc_init(0x44000000, s->pic[PXA2XX_PIC_LCD], ds);
2197

    
2198
    s->cm_base = 0x41300000;
2199
    s->cm_regs[CCCR >> 2] = 0x02000210;        /* 416.0 MHz */
2200
    s->clkcfg = 0x00000009;                /* Turbo mode active */
2201
    iomemtype = cpu_register_io_memory(0, pxa2xx_cm_readfn,
2202
                    pxa2xx_cm_writefn, s);
2203
    cpu_register_physical_memory(s->cm_base, 0x1000, iomemtype);
2204
    register_savevm("pxa2xx_cm", 0, 0, pxa2xx_cm_save, pxa2xx_cm_load, s);
2205

    
2206
    cpu_arm_set_cp_io(s->env, 14, pxa2xx_cp14_read, pxa2xx_cp14_write, s);
2207

    
2208
    s->mm_base = 0x48000000;
2209
    s->mm_regs[MDMRS >> 2] = 0x00020002;
2210
    s->mm_regs[MDREFR >> 2] = 0x03ca4000;
2211
    s->mm_regs[MECR >> 2] = 0x00000001;        /* Two PC Card sockets */
2212
    iomemtype = cpu_register_io_memory(0, pxa2xx_mm_readfn,
2213
                    pxa2xx_mm_writefn, s);
2214
    cpu_register_physical_memory(s->mm_base, 0x1000, iomemtype);
2215
    register_savevm("pxa2xx_mm", 0, 0, pxa2xx_mm_save, pxa2xx_mm_load, s);
2216

    
2217
    s->pm_base = 0x40f00000;
2218
    iomemtype = cpu_register_io_memory(0, pxa2xx_pm_readfn,
2219
                    pxa2xx_pm_writefn, s);
2220
    cpu_register_physical_memory(s->pm_base, 0x100, iomemtype);
2221
    register_savevm("pxa2xx_pm", 0, 0, pxa2xx_pm_save, pxa2xx_pm_load, s);
2222

    
2223
    for (i = 0; pxa255_ssp[i].io_base; i ++);
2224
    s->ssp = (struct pxa2xx_ssp_s **)
2225
            qemu_mallocz(sizeof(struct pxa2xx_ssp_s *) * i);
2226
    ssp = (struct pxa2xx_ssp_s *)
2227
            qemu_mallocz(sizeof(struct pxa2xx_ssp_s) * i);
2228
    for (i = 0; pxa255_ssp[i].io_base; i ++) {
2229
        s->ssp[i] = &ssp[i];
2230
        ssp[i].base = pxa255_ssp[i].io_base;
2231
        ssp[i].irq = s->pic[pxa255_ssp[i].irqn];
2232

    
2233
        iomemtype = cpu_register_io_memory(0, pxa2xx_ssp_readfn,
2234
                        pxa2xx_ssp_writefn, &ssp[i]);
2235
        cpu_register_physical_memory(ssp[i].base, 0x1000, iomemtype);
2236
        register_savevm("pxa2xx_ssp", i, 0,
2237
                        pxa2xx_ssp_save, pxa2xx_ssp_load, s);
2238
    }
2239

    
2240
    if (usb_enabled) {
2241
        usb_ohci_init_pxa(0x4c000000, 3, -1, s->pic[PXA2XX_PIC_USBH1]);
2242
    }
2243

    
2244
    s->pcmcia[0] = pxa2xx_pcmcia_init(0x20000000);
2245
    s->pcmcia[1] = pxa2xx_pcmcia_init(0x30000000);
2246

    
2247
    s->rtc_base = 0x40900000;
2248
    iomemtype = cpu_register_io_memory(0, pxa2xx_rtc_readfn,
2249
                    pxa2xx_rtc_writefn, s);
2250
    cpu_register_physical_memory(s->rtc_base, 0x1000, iomemtype);
2251
    pxa2xx_rtc_init(s);
2252
    register_savevm("pxa2xx_rtc", 0, 0, pxa2xx_rtc_save, pxa2xx_rtc_load, s);
2253

    
2254
    s->i2c[0] = pxa2xx_i2c_init(0x40301600, s->pic[PXA2XX_PIC_I2C], 0xffff);
2255
    s->i2c[1] = pxa2xx_i2c_init(0x40f00100, s->pic[PXA2XX_PIC_PWRI2C], 0xff);
2256

    
2257
    s->i2s = pxa2xx_i2s_init(0x40400000, s->pic[PXA2XX_PIC_I2S], s->dma);
2258

    
2259
    /* GPIO1 resets the processor */
2260
    /* The handler can be overridden by board-specific code */
2261
    pxa2xx_gpio_out_set(s->gpio, 1, s->reset);
2262
    return s;
2263
}