Revision 8da3ff18 hw/omap1.c

b/hw/omap1.c
95 95
struct omap_intr_handler_s {
96 96
    qemu_irq *pins;
97 97
    qemu_irq parent_intr[2];
98
    target_phys_addr_t base;
99 98
    unsigned char nbanks;
100 99
    int level_only;
101 100

  
......
202 201
static uint32_t omap_inth_read(void *opaque, target_phys_addr_t addr)
203 202
{
204 203
    struct omap_intr_handler_s *s = (struct omap_intr_handler_s *) opaque;
205
    int i, offset = addr - s->base;
204
    int i, offset = addr;
206 205
    int bank_no = offset >> 8;
207 206
    int line_no;
208 207
    struct omap_intr_handler_bank_s *bank = &s->bank[bank_no];
......
280 279
                uint32_t value)
281 280
{
282 281
    struct omap_intr_handler_s *s = (struct omap_intr_handler_s *) opaque;
283
    int i, offset = addr - s->base;
282
    int i, offset = addr;
284 283
    int bank_no = offset >> 8;
285 284
    struct omap_intr_handler_bank_s *bank = &s->bank[bank_no];
286 285
    offset &= 0xff;
......
420 419

  
421 420
    s->parent_intr[0] = parent_irq;
422 421
    s->parent_intr[1] = parent_fiq;
423
    s->base = base;
424 422
    s->nbanks = nbanks;
425 423
    s->pins = qemu_allocate_irqs(omap_set_intr, s, nbanks * 32);
426 424
    if (pins)
......
430 428

  
431 429
    iomemtype = cpu_register_io_memory(0, omap_inth_readfn,
432 430
                    omap_inth_writefn, s);
433
    cpu_register_physical_memory(s->base, size, iomemtype);
431
    cpu_register_physical_memory(base, size, iomemtype);
434 432

  
435 433
    return s;
436 434
}
......
438 436
static uint32_t omap2_inth_read(void *opaque, target_phys_addr_t addr)
439 437
{
440 438
    struct omap_intr_handler_s *s = (struct omap_intr_handler_s *) opaque;
441
    int offset = addr - s->base;
439
    int offset = addr;
442 440
    int bank_no, line_no;
443 441
    struct omap_intr_handler_bank_s *bank = 0;
444 442

  
......
516 514
                uint32_t value)
517 515
{
518 516
    struct omap_intr_handler_s *s = (struct omap_intr_handler_s *) opaque;
519
    int offset = addr - s->base;
517
    int offset = addr;
520 518
    int bank_no, line_no;
521 519
    struct omap_intr_handler_bank_s *bank = 0;
522 520

  
......
640 638

  
641 639
    s->parent_intr[0] = parent_irq;
642 640
    s->parent_intr[1] = parent_fiq;
643
    s->base = base;
644 641
    s->nbanks = nbanks;
645 642
    s->level_only = 1;
646 643
    s->pins = qemu_allocate_irqs(omap_set_intr_noedge, s, nbanks * 32);
......
651 648

  
652 649
    iomemtype = cpu_register_io_memory(0, omap2_inth_readfn,
653 650
                    omap2_inth_writefn, s);
654
    cpu_register_physical_memory(s->base, size, iomemtype);
651
    cpu_register_physical_memory(base, size, iomemtype);
655 652

  
656 653
    return s;
657 654
}
......
660 657
struct omap_mpu_timer_s {
661 658
    qemu_irq irq;
662 659
    omap_clk clk;
663
    target_phys_addr_t base;
664 660
    uint32_t val;
665 661
    int64_t time;
666 662
    QEMUTimer *timer;
......
757 753
static uint32_t omap_mpu_timer_read(void *opaque, target_phys_addr_t addr)
758 754
{
759 755
    struct omap_mpu_timer_s *s = (struct omap_mpu_timer_s *) opaque;
760
    int offset = addr - s->base;
761 756

  
762
    switch (offset) {
757
    switch (addr) {
763 758
    case 0x00:	/* CNTL_TIMER */
764 759
        return (s->enable << 5) | (s->ptv << 2) | (s->ar << 1) | s->st;
765 760

  
......
778 773
                uint32_t value)
779 774
{
780 775
    struct omap_mpu_timer_s *s = (struct omap_mpu_timer_s *) opaque;
781
    int offset = addr - s->base;
782 776

  
783
    switch (offset) {
777
    switch (addr) {
784 778
    case 0x00:	/* CNTL_TIMER */
785 779
        omap_timer_sync(s);
786 780
        s->enable = (value >> 5) & 1;
......
836 830

  
837 831
    s->irq = irq;
838 832
    s->clk = clk;
839
    s->base = base;
840 833
    s->timer = qemu_new_timer(vm_clock, omap_timer_tick, s);
841 834
    s->tick = qemu_bh_new(omap_timer_fire, s);
842 835
    omap_mpu_timer_reset(s);
......
844 837

  
845 838
    iomemtype = cpu_register_io_memory(0, omap_mpu_timer_readfn,
846 839
                    omap_mpu_timer_writefn, s);
847
    cpu_register_physical_memory(s->base, 0x100, iomemtype);
840
    cpu_register_physical_memory(base, 0x100, iomemtype);
848 841

  
849 842
    return s;
850 843
}
......
861 854
static uint32_t omap_wd_timer_read(void *opaque, target_phys_addr_t addr)
862 855
{
863 856
    struct omap_watchdog_timer_s *s = (struct omap_watchdog_timer_s *) opaque;
864
    int offset = addr - s->timer.base;
865 857

  
866
    switch (offset) {
858
    switch (addr) {
867 859
    case 0x00:	/* CNTL_TIMER */
868 860
        return (s->timer.ptv << 9) | (s->timer.ar << 8) |
869 861
                (s->timer.st << 7) | (s->free << 1);
......
883 875
                uint32_t value)
884 876
{
885 877
    struct omap_watchdog_timer_s *s = (struct omap_watchdog_timer_s *) opaque;
886
    int offset = addr - s->timer.base;
887 878

  
888
    switch (offset) {
879
    switch (addr) {
889 880
    case 0x00:	/* CNTL_TIMER */
890 881
        omap_timer_sync(&s->timer);
891 882
        s->timer.ptv = (value >> 9) & 7;
......
963 954

  
964 955
    s->timer.irq = irq;
965 956
    s->timer.clk = clk;
966
    s->timer.base = base;
967 957
    s->timer.timer = qemu_new_timer(vm_clock, omap_timer_tick, &s->timer);
968 958
    omap_wd_timer_reset(s);
969 959
    omap_timer_clk_setup(&s->timer);
970 960

  
971 961
    iomemtype = cpu_register_io_memory(0, omap_wd_timer_readfn,
972 962
                    omap_wd_timer_writefn, s);
973
    cpu_register_physical_memory(s->timer.base, 0x100, iomemtype);
963
    cpu_register_physical_memory(base, 0x100, iomemtype);
974 964

  
975 965
    return s;
976 966
}
......
1066 1056

  
1067 1057
    s->timer.irq = irq;
1068 1058
    s->timer.clk = clk;
1069
    s->timer.base = base;
1070 1059
    s->timer.timer = qemu_new_timer(vm_clock, omap_timer_tick, &s->timer);
1071 1060
    omap_os_timer_reset(s);
1072 1061
    omap_timer_clk_setup(&s->timer);
1073 1062

  
1074 1063
    iomemtype = cpu_register_io_memory(0, omap_os_timer_readfn,
1075 1064
                    omap_os_timer_writefn, s);
1076
    cpu_register_physical_memory(s->timer.base, 0x800, iomemtype);
1065
    cpu_register_physical_memory(base, 0x800, iomemtype);
1077 1066

  
1078 1067
    return s;
1079 1068
}
......
1082 1071
static uint32_t omap_ulpd_pm_read(void *opaque, target_phys_addr_t addr)
1083 1072
{
1084 1073
    struct omap_mpu_state_s *s = (struct omap_mpu_state_s *) opaque;
1085
    int offset = addr - s->ulpd_pm_base;
1086 1074
    uint16_t ret;
1087 1075

  
1088
    switch (offset) {
1076
    switch (addr) {
1089 1077
    case 0x14:	/* IT_STATUS */
1090
        ret = s->ulpd_pm_regs[offset >> 2];
1091
        s->ulpd_pm_regs[offset >> 2] = 0;
1078
        ret = s->ulpd_pm_regs[addr >> 2];
1079
        s->ulpd_pm_regs[addr >> 2] = 0;
1092 1080
        qemu_irq_lower(s->irq[1][OMAP_INT_GAUGE_32K]);
1093 1081
        return ret;
1094 1082

  
......
1113 1101
    case 0x48:	/* LOCL_TIME */
1114 1102
    case 0x4c:	/* APLL_CTRL */
1115 1103
    case 0x50:	/* POWER_CTRL */
1116
        return s->ulpd_pm_regs[offset >> 2];
1104
        return s->ulpd_pm_regs[addr >> 2];
1117 1105
    }
1118 1106

  
1119 1107
    OMAP_BAD_REG(addr);
......
1146 1134
                uint32_t value)
1147 1135
{
1148 1136
    struct omap_mpu_state_s *s = (struct omap_mpu_state_s *) opaque;
1149
    int offset = addr - s->ulpd_pm_base;
1150 1137
    int64_t now, ticks;
1151 1138
    int div, mult;
1152 1139
    static const int bypass_div[4] = { 1, 2, 4, 4 };
1153 1140
    uint16_t diff;
1154 1141

  
1155
    switch (offset) {
1142
    switch (addr) {
1156 1143
    case 0x00:	/* COUNTER_32_LSB */
1157 1144
    case 0x04:	/* COUNTER_32_MSB */
1158 1145
    case 0x08:	/* COUNTER_HIGH_FREQ_LSB */
......
1164 1151

  
1165 1152
    case 0x10:	/* GAUGING_CTRL */
1166 1153
        /* Bits 0 and 1 seem to be confused in the OMAP 310 TRM */
1167
        if ((s->ulpd_pm_regs[offset >> 2] ^ value) & 1) {
1154
        if ((s->ulpd_pm_regs[addr >> 2] ^ value) & 1) {
1168 1155
            now = qemu_get_clock(vm_clock);
1169 1156

  
1170 1157
            if (value & 1)
......
1190 1177
                qemu_irq_raise(s->irq[1][OMAP_INT_GAUGE_32K]);
1191 1178
            }
1192 1179
        }
1193
        s->ulpd_pm_regs[offset >> 2] = value;
1180
        s->ulpd_pm_regs[addr >> 2] = value;
1194 1181
        break;
1195 1182

  
1196 1183
    case 0x18:	/* Reserved */
......
1203 1190
    case 0x38:	/* COUNTER_32_FIQ */
1204 1191
    case 0x48:	/* LOCL_TIME */
1205 1192
    case 0x50:	/* POWER_CTRL */
1206
        s->ulpd_pm_regs[offset >> 2] = value;
1193
        s->ulpd_pm_regs[addr >> 2] = value;
1207 1194
        break;
1208 1195

  
1209 1196
    case 0x30:	/* CLOCK_CTRL */
1210
        diff = s->ulpd_pm_regs[offset >> 2] ^ value;
1211
        s->ulpd_pm_regs[offset >> 2] = value & 0x3f;
1197
        diff = s->ulpd_pm_regs[addr >> 2] ^ value;
1198
        s->ulpd_pm_regs[addr >> 2] = value & 0x3f;
1212 1199
        omap_ulpd_clk_update(s, diff, value);
1213 1200
        break;
1214 1201

  
1215 1202
    case 0x34:	/* SOFT_REQ */
1216
        diff = s->ulpd_pm_regs[offset >> 2] ^ value;
1217
        s->ulpd_pm_regs[offset >> 2] = value & 0x1f;
1203
        diff = s->ulpd_pm_regs[addr >> 2] ^ value;
1204
        s->ulpd_pm_regs[addr >> 2] = value & 0x1f;
1218 1205
        omap_ulpd_req_update(s, diff, value);
1219 1206
        break;
1220 1207

  
......
1223 1210
         * omitted altogether, probably a typo.  */
1224 1211
        /* This register has identical semantics with DPLL(1:3) control
1225 1212
         * registers, see omap_dpll_write() */
1226
        diff = s->ulpd_pm_regs[offset >> 2] & value;
1227
        s->ulpd_pm_regs[offset >> 2] = value & 0x2fff;
1213
        diff = s->ulpd_pm_regs[addr >> 2] & value;
1214
        s->ulpd_pm_regs[addr >> 2] = value & 0x2fff;
1228 1215
        if (diff & (0x3ff << 2)) {
1229 1216
            if (value & (1 << 4)) {			/* PLL_ENABLE */
1230 1217
                div = ((value >> 5) & 3) + 1;		/* PLL_DIV */
......
1237 1224
        }
1238 1225

  
1239 1226
        /* Enter the desired mode.  */
1240
        s->ulpd_pm_regs[offset >> 2] =
1241
                (s->ulpd_pm_regs[offset >> 2] & 0xfffe) |
1242
                ((s->ulpd_pm_regs[offset >> 2] >> 4) & 1);
1227
        s->ulpd_pm_regs[addr >> 2] =
1228
                (s->ulpd_pm_regs[addr >> 2] & 0xfffe) |
1229
                ((s->ulpd_pm_regs[addr >> 2] >> 4) & 1);
1243 1230

  
1244 1231
        /* Act as if the lock is restored.  */
1245
        s->ulpd_pm_regs[offset >> 2] |= 2;
1232
        s->ulpd_pm_regs[addr >> 2] |= 2;
1246 1233
        break;
1247 1234

  
1248 1235
    case 0x4c:	/* APLL_CTRL */
1249
        diff = s->ulpd_pm_regs[offset >> 2] & value;
1250
        s->ulpd_pm_regs[offset >> 2] = value & 0xf;
1236
        diff = s->ulpd_pm_regs[addr >> 2] & value;
1237
        s->ulpd_pm_regs[addr >> 2] = value & 0xf;
1251 1238
        if (diff & (1 << 0))				/* APLL_NDPLL_SWITCH */
1252 1239
            omap_clk_reparent(omap_findclk(s, "ck_48m"), omap_findclk(s,
1253 1240
                                    (value & (1 << 0)) ? "apll" : "dpll4"));
......
1303 1290
    int iomemtype = cpu_register_io_memory(0, omap_ulpd_pm_readfn,
1304 1291
                    omap_ulpd_pm_writefn, mpu);
1305 1292

  
1306
    mpu->ulpd_pm_base = base;
1307
    cpu_register_physical_memory(mpu->ulpd_pm_base, 0x800, iomemtype);
1293
    cpu_register_physical_memory(base, 0x800, iomemtype);
1308 1294
    omap_ulpd_pm_reset(mpu);
1309 1295
}
1310 1296

  
......
1312 1298
static uint32_t omap_pin_cfg_read(void *opaque, target_phys_addr_t addr)
1313 1299
{
1314 1300
    struct omap_mpu_state_s *s = (struct omap_mpu_state_s *) opaque;
1315
    int offset = addr - s->pin_cfg_base;
1316 1301

  
1317
    switch (offset) {
1302
    switch (addr) {
1318 1303
    case 0x00:	/* FUNC_MUX_CTRL_0 */
1319 1304
    case 0x04:	/* FUNC_MUX_CTRL_1 */
1320 1305
    case 0x08:	/* FUNC_MUX_CTRL_2 */
1321
        return s->func_mux_ctrl[offset >> 2];
1306
        return s->func_mux_ctrl[addr >> 2];
1322 1307

  
1323 1308
    case 0x0c:	/* COMP_MODE_CTRL_0 */
1324 1309
        return s->comp_mode_ctrl[0];
......
1334 1319
    case 0x30:	/* FUNC_MUX_CTRL_B */
1335 1320
    case 0x34:	/* FUNC_MUX_CTRL_C */
1336 1321
    case 0x38:	/* FUNC_MUX_CTRL_D */
1337
        return s->func_mux_ctrl[(offset >> 2) - 1];
1322
        return s->func_mux_ctrl[(addr >> 2) - 1];
1338 1323

  
1339 1324
    case 0x40:	/* PULL_DWN_CTRL_0 */
1340 1325
    case 0x44:	/* PULL_DWN_CTRL_1 */
1341 1326
    case 0x48:	/* PULL_DWN_CTRL_2 */
1342 1327
    case 0x4c:	/* PULL_DWN_CTRL_3 */
1343
        return s->pull_dwn_ctrl[(offset & 0xf) >> 2];
1328
        return s->pull_dwn_ctrl[(addr & 0xf) >> 2];
1344 1329

  
1345 1330
    case 0x50:	/* GATE_INH_CTRL_0 */
1346 1331
        return s->gate_inh_ctrl[0];
......
1416 1401
                uint32_t value)
1417 1402
{
1418 1403
    struct omap_mpu_state_s *s = (struct omap_mpu_state_s *) opaque;
1419
    int offset = addr - s->pin_cfg_base;
1420 1404
    uint32_t diff;
1421 1405

  
1422
    switch (offset) {
1406
    switch (addr) {
1423 1407
    case 0x00:	/* FUNC_MUX_CTRL_0 */
1424
        diff = s->func_mux_ctrl[offset >> 2] ^ value;
1425
        s->func_mux_ctrl[offset >> 2] = value;
1408
        diff = s->func_mux_ctrl[addr >> 2] ^ value;
1409
        s->func_mux_ctrl[addr >> 2] = value;
1426 1410
        omap_pin_funcmux0_update(s, diff, value);
1427 1411
        return;
1428 1412

  
1429 1413
    case 0x04:	/* FUNC_MUX_CTRL_1 */
1430
        diff = s->func_mux_ctrl[offset >> 2] ^ value;
1431
        s->func_mux_ctrl[offset >> 2] = value;
1414
        diff = s->func_mux_ctrl[addr >> 2] ^ value;
1415
        s->func_mux_ctrl[addr >> 2] = value;
1432 1416
        omap_pin_funcmux1_update(s, diff, value);
1433 1417
        return;
1434 1418

  
1435 1419
    case 0x08:	/* FUNC_MUX_CTRL_2 */
1436
        s->func_mux_ctrl[offset >> 2] = value;
1420
        s->func_mux_ctrl[addr >> 2] = value;
1437 1421
        return;
1438 1422

  
1439 1423
    case 0x0c:	/* COMP_MODE_CTRL_0 */
......
1454 1438
    case 0x30:	/* FUNC_MUX_CTRL_B */
1455 1439
    case 0x34:	/* FUNC_MUX_CTRL_C */
1456 1440
    case 0x38:	/* FUNC_MUX_CTRL_D */
1457
        s->func_mux_ctrl[(offset >> 2) - 1] = value;
1441
        s->func_mux_ctrl[(addr >> 2) - 1] = value;
1458 1442
        return;
1459 1443

  
1460 1444
    case 0x40:	/* PULL_DWN_CTRL_0 */
1461 1445
    case 0x44:	/* PULL_DWN_CTRL_1 */
1462 1446
    case 0x48:	/* PULL_DWN_CTRL_2 */
1463 1447
    case 0x4c:	/* PULL_DWN_CTRL_3 */
1464
        s->pull_dwn_ctrl[(offset & 0xf) >> 2] = value;
1448
        s->pull_dwn_ctrl[(addr & 0xf) >> 2] = value;
1465 1449
        return;
1466 1450

  
1467 1451
    case 0x50:	/* GATE_INH_CTRL_0 */
......
1521 1505
    int iomemtype = cpu_register_io_memory(0, omap_pin_cfg_readfn,
1522 1506
                    omap_pin_cfg_writefn, mpu);
1523 1507

  
1524
    mpu->pin_cfg_base = base;
1525
    cpu_register_physical_memory(mpu->pin_cfg_base, 0x800, iomemtype);
1508
    cpu_register_physical_memory(base, 0x800, iomemtype);
1526 1509
    omap_pin_cfg_reset(mpu);
1527 1510
}
1528 1511

  
......
1591 1574
{
1592 1575
    int iomemtype = cpu_register_io_memory(0, omap_id_readfn,
1593 1576
                    omap_id_writefn, mpu);
1594
    cpu_register_physical_memory(0xfffe1800, 0x800, iomemtype);
1595
    cpu_register_physical_memory(0xfffed400, 0x100, iomemtype);
1577
    cpu_register_physical_memory_offset(0xfffe1800, 0x800, iomemtype, 0xfffe1800);
1578
    cpu_register_physical_memory_offset(0xfffed400, 0x100, iomemtype, 0xfffed400);
1596 1579
    if (!cpu_is_omap15xx(mpu))
1597
        cpu_register_physical_memory(0xfffe2000, 0x800, iomemtype);
1580
        cpu_register_physical_memory_offset(0xfffe2000, 0x800, iomemtype, 0xfffe2000);
1598 1581
}
1599 1582

  
1600 1583
/* MPUI Control (Dummy) */
1601 1584
static uint32_t omap_mpui_read(void *opaque, target_phys_addr_t addr)
1602 1585
{
1603 1586
    struct omap_mpu_state_s *s = (struct omap_mpu_state_s *) opaque;
1604
    int offset = addr - s->mpui_base;
1605 1587

  
1606
    switch (offset) {
1588
    switch (addr) {
1607 1589
    case 0x00:	/* CTRL */
1608 1590
        return s->mpui_ctrl;
1609 1591
    case 0x04:	/* DEBUG_ADDR */
......
1631 1613
                uint32_t value)
1632 1614
{
1633 1615
    struct omap_mpu_state_s *s = (struct omap_mpu_state_s *) opaque;
1634
    int offset = addr - s->mpui_base;
1635 1616

  
1636
    switch (offset) {
1617
    switch (addr) {
1637 1618
    case 0x00:	/* CTRL */
1638 1619
        s->mpui_ctrl = value & 0x007fffff;
1639 1620
        break;
......
1677 1658
    int iomemtype = cpu_register_io_memory(0, omap_mpui_readfn,
1678 1659
                    omap_mpui_writefn, mpu);
1679 1660

  
1680
    mpu->mpui_base = base;
1681
    cpu_register_physical_memory(mpu->mpui_base, 0x100, iomemtype);
1661
    cpu_register_physical_memory(base, 0x100, iomemtype);
1682 1662

  
1683 1663
    omap_mpui_reset(mpu);
1684 1664
}
1685 1665

  
1686 1666
/* TIPB Bridges */
1687 1667
struct omap_tipb_bridge_s {
1688
    target_phys_addr_t base;
1689 1668
    qemu_irq abort;
1690 1669

  
1691 1670
    int width_intr;
......
1698 1677
static uint32_t omap_tipb_bridge_read(void *opaque, target_phys_addr_t addr)
1699 1678
{
1700 1679
    struct omap_tipb_bridge_s *s = (struct omap_tipb_bridge_s *) opaque;
1701
    int offset = addr - s->base;
1702 1680

  
1703
    switch (offset) {
1681
    switch (addr) {
1704 1682
    case 0x00:	/* TIPB_CNTL */
1705 1683
        return s->control;
1706 1684
    case 0x04:	/* TIPB_BUS_ALLOC */
......
1725 1703
                uint32_t value)
1726 1704
{
1727 1705
    struct omap_tipb_bridge_s *s = (struct omap_tipb_bridge_s *) opaque;
1728
    int offset = addr - s->base;
1729 1706

  
1730
    switch (offset) {
1707
    switch (addr) {
1731 1708
    case 0x00:	/* TIPB_CNTL */
1732 1709
        s->control = value & 0xffff;
1733 1710
        break;
......
1785 1762
            qemu_mallocz(sizeof(struct omap_tipb_bridge_s));
1786 1763

  
1787 1764
    s->abort = abort_irq;
1788
    s->base = base;
1789 1765
    omap_tipb_bridge_reset(s);
1790 1766

  
1791 1767
    iomemtype = cpu_register_io_memory(0, omap_tipb_bridge_readfn,
1792 1768
                    omap_tipb_bridge_writefn, s);
1793
    cpu_register_physical_memory(s->base, 0x100, iomemtype);
1769
    cpu_register_physical_memory(base, 0x100, iomemtype);
1794 1770

  
1795 1771
    return s;
1796 1772
}
......
1799 1775
static uint32_t omap_tcmi_read(void *opaque, target_phys_addr_t addr)
1800 1776
{
1801 1777
    struct omap_mpu_state_s *s = (struct omap_mpu_state_s *) opaque;
1802
    int offset = addr - s->tcmi_base;
1803 1778
    uint32_t ret;
1804 1779

  
1805
    switch (offset) {
1780
    switch (addr) {
1806 1781
    case 0x00:	/* IMIF_PRIO */
1807 1782
    case 0x04:	/* EMIFS_PRIO */
1808 1783
    case 0x08:	/* EMIFF_PRIO */
......
1817 1792
    case 0x30:	/* TIMEOUT3 */
1818 1793
    case 0x3c:	/* EMIFF_SDRAM_CONFIG_2 */
1819 1794
    case 0x40:	/* EMIFS_CFG_DYN_WAIT */
1820
        return s->tcmi_regs[offset >> 2];
1795
        return s->tcmi_regs[addr >> 2];
1821 1796

  
1822 1797
    case 0x20:	/* EMIFF_SDRAM_CONFIG */
1823
        ret = s->tcmi_regs[offset >> 2];
1824
        s->tcmi_regs[offset >> 2] &= ~1; /* XXX: Clear SLRF on SDRAM access */
1798
        ret = s->tcmi_regs[addr >> 2];
1799
        s->tcmi_regs[addr >> 2] &= ~1; /* XXX: Clear SLRF on SDRAM access */
1825 1800
        /* XXX: We can try using the VGA_DIRTY flag for this */
1826 1801
        return ret;
1827 1802
    }
......
1834 1809
                uint32_t value)
1835 1810
{
1836 1811
    struct omap_mpu_state_s *s = (struct omap_mpu_state_s *) opaque;
1837
    int offset = addr - s->tcmi_base;
1838 1812

  
1839
    switch (offset) {
1813
    switch (addr) {
1840 1814
    case 0x00:	/* IMIF_PRIO */
1841 1815
    case 0x04:	/* EMIFS_PRIO */
1842 1816
    case 0x08:	/* EMIFF_PRIO */
......
1851 1825
    case 0x30:	/* TIMEOUT3 */
1852 1826
    case 0x3c:	/* EMIFF_SDRAM_CONFIG_2 */
1853 1827
    case 0x40:	/* EMIFS_CFG_DYN_WAIT */
1854
        s->tcmi_regs[offset >> 2] = value;
1828
        s->tcmi_regs[addr >> 2] = value;
1855 1829
        break;
1856 1830
    case 0x0c:	/* EMIFS_CONFIG */
1857
        s->tcmi_regs[offset >> 2] = (value & 0xf) | (1 << 4);
1831
        s->tcmi_regs[addr >> 2] = (value & 0xf) | (1 << 4);
1858 1832
        break;
1859 1833

  
1860 1834
    default:
......
1899 1873
    int iomemtype = cpu_register_io_memory(0, omap_tcmi_readfn,
1900 1874
                    omap_tcmi_writefn, mpu);
1901 1875

  
1902
    mpu->tcmi_base = base;
1903
    cpu_register_physical_memory(mpu->tcmi_base, 0x100, iomemtype);
1876
    cpu_register_physical_memory(base, 0x100, iomemtype);
1904 1877
    omap_tcmi_reset(mpu);
1905 1878
}
1906 1879

  
......
1908 1881
static uint32_t omap_dpll_read(void *opaque, target_phys_addr_t addr)
1909 1882
{
1910 1883
    struct dpll_ctl_s *s = (struct dpll_ctl_s *) opaque;
1911
    int offset = addr - s->base;
1912 1884

  
1913
    if (offset == 0x00)	/* CTL_REG */
1885
    if (addr == 0x00)	/* CTL_REG */
1914 1886
        return s->mode;
1915 1887

  
1916 1888
    OMAP_BAD_REG(addr);
......
1922 1894
{
1923 1895
    struct dpll_ctl_s *s = (struct dpll_ctl_s *) opaque;
1924 1896
    uint16_t diff;
1925
    int offset = addr - s->base;
1926 1897
    static const int bypass_div[4] = { 1, 2, 4, 4 };
1927 1898
    int div, mult;
1928 1899

  
1929
    if (offset == 0x00) {	/* CTL_REG */
1900
    if (addr == 0x00) {	/* CTL_REG */
1930 1901
        /* See omap_ulpd_pm_write() too */
1931 1902
        diff = s->mode & value;
1932 1903
        s->mode = value & 0x2fff;
......
1975 1946
    int iomemtype = cpu_register_io_memory(0, omap_dpll_readfn,
1976 1947
                    omap_dpll_writefn, s);
1977 1948

  
1978
    s->base = base;
1979 1949
    s->dpll = clk;
1980 1950
    omap_dpll_reset(s);
1981 1951

  
1982
    cpu_register_physical_memory(s->base, 0x100, iomemtype);
1952
    cpu_register_physical_memory(base, 0x100, iomemtype);
1983 1953
}
1984 1954

  
1985 1955
/* UARTs */
1986 1956
struct omap_uart_s {
1957
    target_phys_addr_t base;
1987 1958
    SerialState *serial; /* TODO */
1988 1959
    struct omap_target_agent_s *ta;
1989
    target_phys_addr_t base;
1990 1960
    omap_clk fclk;
1991 1961
    qemu_irq irq;
1992 1962

  
......
2025 1995
static uint32_t omap_uart_read(void *opaque, target_phys_addr_t addr)
2026 1996
{
2027 1997
    struct omap_uart_s *s = (struct omap_uart_s *) opaque;
2028
    int offset = addr - s->base;
2029 1998

  
2030
    switch (offset) {
1999
    addr &= 0xff;
2000
    switch (addr) {
2031 2001
    case 0x20:	/* MDR1 */
2032 2002
        return s->mdr[0];
2033 2003
    case 0x24:	/* MDR2 */
......
2058 2028
                uint32_t value)
2059 2029
{
2060 2030
    struct omap_uart_s *s = (struct omap_uart_s *) opaque;
2061
    int offset = addr - s->base;
2062 2031

  
2063
    switch (offset) {
2032
    addr &= 0xff;
2033
    switch (addr) {
2064 2034
    case 0x20:	/* MDR1 */
2065 2035
        s->mdr[0] = value & 0x7f;
2066 2036
        break;
......
2118 2088

  
2119 2089
    s->ta = ta;
2120 2090

  
2121
    cpu_register_physical_memory(s->base + 0x20, 0x100, iomemtype);
2091
    cpu_register_physical_memory(base + 0x20, 0x100, iomemtype);
2122 2092

  
2123 2093
    return s;
2124 2094
}
......
2135 2105
static uint32_t omap_clkm_read(void *opaque, target_phys_addr_t addr)
2136 2106
{
2137 2107
    struct omap_mpu_state_s *s = (struct omap_mpu_state_s *) opaque;
2138
    int offset = addr - s->clkm.mpu_base;
2139 2108

  
2140
    switch (offset) {
2109
    switch (addr) {
2141 2110
    case 0x00:	/* ARM_CKCTL */
2142 2111
        return s->clkm.arm_ckctl;
2143 2112

  
......
2333 2302
                uint32_t value)
2334 2303
{
2335 2304
    struct omap_mpu_state_s *s = (struct omap_mpu_state_s *) opaque;
2336
    int offset = addr - s->clkm.mpu_base;
2337 2305
    uint16_t diff;
2338 2306
    omap_clk clk;
2339 2307
    static const char *clkschemename[8] = {
......
2341 2309
        "mix mode 1", "mix mode 2", "bypass mode", "mix mode 3", "mix mode 4",
2342 2310
    };
2343 2311

  
2344
    switch (offset) {
2312
    switch (addr) {
2345 2313
    case 0x00:	/* ARM_CKCTL */
2346 2314
        diff = s->clkm.arm_ckctl ^ value;
2347 2315
        s->clkm.arm_ckctl = value & 0x7fff;
......
2423 2391
static uint32_t omap_clkdsp_read(void *opaque, target_phys_addr_t addr)
2424 2392
{
2425 2393
    struct omap_mpu_state_s *s = (struct omap_mpu_state_s *) opaque;
2426
    int offset = addr - s->clkm.dsp_base;
2427 2394

  
2428
    switch (offset) {
2395
    switch (addr) {
2429 2396
    case 0x04:	/* DSP_IDLECT1 */
2430 2397
        return s->clkm.dsp_idlect1;
2431 2398

  
......
2464 2431
                uint32_t value)
2465 2432
{
2466 2433
    struct omap_mpu_state_s *s = (struct omap_mpu_state_s *) opaque;
2467
    int offset = addr - s->clkm.dsp_base;
2468 2434
    uint16_t diff;
2469 2435

  
2470
    switch (offset) {
2436
    switch (addr) {
2471 2437
    case 0x04:	/* DSP_IDLECT1 */
2472 2438
        diff = s->clkm.dsp_idlect1 ^ value;
2473 2439
        s->clkm.dsp_idlect1 = value & 0x01f7;
......
2536 2502
        cpu_register_io_memory(0, omap_clkdsp_readfn, omap_clkdsp_writefn, s),
2537 2503
    };
2538 2504

  
2539
    s->clkm.mpu_base = mpu_base;
2540
    s->clkm.dsp_base = dsp_base;
2541 2505
    s->clkm.arm_idlect1 = 0x03ff;
2542 2506
    s->clkm.arm_idlect2 = 0x0100;
2543 2507
    s->clkm.dsp_idlect1 = 0x0002;
2544 2508
    omap_clkm_reset(s);
2545 2509
    s->clkm.cold_start = 0x3a;
2546 2510

  
2547
    cpu_register_physical_memory(s->clkm.mpu_base, 0x100, iomemtype[0]);
2548
    cpu_register_physical_memory(s->clkm.dsp_base, 0x1000, iomemtype[1]);
2511
    cpu_register_physical_memory(mpu_base, 0x100, iomemtype[0]);
2512
    cpu_register_physical_memory(dsp_base, 0x1000, iomemtype[1]);
2549 2513
}
2550 2514

  
2551 2515
/* MPU I/O */
2552 2516
struct omap_mpuio_s {
2553
    target_phys_addr_t base;
2554 2517
    qemu_irq irq;
2555 2518
    qemu_irq kbd_irq;
2556 2519
    qemu_irq *in;
......
2783 2746
    struct omap_mpuio_s *s = (struct omap_mpuio_s *)
2784 2747
            qemu_mallocz(sizeof(struct omap_mpuio_s));
2785 2748

  
2786
    s->base = base;
2787 2749
    s->irq = gpio_int;
2788 2750
    s->kbd_irq = kbd_int;
2789 2751
    s->wakeup = wakeup;
......
2792 2754

  
2793 2755
    iomemtype = cpu_register_io_memory(0, omap_mpuio_readfn,
2794 2756
                    omap_mpuio_writefn, s);
2795
    cpu_register_physical_memory(s->base, 0x800, iomemtype);
2757
    cpu_register_physical_memory(base, 0x800, iomemtype);
2796 2758

  
2797 2759
    omap_clk_adduser(clk, qemu_allocate_irqs(omap_mpuio_onoff, s, 1)[0]);
2798 2760

  
......
2827 2789

  
2828 2790
/* General-Purpose I/O */
2829 2791
struct omap_gpio_s {
2830
    target_phys_addr_t base;
2831 2792
    qemu_irq irq;
2832 2793
    qemu_irq *in;
2833 2794
    qemu_irq handler[16];
......
2984 2945
    struct omap_gpio_s *s = (struct omap_gpio_s *)
2985 2946
            qemu_mallocz(sizeof(struct omap_gpio_s));
2986 2947

  
2987
    s->base = base;
2988 2948
    s->irq = irq;
2989 2949
    s->in = qemu_allocate_irqs(omap_gpio_set, s, 16);
2990 2950
    omap_gpio_reset(s);
2991 2951

  
2992 2952
    iomemtype = cpu_register_io_memory(0, omap_gpio_readfn,
2993 2953
                    omap_gpio_writefn, s);
2994
    cpu_register_physical_memory(s->base, 0x1000, iomemtype);
2954
    cpu_register_physical_memory(base, 0x1000, iomemtype);
2995 2955

  
2996 2956
    return s;
2997 2957
}
......
3010 2970

  
3011 2971
/* MicroWire Interface */
3012 2972
struct omap_uwire_s {
3013
    target_phys_addr_t base;
3014 2973
    qemu_irq txirq;
3015 2974
    qemu_irq rxirq;
3016 2975
    qemu_irq txdrq;
......
3155 3114
    struct omap_uwire_s *s = (struct omap_uwire_s *)
3156 3115
            qemu_mallocz(sizeof(struct omap_uwire_s));
3157 3116

  
3158
    s->base = base;
3159 3117
    s->txirq = irq[0];
3160 3118
    s->rxirq = irq[1];
3161 3119
    s->txdrq = dma;
......
3163 3121

  
3164 3122
    iomemtype = cpu_register_io_memory(0, omap_uwire_readfn,
3165 3123
                    omap_uwire_writefn, s);
3166
    cpu_register_physical_memory(s->base, 0x800, iomemtype);
3124
    cpu_register_physical_memory(base, 0x800, iomemtype);
3167 3125

  
3168 3126
    return s;
3169 3127
}
......
3364 3322

  
3365 3323
/* Real-time Clock module */
3366 3324
struct omap_rtc_s {
3367
    target_phys_addr_t base;
3368 3325
    qemu_irq irq;
3369 3326
    qemu_irq alarm;
3370 3327
    QEMUTimer *clk;
......
3775 3732
    struct omap_rtc_s *s = (struct omap_rtc_s *)
3776 3733
            qemu_mallocz(sizeof(struct omap_rtc_s));
3777 3734

  
3778
    s->base = base;
3779 3735
    s->irq = irq[0];
3780 3736
    s->alarm = irq[1];
3781 3737
    s->clk = qemu_new_timer(rt_clock, omap_rtc_tick, s);
......
3784 3740

  
3785 3741
    iomemtype = cpu_register_io_memory(0, omap_rtc_readfn,
3786 3742
                    omap_rtc_writefn, s);
3787
    cpu_register_physical_memory(s->base, 0x800, iomemtype);
3743
    cpu_register_physical_memory(base, 0x800, iomemtype);
3788 3744

  
3789 3745
    return s;
3790 3746
}
3791 3747

  
3792 3748
/* Multi-channel Buffered Serial Port interfaces */
3793 3749
struct omap_mcbsp_s {
3794
    target_phys_addr_t base;
3795 3750
    qemu_irq txirq;
3796 3751
    qemu_irq rxirq;
3797 3752
    qemu_irq txdrq;
......
4295 4250
    struct omap_mcbsp_s *s = (struct omap_mcbsp_s *)
4296 4251
            qemu_mallocz(sizeof(struct omap_mcbsp_s));
4297 4252

  
4298
    s->base = base;
4299 4253
    s->txirq = irq[0];
4300 4254
    s->rxirq = irq[1];
4301 4255
    s->txdrq = dma[0];
......
4306 4260

  
4307 4261
    iomemtype = cpu_register_io_memory(0, omap_mcbsp_readfn,
4308 4262
                    omap_mcbsp_writefn, s);
4309
    cpu_register_physical_memory(s->base, 0x800, iomemtype);
4263
    cpu_register_physical_memory(base, 0x800, iomemtype);
4310 4264

  
4311 4265
    return s;
4312 4266
}
......
4340 4294

  
4341 4295
/* LED Pulse Generators */
4342 4296
struct omap_lpg_s {
4343
    target_phys_addr_t base;
4344 4297
    QEMUTimer *tm;
4345 4298

  
4346 4299
    uint8_t control;
......
4473 4426
    struct omap_lpg_s *s = (struct omap_lpg_s *)
4474 4427
            qemu_mallocz(sizeof(struct omap_lpg_s));
4475 4428

  
4476
    s->base = base;
4477 4429
    s->tm = qemu_new_timer(rt_clock, omap_lpg_tick, s);
4478 4430

  
4479 4431
    omap_lpg_reset(s);
4480 4432

  
4481 4433
    iomemtype = cpu_register_io_memory(0, omap_lpg_readfn,
4482 4434
                    omap_lpg_writefn, s);
4483
    cpu_register_physical_memory(s->base, 0x800, iomemtype);
4435
    cpu_register_physical_memory(base, 0x800, iomemtype);
4484 4436

  
4485 4437
    omap_clk_adduser(clk, qemu_allocate_irqs(omap_lpg_clk_update, s, 1)[0]);
4486 4438

  

Also available in: Unified diff