~pmdj/ubuntu/trusty/qemu/2.9+applesmc+fadtv3

« back to all changes in this revision

Viewing changes to roms/u-boot/board/pxa255_idp/pxa_reg_calcs.py

  • Committer: Phil Dennis-Jordan
  • Date: 2017-07-21 08:03:43 UTC
  • mfrom: (1.1.1)
  • Revision ID: phil@philjordan.eu-20170721080343-2yr2vdj7713czahv
New upstream release 2.9.0.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/python
 
2
 
 
3
# (C) Copyright 2004
 
4
# BEC Systems <http://bec-systems.com>
 
5
# Cliff Brake <cliff.brake@gmail.com>
 
6
 
 
7
# SPDX-License-Identifier:      GPL-2.0+
 
8
 
 
9
# calculations for PXA255 registers
 
10
 
 
11
class gpio:
 
12
        dir = '0'
 
13
        set = '0'
 
14
        clr = '0'
 
15
        alt = '0'
 
16
        desc = ''
 
17
 
 
18
        def __init__(self, dir=0, set=0, clr=0, alt=0, desc=''):
 
19
                self.dir = dir
 
20
                self.set = set
 
21
                self.clr = clr
 
22
                self.alt = alt
 
23
                self.desc = desc
 
24
                
 
25
 
 
26
# the following is a dictionary of all GPIOs in the system
 
27
# the key is the GPIO number
 
