Statistics
| Branch: | Revision:

root / hw / omap_tap.c @ 8e9f18b6

History | View | Annotate | Download (3.4 kB)

1 cc9577cf cmchao
/*
2 cc9577cf cmchao
 * TI OMAP TEST-Chip-level TAP emulation.
3 cc9577cf cmchao
 *
4 cc9577cf cmchao
 * Copyright (C) 2007-2008 Nokia Corporation
5 cc9577cf cmchao
 * Written by Andrzej Zaborowski <andrew@openedhand.com>
6 cc9577cf cmchao
 *
7 cc9577cf cmchao
 * This program is free software; you can redistribute it and/or
8 cc9577cf cmchao
 * modify it under the terms of the GNU General Public License as
9 cc9577cf cmchao
 * published by the Free Software Foundation; either version 2 or
10 cc9577cf cmchao
 * (at your option) any later version of the License.
11 cc9577cf cmchao
 *
12 cc9577cf cmchao
 * This program is distributed in the hope that it will be useful,
13 cc9577cf cmchao
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 cc9577cf cmchao
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 cc9577cf cmchao
 * GNU General Public License for more details.
16 cc9577cf cmchao
 *
17 cc9577cf cmchao
 * You should have received a copy of the GNU General Public License along
18 cc9577cf cmchao
 * with this program; if not, see <http://www.gnu.org/licenses/>.
19 cc9577cf cmchao
 */
20 cc9577cf cmchao
21 cc9577cf cmchao
#include "hw.h"
22 cc9577cf cmchao
#include "omap.h"
23 cc9577cf cmchao
24 cc9577cf cmchao
/* TEST-Chip-level TAP */
25 0a9ee1a7 Avi Kivity
static uint64_t omap_tap_read(void *opaque, target_phys_addr_t addr,
26 0a9ee1a7 Avi Kivity
                              unsigned size)
