Statistics
| Branch: | Revision:

root / hw / pxa2xx.c @ 3023f332

History | View | Annotate | Download (64.6 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 "hw.h"
11
#include "pxa.h"
12
#include "sysemu.h"
13
#include "pc.h"
14
#include "i2c.h"
15
#include "qemu-timer.h"
16
#include "qemu-char.h"
17

    
18
static struct {
19
    target_phys_addr_t io_base;
20
    int irqn;
21
} pxa255_serial[] = {
22
    { 0x40100000, PXA2XX_PIC_FFUART },
23
    { 0x40200000, PXA2XX_PIC_BTUART },
24
    { 0x40700000, PXA2XX_PIC_STUART },
25
    { 0x41600000, PXA25X_PIC_HWUART },
26
    { 0, 0 }
27
}, pxa270_serial[] = {
28
    { 0x40100000, PXA2XX_PIC_FFUART },
29
    { 0x40200000, PXA2XX_PIC_BTUART },
30
    { 0x40700000, PXA2XX_PIC_STUART },
31
    { 0, 0 }
32
};
33

    
34
typedef struct PXASSPDef {
35
    target_phys_addr_t io_base;
36
    int irqn;
37
} PXASSPDef;
38

    
39
#if 0
40
static PXASSPDef pxa250_ssp[] = {
41
    { 0x41000000, PXA2XX_PIC_SSP },
42
    { 0, 0 }
43
};
44
#endif
45

    
46
static PXASSPDef pxa255_ssp[] = {
47
    { 0x41000000, PXA2XX_PIC_SSP },
48
    { 0x41400000, PXA25X_PIC_NSSP },
49
    { 0, 0 }
50
};
51

    
52
#if 0
53
static PXASSPDef pxa26x_ssp[] = {
54
    { 0x41000000, PXA2XX_PIC_SSP },
55
    { 0x41400000, PXA25X_PIC_NSSP },
56
    { 0x41500000, PXA26X_PIC_ASSP },
57
    { 0, 0 }
58
};
59
#endif
60

    
61
static PXASSPDef pxa27x_ssp[] = {
62
    { 0x41000000, PXA2XX_PIC_SSP },
63
    { 0x41700000, PXA27X_PIC_SSP2 },
64
    { 0x41900000, PXA2XX_PIC_SSP3 },
65
    { 0, 0 }
66
};
67

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

    
90
static uint32_t pxa2xx_pm_read(void *opaque, target_phys_addr_t addr)
91
{
92
    struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
93

    
94
    switch (addr) {
95
    case PMCR ... PCMD31:
96
        if (addr & 3)
97
            goto fail;
98

    
99
        return s->pm_regs[addr >> 2];
100
    default:
101
    fail:
102
        printf("%s: Bad register " REG_FMT "\n", __FUNCTION__, addr);
103
        break;
104
    }
105
    return 0;
106
}
107

    
108
static void pxa2xx_pm_write(void *opaque, target_phys_addr_t addr,
109
                uint32_t value)
110
{
111
    struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
112

    
113
    switch (addr) {
114
    case PMCR:
115
        s->pm_regs[addr >> 2] &= 0x15 & ~(value & 0x2a);
116
        s->pm_regs[addr >> 2] |= value & 0x15;
117
        break;
118

    
119
    case PSSR:        /* Read-clean registers */
120
    case RCSR:
121
    case PKSR:
122
        s->pm_regs[addr >> 2] &= ~value;
123
        break;
124

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

    
131
        printf("%s: Bad register " REG_FMT "\n", __FUNCTION__, addr);
132
        break;
133
    }
134
}
135

    
136
static CPUReadMemoryFunc *pxa2xx_pm_readfn[] = {
137
    pxa2xx_pm_read,
138
    pxa2xx_pm_read,
139
    pxa2xx_pm_read,
140
};
141

    
142
static CPUWriteMemoryFunc *pxa2xx_pm_writefn[] = {
143
    pxa2xx_pm_write,
144
    pxa2xx_pm_write,
145
    pxa2xx_pm_write,
146
};
147

    
148
static void pxa2xx_pm_save(QEMUFile *f, void *opaque)
149
{
150
    struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
151
    int i;
152

    
153
    for (i = 0; i < 0x40; i ++)
154
        qemu_put_be32s(f, &s->pm_regs[i]);
155
}
156

    
157
static int pxa2xx_pm_load(QEMUFile *f, void *opaque, int version_id)
158
{
159
    struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
160
    int i;
161

    
162
    for (i = 0; i < 0x40; i ++)
163
        qemu_get_be32s(f, &s->pm_regs[i]);
164

    
165
    return 0;
166
}
167

    
168
#define CCCR        0x00        /* Core Clock Configuration register */
169
#define CKEN        0x04        /* Clock Enable register */
170
#define OSCC        0x08        /* Oscillator Configuration register */
171
#define CCSR        0x0c        /* Core Clock Status register */
172

    
173
static uint32_t pxa2xx_cm_read(void *opaque, target_phys_addr_t addr)
174
{
175
    struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
176

    
177
    switch (addr) {
178
    case CCCR:
179
    case CKEN:
180
    case OSCC:
181
        return s->cm_regs[addr >> 2];
182

    
183
    case CCSR:
184
        return s->cm_regs[CCCR >> 2] | (3 << 28);
185

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

    
193
static void pxa2xx_cm_write(void *opaque, target_phys_addr_t addr,
194
                uint32_t value)
195
{
196
    struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
197

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

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

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

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

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

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

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

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

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

    
250
    return 0;
251
}
252

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

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

    
261
    case 7:        /* Power Mode register */
262
        return 0;
263

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

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

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

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

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

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

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

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

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

    
335
            /* Suspend */
336
            cpu_interrupt(cpu_single_env, CPU_INTERRUPT_HALT);
337

    
338
            goto message;
339

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

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

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

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

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

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

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

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

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

    
399
    case CPCCNT:
400
    case CPINTEN:
401
    case CPFLAG:
402
    case CPEVTSEL:
403
        break;
404

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

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

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

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

    
483
static uint32_t pxa2xx_mm_read(void *opaque, target_phys_addr_t addr)
484
{
485
    struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
486

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

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

    
499
static void pxa2xx_mm_write(void *opaque, target_phys_addr_t addr,
500
                uint32_t value)
501
{
502
    struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
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
    qemu_irq irq;
552
    int enable;
553

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

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

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

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

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

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

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

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

    
657
    pxa2xx_ssp_int_update(s);
658
}
659

    
660
static uint32_t pxa2xx_ssp_read(void *opaque, target_phys_addr_t addr)
661
{
662
    struct pxa2xx_ssp_s *s = (struct pxa2xx_ssp_s *) opaque;
663
    uint32_t retval;
664

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

    
705
static void pxa2xx_ssp_write(void *opaque, target_phys_addr_t addr,
706
                uint32_t value)
707
{
708
    struct pxa2xx_ssp_s *s = (struct pxa2xx_ssp_s *) opaque;
709

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

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

    
734
    case SSPSP:
735
        s->sspsp = value;
736
        break;
737

    
738
    case SSTO:
739
        s->ssto = value;
740
        break;
741

    
742
    case SSITR:
743
        s->ssitr = value & SSITR_INT;
744
        pxa2xx_ssp_int_update(s);
745
        break;
746

    
747
    case SSSR:
748
        s->sssr &= ~(value & SSSR_RW);
749
        pxa2xx_ssp_int_update(s);
750
        break;
751

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

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

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

    
781
    case SSTSA:
782
        s->sstsa = value;
783
        break;
784

    
785
    case SSRSA:
786
        s->ssrsa = value;
787
        break;
788

    
789
    case SSACD:
790
        s->ssacd = value;
791
        break;
792

    
793
    default:
794
        printf("%s: Bad register " REG_FMT "\n", __FUNCTION__, addr);
795
        break;
796
    }
797
}
798

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

    
808
    port->opaque = opaque;
809
    port->readfn = readfn;
810
    port->writefn = writefn;
811
}
812

    
813
static CPUReadMemoryFunc *pxa2xx_ssp_readfn[] = {
814
    pxa2xx_ssp_read,
815
    pxa2xx_ssp_read,
816
    pxa2xx_ssp_read,
817
};
818

    
819
static CPUWriteMemoryFunc *pxa2xx_ssp_writefn[] = {
820
    pxa2xx_ssp_write,
821
    pxa2xx_ssp_write,
822
    pxa2xx_ssp_write,
823
};
824

    
825
static void pxa2xx_ssp_save(QEMUFile *f, void *opaque)
826
{
827
    struct pxa2xx_ssp_s *s = (struct pxa2xx_ssp_s *) opaque;
828
    int i;
829

    
830
    qemu_put_be32(f, s->enable);
831

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

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

    
847
static int pxa2xx_ssp_load(QEMUFile *f, void *opaque, int version_id)
848
{
849
    struct pxa2xx_ssp_s *s = (struct pxa2xx_ssp_s *) opaque;
850
    int i;
851

    
852
    s->enable = qemu_get_be32(f);
853

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

    
864
    s->rx_level = qemu_get_byte(f);
865
    s->rx_start = 0;
866
    for (i = 0; i < s->rx_level; i ++)
867
        s->rx_fifo[i] = qemu_get_byte(f);
868

    
869
    return 0;
870
}
871

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
1013
static uint32_t pxa2xx_rtc_read(void *opaque, target_phys_addr_t addr)
1014
{
1015
    struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
1016

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

    
1058
static void pxa2xx_rtc_write(void *opaque, target_phys_addr_t addr,
1059
                uint32_t value)
1060
{
1061
    struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
1062

    
1063
    switch (addr) {
1064
    case RTTR:
1065
        if (!(s->rttr & (1 << 31))) {
1066
            pxa2xx_rtc_hzupdate(s);
1067
            s->rttr = value;
1068
            pxa2xx_rtc_alarm_update(s, s->rtsr);
1069
        }
1070
        break;
1071

    
1072
    case RTSR:
1073
        if ((s->rtsr ^ value) & (1 << 15))
1074
            pxa2xx_rtc_piupdate(s);
1075

    
1076
        if ((s->rtsr ^ value) & (1 << 12))
1077
            pxa2xx_rtc_swupdate(s);
1078

    
1079
        if (((s->rtsr ^ value) & 0x4aac) | (value & ~0xdaac))
1080
            pxa2xx_rtc_alarm_update(s, value);
1081

    
1082
        s->rtsr = (value & 0xdaac) | (s->rtsr & ~(value & ~0xdaac));
1083
        pxa2xx_rtc_int_update(s);
1084
        break;
1085

    
1086
    case RTAR:
1087
        s->rtar = value;
1088
        pxa2xx_rtc_alarm_update(s, s->rtsr);
1089
        break;
1090

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

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

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

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

    
1111
    case SWAR1:
1112
        pxa2xx_rtc_swupdate(s);
1113
        s->swar1 = value;
1114
        s->last_swcr = 0;
1115
        pxa2xx_rtc_alarm_update(s, s->rtsr);
1116
        break;
1117

    
1118
    case SWAR2:
1119
        s->swar2 = value;
1120
        pxa2xx_rtc_alarm_update(s, s->rtsr);
1121
        break;
1122

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

    
1128
    case RCNR:
1129
        pxa2xx_rtc_hzupdate(s);
1130
        s->last_rcnr = value;
1131
        pxa2xx_rtc_alarm_update(s, s->rtsr);
1132
        break;
1133

    
1134
    case RDCR:
1135
        pxa2xx_rtc_hzupdate(s);
1136
        s->last_rdcr = value;
1137
        pxa2xx_rtc_alarm_update(s, s->rtsr);
1138
        break;
1139

    
1140
    case RYCR:
1141
        s->last_rycr = value;
1142
        break;
1143

    
1144
    case SWCR:
1145
        pxa2xx_rtc_swupdate(s);
1146
        s->last_swcr = value;
1147
        pxa2xx_rtc_alarm_update(s, s->rtsr);
1148
        break;
1149

    
1150
    case RTCPICR:
1151
        pxa2xx_rtc_piupdate(s);
1152
        s->last_rtcpicr = value & 0xffff;
1153
        pxa2xx_rtc_alarm_update(s, s->rtsr);
1154
        break;
1155

    
1156
    default:
1157
        printf("%s: Bad register " REG_FMT "\n", __FUNCTION__, addr);
1158
    }
1159
}
1160

    
1161
static CPUReadMemoryFunc *pxa2xx_rtc_readfn[] = {
1162
    pxa2xx_rtc_read,
1163
    pxa2xx_rtc_read,
1164
    pxa2xx_rtc_read,
1165
};
1166

    
1167
static CPUWriteMemoryFunc *pxa2xx_rtc_writefn[] = {
1168
    pxa2xx_rtc_write,
1169
    pxa2xx_rtc_write,
1170
    pxa2xx_rtc_write,
1171
};
1172

    
1173
static void pxa2xx_rtc_init(struct pxa2xx_state_s *s)
1174
{
1175
    struct tm tm;
1176
    int wom;
1177

    
1178
    s->rttr = 0x7fff;
1179
    s->rtsr = 0;
1180

    
1181
    qemu_get_timedate(&tm, 0);
1182
    wom = ((tm.tm_mday - 1) / 7) + 1;
1183

    
1184
    s->last_rcnr = (uint32_t) mktimegm(&tm);
1185
    s->last_rdcr = (wom << 20) | ((tm.tm_wday + 1) << 17) |
1186
            (tm.tm_hour << 12) | (tm.tm_min << 6) | tm.tm_sec;
1187
    s->last_rycr = ((tm.tm_year + 1900) << 9) |
1188
            ((tm.tm_mon + 1) << 5) | tm.tm_mday;
1189
    s->last_swcr = (tm.tm_hour << 19) |
1190
            (tm.tm_min << 13) | (tm.tm_sec << 7);
1191
    s->last_rtcpicr = 0;
1192
    s->last_hz = s->last_sw = s->last_pi = qemu_get_clock(rt_clock);
1193

    
1194
    s->rtc_hz    = qemu_new_timer(rt_clock, pxa2xx_rtc_hz_tick,    s);
1195
    s->rtc_rdal1 = qemu_new_timer(rt_clock, pxa2xx_rtc_rdal1_tick, s);
1196
    s->rtc_rdal2 = qemu_new_timer(rt_clock, pxa2xx_rtc_rdal2_tick, s);
1197
    s->rtc_swal1 = qemu_new_timer(rt_clock, pxa2xx_rtc_swal1_tick, s);
1198
    s->rtc_swal2 = qemu_new_timer(rt_clock, pxa2xx_rtc_swal2_tick, s);
1199
    s->rtc_pi    = qemu_new_timer(rt_clock, pxa2xx_rtc_pi_tick,    s);
1200
}
1201

    
1202
static void pxa2xx_rtc_save(QEMUFile *f, void *opaque)
1203
{
1204
    struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
1205

    
1206
    pxa2xx_rtc_hzupdate(s);
1207
    pxa2xx_rtc_piupdate(s);
1208
    pxa2xx_rtc_swupdate(s);
1209

    
1210
    qemu_put_be32s(f, &s->rttr);
1211
    qemu_put_be32s(f, &s->rtsr);
1212
    qemu_put_be32s(f, &s->rtar);
1213
    qemu_put_be32s(f, &s->rdar1);
1214
    qemu_put_be32s(f, &s->rdar2);
1215
    qemu_put_be32s(f, &s->ryar1);
1216
    qemu_put_be32s(f, &s->ryar2);
1217
    qemu_put_be32s(f, &s->swar1);
1218
    qemu_put_be32s(f, &s->swar2);
1219
    qemu_put_be32s(f, &s->piar);
1220
    qemu_put_be32s(f, &s->last_rcnr);
1221
    qemu_put_be32s(f, &s->last_rdcr);
1222
    qemu_put_be32s(f, &s->last_rycr);
1223
    qemu_put_be32s(f, &s->last_swcr);
1224
    qemu_put_be32s(f, &s->last_rtcpicr);
1225
    qemu_put_sbe64s(f, &s->last_hz);
1226
    qemu_put_sbe64s(f, &s->last_sw);
1227
    qemu_put_sbe64s(f, &s->last_pi);
1228
}
1229

    
1230
static int pxa2xx_rtc_load(QEMUFile *f, void *opaque, int version_id)
1231
{
1232
    struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
1233

    
1234
    qemu_get_be32s(f, &s->rttr);
1235
    qemu_get_be32s(f, &s->rtsr);
1236
    qemu_get_be32s(f, &s->rtar);
1237
    qemu_get_be32s(f, &s->rdar1);
1238
    qemu_get_be32s(f, &s->rdar2);
1239
    qemu_get_be32s(f, &s->ryar1);
1240
    qemu_get_be32s(f, &s->ryar2);
1241
    qemu_get_be32s(f, &s->swar1);
1242
    qemu_get_be32s(f, &s->swar2);
1243
    qemu_get_be32s(f, &s->piar);
1244
    qemu_get_be32s(f, &s->last_rcnr);
1245
    qemu_get_be32s(f, &s->last_rdcr);
1246
    qemu_get_be32s(f, &s->last_rycr);
1247
    qemu_get_be32s(f, &s->last_swcr);
1248
    qemu_get_be32s(f, &s->last_rtcpicr);
1249
    qemu_get_sbe64s(f, &s->last_hz);
1250
    qemu_get_sbe64s(f, &s->last_sw);
1251
    qemu_get_sbe64s(f, &s->last_pi);
1252

    
1253
    pxa2xx_rtc_alarm_update(s, s->rtsr);
1254

    
1255
    return 0;
1256
}
1257

    
1258
/* I2C Interface */
1259
struct pxa2xx_i2c_s {
1260
    i2c_slave slave;
1261
    i2c_bus *bus;
1262
    qemu_irq irq;
1263
    target_phys_addr_t offset;
1264

    
1265
    uint16_t control;
1266
    uint16_t status;
1267
    uint8_t ibmr;
1268
    uint8_t data;
1269
};
1270

    
1271
#define IBMR        0x80        /* I2C Bus Monitor register */
1272
#define IDBR        0x88        /* I2C Data Buffer register */
1273
#define ICR        0x90        /* I2C Control register */
1274
#define ISR        0x98        /* I2C Status register */
1275
#define ISAR        0xa0        /* I2C Slave Address register */
1276

    
1277
static void pxa2xx_i2c_update(struct pxa2xx_i2c_s *s)
1278
{
1279
    uint16_t level = 0;
1280
    level |= s->status & s->control & (1 << 10);                /* BED */
1281
    level |= (s->status & (1 << 7)) && (s->control & (1 << 9));        /* IRF */
1282
    level |= (s->status & (1 << 6)) && (s->control & (1 << 8));        /* ITE */
1283
    level |= s->status & (1 << 9);                                /* SAD */
1284
    qemu_set_irq(s->irq, !!level);
1285
}
1286

    
1287
/* These are only stubs now.  */
1288
static void pxa2xx_i2c_event(i2c_slave *i2c, enum i2c_event event)
1289
{
1290
    struct pxa2xx_i2c_s *s = (struct pxa2xx_i2c_s *) i2c;
1291

    
1292
    switch (event) {
1293
    case I2C_START_SEND:
1294
        s->status |= (1 << 9);                                /* set SAD */
1295
        s->status &= ~(1 << 0);                                /* clear RWM */
1296
        break;
1297
    case I2C_START_RECV:
1298
        s->status |= (1 << 9);                                /* set SAD */
1299
        s->status |= 1 << 0;                                /* set RWM */
1300
        break;
1301
    case I2C_FINISH:
1302
        s->status |= (1 << 4);                                /* set SSD */
1303
        break;
1304
    case I2C_NACK:
1305
        s->status |= 1 << 1;                                /* set ACKNAK */
1306
        break;
1307
    }
1308
    pxa2xx_i2c_update(s);
1309
}
1310

    
1311
static int pxa2xx_i2c_rx(i2c_slave *i2c)
1312
{
1313
    struct pxa2xx_i2c_s *s = (struct pxa2xx_i2c_s *) i2c;
1314
    if ((s->control & (1 << 14)) || !(s->control & (1 << 6)))
1315
        return 0;
1316

    
1317
    if (s->status & (1 << 0)) {                        /* RWM */
1318
        s->status |= 1 << 6;                        /* set ITE */
1319
    }
1320
    pxa2xx_i2c_update(s);
1321

    
1322
    return s->data;
1323
}
1324

    
1325
static int pxa2xx_i2c_tx(i2c_slave *i2c, uint8_t data)
1326
{
1327
    struct pxa2xx_i2c_s *s = (struct pxa2xx_i2c_s *) i2c;
1328
    if ((s->control & (1 << 14)) || !(s->control & (1 << 6)))
1329
        return 1;
1330

    
1331
    if (!(s->status & (1 << 0))) {                /* RWM */
1332
        s->status |= 1 << 7;                        /* set IRF */
1333
        s->data = data;
1334
    }
1335
    pxa2xx_i2c_update(s);
1336

    
1337
    return 1;
1338
}
1339

    
1340
static uint32_t pxa2xx_i2c_read(void *opaque, target_phys_addr_t addr)
1341
{
1342
    struct pxa2xx_i2c_s *s = (struct pxa2xx_i2c_s *) opaque;
1343

    
1344
    addr -= s->offset;
1345
    switch (addr) {
1346
    case ICR:
1347
        return s->control;
1348
    case ISR:
1349
        return s->status | (i2c_bus_busy(s->bus) << 2);
1350
    case ISAR:
1351
        return s->slave.address;
1352
    case IDBR:
1353
        return s->data;
1354
    case IBMR:
1355
        if (s->status & (1 << 2))
1356
            s->ibmr ^= 3;        /* Fake SCL and SDA pin changes */
1357
        else
1358
            s->ibmr = 0;
1359
        return s->ibmr;
1360
    default:
1361
        printf("%s: Bad register " REG_FMT "\n", __FUNCTION__, addr);
1362
        break;
1363
    }
1364
    return 0;
1365
}
1366

    
1367
static void pxa2xx_i2c_write(void *opaque, target_phys_addr_t addr,
1368
                uint32_t value)
1369
{
1370
    struct pxa2xx_i2c_s *s = (struct pxa2xx_i2c_s *) opaque;
1371
    int ack;
1372

    
1373
    addr -= s->offset;
1374
    switch (addr) {
1375
    case ICR:
1376
        s->control = value & 0xfff7;
1377
        if ((value & (1 << 3)) && (value & (1 << 6))) {        /* TB and IUE */
1378
            /* TODO: slave mode */
1379
            if (value & (1 << 0)) {                        /* START condition */
1380
                if (s->data & 1)
1381
                    s->status |= 1 << 0;                /* set RWM */
1382
                else
1383
                    s->status &= ~(1 << 0);                /* clear RWM */
1384
                ack = !i2c_start_transfer(s->bus, s->data >> 1, s->data & 1);
1385
            } else {
1386
                if (s->status & (1 << 0)) {                /* RWM */
1387
                    s->data = i2c_recv(s->bus);
1388
                    if (value & (1 << 2))                /* ACKNAK */
1389
                        i2c_nack(s->bus);
1390
                    ack = 1;
1391
                } else
1392
                    ack = !i2c_send(s->bus, s->data);
1393
            }
1394

    
1395
            if (value & (1 << 1))                        /* STOP condition */
1396
                i2c_end_transfer(s->bus);
1397

    
1398
            if (ack) {
1399
                if (value & (1 << 0))                        /* START condition */
1400
                    s->status |= 1 << 6;                /* set ITE */
1401
                else
1402
                    if (s->status & (1 << 0))                /* RWM */
1403
                        s->status |= 1 << 7;                /* set IRF */
1404
                    else
1405
                        s->status |= 1 << 6;                /* set ITE */
1406
                s->status &= ~(1 << 1);                        /* clear ACKNAK */
1407
            } else {
1408
                s->status |= 1 << 6;                        /* set ITE */
1409
                s->status |= 1 << 10;                        /* set BED */
1410
                s->status |= 1 << 1;                        /* set ACKNAK */
1411
            }
1412
        }
1413
        if (!(value & (1 << 3)) && (value & (1 << 6)))        /* !TB and IUE */
1414
            if (value & (1 << 4))                        /* MA */
1415
                i2c_end_transfer(s->bus);
1416
        pxa2xx_i2c_update(s);
1417
        break;
1418

    
1419
    case ISR:
1420
        s->status &= ~(value & 0x07f0);
1421
        pxa2xx_i2c_update(s);
1422
        break;
1423

    
1424
    case ISAR:
1425
        i2c_set_slave_address(&s->slave, value & 0x7f);
1426
        break;
1427

    
1428
    case IDBR:
1429
        s->data = value & 0xff;
1430
        break;
1431

    
1432
    default:
1433
        printf("%s: Bad register " REG_FMT "\n", __FUNCTION__, addr);
1434
    }
1435
}
1436

    
1437
static CPUReadMemoryFunc *pxa2xx_i2c_readfn[] = {
1438
    pxa2xx_i2c_read,
1439
    pxa2xx_i2c_read,
1440
    pxa2xx_i2c_read,
1441
};
1442

    
1443
static CPUWriteMemoryFunc *pxa2xx_i2c_writefn[] = {
1444
    pxa2xx_i2c_write,
1445
    pxa2xx_i2c_write,
1446
    pxa2xx_i2c_write,
1447
};
1448

    
1449
static void pxa2xx_i2c_save(QEMUFile *f, void *opaque)
1450
{
1451
    struct pxa2xx_i2c_s *s = (struct pxa2xx_i2c_s *) opaque;
1452

    
1453
    qemu_put_be16s(f, &s->control);
1454
    qemu_put_be16s(f, &s->status);
1455
    qemu_put_8s(f, &s->ibmr);
1456
    qemu_put_8s(f, &s->data);
1457

    
1458
    i2c_slave_save(f, &s->slave);
1459
}
1460

    
1461
static int pxa2xx_i2c_load(QEMUFile *f, void *opaque, int version_id)
1462
{
1463
    struct pxa2xx_i2c_s *s = (struct pxa2xx_i2c_s *) opaque;
1464

    
1465
    if (version_id != 1)
1466
        return -EINVAL;
1467

    
1468
    qemu_get_be16s(f, &s->control);
1469
    qemu_get_be16s(f, &s->status);
1470
    qemu_get_8s(f, &s->ibmr);
1471
    qemu_get_8s(f, &s->data);
1472

    
1473
    i2c_slave_load(f, &s->slave);
1474
    return 0;
1475
}
1476

    
1477
struct pxa2xx_i2c_s *pxa2xx_i2c_init(target_phys_addr_t base,
1478
                qemu_irq irq, uint32_t region_size)
1479
{
1480
    int iomemtype;
1481
    /* FIXME: Should the slave device really be on a separate bus?  */
1482
    struct pxa2xx_i2c_s *s = (struct pxa2xx_i2c_s *)
1483
            i2c_slave_init(i2c_init_bus(), 0, sizeof(struct pxa2xx_i2c_s));
1484

    
1485
    s->irq = irq;
1486
    s->slave.event = pxa2xx_i2c_event;
1487
    s->slave.recv = pxa2xx_i2c_rx;
1488
    s->slave.send = pxa2xx_i2c_tx;
1489
    s->bus = i2c_init_bus();
1490
    s->offset = base - (base & (~region_size) & TARGET_PAGE_MASK);
1491

    
1492
    iomemtype = cpu_register_io_memory(0, pxa2xx_i2c_readfn,
1493
                    pxa2xx_i2c_writefn, s);
1494
    cpu_register_physical_memory(base & ~region_size,
1495
                    region_size + 1, iomemtype);
1496

    
1497
    register_savevm("pxa2xx_i2c", base, 1,
1498
                    pxa2xx_i2c_save, pxa2xx_i2c_load, s);
1499

    
1500
    return s;
1501
}
1502

    
1503
i2c_bus *pxa2xx_i2c_bus(struct pxa2xx_i2c_s *s)
1504
{
1505
    return s->bus;
1506
}
1507

    
1508
/* PXA Inter-IC Sound Controller */
1509
static void pxa2xx_i2s_reset(struct pxa2xx_i2s_s *i2s)
1510
{
1511
    i2s->rx_len = 0;
1512
    i2s->tx_len = 0;
1513
    i2s->fifo_len = 0;
1514
    i2s->clk = 0x1a;
1515
    i2s->control[0] = 0x00;
1516
    i2s->control[1] = 0x00;
1517
    i2s->status = 0x00;
1518
    i2s->mask = 0x00;
1519
}
1520

    
1521
#define SACR_TFTH(val)        ((val >> 8) & 0xf)
1522
#define SACR_RFTH(val)        ((val >> 12) & 0xf)
1523
#define SACR_DREC(val)        (val & (1 << 3))
1524
#define SACR_DPRL(val)        (val & (1 << 4))
1525

    
1526
static inline void pxa2xx_i2s_update(struct pxa2xx_i2s_s *i2s)
1527
{
1528
    int rfs, tfs;
1529
    rfs = SACR_RFTH(i2s->control[0]) < i2s->rx_len &&
1530
            !SACR_DREC(i2s->control[1]);
1531
    tfs = (i2s->tx_len || i2s->fifo_len < SACR_TFTH(i2s->control[0])) &&
1532
            i2s->enable && !SACR_DPRL(i2s->control[1]);
1533

    
1534
    pxa2xx_dma_request(i2s->dma, PXA2XX_RX_RQ_I2S, rfs);
1535
    pxa2xx_dma_request(i2s->dma, PXA2XX_TX_RQ_I2S, tfs);
1536

    
1537
    i2s->status &= 0xe0;
1538
    if (i2s->fifo_len < 16 || !i2s->enable)
1539
        i2s->status |= 1 << 0;                        /* TNF */
1540
    if (i2s->rx_len)
1541
        i2s->status |= 1 << 1;                        /* RNE */
1542
    if (i2s->enable)
1543
        i2s->status |= 1 << 2;                        /* BSY */
1544
    if (tfs)
1545
        i2s->status |= 1 << 3;                        /* TFS */
1546
    if (rfs)
1547
        i2s->status |= 1 << 4;                        /* RFS */
1548
    if (!(i2s->tx_len && i2s->enable))
1549
        i2s->status |= i2s->fifo_len << 8;        /* TFL */
1550
    i2s->status |= MAX(i2s->rx_len, 0xf) << 12;        /* RFL */
1551

    
1552
    qemu_set_irq(i2s->irq, i2s->status & i2s->mask);
1553
}
1554

    
1555
#define SACR0        0x00        /* Serial Audio Global Control register */
1556
#define SACR1        0x04        /* Serial Audio I2S/MSB-Justified Control register */
1557
#define SASR0        0x0c        /* Serial Audio Interface and FIFO Status register */
1558
#define SAIMR        0x14        /* Serial Audio Interrupt Mask register */
1559
#define SAICR        0x18        /* Serial Audio Interrupt Clear register */
1560
#define SADIV        0x60        /* Serial Audio Clock Divider register */
1561
#define SADR        0x80        /* Serial Audio Data register */
1562

    
1563
static uint32_t pxa2xx_i2s_read(void *opaque, target_phys_addr_t addr)
1564
{
1565
    struct pxa2xx_i2s_s *s = (struct pxa2xx_i2s_s *) opaque;
1566

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

    
1594
static void pxa2xx_i2s_write(void *opaque, target_phys_addr_t addr,
1595
                uint32_t value)
1596
{
1597
    struct pxa2xx_i2s_s *s = (struct pxa2xx_i2s_s *) opaque;
1598
    uint32_t *sample;
1599

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

    
1649
static CPUReadMemoryFunc *pxa2xx_i2s_readfn[] = {
1650
    pxa2xx_i2s_read,
1651
    pxa2xx_i2s_read,
1652
    pxa2xx_i2s_read,
1653
};
1654

    
1655
static CPUWriteMemoryFunc *pxa2xx_i2s_writefn[] = {
1656
    pxa2xx_i2s_write,
1657
    pxa2xx_i2s_write,
1658
    pxa2xx_i2s_write,
1659
};
1660

    
1661
static void pxa2xx_i2s_save(QEMUFile *f, void *opaque)
1662
{
1663
    struct pxa2xx_i2s_s *s = (struct pxa2xx_i2s_s *) opaque;
1664

    
1665
    qemu_put_be32s(f, &s->control[0]);
1666
    qemu_put_be32s(f, &s->control[1]);
1667
    qemu_put_be32s(f, &s->status);
1668
    qemu_put_be32s(f, &s->mask);
1669
    qemu_put_be32s(f, &s->clk);
1670

    
1671
    qemu_put_be32(f, s->enable);
1672
    qemu_put_be32(f, s->rx_len);
1673
    qemu_put_be32(f, s->tx_len);
1674
    qemu_put_be32(f, s->fifo_len);
1675
}
1676

    
1677
static int pxa2xx_i2s_load(QEMUFile *f, void *opaque, int version_id)
1678
{
1679
    struct pxa2xx_i2s_s *s = (struct pxa2xx_i2s_s *) opaque;
1680

    
1681
    qemu_get_be32s(f, &s->control[0]);
1682
    qemu_get_be32s(f, &s->control[1]);
1683
    qemu_get_be32s(f, &s->status);
1684
    qemu_get_be32s(f, &s->mask);
1685
    qemu_get_be32s(f, &s->clk);
1686

    
1687
    s->enable = qemu_get_be32(f);
1688
    s->rx_len = qemu_get_be32(f);
1689
    s->tx_len = qemu_get_be32(f);
1690
    s->fifo_len = qemu_get_be32(f);
1691

    
1692
    return 0;
1693
}
1694

    
1695
static void pxa2xx_i2s_data_req(void *opaque, int tx, int rx)
1696
{
1697
    struct pxa2xx_i2s_s *s = (struct pxa2xx_i2s_s *) opaque;
1698
    uint32_t *sample;
1699

    
1700
    /* Signal FIFO errors */
1701
    if (s->enable && s->tx_len)
1702
        s->status |= 1 << 5;                /* TUR */
1703
    if (s->enable && s->rx_len)
1704
        s->status |= 1 << 6;                /* ROR */
1705

    
1706
    /* Should be tx - MIN(tx, s->fifo_len) but we don't really need to
1707
     * handle the cases where it makes a difference.  */
1708
    s->tx_len = tx - s->fifo_len;
1709
    s->rx_len = rx;
1710
    /* Note that is s->codec_out wasn't set, we wouldn't get called.  */
1711
    if (s->enable)
1712
        for (sample = s->fifo; s->fifo_len; s->fifo_len --, sample ++)
1713
            s->codec_out(s->opaque, *sample);
1714
    pxa2xx_i2s_update(s);
1715
}
1716

    
1717
static struct pxa2xx_i2s_s *pxa2xx_i2s_init(target_phys_addr_t base,
1718
                qemu_irq irq, struct pxa2xx_dma_state_s *dma)
1719
{
1720
    int iomemtype;
1721
    struct pxa2xx_i2s_s *s = (struct pxa2xx_i2s_s *)
1722
            qemu_mallocz(sizeof(struct pxa2xx_i2s_s));
1723

    
1724
    s->irq = irq;
1725
    s->dma = dma;
1726
    s->data_req = pxa2xx_i2s_data_req;
1727

    
1728
    pxa2xx_i2s_reset(s);
1729

    
1730
    iomemtype = cpu_register_io_memory(0, pxa2xx_i2s_readfn,
1731
                    pxa2xx_i2s_writefn, s);
1732
    cpu_register_physical_memory(base, 0x100000, iomemtype);
1733

    
1734
    register_savevm("pxa2xx_i2s", base, 0,
1735
                    pxa2xx_i2s_save, pxa2xx_i2s_load, s);
1736

    
1737
    return s;
1738
}
1739

    
1740
/* PXA Fast Infra-red Communications Port */
1741
struct pxa2xx_fir_s {
1742
    qemu_irq irq;
1743
    struct pxa2xx_dma_state_s *dma;
1744
    int enable;
1745
    CharDriverState *chr;
1746

    
1747
    uint8_t control[3];
1748
    uint8_t status[2];
1749

    
1750
    int rx_len;
1751
    int rx_start;
1752
    uint8_t rx_fifo[64];
1753
};
1754

    
1755
static void pxa2xx_fir_reset(struct pxa2xx_fir_s *s)
1756
{
1757
    s->control[0] = 0x00;
1758
    s->control[1] = 0x00;
1759
    s->control[2] = 0x00;
1760
    s->status[0] = 0x00;
1761
    s->status[1] = 0x00;
1762
    s->enable = 0;
1763
}
1764

    
1765
static inline void pxa2xx_fir_update(struct pxa2xx_fir_s *s)
1766
{
1767
    static const int tresh[4] = { 8, 16, 32, 0 };
1768
    int intr = 0;
1769
    if ((s->control[0] & (1 << 4)) &&                        /* RXE */
1770
                    s->rx_len >= tresh[s->control[2] & 3])        /* TRIG */
1771
        s->status[0] |= 1 << 4;                                /* RFS */
1772
    else
1773
        s->status[0] &= ~(1 << 4);                        /* RFS */
1774
    if (s->control[0] & (1 << 3))                        /* TXE */
1775
        s->status[0] |= 1 << 3;                                /* TFS */
1776
    else
1777
        s->status[0] &= ~(1 << 3);                        /* TFS */
1778
    if (s->rx_len)
1779
        s->status[1] |= 1 << 2;                                /* RNE */
1780
    else
1781
        s->status[1] &= ~(1 << 2);                        /* RNE */
1782
    if (s->control[0] & (1 << 4))                        /* RXE */
1783
        s->status[1] |= 1 << 0;                                /* RSY */
1784
    else
1785
        s->status[1] &= ~(1 << 0);                        /* RSY */
1786

    
1787
    intr |= (s->control[0] & (1 << 5)) &&                /* RIE */
1788
            (s->status[0] & (1 << 4));                        /* RFS */
1789
    intr |= (s->control[0] & (1 << 6)) &&                /* TIE */
1790
            (s->status[0] & (1 << 3));                        /* TFS */
1791
    intr |= (s->control[2] & (1 << 4)) &&                /* TRAIL */
1792
            (s->status[0] & (1 << 6));                        /* EOC */
1793
    intr |= (s->control[0] & (1 << 2)) &&                /* TUS */
1794
            (s->status[0] & (1 << 1));                        /* TUR */
1795
    intr |= s->status[0] & 0x25;                        /* FRE, RAB, EIF */
1796

    
1797
    pxa2xx_dma_request(s->dma, PXA2XX_RX_RQ_ICP, (s->status[0] >> 4) & 1);
1798
    pxa2xx_dma_request(s->dma, PXA2XX_TX_RQ_ICP, (s->status[0] >> 3) & 1);
1799

    
1800
    qemu_set_irq(s->irq, intr && s->enable);
1801
}
1802

    
1803
#define ICCR0        0x00        /* FICP Control register 0 */
1804
#define ICCR1        0x04        /* FICP Control register 1 */
1805
#define ICCR2        0x08        /* FICP Control register 2 */
1806
#define ICDR        0x0c        /* FICP Data register */
1807
#define ICSR0        0x14        /* FICP Status register 0 */
1808
#define ICSR1        0x18        /* FICP Status register 1 */
1809
#define ICFOR        0x1c        /* FICP FIFO Occupancy Status register */
1810

    
1811
static uint32_t pxa2xx_fir_read(void *opaque, target_phys_addr_t addr)
1812
{
1813
    struct pxa2xx_fir_s *s = (struct pxa2xx_fir_s *) opaque;
1814
    uint8_t ret;
1815

    
1816
    switch (addr) {
1817
    case ICCR0:
1818
        return s->control[0];
1819
    case ICCR1:
1820
        return s->control[1];
1821
    case ICCR2:
1822
        return s->control[2];
1823
    case ICDR:
1824
        s->status[0] &= ~0x01;
1825
        s->status[1] &= ~0x72;
1826
        if (s->rx_len) {
1827
            s->rx_len --;
1828
            ret = s->rx_fifo[s->rx_start ++];
1829
            s->rx_start &= 63;
1830
            pxa2xx_fir_update(s);
1831
            return ret;
1832
        }
1833
        printf("%s: Rx FIFO underrun.\n", __FUNCTION__);
1834
        break;
1835
    case ICSR0:
1836
        return s->status[0];
1837
    case ICSR1:
1838
        return s->status[1] | (1 << 3);                        /* TNF */
1839
    case ICFOR:
1840
        return s->rx_len;
1841
    default:
1842
        printf("%s: Bad register " REG_FMT "\n", __FUNCTION__, addr);
1843
        break;
1844
    }
1845
    return 0;
1846
}
1847

    
1848
static void pxa2xx_fir_write(void *opaque, target_phys_addr_t addr,
1849
                uint32_t value)
1850
{
1851
    struct pxa2xx_fir_s *s = (struct pxa2xx_fir_s *) opaque;
1852
    uint8_t ch;
1853

    
1854
    switch (addr) {
1855
    case ICCR0:
1856
        s->control[0] = value;
1857
        if (!(value & (1 << 4)))                        /* RXE */
1858
            s->rx_len = s->rx_start = 0;
1859
        if (!(value & (1 << 3)))                        /* TXE */
1860
            /* Nop */;
1861
        s->enable = value & 1;                                /* ITR */
1862
        if (!s->enable)
1863
            s->status[0] = 0;
1864
        pxa2xx_fir_update(s);
1865
        break;
1866
    case ICCR1:
1867
        s->control[1] = value;
1868
        break;
1869
    case ICCR2:
1870
        s->control[2] = value & 0x3f;
1871
        pxa2xx_fir_update(s);
1872
        break;
1873
    case ICDR:
1874
        if (s->control[2] & (1 << 2))                        /* TXP */
1875
            ch = value;
1876
        else
1877
            ch = ~value;
1878
        if (s->chr && s->enable && (s->control[0] & (1 << 3)))        /* TXE */
1879
            qemu_chr_write(s->chr, &ch, 1);
1880
        break;
1881
    case ICSR0:
1882
        s->status[0] &= ~(value & 0x66);
1883
        pxa2xx_fir_update(s);
1884
        break;
1885
    case ICFOR:
1886
        break;
1887
    default:
1888
        printf("%s: Bad register " REG_FMT "\n", __FUNCTION__, addr);
1889
    }
1890
}
1891

    
1892
static CPUReadMemoryFunc *pxa2xx_fir_readfn[] = {
1893
    pxa2xx_fir_read,
1894
    pxa2xx_fir_read,
1895
    pxa2xx_fir_read,
1896
};
1897

    
1898
static CPUWriteMemoryFunc *pxa2xx_fir_writefn[] = {
1899
    pxa2xx_fir_write,
1900
    pxa2xx_fir_write,
1901
    pxa2xx_fir_write,
1902
};
1903

    
1904
static int pxa2xx_fir_is_empty(void *opaque)
1905
{
1906
    struct pxa2xx_fir_s *s = (struct pxa2xx_fir_s *) opaque;
1907
    return (s->rx_len < 64);
1908
}
1909

    
1910
static void pxa2xx_fir_rx(void *opaque, const uint8_t *buf, int size)
1911
{
1912
    struct pxa2xx_fir_s *s = (struct pxa2xx_fir_s *) opaque;
1913
    if (!(s->control[0] & (1 << 4)))                        /* RXE */
1914
        return;
1915

    
1916
    while (size --) {
1917
        s->status[1] |= 1 << 4;                                /* EOF */
1918
        if (s->rx_len >= 64) {
1919
            s->status[1] |= 1 << 6;                        /* ROR */
1920
            break;
1921
        }
1922

    
1923
        if (s->control[2] & (1 << 3))                        /* RXP */
1924
            s->rx_fifo[(s->rx_start + s->rx_len ++) & 63] = *(buf ++);
1925
        else
1926
            s->rx_fifo[(s->rx_start + s->rx_len ++) & 63] = ~*(buf ++);
1927
    }
1928

    
1929
    pxa2xx_fir_update(s);
1930
}
1931

    
1932
static void pxa2xx_fir_event(void *opaque, int event)
1933
{
1934
}
1935

    
1936
static void pxa2xx_fir_save(QEMUFile *f, void *opaque)
1937
{
1938
    struct pxa2xx_fir_s *s = (struct pxa2xx_fir_s *) opaque;
1939
    int i;
1940

    
1941
    qemu_put_be32(f, s->enable);
1942

    
1943
    qemu_put_8s(f, &s->control[0]);
1944
    qemu_put_8s(f, &s->control[1]);
1945
    qemu_put_8s(f, &s->control[2]);
1946
    qemu_put_8s(f, &s->status[0]);
1947
    qemu_put_8s(f, &s->status[1]);
1948

    
1949
    qemu_put_byte(f, s->rx_len);
1950
    for (i = 0; i < s->rx_len; i ++)
1951
        qemu_put_byte(f, s->rx_fifo[(s->rx_start + i) & 63]);
1952
}
1953

    
1954
static int pxa2xx_fir_load(QEMUFile *f, void *opaque, int version_id)
1955
{
1956
    struct pxa2xx_fir_s *s = (struct pxa2xx_fir_s *) opaque;
1957
    int i;
1958

    
1959
    s->enable = qemu_get_be32(f);
1960

    
1961
    qemu_get_8s(f, &s->control[0]);
1962
    qemu_get_8s(f, &s->control[1]);
1963
    qemu_get_8s(f, &s->control[2]);
1964
    qemu_get_8s(f, &s->status[0]);
1965
    qemu_get_8s(f, &s->status[1]);
1966

    
1967
    s->rx_len = qemu_get_byte(f);
1968
    s->rx_start = 0;
1969
    for (i = 0; i < s->rx_len; i ++)
1970
        s->rx_fifo[i] = qemu_get_byte(f);
1971

    
1972
    return 0;
1973
}
1974

    
1975
static struct pxa2xx_fir_s *pxa2xx_fir_init(target_phys_addr_t base,
1976
                qemu_irq irq, struct pxa2xx_dma_state_s *dma,
1977
                CharDriverState *chr)
1978
{
1979
    int iomemtype;
1980
    struct pxa2xx_fir_s *s = (struct pxa2xx_fir_s *)
1981
            qemu_mallocz(sizeof(struct pxa2xx_fir_s));
1982

    
1983
    s->irq = irq;
1984
    s->dma = dma;
1985
    s->chr = chr;
1986

    
1987
    pxa2xx_fir_reset(s);
1988

    
1989
    iomemtype = cpu_register_io_memory(0, pxa2xx_fir_readfn,
1990
                    pxa2xx_fir_writefn, s);
1991
    cpu_register_physical_memory(base, 0x1000, iomemtype);
1992

    
1993
    if (chr)
1994
        qemu_chr_add_handlers(chr, pxa2xx_fir_is_empty,
1995
                        pxa2xx_fir_rx, pxa2xx_fir_event, s);
1996

    
1997
    register_savevm("pxa2xx_fir", 0, 0, pxa2xx_fir_save, pxa2xx_fir_load, s);
1998

    
1999
    return s;
2000
}
2001

    
2002
static void pxa2xx_reset(void *opaque, int line, int level)
2003
{
2004
    struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
2005

    
2006
    if (level && (s->pm_regs[PCFR >> 2] & 0x10)) {        /* GPR_EN */
2007
        cpu_reset(s->env);
2008
        /* TODO: reset peripherals */
2009
    }
2010
}
2011

    
2012
/* Initialise a PXA270 integrated chip (ARM based core).  */
2013
struct pxa2xx_state_s *pxa270_init(unsigned int sdram_size, const char *revision)
2014
{
2015
    struct pxa2xx_state_s *s;
2016
    struct pxa2xx_ssp_s *ssp;
2017
    int iomemtype, i;
2018
    int index;
2019
    s = (struct pxa2xx_state_s *) qemu_mallocz(sizeof(struct pxa2xx_state_s));
2020

    
2021
    if (revision && strncmp(revision, "pxa27", 5)) {
2022
        fprintf(stderr, "Machine requires a PXA27x processor.\n");
2023
        exit(1);
2024
    }
2025
    if (!revision)
2026
        revision = "pxa270";
2027
    
2028
    s->env = cpu_init(revision);
2029
    if (!s->env) {
2030
        fprintf(stderr, "Unable to find CPU definition\n");
2031
        exit(1);
2032
    }
2033
    s->reset = qemu_allocate_irqs(pxa2xx_reset, s, 1)[0];
2034

    
2035
    /* SDRAM & Internal Memory Storage */
2036
    cpu_register_physical_memory(PXA2XX_SDRAM_BASE,
2037
                    sdram_size, qemu_ram_alloc(sdram_size) | IO_MEM_RAM);
2038
    cpu_register_physical_memory(PXA2XX_INTERNAL_BASE,
2039
                    0x40000, qemu_ram_alloc(0x40000) | IO_MEM_RAM);
2040

    
2041
    s->pic = pxa2xx_pic_init(0x40d00000, s->env);
2042

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

    
2045
    pxa27x_timer_init(0x40a00000, &s->pic[PXA2XX_PIC_OST_0],
2046
                    s->pic[PXA27X_PIC_OST_4_11]);
2047

    
2048
    s->gpio = pxa2xx_gpio_init(0x40e00000, s->env, s->pic, 121);
2049

    
2050
    index = drive_get_index(IF_SD, 0, 0);
2051
    if (index == -1) {
2052
        fprintf(stderr, "qemu: missing SecureDigital device\n");
2053
        exit(1);
2054
    }
2055
    s->mmc = pxa2xx_mmci_init(0x41100000, drives_table[index].bdrv,
2056
                              s->pic[PXA2XX_PIC_MMC], s->dma);
2057

    
2058
    for (i = 0; pxa270_serial[i].io_base; i ++)
2059
        if (serial_hds[i])
2060
            serial_mm_init(pxa270_serial[i].io_base, 2,
2061
                           s->pic[pxa270_serial[i].irqn], 14857000/16,
2062
                           serial_hds[i], 1);
2063
        else
2064
            break;
2065
    if (serial_hds[i])
2066
        s->fir = pxa2xx_fir_init(0x40800000, s->pic[PXA2XX_PIC_ICP],
2067
                        s->dma, serial_hds[i]);
2068

    
2069
    s->lcd = pxa2xx_lcdc_init(0x44000000, s->pic[PXA2XX_PIC_LCD]);
2070

    
2071
    s->cm_base = 0x41300000;
2072
    s->cm_regs[CCCR >> 2] = 0x02000210;        /* 416.0 MHz */
2073
    s->clkcfg = 0x00000009;                /* Turbo mode active */
2074
    iomemtype = cpu_register_io_memory(0, pxa2xx_cm_readfn,
2075
                    pxa2xx_cm_writefn, s);
2076
    cpu_register_physical_memory(s->cm_base, 0x1000, iomemtype);
2077
    register_savevm("pxa2xx_cm", 0, 0, pxa2xx_cm_save, pxa2xx_cm_load, s);
2078

    
2079
    cpu_arm_set_cp_io(s->env, 14, pxa2xx_cp14_read, pxa2xx_cp14_write, s);
2080

    
2081
    s->mm_base = 0x48000000;
2082
    s->mm_regs[MDMRS >> 2] = 0x00020002;
2083
    s->mm_regs[MDREFR >> 2] = 0x03ca4000;
2084
    s->mm_regs[MECR >> 2] = 0x00000001;        /* Two PC Card sockets */
2085
    iomemtype = cpu_register_io_memory(0, pxa2xx_mm_readfn,
2086
                    pxa2xx_mm_writefn, s);
2087
    cpu_register_physical_memory(s->mm_base, 0x1000, iomemtype);
2088
    register_savevm("pxa2xx_mm", 0, 0, pxa2xx_mm_save, pxa2xx_mm_load, s);
2089

    
2090
    s->pm_base = 0x40f00000;
2091
    iomemtype = cpu_register_io_memory(0, pxa2xx_pm_readfn,
2092
                    pxa2xx_pm_writefn, s);
2093
    cpu_register_physical_memory(s->pm_base, 0x100, iomemtype);
2094
    register_savevm("pxa2xx_pm", 0, 0, pxa2xx_pm_save, pxa2xx_pm_load, s);
2095

    
2096
    for (i = 0; pxa27x_ssp[i].io_base; i ++);
2097
    s->ssp = (struct pxa2xx_ssp_s **)
2098
            qemu_mallocz(sizeof(struct pxa2xx_ssp_s *) * i);
2099
    ssp = (struct pxa2xx_ssp_s *)
2100
            qemu_mallocz(sizeof(struct pxa2xx_ssp_s) * i);
2101
    for (i = 0; pxa27x_ssp[i].io_base; i ++) {
2102
        target_phys_addr_t ssp_base;
2103
        s->ssp[i] = &ssp[i];
2104
        ssp_base = pxa27x_ssp[i].io_base;
2105
        ssp[i].irq = s->pic[pxa27x_ssp[i].irqn];
2106

    
2107
        iomemtype = cpu_register_io_memory(0, pxa2xx_ssp_readfn,
2108
                        pxa2xx_ssp_writefn, &ssp[i]);
2109
        cpu_register_physical_memory(ssp_base, 0x1000, iomemtype);
2110
        register_savevm("pxa2xx_ssp", i, 0,
2111
                        pxa2xx_ssp_save, pxa2xx_ssp_load, s);
2112
    }
2113

    
2114
    if (usb_enabled) {
2115
        usb_ohci_init_pxa(0x4c000000, 3, -1, s->pic[PXA2XX_PIC_USBH1]);
2116
    }
2117

    
2118
    s->pcmcia[0] = pxa2xx_pcmcia_init(0x20000000);
2119
    s->pcmcia[1] = pxa2xx_pcmcia_init(0x30000000);
2120

    
2121
    s->rtc_base = 0x40900000;
2122
    iomemtype = cpu_register_io_memory(0, pxa2xx_rtc_readfn,
2123
                    pxa2xx_rtc_writefn, s);
2124
    cpu_register_physical_memory(s->rtc_base, 0x1000, iomemtype);
2125
    pxa2xx_rtc_init(s);
2126
    register_savevm("pxa2xx_rtc", 0, 0, pxa2xx_rtc_save, pxa2xx_rtc_load, s);
2127

    
2128
    s->i2c[0] = pxa2xx_i2c_init(0x40301600, s->pic[PXA2XX_PIC_I2C], 0xffff);
2129
    s->i2c[1] = pxa2xx_i2c_init(0x40f00100, s->pic[PXA2XX_PIC_PWRI2C], 0xff);
2130

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

    
2133
    s->kp = pxa27x_keypad_init(0x41500000, s->pic[PXA2XX_PIC_KEYPAD]);
2134

    
2135
    /* GPIO1 resets the processor */
2136
    /* The handler can be overridden by board-specific code */
2137
    pxa2xx_gpio_out_set(s->gpio, 1, s->reset);
2138
    return s;
2139
}
2140

    
2141
/* Initialise a PXA255 integrated chip (ARM based core).  */
2142
struct pxa2xx_state_s *pxa255_init(unsigned int sdram_size)
2143
{
2144
    struct pxa2xx_state_s *s;
2145
    struct pxa2xx_ssp_s *ssp;
2146
    int iomemtype, i;
2147
    int index;
2148

    
2149
    s = (struct pxa2xx_state_s *) qemu_mallocz(sizeof(struct pxa2xx_state_s));
2150

    
2151
    s->env = cpu_init("pxa255");
2152
    if (!s->env) {
2153
        fprintf(stderr, "Unable to find CPU definition\n");
2154
        exit(1);
2155
    }
2156
    s->reset = qemu_allocate_irqs(pxa2xx_reset, s, 1)[0];
2157

    
2158
    /* SDRAM & Internal Memory Storage */
2159
    cpu_register_physical_memory(PXA2XX_SDRAM_BASE, sdram_size,
2160
                    qemu_ram_alloc(sdram_size) | IO_MEM_RAM);
2161
    cpu_register_physical_memory(PXA2XX_INTERNAL_BASE, PXA2XX_INTERNAL_SIZE,
2162
                    qemu_ram_alloc(PXA2XX_INTERNAL_SIZE) | IO_MEM_RAM);
2163

    
2164
    s->pic = pxa2xx_pic_init(0x40d00000, s->env);
2165

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

    
2168
    pxa25x_timer_init(0x40a00000, &s->pic[PXA2XX_PIC_OST_0]);
2169

    
2170
    s->gpio = pxa2xx_gpio_init(0x40e00000, s->env, s->pic, 85);
2171

    
2172
    index = drive_get_index(IF_SD, 0, 0);
2173
    if (index == -1) {
2174
        fprintf(stderr, "qemu: missing SecureDigital device\n");
2175
        exit(1);
2176
    }
2177
    s->mmc = pxa2xx_mmci_init(0x41100000, drives_table[index].bdrv,
2178
                              s->pic[PXA2XX_PIC_MMC], s->dma);
2179

    
2180
    for (i = 0; pxa255_serial[i].io_base; i ++)
2181
        if (serial_hds[i])
2182
            serial_mm_init(pxa255_serial[i].io_base, 2,
2183
                           s->pic[pxa255_serial[i].irqn], 14745600/16,
2184
                           serial_hds[i], 1);
2185
        else
2186
            break;
2187
    if (serial_hds[i])
2188
        s->fir = pxa2xx_fir_init(0x40800000, s->pic[PXA2XX_PIC_ICP],
2189
                        s->dma, serial_hds[i]);
2190

    
2191
    s->lcd = pxa2xx_lcdc_init(0x44000000, s->pic[PXA2XX_PIC_LCD]);
2192

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

    
2201
    cpu_arm_set_cp_io(s->env, 14, pxa2xx_cp14_read, pxa2xx_cp14_write, s);
2202

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

    
2212
    s->pm_base = 0x40f00000;
2213
    iomemtype = cpu_register_io_memory(0, pxa2xx_pm_readfn,
2214
                    pxa2xx_pm_writefn, s);
2215
    cpu_register_physical_memory(s->pm_base, 0x100, iomemtype);
2216
    register_savevm("pxa2xx_pm", 0, 0, pxa2xx_pm_save, pxa2xx_pm_load, s);
2217

    
2218
    for (i = 0; pxa255_ssp[i].io_base; i ++);
2219
    s->ssp = (struct pxa2xx_ssp_s **)
2220
            qemu_mallocz(sizeof(struct pxa2xx_ssp_s *) * i);
2221
    ssp = (struct pxa2xx_ssp_s *)
2222
            qemu_mallocz(sizeof(struct pxa2xx_ssp_s) * i);
2223
    for (i = 0; pxa255_ssp[i].io_base; i ++) {
2224
        target_phys_addr_t ssp_base;
2225
        s->ssp[i] = &ssp[i];
2226
        ssp_base = pxa255_ssp[i].io_base;
2227
        ssp[i].irq = s->pic[pxa255_ssp[i].irqn];
2228

    
2229
        iomemtype = cpu_register_io_memory(0, pxa2xx_ssp_readfn,
2230
                        pxa2xx_ssp_writefn, &ssp[i]);
2231
        cpu_register_physical_memory(ssp_base, 0x1000, iomemtype);
2232
        register_savevm("pxa2xx_ssp", i, 0,
2233
                        pxa2xx_ssp_save, pxa2xx_ssp_load, s);
2234
    }
2235

    
2236
    if (usb_enabled) {
2237
        usb_ohci_init_pxa(0x4c000000, 3, -1, s->pic[PXA2XX_PIC_USBH1]);
2238
    }
2239

    
2240
    s->pcmcia[0] = pxa2xx_pcmcia_init(0x20000000);
2241
    s->pcmcia[1] = pxa2xx_pcmcia_init(0x30000000);
2242

    
2243
    s->rtc_base = 0x40900000;
2244
    iomemtype = cpu_register_io_memory(0, pxa2xx_rtc_readfn,
2245
                    pxa2xx_rtc_writefn, s);
2246
    cpu_register_physical_memory(s->rtc_base, 0x1000, iomemtype);
2247
    pxa2xx_rtc_init(s);
2248
    register_savevm("pxa2xx_rtc", 0, 0, pxa2xx_rtc_save, pxa2xx_rtc_load, s);
2249

    
2250
    s->i2c[0] = pxa2xx_i2c_init(0x40301600, s->pic[PXA2XX_PIC_I2C], 0xffff);
2251
    s->i2c[1] = pxa2xx_i2c_init(0x40f00100, s->pic[PXA2XX_PIC_PWRI2C], 0xff);
2252

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

    
2255
    /* GPIO1 resets the processor */
2256
    /* The handler can be overridden by board-specific code */
2257
    pxa2xx_gpio_out_set(s->gpio, 1, s->reset);
2258
    return s;
2259
}