Revision 3f582262

b/hw/pxa.h
65 65
qemu_irq *pxa2xx_pic_init(target_phys_addr_t base, CPUState *env);
66 66

  
67 67
/* pxa2xx_timer.c */
68
void pxa25x_timer_init(target_phys_addr_t base,
69
                qemu_irq *irqs, CPUState *cpustate);
70
void pxa27x_timer_init(target_phys_addr_t base,
71
                qemu_irq *irqs, qemu_irq irq4, CPUState *cpustate);
68
void pxa25x_timer_init(target_phys_addr_t base, qemu_irq *irqs);
69
void pxa27x_timer_init(target_phys_addr_t base, qemu_irq *irqs, qemu_irq irq4);
72 70

  
73 71
/* pxa2xx_gpio.c */
74 72
struct pxa2xx_gpio_info_s;
......
117 115
                uint32_t (*readfn)(void *opaque),
118 116
                void (*writefn)(void *opaque, uint32_t value), void *opaque);
119 117

  
118
struct pxa2xx_i2c_s;
119
struct pxa2xx_i2c_s *pxa2xx_i2c_init(target_phys_addr_t base,
120
                qemu_irq irq, int ioregister);
121
i2c_bus *pxa2xx_i2c_bus(struct pxa2xx_i2c_s *s);
122

  
120 123
struct pxa2xx_i2s_s;
121 124
struct pxa2xx_fir_s;
122 125

  
......
127 130
    struct pxa2xx_gpio_info_s *gpio;
128 131
    struct pxa2xx_lcdc_s *lcd;
129 132
    struct pxa2xx_ssp_s **ssp;
133
    struct pxa2xx_i2c_s *i2c[2];
130 134
    struct pxa2xx_mmci_s *mmc;
131 135
    struct pxa2xx_pcmcia_s *pcmcia[2];
132 136
    struct pxa2xx_i2s_s *i2s;