28
 
 
29
 
 
30
pxa255_alt_func = {
 
31
        0: ['gpio', 'none', 'none', 'none'],
 
32
        1: ['gpio', 'gpio reset', 'none', 'none'],
 
33
        2: ['gpio', 'none', 'none', 'none'],
 
34
        3: ['gpio', 'none', 'none', 'none'],
 
35
        4: ['gpio', 'none', 'none', 'none'],
 
36
        5: ['gpio', 'none', 'none', 'none'],
 
37
        6: ['gpio', 'MMC clk', 'none', 'none'],
 
38
        7: ['gpio', '48MHz clock', 'none', 'none'],
 
39
        8: ['gpio', 'MMC CS0', 'none', 'none'],
 
40
        9: ['gpio', 'MMC CS1', 'none', 'none'],
 
41
        10: ['gpio', 'RTC Clock', 'none', 'none'],
 
42
        11: ['gpio', '3.6MHz', 'none', 'none'],
 
43
        12: ['gpio', '32KHz', 'none', 'none'],
 
44
        13: ['gpio', 'none', 'MBGNT', 'none'],
 
45
        14: ['gpio', 'MBREQ', 'none', 'none'],
 
46
        15: ['gpio', 'none', 'nCS_1', 'none'],
 
47
        16: ['gpio', 'none', 'PWM0', 'none'],
 
48
        17: ['gpio', 'none', 'PWM1', 'none'],
 
49
        18: ['gpio', 'RDY', 'none', 'none'],
 
50
        19: ['gpio', 'DREQ[1]', 'none', 'none'],
 
51
        20: ['gpio', 'DREQ[0]', 'none', 'none'],
 
52
        21: ['gpio', 'none', 'none', 'none'],
 
53
        22: ['gpio', 'none', 'none', 'none'],
 
54
        23: ['gpio', 'none', 'SSP SCLK', 'none'],
 
55
        24: ['gpio', 'none', 'SSP SFRM', 'none'],
 
56
        25: ['gpio', 'none', 'SSP TXD', 'none'],
 
57
        26: ['gpio', 'SSP RXD', 'none', 'none'],
 
58
        27: ['gpio', 'SSP EXTCLK', 'none', 'none'],
 
59
        28: ['gpio', 'AC97 bitclk in, I2S bitclock out', 'I2S bitclock in', 'none'],
 
60
        29: ['gpio', 'AC97 SDATA_IN0', 'I2S SDATA_IN', 'none'],
 
61
        30: ['gpio', 'I2S SDATA_OUT', 'AC97 SDATA_OUT', 'none'],
 
62
        31: ['gpio', 'I2S SYNC', 'AC97 SYNC', 'none'],
 
63
        32: ['gpio', 'AC97 SDATA_IN1', 'I2S SYSCLK', 'none'],
 
64
        33: ['gpio', 'none', 'nCS_5', 'none'],
 
65
        34: ['gpio', 'FF RXD', 'MMC CS0', 'none'],
 
66
        35: ['gpio', 'FF CTS', 'none', 'none'],
 
67
        36: ['gpio', 'FF DCD', 'none', 'none'],
 
68
        37: ['gpio', 'FF DSR', 'none', 'none'],
 
69
        38: ['gpio', 'FF RI', 'none', 'none'],
 
70
        39: ['gpio', 'MMC CS1', 'FF TXD', 'none'],
 
71
        40: ['gpio', 'none', 'FF DTR', 'none'],
 
72
        41: ['gpio', 'none', 'FF RTS', 'none'],
 
73
        42: ['gpio', 'BT RXD', 'none', 'HW RXD'],
 
74
        43: ['gpio', 'none', 'BT TXD', 'HW TXD'],
 
75
        44: ['gpio', 'BT CTS', 'none', 'HW CTS'],
 
76
        45: ['gpio', 'none', 'BT RTS', 'HW RTS'],
 
77
        46: ['gpio', 'ICP_RXD', 'STD RXD', 'none'],
 
78
        47: ['gpio', 'STD TXD', 'ICP_TXD', 'none'],
 
79
        48: ['gpio', 'HW TXD', 'nPOE', 'none'],
 
80
        49: ['gpio', 'HW RXD', 'nPWE', 'none'],
 
81
        50: ['gpio', 'HW CTS', 'nPIOR', 'none'],
 
82
        51: ['gpio', 'nPIOW', 'HW RTS', 'none'],
 
83
        52: ['gpio', 'none', 'nPCE[1]', 'none'],
 
84
        53: ['gpio', 'MMC CLK', 'nPCE[2]', 'none'],
 
85
        54: ['gpio', 'MMC CLK', 'nPSKSEL', 'none'],
 
86
        55: ['gpio', 'none', 'nPREG', 'none'],
 
87
        56: ['gpio', 'nPWAIT', 'none', 'none'],
 
88
        57: ['gpio', 'nIOIS16', 'none', 'none'],
 
89
        58: ['gpio', 'none', 'LDD[0]', 'none'],
 
90
        59: ['gpio', 'none', 'LDD[1]', 'none'],
 
91
        60: ['gpio', 'none', 'LDD[2]', 'none'],
 
92
        61: ['gpio', 'none', 'LDD[3]', 'none'],
 
93
        62: ['gpio', 'none', 'LDD[4]', 'none'],
 
94
        63: ['gpio', 'none', 'LDD[5]', 'none'],
 
95
        64: ['gpio', 'none', 'LDD[6]', 'none'],
 
96
        65: ['gpio', 'none', 'LDD[7]', 'none'],
 
97
        66: ['gpio', 'MBREQ', 'LDD[8]', 'none'],
 
98
        67: ['gpio', 'MMC CS0', 'LDD[9]', 'none'],
 
99
        68: ['gpio', 'MMC CS1', 'LDD[10]', 'none'],
 
100
        69: ['gpio', 'MMC CLK', 'LDD[11]', 'none'],
 
101
        70: ['gpio', 'RTC CLK', 'LDD[12]', 'none'],
 
102
        71: ['gpio', '3.6 MHz', 'LDD[13]', 'none'],
 
103
        72: ['gpio', '32 KHz', 'LDD[14]', 'none'],
 
104
        73: ['gpio', 'MBGNT', 'LDD[15]', 'none'],
 
105
        74: ['gpio', 'none', 'LCD_FCLK', 'none'],
 
106
        75: ['gpio', 'none', 'LCD_LCLK', 'none'],
 
107
        76: ['gpio', 'none', 'LCD_PCLK', 'none'],
 
108
        77: ['gpio', 'none', 'LCD_ACBIAS', 'none'],
 
109
        78: ['gpio', 'none', 'nCS_2', 'none'],
 
110
        79: ['gpio', 'none', 'nCS_3', 'none'],
 
111
        80: ['gpio', 'none', 'nCS_4', 'none'],
 
112
        81: ['gpio', 'NSSPSCLK', 'none', 'none'],
 
113
        82: ['gpio', 'NSSPSFRM', 'none', 'none'],
 
114
        83: ['gpio', 'NSSPTXD', 'NSSPRXD', 'none'],
 
115
        84: ['gpio', 'NSSPTXD', 'NSSPRXD', 'none'],
 
116
}
 
117
 
 
118
 
 
119
#def __init__(self, dir=0, set=0, clr=0, alt=0, desc=''):
 
120
 
 
121
gpio_list = []
 
122
 
 
123
for i in range(0,85):
 
124
        gpio_list.append(gpio())
 