27 cc9577cf cmchao
{
28 cc9577cf cmchao
    struct omap_mpu_state_s *s = (struct omap_mpu_state_s *) opaque;
29 cc9577cf cmchao
30 0a9ee1a7 Avi Kivity
    if (size != 4) {
31 0a9ee1a7 Avi Kivity
        return omap_badwidth_read32(opaque, addr);
32 0a9ee1a7 Avi Kivity
    }
33 0a9ee1a7 Avi Kivity
34 cc9577cf cmchao
    switch (addr) {
35 cc9577cf cmchao
    case 0x204:        /* IDCODE_reg */
36 cc9577cf cmchao
        switch (s->mpu_model) {
37 cc9577cf cmchao
        case omap2420:
38 cc9577cf cmchao
        case omap2422:
39 cc9577cf cmchao
        case omap2423:
40 cc9577cf cmchao
            return 0x5b5d902f;        /* ES 2.2 */
41 cc9577cf cmchao
        case omap2430:
42 cc9577cf cmchao
            return 0x5b68a02f;        /* ES 2.2 */
43 cc9577cf cmchao
        case omap3430:
44 cc9577cf cmchao
            return 0x1b7ae02f;        /* ES 2 */
45 cc9577cf cmchao
        default:
46 cc9577cf cmchao
            hw_error("%s: Bad mpu model\n", __FUNCTION__);
47 cc9577cf cmchao
        }
48 cc9577cf cmchao
49 cc9577cf cmchao
    case 0x208:        /* PRODUCTION_ID_reg for OMAP2 */
50 cc9577cf cmchao
    case 0x210:        /* PRODUCTION_ID_reg for OMAP3 */
51 cc9577cf cmchao
        switch (s->mpu_model) {
52 cc9577cf cmchao
        case omap2420:
53 cc9577cf cmchao
            return 0x000254f0;        /* POP ESHS2.1.1 in N91/93/95, ES2 in N800 */
54 cc9577cf cmchao
        case omap2422:
55 cc9577cf cmchao
            return 0x000400f0;
56 cc9577cf cmchao
        case omap2423:
57 cc9577cf cmchao
            return 0x000800f0;
58 cc9577cf cmchao
        case omap2430:
59 cc9577cf cmchao
            return 0x000000f0;
60 cc9577cf cmchao
        case omap3430:
61 cc9577cf cmchao
            return 0x000000f0;
62 cc9577cf cmchao
        default:
63 cc9577cf cmchao
            hw_error("%s: Bad mpu model\n", __FUNCTION__);
64 cc9577cf cmchao
        }
65 cc9577cf cmchao
66 cc9577cf cmchao
    case 0x20c:
67 cc9577cf cmchao
        switch (s->mpu_model) {
68 cc9577cf cmchao
        case omap2420:
69 cc9577cf cmchao
        case omap2422:
70 cc9577cf cmchao
        case omap2423:
71 cc9577cf cmchao
            return 0xcafeb5d9;        /* ES 2.2 */
72 cc9577cf cmchao
        case omap2430:
73 cc9577cf cmchao
            return 0xcafeb68a;        /* ES 2.2 */
74 cc9577cf cmchao
        case omap3430:
75 cc9577cf cmchao
            return 0xcafeb7ae;        /* ES 2 */
76 cc9577cf cmchao
        default:
77 cc9577cf cmchao
            hw_error("%s: Bad mpu model\n", __FUNCTION__);
78 cc9577cf cmchao
        }
79 cc9577cf cmchao
80 cc9577cf cmchao
    case 0x218:        /* DIE_ID_reg */
81 cc9577cf cmchao
        return ('Q' << 24) | ('E' << 16) | ('M' << 8) | ('U' << 0);
82 cc9577cf cmchao
    case 0x21c:        /* DIE_ID_reg */
83 cc9577cf cmchao
        return 0x54 << 24;
84 cc9577cf cmchao
    case 0x220:        /* DIE_ID_reg */
85 cc9577cf cmchao
        return ('Q' << 24) | ('E' << 16) | ('M' << 8) | ('U' << 0);
86 cc9577cf cmchao
    case 0x224:        /* DIE_ID_reg */
87 cc9577cf cmchao
        return ('Q' << 24) | ('E' << 16) | ('M' << 8) | ('U' << 0);
88 cc9577cf cmchao
    }
89 cc9577cf cmchao
90 cc9577cf cmchao
    OMAP_BAD_REG(addr);
91 cc9577cf cmchao
    return 0;
92 cc9577cf cmchao
}
93 cc9577cf cmchao
94 cc9577cf cmchao
static void omap_tap_write(void *opaque, target_phys_addr_t addr,
95 0a9ee1a7 Avi Kivity
                           uint64_t value, unsigned size)
96 cc9577cf cmchao
{
97 0a9ee1a7 Avi Kivity
    if (size != 4) {
98 0a9ee1a7 Avi Kivity
        return omap_badwidth_write32(opaque, addr, value);
99 0a9ee1a7 Avi Kivity
    }
100 0a9ee1a7 Avi Kivity
101 cc9577cf cmchao
    OMAP_BAD_REG(addr);
102 cc9577cf cmchao
}
103 cc9577cf cmchao
104 0a9ee1a7 Avi Kivity
static const MemoryRegionOps omap_tap_ops = {
105 0a9ee1a7 Avi Kivity
    .read = omap_tap_read,
106 0a9ee1a7 Avi Kivity
    .write = omap_tap_write,
107 0a9ee1a7 Avi Kivity
    .endianness = DEVICE_NATIVE_ENDIAN,
108 cc9577cf cmchao
};
109 cc9577cf cmchao
110 cc9577cf cmchao
void omap_tap_init(struct omap_target_agent_s *ta,
111 cc9577cf cmchao
                struct omap_mpu_state_s *mpu)
112 cc9577cf cmchao
{
113 0a9ee1a7 Avi Kivity
    memory_region_init_io(&mpu->tap_iomem, &omap_tap_ops, mpu, "omap.tap",
114 0a9ee1a7 Avi Kivity
                          omap_l4_region_size(ta, 0));
115 f44336c5 Avi Kivity
    omap_l4_attach(ta, 0, &mpu->tap_iomem);
116 cc9577cf cmchao
}