b/hw/pxa2xx.c
69 69
#define PCMD0	0x80	/* Power Manager I2C Command register File 0 */
70 70
#define PCMD31	0xfc	/* Power Manager I2C Command register File 31 */
71 71

  
72
static uint32_t pxa2xx_i2c_read(void *, target_phys_addr_t);
73
static void pxa2xx_i2c_write(void *, target_phys_addr_t, uint32_t);
74

  
72 75
static uint32_t pxa2xx_pm_read(void *opaque, target_phys_addr_t addr)
73 76
{
74 77
    struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
78
    if (addr > s->pm_base + PCMD31) {
79
        /* Special case: PWRI2C registers appear in the same range.  */
80
        return pxa2xx_i2c_read(s->i2c[1], addr);
81
    }
75 82
    addr -= s->pm_base;
76 83

  
77 84
    switch (addr) {
......
92 99
                uint32_t value)
93 100
{
94 101
    struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
102
    if (addr > s->pm_base + PCMD31) {
103
        /* Special case: PWRI2C registers appear in the same range.  */
104
        pxa2xx_i2c_write(s->i2c[1], addr, value);
105
        return;
106
    }
95 107
    addr -= s->pm_base;
96 108

  
97 109
    switch (addr) {
......
1086 1098
    pxa2xx_rtc_write,
1087 1099
};
1088 1100

  
1101
/* I2C Interface */
1102
struct pxa2xx_i2c_s {
1103
    i2c_slave slave;
1104
    i2c_bus *bus;
1105
    target_phys_addr_t base;
1106
    qemu_irq irq;
1107

  
1108
    uint16_t control;
1109
    uint16_t status;
1110
    uint8_t ibmr;
1111
    uint8_t data;
1112
};
1113

  
1114
#define IBMR	0x80	/* I2C Bus Monitor register */
1115
#define IDBR	0x88	/* I2C Data Buffer register */
1116
#define ICR	0x90	/* I2C Control register */
1117
#define ISR	0x98	/* I2C Status register */
1118
#define ISAR	0xa0	/* I2C Slave Address register */
1119

  
1120
static void pxa2xx_i2c_update(struct pxa2xx_i2c_s *s)
1121
{
1122
    uint16_t level = 0;
1123
    level |= s->status & s->control & (1 << 10);		/* BED */
1124
    level |= (s->status & (1 << 7)) && (s->control & (1 << 9));	/* IRF */
1125
    level |= (s->status & (1 << 6)) && (s->control & (1 << 8));	/* ITE */
1126
    level |= s->status & (1 << 9);				/* SAD */
1127
    qemu_set_irq(s->irq, !!level);
1128
}
1129

  
1130
/* These are only stubs now.  */
1131
static void pxa2xx_i2c_event(i2c_slave *i2c, enum i2c_event event)
1132
{
1133
    struct pxa2xx_i2c_s *s = (struct pxa2xx_i2c_s *) i2c;
1134

  
1135
    switch (event) {
1136
    case I2C_START_SEND:
1137
        s->status |= (1 << 9);				/* set SAD */
1138
        s->status &= ~(1 << 0);				/* clear RWM */
1139
        break;
1140
    case I2C_START_RECV:
1141
        s->status |= (1 << 9);				/* set SAD */
1142
        s->status |= 1 << 0;				/* set RWM */
1143
        break;
1144
    case I2C_FINISH:
1145
        s->status |= (1 << 4);				/* set SSD */
1146
        break;
1147
    case I2C_NACK:
1148
        s->status |= 1 << 1;				/* set ACKNAK */
1149
        break;
1150
    }
1151
    pxa2xx_i2c_update(s);
1152
}
1153

  
1154
static int pxa2xx_i2c_rx(i2c_slave *i2c)
1155
{
1156
    struct pxa2xx_i2c_s *s = (struct pxa2xx_i2c_s *) i2c;
1157
    if ((s->control & (1 << 14)) || !(s->control & (1 << 6)))
1158
        return 0;
1159

  
1160
    if (s->status & (1 << 0)) {			/* RWM */
1161
        s->status |= 1 << 6;			/* set ITE */
1162
    }
1163
    pxa2xx_i2c_update(s);
1164

  
1165
    return s->data;
1166
}
1167

  
1168
static int pxa2xx_i2c_tx(i2c_slave *i2c, uint8_t data)
1169
{
1170
    struct pxa2xx_i2c_s *s = (struct pxa2xx_i2c_s *) i2c;
1171
    if ((s->control & (1 << 14)) || !(s->control & (1 << 6)))
1172
        return 1;
1173

  
1174
    if (!(s->status & (1 << 0))) {		/* RWM */
1175
        s->status |= 1 << 7;			/* set IRF */
1176
        s->data = data;
1177
    }
1178
    pxa2xx_i2c_update(s);
1179

  
1180
    return 1;
1181
}
1182

  
1183
static uint32_t pxa2xx_i2c_read(void *opaque, target_phys_addr_t addr)
1184
{
1185
    struct pxa2xx_i2c_s *s = (struct pxa2xx_i2c_s *) opaque;
1186
    addr -= s->base;
1187

  
1188
    switch (addr) {
1189
    case ICR:
1190
        return s->control;
1191
    case ISR:
1192
        return s->status | (i2c_bus_busy(s->bus) << 2);
1193
    case ISAR:
1194
        return s->slave.address;
1195
    case IDBR:
1196
        return s->data;
1197
    case IBMR:
1198
        if (s->status & (1 << 2))
1199
            s->ibmr ^= 3;	/* Fake SCL and SDA pin changes */
1200
        else
1201
            s->ibmr = 0;
1202
        return s->ibmr;
1203
    default:
1204
        printf("%s: Bad register " REG_FMT "\n", __FUNCTION__, addr);
1205
        break;
1206
    }
1207
    return 0;
1208
}
1209

  
1210
static void pxa2xx_i2c_write(void *opaque, target_phys_addr_t addr,
1211
                uint32_t value)
1212
{
1213
    struct pxa2xx_i2c_s *s = (struct pxa2xx_i2c_s *) opaque;
1214
    int ack;
1215
    addr -= s->base;
1216

  
1217
    switch (addr) {
1218
    case ICR:
1219
        s->control = value & 0xfff7;
1220
        if ((value & (1 << 3)) && (value & (1 << 6))) {	/* TB and IUE */
1221
            /* TODO: slave mode */
1222
            if (value & (1 << 0)) {			/* START condition */
1223
                if (s->data & 1)
1224
                    s->status |= 1 << 0;		/* set RWM */
1225
                else
1226
                    s->status &= ~(1 << 0);		/* clear RWM */
1227
                ack = !i2c_start_transfer(s->bus, s->data >> 1, s->data & 1);
1228
            } else {
1229
                if (s->status & (1 << 0)) {		/* RWM */
1230
                    s->data = i2c_recv(s->bus);
1231
                    if (value & (1 << 2))		/* ACKNAK */
1232
                        i2c_nack(s->bus);
1233
                    ack = 1;
1234
                } else
1235
                    ack = !i2c_send(s->bus, s->data);
1236
            }
1237

  
1238
            if (value & (1 << 1))			/* STOP condition */
1239
                i2c_end_transfer(s->bus);
1240

  
1241
            if (ack) {
1242
                if (value & (1 << 0))			/* START condition */
1243
                    s->status |= 1 << 6;		/* set ITE */
1244
                else
1245
                    if (s->status & (1 << 0))		/* RWM */
1246
                        s->status |= 1 << 7;		/* set IRF */
1247
                    else
1248
                        s->status |= 1 << 6;		/* set ITE */
1249
                s->status &= ~(1 << 1);			/* clear ACKNAK */
1250
            } else {
1251
                s->status |= 1 << 6;			/* set ITE */
1252
                s->status |= 1 << 10;			/* set BED */
1253
                s->status |= 1 << 1;			/* set ACKNAK */
1254
            }
1255
        }
1256
        if (!(value & (1 << 3)) && (value & (1 << 6)))	/* !TB and IUE */
1257
            if (value & (1 << 4))			/* MA */
1258
                i2c_end_transfer(s->bus);
1259
        pxa2xx_i2c_update(s);
1260
        break;
1261

  
1262
    case ISR:
1263
        s->status &= ~(value & 0x07f0);
1264
        pxa2xx_i2c_update(s);
1265
        break;
1266

  
1267
    case ISAR:
1268
        i2c_set_slave_address(&s->slave, value & 0x7f);
1269
        break;
1270

  
1271
    case IDBR:
1272
        s->data = value & 0xff;
1273
        break;
1274

  
1275
    default:
1276
        printf("%s: Bad register " REG_FMT "\n", __FUNCTION__, addr);
1277
    }
1278
}
1279

  
1280
static CPUReadMemoryFunc *pxa2xx_i2c_readfn[] = {
1281
    pxa2xx_i2c_read,
1282
    pxa2xx_i2c_read,
1283
    pxa2xx_i2c_read,
1284
};
1285

  
1286
static CPUWriteMemoryFunc *pxa2xx_i2c_writefn[] = {
1287
    pxa2xx_i2c_write,
1288
    pxa2xx_i2c_write,
1289
    pxa2xx_i2c_write,
1290
};
1291

  
1292
struct pxa2xx_i2c_s *pxa2xx_i2c_init(target_phys_addr_t base,
1293
                qemu_irq irq, int ioregister)
1294
{
1295
    int iomemtype;
1296
    struct pxa2xx_i2c_s *s = (struct pxa2xx_i2c_s *)
1297
            qemu_mallocz(sizeof(struct pxa2xx_i2c_s));
1298

  
1299
    s->base = base;
1300
    s->irq = irq;
1301
    s->slave.event = pxa2xx_i2c_event;
1302
    s->slave.recv = pxa2xx_i2c_rx;
1303
    s->slave.send = pxa2xx_i2c_tx;
1304
    s->bus = i2c_init_bus();
1305

  
1306
    if (ioregister) {
1307
        iomemtype = cpu_register_io_memory(0, pxa2xx_i2c_readfn,
1308
                        pxa2xx_i2c_writefn, s);
1309
        cpu_register_physical_memory(s->base & 0xfffff000, 0xfff, iomemtype);
1310
    }
1311

  
1312
    return s;
1313
}
1314

  
1315
i2c_bus *pxa2xx_i2c_bus(struct pxa2xx_i2c_s *s)
1316
{
1317
    return s->bus;
1318
}
1319

  
1089 1320
/* PXA Inter-IC Sound Controller */
1090 1321
static void pxa2xx_i2s_reset(struct pxa2xx_i2s_s *i2s)
1091 1322
{
......
1544 1775
    s->dma = pxa27x_dma_init(0x40000000, s->pic[PXA2XX_PIC_DMA]);
1545 1776

  
1546 1777
    pxa27x_timer_init(0x40a00000, &s->pic[PXA2XX_PIC_OST_0],
1547
                    s->pic[PXA27X_PIC_OST_4_11], s->env);
1778
                    s->pic[PXA27X_PIC_OST_4_11]);
1548 1779

  
1549 1780
    s->gpio = pxa2xx_gpio_init(0x40e00000, s->env, s->pic, 121);
1550 1781

  
......
1608 1839
    cpu_register_physical_memory(s->rtc_base, 0xfff, iomemtype);
1609 1840
    pxa2xx_rtc_reset(s);
1610 1841

  
1842
    /* Note that PM registers are in the same page with PWRI2C registers.
1843
     * As a workaround we don't map PWRI2C into memory and we expect
1844
     * PM handlers to call PWRI2C handlers when appropriate.  */
1845
    s->i2c[0] = pxa2xx_i2c_init(0x40301600, s->pic[PXA2XX_PIC_I2C], 1);
1846
    s->i2c[1] = pxa2xx_i2c_init(0x40f00100, s->pic[PXA2XX_PIC_PWRI2C], 0);
1847

  
1611 1848
    s->pm_base = 0x40f00000;
1612 1849
    iomemtype = cpu_register_io_memory(0, pxa2xx_pm_readfn,
1613 1850
                    pxa2xx_pm_writefn, s);
......
1643 1880

  
1644 1881
    s->dma = pxa255_dma_init(0x40000000, s->pic[PXA2XX_PIC_DMA]);
1645 1882

  
1646
    pxa25x_timer_init(0x40a00000, &s->pic[PXA2XX_PIC_OST_0], s->env);
1883
    pxa25x_timer_init(0x40a00000, &s->pic[PXA2XX_PIC_OST_0]);
1647 1884

  
1648 1885
    s->gpio = pxa2xx_gpio_init(0x40e00000, s->env, s->pic, 85);
1649 1886

  
......
1707 1944
    cpu_register_physical_memory(s->rtc_base, 0xfff, iomemtype);
1708 1945
    pxa2xx_rtc_reset(s);
1709 1946

  
1947
    /* Note that PM registers are in the same page with PWRI2C registers.
1948
     * As a workaround we don't map PWRI2C into memory and we expect
1949
     * PM handlers to call PWRI2C handlers when appropriate.  */
1950
    s->i2c[0] = pxa2xx_i2c_init(0x40301600, s->pic[PXA2XX_PIC_I2C], 1);
1951
    s->i2c[1] = pxa2xx_i2c_init(0x40f00100, s->pic[PXA2XX_PIC_PWRI2C], 0);
1952

  
1710 1953
    s->pm_base = 0x40f00000;
1711 1954
    iomemtype = cpu_register_io_memory(0, pxa2xx_pm_readfn,
1712 1955
                    pxa2xx_pm_writefn, s);
b/hw/pxa2xx_dma.c
443 443
    s->base = base;
444 444
    s->irq = irq;
445 445
    s->handler = (pxa2xx_dma_handler_t) pxa2xx_dma_request;
446
    s->req = qemu_mallocz(sizeof(int) * PXA2XX_DMA_NUM_REQUESTS);
446
    s->req = qemu_mallocz(sizeof(uint8_t) * PXA2XX_DMA_NUM_REQUESTS);
447 447

  
448 448
    memset(s->chan, 0, sizeof(struct pxa2xx_dma_channel_s) * s->channels);
449 449
    for (i = 0; i < s->channels; i ++)
450 450
        s->chan[i].state = DCSR_STOPINTR;
451 451

  
452
    memset(s->req, 0, sizeof(int) * PXA2XX_DMA_NUM_REQUESTS);
452
    memset(s->req, 0, sizeof(uint8_t) * PXA2XX_DMA_NUM_REQUESTS);
453 453

  
454 454
    iomemtype = cpu_register_io_memory(0, pxa2xx_dma_readfn,
455
                   pxa2xx_dma_writefn, s);
455
                    pxa2xx_dma_writefn, s);
456 456
    cpu_register_physical_memory(base, 0x0000ffff, iomemtype);
457 457

  
458 458
    return s;
b/hw/pxa2xx_lcd.c
793 793
                            dest, src, s->xres, -dest_width);
