summaryrefslogtreecommitdiffstats
path: root/iop2v
blob: ad5bb50d65789201ae5114eb0bd4791cc9932efb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#! /usr/bin/env python
# vim: set fileencoding=utf-8
# Copyright (C) 2010-2011 Uwe Kleine-König for Pengutronix
# GPLv2

def iop2v(x):
    return 0xf4000000 + (((x) & 0x50000000) >> 6) + (((x) & 0x0b000000) >> 4) + (((x) & 0x000fffff))

if __name__ == '__main__':
    import sys

    if sys.argv[1:]:
        for a in sys.argv[1:]:
            a = int(a, 0)
            print '%08x -> %08x' % (a, iop2v(a))
    else:
        socmappings = [
                ('mx1', [
                    ('IO', 0x00200000, 0x100000)]),
                ('mx21', [
                    ('AIPI', 0x10000000, 0x100000),
                    ('SAHB1', 0x80000000, 0x100000),
                    ('X_MEMC', 0xdf000000, 0x04000)]),
                ('mx25', [
                    ('AIPS1', 0x43f00000, 0x100000),
                    ('AIPS2', 0x53f00000, 0x100000),
                    ('AVIC', 0x68000000, 0x100000)]),
                ('mx27', [
                    ('AIPI',    0x10000000, 0x100000),
                    ('SAHB1',   0x80000000, 0x100000),
                    ('X_MEMC',  0xd8000000, 0x100000)]),
                ('mx31', [
                    ('AIPS1',   0x43f00000, 0x100000),
                    ('AIPS2',   0x53f00000, 0x100000),
                    ('AVIC',    0x68000000, 0x100000),
                    ('X_MEMC',  0xb8000000, 0x010000),
                    ('SPBA0',   0x50000000, 0x100000)]),
                ('mx35', [
                    ('AIPS1',   0x43f00000, 0x100000),
                    ('AIPS2',   0x53f00000, 0x100000),
                    ('AVIC',    0x68000000, 0x100000),
                    ('X_MEMC',  0xb8000000, 0x010000),
                    ('SPBA0',   0x50000000, 0x100000)]),
                ('mx50', [
                    ('TZIC',    0x0fffc000, 0x4000),
                    ('AIPS1',   0x53f00000, 0x100000),
                    ('SPBA0',   0x50000000, 0x100000),
                    ('AIPS2',   0x63f00000, 0x100000)]),
                ('mx51', [
                    ('IRAM',    0x1ffe0000, 0x020000),
                    ('DEBUG',   0x60000000, 0x100000),
                    ('SPBA0',   0x70000000, 0x100000),
                    ('AIPS1',   0x73f00000, 0x100000),
                    ('AIPS2',   0x83f00000, 0x100000)]),
                ('mx53', [
                    ('TZIC',    0x0fffc000, 0x4000),
                    ('DEBUG',   0x40000000, 0x100000),
                    ('SPBA0',   0x50000000, 0x100000),
                    ('AIPS1',   0x53f00000, 0x100000),
                    ('AIPS2',   0x63f00000, 0x100000)]),
                ('mx6q', [
                    ('SCU',     0x00a00000, 0x4000),
                    ('CCM',     0x020c4000, 0x4000),
                    ('ANATOP',  0x020c8000, 0x4000),
                    ('UART4',   0x021f0000, 0x4000)]),
                ('mxc91231', [
                    ('L2CC',    0x30000000, 0x010000),
                    ('X_MEMC',  0xB8000000, 0x010000),
                    ('ROMP',    0x60000000, 0x010000),
                    ('AVIC',    0x68000000, 0x010000),
                    ('AIPS1',   0x43F00000, 0x100000),
                    ('SPBA0',   0x50000000, 0x100000),
                    ('SPBA1',   0x52000000, 0x100000),
                    ('AIPS2',   0x53F00000, 0x100000)])]
        for soc, maplist in socmappings:
            print ' * %s:' % soc
            socvbases = set()
            for name, base, size in maplist:
                end = base + size - 1
                vbase = iop2v(base)
                vend = iop2v(end)
                socvbases.add(vbase)
                if vend - vbase != size - 1:
                    print 'broken mapping (%s)' % name
                    sys.exit(1)
                print ' *\t%s\t0x%08x+0x%06x\t->\t0x%08x+0x%06x' % (name, base, size, vbase, size)

            if len(socvbases) != len(maplist):
                print 'conflict'
                sys.exit(1)