125
 
 
126
#chip select GPIOs
 
127
gpio_list[18] = gpio(0, 0, 0, 1, 'RDY')
 
128
gpio_list[33] = gpio(1, 1, 0, 2, 'CS5#')
 
129
gpio_list[80] = gpio(1, 1, 0, 2, 'CS4#')
 
130
gpio_list[79] = gpio(1, 1, 0, 2, 'CS3#')
 
131
gpio_list[78] = gpio(1, 1, 0, 2, 'CS2#')
 
132
gpio_list[15] = gpio(1, 1, 0, 2, 'CS1#')
 
133
gpio_list[22] = gpio(0, 0, 0, 0, 'Consumer IR, PCC_S1_IRQ_O#')
 
134
gpio_list[21] = gpio(0, 0, 0, 0, 'IRQ_IDE, PFI')
 
135
gpio_list[19] = gpio(0, 0, 0, 0, 'XB_DREQ1, PCC_SO_IRQ_O#')
 
136
gpio_list[20] = gpio(0, 0, 0, 0, 'XB_DREQ0')
 
137
gpio_list[20] = gpio(0, 0, 0, 0, 'XB_DREQ0')
 
138
gpio_list[17] = gpio(0, 0, 0, 0, 'IRQ_AXB')
 
139
gpio_list[16] = gpio(1, 0, 0, 2, 'PWM0')
 
140
 
 
141
# PCMCIA stuff
 
142
gpio_list[57] = gpio(0, 0, 0, 1, 'PCC_IOIS16#')
 
143
gpio_list[56] = gpio(0, 0, 0, 1, 'PCC_WAIT#')
 
144
gpio_list[55] = gpio(1, 0, 0, 2, 'PCC_REG#')
 
145
gpio_list[54] = gpio(1, 0, 0, 2, 'PCC_SCKSEL')
 
146
gpio_list[53] = gpio(1, 1, 0, 2, 'PCC_CE2#')
 
147
gpio_list[52] = gpio(1, 1, 0, 2, 'PCC_CE1#')
 
148
gpio_list[51] = gpio(1, 1, 0, 1, 'PCC_IOW#')
 
149
gpio_list[50] = gpio(1, 1, 0, 2, 'PCC_IOR#')
 
150
gpio_list[49] = gpio(1, 1, 0, 2, 'PCC_WE#')
 
151
gpio_list[48] = gpio(1, 1, 0, 2, 'PCC_OE#')
 
152
 
 
153
# SSP port
 
154
gpio_list[26] = gpio(0, 0, 0, 1, 'SSP_RXD')
 
155
gpio_list[25] = gpio(0, 0, 0, 0, 'SSP_TXD')
 
156
gpio_list[24] = gpio(1, 0, 1, 2, 'SSP_SFRM')
 
157
gpio_list[23] = gpio(1, 0, 1, 2, 'SSP_SCLK')
 
158
gpio_list[27] = gpio(0, 0, 0, 0, 'SSP_EXTCLK')
 
159
 
 
160
# audio codec
 
161
gpio_list[32] = gpio(0, 0, 0, 0, 'AUD_SDIN1')
 
162
gpio_list[31] = gpio(1, 0, 0, 2, 'AC_SYNC')
 
163
gpio_list[30] = gpio(1, 0, 0, 2, 'AC_SDOUT')
 
164
gpio_list[29] = gpio(0, 0, 0, 1, 'AUD_SDIN0')
 
165
gpio_list[28] = gpio(0, 0, 0, 1, 'AC_BITCLK')
 
166
 
 
167
# serial ports
 
168
gpio_list[39] = gpio(1, 0, 0, 2, 'FF_TXD')
 
169
gpio_list[34] = gpio(0, 0, 0, 1, 'FF_RXD')
 
170
gpio_list[41] = gpio(1, 0, 0, 2, 'FF_RTS')
 
171
gpio_list[35] = gpio(0, 0, 0, 1, 'FF_CTS')
 
172
gpio_list[40] = gpio(1, 0, 0, 2, 'FF_DTR')
 
173
gpio_list[37] = gpio(0, 0, 0, 1, 'FF_DSR')
 
174
gpio_list[38] = gpio(0, 0, 0, 1, 'FF_RI')
 
175
gpio_list[36] = gpio(0, 0, 0, 1, 'FF_DCD')
 
176
 
 
177
gpio_list[43] = gpio(1, 0, 0, 2, 'BT_TXD')
 