794 794
            if (addr < start)
795 795
                start = addr;
796
            if (new_addr > end)
797
                end = new_addr;
796
            end = new_addr;
798 797
            if (y < *miny)
799 798
                *miny = y;
800 799
            if (y >= *maxy)
b/hw/pxa2xx_pcmcia.c
171 171
        s->slot.slot_string = "PXA PC Card Socket 0";
172 172
    s->slot.irq = qemu_allocate_irqs(pxa2xx_pcmcia_set_irq, s, 1)[0];
173 173
    pcmcia_socket_register(&s->slot);
174

  
174 175
    return s;
175 176
}
176 177

  
b/hw/pxa2xx_timer.c
75 75
};
76 76

  
77 77
typedef struct {
78
    uint32_t base;
78
    target_phys_addr_t base;
79 79
    int32_t clock;
80 80
    int32_t oldclock;
81 81
    uint64_t lastload;
......
85 85
    uint32_t events;
86 86
    uint32_t irq_enabled;
87 87
    uint32_t reset3;
88
    CPUState *cpustate;
89
    int64_t qemu_ticks;
90 88
    uint32_t snapshot;
91 89
} pxa2xx_timer_info;
92 90

  
......
121 119
        counter = counters[n];
122 120

  
123 121
    if (!s->tm4[counter].freq) {
124
        qemu_del_timer(s->timer[n].qtimer);
122
        qemu_del_timer(s->tm4[n].tm.qtimer);
125 123
        return;
126 124
    }
127 125

  
......
131 129

  
132 130
    new_qemu = now_qemu + muldiv64((uint32_t) (s->tm4[n].tm.value - now_vm),
133 131
                    ticks_per_sec, s->tm4[counter].freq);
134
    qemu_mod_timer(s->timer[n].qtimer, new_qemu);
132
    qemu_mod_timer(s->tm4[n].tm.qtimer, new_qemu);
135 133
}
136 134

  
137 135
static uint32_t pxa2xx_timer_read(void *opaque, target_phys_addr_t offset)
......
350 348
    if (t->num == 3)
351 349
        if (i->reset3 & 1) {
352 350
            i->reset3 = 0;
353
            cpu_reset(i->cpustate);
351
            qemu_system_reset_request();
354 352
        }
355 353
}
356 354

  
......
367 365
}
368 366

  
369 367
static pxa2xx_timer_info *pxa2xx_timer_init(target_phys_addr_t base,
370
                qemu_irq *irqs, CPUState *cpustate)
368
                qemu_irq *irqs)
371 369
{
372 370
    int i;
373 371
    int iomemtype;
......
380 378
    s->clock = 0;
381 379
    s->lastload = qemu_get_clock(vm_clock);
382 380
    s->reset3 = 0;
383
    s->cpustate = cpustate;
384 381

  
385 382
    for (i = 0; i < 4; i ++) {
386 383
        s->timer[i].value = 0;
......
398 395
    return s;
399 396
}
400 397

  
401
void pxa25x_timer_init(target_phys_addr_t base,
402
                qemu_irq *irqs, CPUState *cpustate)
398
void pxa25x_timer_init(target_phys_addr_t base, qemu_irq *irqs)
403 399
{
404
    pxa2xx_timer_info *s = pxa2xx_timer_init(base, irqs, cpustate);
400
    pxa2xx_timer_info *s = pxa2xx_timer_init(base, irqs);
405 401
    s->freq = PXA25X_FREQ;
406 402
    s->tm4 = 0;
407 403
}
408 404

  
409 405
void pxa27x_timer_init(target_phys_addr_t base,
410
                qemu_irq *irqs, qemu_irq irq4, CPUState *cpustate)
406
                qemu_irq *irqs, qemu_irq irq4)