178
gpio_list[42] = gpio(0, 0, 0, 1, 'BT_RXD')
 
179
gpio_list[45] = gpio(1, 0, 0, 2, 'BT_RTS')
 
180
gpio_list[44] = gpio(0, 0, 0, 1, 'BT_CTS')
 
181
 
 
182
gpio_list[47] = gpio(1, 0, 0, 1, 'IR_TXD')
 
183
gpio_list[46] = gpio(0, 0, 0, 2, 'IR_RXD')
 
184
 
 
185
# misc GPIO signals
 
186
gpio_list[14] = gpio(0, 0, 0, 0, 'MBREQ')
 
187
gpio_list[13] = gpio(0, 0, 0, 0, 'MBGNT')
 
188
gpio_list[12] = gpio(0, 0, 0, 0, 'GPIO_12/32K_CLK')
 
189
gpio_list[11] = gpio(0, 0, 0, 0, '3M6_CLK')
 
190
gpio_list[10] = gpio(1, 0, 1, 0, 'GPIO_10/RTC_CLK/debug LED')
 
191
gpio_list[9] = gpio(0, 0, 0, 0, 'MMC_CD#')
 
192
gpio_list[8] = gpio(0, 0, 0, 0, 'PCC_S1_CD#')
 
193
gpio_list[7] = gpio(0, 0, 0, 0, 'PCC_S0_CD#')
 
194
gpio_list[6] = gpio(1, 0, 0, 1, 'MMC_CLK')
 
195
gpio_list[5] = gpio(0, 0, 0, 0, 'IRQ_TOUCH#')
 
196
gpio_list[4] = gpio(0, 0, 0, 0, 'IRQ_ETH')
 
197
gpio_list[3] = gpio(0, 0, 0, 0, 'MQ_IRQ#')
 
198
gpio_list[2] = gpio(0, 0, 0, 0, 'BAT_DATA')
 
199
gpio_list[1] = gpio(0, 0, 0, 1, 'USER_RESET#')
 
200
gpio_list[0] = gpio(0, 0, 0, 1, 'USER_RESET#')
 
201
 
 
202
# LCD GPIOs
 
203
gpio_list[58] = gpio(1, 0, 0, 2, 'LDD0')
 
204
gpio_list[59] = gpio(1, 0, 0, 2, 'LDD1')
 
205
gpio_list[60] = gpio(1, 0, 0, 2, 'LDD2')
 
206
gpio_list[61] = gpio(1, 0, 0, 2, 'LDD3')
 
207
gpio_list[62] = gpio(1, 0, 0, 2, 'LDD4')
 
208
gpio_list[63] = gpio(1, 0, 0, 2, 'LDD5')
 
209
gpio_list[64] = gpio(1, 0, 0, 2, 'LDD6')
 
210
gpio_list[65] = gpio(1, 0, 0, 2, 'LDD7')
 
211
gpio_list[66] = gpio(1, 0, 0, 2, 'LDD8')
 
212
gpio_list[67] = gpio(1, 0, 0, 2, 'LDD9')
 
213
gpio_list[68] = gpio(1, 0, 0, 2, 'LDD10')
 
214
gpio_list[69] = gpio(1, 0, 0, 2, 'LDD11')
 
215
gpio_list[70] = gpio(1, 0, 0, 2, 'LDD12')
 
216
gpio_list[71] = gpio(1, 0, 0, 2, 'LDD13')
 
217
gpio_list[72] = gpio(1, 0, 0, 2, 'LDD14')
 
218
gpio_list[73] = gpio(1, 0, 0, 2, 'LDD15')
 
219
gpio_list[74] = gpio(1, 0, 0, 2, 'FCLK')
 
220
gpio_list[75] = gpio(1, 0, 0, 2, 'LCLK')
 
221
gpio_list[76] = gpio(1, 0, 0, 2, 'PCLK')
 
222
gpio_list[77] = gpio(1, 0, 0, 2, 'ACBIAS')
 
223
 
 
224
# calculate registers
 
225
pxa_regs = {
 
226
        'gpdr0':0, 'gpdr1':0, 'gpdr2':0,
 
227
        'gpsr0':0, 'gpsr1':0, 'gpsr2':0,
 
228
        'gpcr0':0, 'gpcr1':0, 'gpcr2':0,
 
229
        'gafr0_l':0, 'gafr0_u':0,
 
230
        'gafr1_l':0, 'gafr1_u':0,
 
231
        'gafr2_l':0, 'gafr2_u':0,
 
232
}
 