411 407
{
412
    pxa2xx_timer_info *s = pxa2xx_timer_init(base, irqs, cpustate);
408
    pxa2xx_timer_info *s = pxa2xx_timer_init(base, irqs);
413 409
    int i;
414 410
    s->freq = PXA27X_FREQ;
415 411
    s->tm4 = (struct pxa2xx_timer4_s *) qemu_mallocz(8 *
b/hw/smbus.c
193 193
{
194 194
    SMBusDevice *dev;
195 195

  
196
    if (size < sizeof(SMBusDevice))
197
        cpu_abort(cpu_single_env, "SMBus struct too small");
198

  
196 199
    dev = (SMBusDevice *)i2c_slave_init(bus, address, size);
197 200
    dev->i2c.event = smbus_i2c_event;
198 201
    dev->i2c.recv = smbus_i2c_recv;
b/hw/smbus.h
37 37
       (if present).  The device is responsible figuring out what type of
38 38
       command  this is.  */
39 39
    void (*write_data)(SMBusDevice *dev, uint8_t cmd, uint8_t *buf, int len);
40
    /* Likewise we can't distinguish between defferent reads, or even know
40
    /* Likewise we can't distinguish between different reads, or even know
41 41
       the length of the read until the read is complete, so read data a
42 42
       byte at a time.  The device is responsible for adding the length
43 43
       byte on block reads.  */

Also available in: Unified diff