233
 
 
234
# U-boot define names
 
235
uboot_reg_names = {
 
236
        'gpdr0':'CONFIG_SYS_GPDR0_VAL', 'gpdr1':'CONFIG_SYS_GPDR1_VAL', 'gpdr2':'CONFIG_SYS_GPDR2_VAL',
 
237
        'gpsr0':'CONFIG_SYS_GPSR0_VAL', 'gpsr1':'CONFIG_SYS_GPSR1_VAL', 'gpsr2':'CONFIG_SYS_GPSR2_VAL',
 
238
        'gpcr0':'CONFIG_SYS_GPCR0_VAL', 'gpcr1':'CONFIG_SYS_GPCR1_VAL', 'gpcr2':'CONFIG_SYS_GPCR2_VAL',
 
239
        'gafr0_l':'CONFIG_SYS_GAFR0_L_VAL', 'gafr0_u':'CONFIG_SYS_GAFR0_U_VAL',
 
240
        'gafr1_l':'CONFIG_SYS_GAFR1_L_VAL', 'gafr1_u':'CONFIG_SYS_GAFR1_U_VAL',
 
241
        'gafr2_l':'CONFIG_SYS_GAFR2_L_VAL', 'gafr2_u':'CONFIG_SYS_GAFR2_U_VAL',
 
242
}
 
243
 
 
244
# bit mappings
 
245
 
 
246
bit_mappings = [
 
247
 
 
248
{ 'gpio':(0,32),  'shift':1, 'regs':{'dir':'gpdr0', 'set':'gpsr0', 'clr':'gpcr0'} },
 
249
{ 'gpio':(32,64), 'shift':1, 'regs':{'dir':'gpdr1', 'set':'gpsr1', 'clr':'gpcr1'} },
 
250
{ 'gpio':(64,85), 'shift':1, 'regs':{'dir':'gpdr2', 'set':'gpsr2', 'clr':'gpcr2'} },
 
251
{ 'gpio':(0,16),  'shift':2, 'regs':{'alt':'gafr0_l'} },
 
252
{ 'gpio':(16,32), 'shift':2, 'regs':{'alt':'gafr0_u'} },
 
253
{ 'gpio':(32,48), 'shift':2, 'regs':{'alt':'gafr1_l'} },
 
254
{ 'gpio':(48,64), 'shift':2, 'regs':{'alt':'gafr1_u'} },
 
255
{ 'gpio':(64,80), 'shift':2, 'regs':{'alt':'gafr2_l'} },
 
256
{ 'gpio':(80,85), 'shift':2, 'regs':{'alt':'gafr2_u'} },
 
257
 
 
258
]
 
259
 
 
260
def stuff_bits(bit_mapping, gpio_list):
 
261
        gpios = range( bit_mapping['gpio'][0], bit_mapping['gpio'][1])
 
262
 
 
263
        for gpio in gpios:
 
264
                for reg in bit_mapping['regs'].keys():
 
265
                        value = eval( 'gpio_list[gpio].%s' % (reg) )
 
266
                        if ( value ):
 
267
                                # we have a high bit
 
268
                                bit_shift = (gpio - bit_mapping['gpio'][0]) * bit_mapping['shift']
 
269
                                bit = value << (bit_shift)
 
270
                                pxa_regs[bit_mapping['regs'][reg]] |= bit
 
271
 
 
272
for i in bit_mappings:
 
273
        stuff_bits(i, gpio_list)
 
274
 
 
275
# now print out all regs
 
276
registers = pxa_regs.keys()
 
277
registers.sort()
 
278
for reg in registers:
 
279
        print '%s: 0x%x' % (reg, pxa_regs[reg])
 
280
 
 
281
# print define to past right into U-Boot source code
 
282
 
 
283
print 
 
284
print 
 
285
 
 
286
for reg in registers:
 
287
        print '#define %s       0x%x' % (uboot_reg_names[reg], pxa_regs[reg])
 
288
 
 
289
# print all GPIOS
 
290
print
 
291
print
 
292
 
 
293
for i in range(len(gpio_list)):
 
294
        gpio_i = gpio_list[i]
 
295
        alt_func_desc = pxa255_alt_func[i][gpio_i.alt]
 
296
        print 'GPIO: %i, dir=%i, set=%i, clr=%i, alt=%s, desc=%s' % (i, gpio_i.dir, gpio_i.set, gpio_i.clr, alt_func_desc, gpio_i.desc)
 
297
 
 
298