summaryrefslogtreecommitdiff
path: root/arch/arm/include/asm/arch-vybrid/iomux.h
blob: e5ec5ddc03ad1fe3bf55833f7f2b2d6102369d27 (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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
/*
 * Copyright 2012 Freescale Semiconductor, Inc.
 *
 * See file CREDITS for list of people who contributed to this
 * project.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 2 of
 * the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 * MA 02111-1307 USA
 */

#ifndef __MACH_VYBRID_IOMUX_H__
#define __MACH_VYBRID_IOMUX_H__

#include <common.h>
#include <asm/io.h>
#include <asm/arch/vybrid-regs.h>
#include <asm/arch/vybrid-pins.h>

#define IOMUXC_PAD_000		(IOMUXC_BASE_ADDR + 0x0000)
#define IOMUXC_PAD_001		(IOMUXC_BASE_ADDR + 0x0004)
#define IOMUXC_PAD_002		(IOMUXC_BASE_ADDR + 0x0008)
#define IOMUXC_PAD_003		(IOMUXC_BASE_ADDR + 0x000C)
#define IOMUXC_PAD_004		(IOMUXC_BASE_ADDR + 0x0010)
#define IOMUXC_PAD_005		(IOMUXC_BASE_ADDR + 0x0014)
#define IOMUXC_PAD_006		(IOMUXC_BASE_ADDR + 0x0018)
#define IOMUXC_PAD_007		(IOMUXC_BASE_ADDR + 0x001C)
#define IOMUXC_PAD_008		(IOMUXC_BASE_ADDR + 0x0020)
#define IOMUXC_PAD_009		(IOMUXC_BASE_ADDR + 0x0024)
#define IOMUXC_PAD_010		(IOMUXC_BASE_ADDR + 0x0028)
#define IOMUXC_PAD_011		(IOMUXC_BASE_ADDR + 0x002C)
#define IOMUXC_PAD_012		(IOMUXC_BASE_ADDR + 0x0030)
#define IOMUXC_PAD_013		(IOMUXC_BASE_ADDR + 0x0034)
#define IOMUXC_PAD_014		(IOMUXC_BASE_ADDR + 0x0038)
#define IOMUXC_PAD_015		(IOMUXC_BASE_ADDR + 0x003C)
#define IOMUXC_PAD_016		(IOMUXC_BASE_ADDR + 0x0040)
#define IOMUXC_PAD_017		(IOMUXC_BASE_ADDR + 0x0044)
#define IOMUXC_PAD_018		(IOMUXC_BASE_ADDR + 0x0048)
#define IOMUXC_PAD_019		(IOMUXC_BASE_ADDR + 0x004C)
#define IOMUXC_PAD_020		(IOMUXC_BASE_ADDR + 0x0050)
#define IOMUXC_PAD_021		(IOMUXC_BASE_ADDR + 0x0054)
#define IOMUXC_PAD_022		(IOMUXC_BASE_ADDR + 0x0058)
#define IOMUXC_PAD_023		(IOMUXC_BASE_ADDR + 0x005C)
#define IOMUXC_PAD_024		(IOMUXC_BASE_ADDR + 0x0060)
#define IOMUXC_PAD_025		(IOMUXC_BASE_ADDR + 0x0064)
#define IOMUXC_PAD_026		(IOMUXC_BASE_ADDR + 0x0068)
#define IOMUXC_PAD_027		(IOMUXC_BASE_ADDR + 0x006C)
#define IOMUXC_PAD_028		(IOMUXC_BASE_ADDR + 0x0070)
#define IOMUXC_PAD_029		(IOMUXC_BASE_ADDR + 0x0074)
#define IOMUXC_PAD_030		(IOMUXC_BASE_ADDR + 0x0078)
#define IOMUXC_PAD_031		(IOMUXC_BASE_ADDR + 0x007C)
#define IOMUXC_PAD_032		(IOMUXC_BASE_ADDR + 0x0080)
#define IOMUXC_PAD_033		(IOMUXC_BASE_ADDR + 0x0084)
#define IOMUXC_PAD_034		(IOMUXC_BASE_ADDR + 0x0088)
#define IOMUXC_PAD_035		(IOMUXC_BASE_ADDR + 0x008C)
#define IOMUXC_PAD_036		(IOMUXC_BASE_ADDR + 0x0090)
#define IOMUXC_PAD_037		(IOMUXC_BASE_ADDR + 0x0094)
#define IOMUXC_PAD_038		(IOMUXC_BASE_ADDR + 0x0098)
#define IOMUXC_PAD_039		(IOMUXC_BASE_ADDR + 0x009C)
#define IOMUXC_PAD_040		(IOMUXC_BASE_ADDR + 0x00A0)
#define IOMUXC_PAD_041		(IOMUXC_BASE_ADDR + 0x00A4)
#define IOMUXC_PAD_042		(IOMUXC_BASE_ADDR + 0x00A8)
#define IOMUXC_PAD_043		(IOMUXC_BASE_ADDR + 0x00AC)
#define IOMUXC_PAD_044		(IOMUXC_BASE_ADDR + 0x00B0)
#define IOMUXC_PAD_045		(IOMUXC_BASE_ADDR + 0x00B4)
#define IOMUXC_PAD_046		(IOMUXC_BASE_ADDR + 0x00B8)
#define IOMUXC_PAD_047		(IOMUXC_BASE_ADDR + 0x00BC)
#define IOMUXC_PAD_048		(IOMUXC_BASE_ADDR + 0x00C0)
#define IOMUXC_PAD_049		(IOMUXC_BASE_ADDR + 0x00C4)
#define IOMUXC_PAD_050		(IOMUXC_BASE_ADDR + 0x00C8)
#define IOMUXC_PAD_051		(IOMUXC_BASE_ADDR + 0x00CC)
#define IOMUXC_PAD_052		(IOMUXC_BASE_ADDR + 0x00D0)
#define IOMUXC_PAD_053		(IOMUXC_BASE_ADDR + 0x00D4)
#define IOMUXC_PAD_054		(IOMUXC_BASE_ADDR + 0x00D8)
#define IOMUXC_PAD_055		(IOMUXC_BASE_ADDR + 0x00DC)
#define IOMUXC_PAD_056		(IOMUXC_BASE_ADDR + 0x00E0)
#define IOMUXC_PAD_057		(IOMUXC_BASE_ADDR + 0x00E4)
#define IOMUXC_PAD_058		(IOMUXC_BASE_ADDR + 0x00E8)
#define IOMUXC_PAD_059		(IOMUXC_BASE_ADDR + 0x00EC)
#define IOMUXC_PAD_060		(IOMUXC_BASE_ADDR + 0x00F0)
#define IOMUXC_PAD_061		(IOMUXC_BASE_ADDR + 0x00F4)
#define IOMUXC_PAD_062		(IOMUXC_BASE_ADDR + 0x00F8)
#define IOMUXC_PAD_063		(IOMUXC_BASE_ADDR + 0x00FC)
#define IOMUXC_PAD_064		(IOMUXC_BASE_ADDR + 0x0100)
#define IOMUXC_PAD_065		(IOMUXC_BASE_ADDR + 0x0104)
#define IOMUXC_PAD_066		(IOMUXC_BASE_ADDR + 0x0108)
#define IOMUXC_PAD_067		(IOMUXC_BASE_ADDR + 0x010C)
#define IOMUXC_PAD_068		(IOMUXC_BASE_ADDR + 0x0110)
#define IOMUXC_PAD_069		(IOMUXC_BASE_ADDR + 0x0114)
#define IOMUXC_PAD_070		(IOMUXC_BASE_ADDR + 0x0118)
#define IOMUXC_PAD_071		(IOMUXC_BASE_ADDR + 0x011C)
#define IOMUXC_PAD_072		(IOMUXC_BASE_ADDR + 0x0120)
#define IOMUXC_PAD_073		(IOMUXC_BASE_ADDR + 0x0124)
#define IOMUXC_PAD_074		(IOMUXC_BASE_ADDR + 0x0128)
#define IOMUXC_PAD_075		(IOMUXC_BASE_ADDR + 0x012C)
#define IOMUXC_PAD_076		(IOMUXC_BASE_ADDR + 0x0130)
#define IOMUXC_PAD_077		(IOMUXC_BASE_ADDR + 0x0134)
#define IOMUXC_PAD_078		(IOMUXC_BASE_ADDR + 0x0138)
#define IOMUXC_PAD_079		(IOMUXC_BASE_ADDR + 0x013C)
#define IOMUXC_PAD_080		(IOMUXC_BASE_ADDR + 0x0140)
#define IOMUXC_PAD_081		(IOMUXC_BASE_ADDR + 0x0144)
#define IOMUXC_PAD_082		(IOMUXC_BASE_ADDR + 0x0148)
#define IOMUXC_PAD_083		(IOMUXC_BASE_ADDR + 0x014C)
#define IOMUXC_PAD_084		(IOMUXC_BASE_ADDR + 0x0150)
#define IOMUXC_PAD_085		(IOMUXC_BASE_ADDR + 0x0154)
#define IOMUXC_PAD_086		(IOMUXC_BASE_ADDR + 0x0158)
#define IOMUXC_PAD_087		(IOMUXC_BASE_ADDR + 0x015C)
#define IOMUXC_PAD_088		(IOMUXC_BASE_ADDR + 0x0160)
#define IOMUXC_PAD_089		(IOMUXC_BASE_ADDR + 0x0164)
#define IOMUXC_PAD_090		(IOMUXC_BASE_ADDR + 0x0168)
#define IOMUXC_PAD_091		(IOMUXC_BASE_ADDR + 0x016C)
#define IOMUXC_PAD_092		(IOMUXC_BASE_ADDR + 0x0170)
#define IOMUXC_PAD_093		(IOMUXC_BASE_ADDR + 0x0174)
#define IOMUXC_PAD_094		(IOMUXC_BASE_ADDR + 0x0178)
#define IOMUXC_PAD_095		(IOMUXC_BASE_ADDR + 0x017C)
#define IOMUXC_PAD_096		(IOMUXC_BASE_ADDR + 0x0180)
#define IOMUXC_PAD_097		(IOMUXC_BASE_ADDR + 0x0184)
#define IOMUXC_PAD_098		(IOMUXC_BASE_ADDR + 0x0188)
#define IOMUXC_PAD_099		(IOMUXC_BASE_ADDR + 0x018C)
#define IOMUXC_PAD_100		(IOMUXC_BASE_ADDR + 0x0190)
#define IOMUXC_PAD_101		(IOMUXC_BASE_ADDR + 0x0194)
#define IOMUXC_PAD_102		(IOMUXC_BASE_ADDR + 0x0198)
#define IOMUXC_PAD_103		(IOMUXC_BASE_ADDR + 0x019C)
#define IOMUXC_PAD_104		(IOMUXC_BASE_ADDR + 0x01A0)
#define IOMUXC_PAD_105		(IOMUXC_BASE_ADDR + 0x01A4)
#define IOMUXC_PAD_106		(IOMUXC_BASE_ADDR + 0x01A8)
#define IOMUXC_PAD_107		(IOMUXC_BASE_ADDR + 0x01AC)
#define IOMUXC_PAD_108		(IOMUXC_BASE_ADDR + 0x01B0)
#define IOMUXC_PAD_109		(IOMUXC_BASE_ADDR + 0x01B4)
#define IOMUXC_PAD_110		(IOMUXC_BASE_ADDR + 0x01B8)
#define IOMUXC_PAD_111		(IOMUXC_BASE_ADDR + 0x01BC)
#define IOMUXC_PAD_112		(IOMUXC_BASE_ADDR + 0x01C0)
#define IOMUXC_PAD_113		(IOMUXC_BASE_ADDR + 0x01C4)
#define IOMUXC_PAD_114		(IOMUXC_BASE_ADDR + 0x01C8)
#define IOMUXC_PAD_115		(IOMUXC_BASE_ADDR + 0x01CC)
#define IOMUXC_PAD_116		(IOMUXC_BASE_ADDR + 0x01D0)
#define IOMUXC_PAD_117		(IOMUXC_BASE_ADDR + 0x01D4)
#define IOMUXC_PAD_118		(IOMUXC_BASE_ADDR + 0x01D8)
#define IOMUXC_PAD_119		(IOMUXC_BASE_ADDR + 0x01DC)
#define IOMUXC_PAD_120		(IOMUXC_BASE_ADDR + 0x01E0)
#define IOMUXC_PAD_121		(IOMUXC_BASE_ADDR + 0x01E4)
#define IOMUXC_PAD_122		(IOMUXC_BASE_ADDR + 0x01E8)
#define IOMUXC_PAD_123		(IOMUXC_BASE_ADDR + 0x01EC)
#define IOMUXC_PAD_124		(IOMUXC_BASE_ADDR + 0x01F0)
#define IOMUXC_PAD_125		(IOMUXC_BASE_ADDR + 0x01F4)
#define IOMUXC_PAD_126		(IOMUXC_BASE_ADDR + 0x01F8)
#define IOMUXC_PAD_127		(IOMUXC_BASE_ADDR + 0x01FC)
#define IOMUXC_PAD_128		(IOMUXC_BASE_ADDR + 0x0200)
#define IOMUXC_PAD_129		(IOMUXC_BASE_ADDR + 0x0204)
#define IOMUXC_PAD_130		(IOMUXC_BASE_ADDR + 0x0208)
#define IOMUXC_PAD_131		(IOMUXC_BASE_ADDR + 0x020C)
#define IOMUXC_PAD_132		(IOMUXC_BASE_ADDR + 0x0210)
#define IOMUXC_PAD_133		(IOMUXC_BASE_ADDR + 0x0214)
#define IOMUXC_PAD_134		(IOMUXC_BASE_ADDR + 0x0218)

#define IOMUXC_DDR_RESET	(IOMUXC_BASE_ADDR + 0x021C)
#define IOMUXC_DDR_A15		(IOMUXC_BASE_ADDR + 0x0220)
#define IOMUXC_DDR_A14		(IOMUXC_BASE_ADDR + 0x0224)
#define IOMUXC_DDR_A13		(IOMUXC_BASE_ADDR + 0x0228)
#define IOMUXC_DDR_A12		(IOMUXC_BASE_ADDR + 0x022C)
#define IOMUXC_DDR_A11		(IOMUXC_BASE_ADDR + 0x0230)
#define IOMUXC_DDR_A10		(IOMUXC_BASE_ADDR + 0x0234)
#define IOMUXC_DDR_A9		(IOMUXC_BASE_ADDR + 0x0238)
#define IOMUXC_DDR_A8		(IOMUXC_BASE_ADDR + 0x023C)
#define IOMUXC_DDR_A7		(IOMUXC_BASE_ADDR + 0x0240)
#define IOMUXC_DDR_A6		(IOMUXC_BASE_ADDR + 0x0244)
#define IOMUXC_DDR_A5		(IOMUXC_BASE_ADDR + 0x0248)
#define IOMUXC_DDR_A4		(IOMUXC_BASE_ADDR + 0x024C)
#define IOMUXC_DDR_A3		(IOMUXC_BASE_ADDR + 0x0250)
#define IOMUXC_DDR_A2		(IOMUXC_BASE_ADDR + 0x0254)
#define IOMUXC_DDR_A1		(IOMUXC_BASE_ADDR + 0x0258)
#define IOMUXC_DDR_A0		(IOMUXC_BASE_ADDR + 0x025C)

#define IOMUXC_DDR_BA2		(IOMUXC_BASE_ADDR + 0x0260)
#define IOMUXC_DDR_BA1		(IOMUXC_BASE_ADDR + 0x0264)
#define IOMUXC_DDR_BA0		(IOMUXC_BASE_ADDR + 0x0268)

#define IOMUXC_DDR_CAS		(IOMUXC_BASE_ADDR + 0x026C)

#define IOMUXC_DDR_CKE		(IOMUXC_BASE_ADDR + 0x0270)

#define IOMUXC_DDR_CLK		(IOMUXC_BASE_ADDR + 0x0274)

#define IOMUXC_DDR_CS		(IOMUXC_BASE_ADDR + 0x0278)

#define IOMUXC_DDR_D15		(IOMUXC_BASE_ADDR + 0x027C)
#define IOMUXC_DDR_D14		(IOMUXC_BASE_ADDR + 0x0280)
#define IOMUXC_DDR_D13		(IOMUXC_BASE_ADDR + 0x0284)
#define IOMUXC_DDR_D12		(IOMUXC_BASE_ADDR + 0x0288)
#define IOMUXC_DDR_D11		(IOMUXC_BASE_ADDR + 0x028C)
#define IOMUXC_DDR_D10		(IOMUXC_BASE_ADDR + 0x0290)
#define IOMUXC_DDR_D9		(IOMUXC_BASE_ADDR + 0x0294)
#define IOMUXC_DDR_D8		(IOMUXC_BASE_ADDR + 0x0298)
#define IOMUXC_DDR_D7		(IOMUXC_BASE_ADDR + 0x029C)
#define IOMUXC_DDR_D6		(IOMUXC_BASE_ADDR + 0x02A0)
#define IOMUXC_DDR_D5		(IOMUXC_BASE_ADDR + 0x02A4)
#define IOMUXC_DDR_D4		(IOMUXC_BASE_ADDR + 0x02A8)
#define IOMUXC_DDR_D3		(IOMUXC_BASE_ADDR + 0x02AC)
#define IOMUXC_DDR_D2		(IOMUXC_BASE_ADDR + 0x02B0)
#define IOMUXC_DDR_D1		(IOMUXC_BASE_ADDR + 0x02B4)
#define IOMUXC_DDR_D0		(IOMUXC_BASE_ADDR + 0x02B8)

#define IOMUXC_DDR_DQM1		(IOMUXC_BASE_ADDR + 0x02BC)
#define IOMUXC_DDR_DQM0		(IOMUXC_BASE_ADDR + 0x02C0)

#define IOMUXC_DDR_DQS1		(IOMUXC_BASE_ADDR + 0x02C4)
#define IOMUXC_DDR_DQS0		(IOMUXC_BASE_ADDR + 0x02C8)

#define IOMUXC_DDR_RAS		(IOMUXC_BASE_ADDR + 0x02CC)
#define IOMUXC_DDR_WE		(IOMUXC_BASE_ADDR + 0x02D0)

#define IOMUXC_DDR_ODT0		(IOMUXC_BASE_ADDR + 0x02D4)
#define IOMUXC_DDR_ODT1		(IOMUXC_BASE_ADDR + 0x02D8)

#define IOMUXC_DDR_DDRBYTE1	(IOMUXC_BASE_ADDR + 0x02DC)
#define IOMUXC_DDR_DDRBYTE0	(IOMUXC_BASE_ADDR + 0x02E0)

#define IOMUXC_SDHC_DUMMY1	(IOMUXC_BASE_ADDR + 0x02E4)
#define IOMUXC_SDHC_DUMMY2	(IOMUXC_BASE_ADDR + 0x02E8)

#define IOMUXC_AUD_EXTCLK_INP	(IOMUXC_BASE_ADDR + 0x02EC)
#define IOMUXC_ENET_EXTCLK_INP	(IOMUXC_BASE_ADDR + 0x02F0)
#define IOMUXC_ENET_TSCLK_INP	(IOMUXC_BASE_ADDR + 0x02F4)

typedef struct pad_iomux {
	u8 mod;
	u8 spd;
	u8 sre;
	u8 ode;
	u8 hys;
	u8 dse;
	u8 pus;
	u8 pke;
	u8 pue;
	u8 obe;
	u8 ibe;
} pad_iomux_t;

#define PADIOMUX_SET(val, mod, spd, sre, ode, hys, dse, pus, pke, pue, obe, ibe)\
		(val = (((mod & 7) << 20) | ((spd & 3) << 12) |		\
		 ((sre & 1) << 11) | ((ode & 1) << 10) |		\
		 ((hys & 1) << 9) | ((dse & 7) << 6) |			\
		 ((pus & 3) << 4) | ((pke & 1) << 3) |			\
		 ((pue & 1) << 2) | ((obe & 1) << 1) |			\
		 (ibe & 1)))

#define DDRIOMUX_SET(inp, trim, hys, dse, pus, pke, pue)	\
		(((inp & 1) << 16) | ((trim & 3) << 14) |	\
		 ((hys & 1) << 9) | ((dse & 7) << 6) |		\
		 ((pus & 3) << 4) | ((pke & 1) << 3) |		\
		 ((pue & 1) << 2))

#define MUX_MODE_ALT0		0x00
#define MUX_MODE_ALT1		0x01
#define MUX_MODE_ALT2		0x02
#define MUX_MODE_ALT3		0x03
#define MUX_MODE_ALT4		0x04
#define MUX_MODE_ALT5		0x05
#define MUX_MODE_ALT6		0x06
#define MUX_MODE_ALT7		0x07

#define MUX_SPD_50MHZ		0x00
#define MUX_SPD_100MHZ		0x02
#define MUX_SPD_200MHZ		0x03

#define MUX_SRE_SLOW		0
#define MUX_SRE_FAST		1

#define MUX_ODE_CMOS		0
#define MUX_ODE_OPEN		1

#define MUX_HYS_CMOS		0
#define MUX_HYS_SCHMITT		1

#define MUX_DSE_20_OHM		7
#define MUX_DSE_25_OHM		6
#define MUX_DSE_30_OHM		5
#define MUX_DSE_37_OHM		4
#define MUX_DSE_50_OHM		3
#define MUX_DSE_75_OHM		2
#define MUX_DSE_150_OHM		1
#define MUX_DSE_DIS		0

#define MUX_PUS_22KOHM_UP	3
#define MUX_PUS_100KOHM_UP	2
#define MUX_PUS_47KOHM_UP	1
#define MUX_PUS_100KOHM_DN	0

#define MUX_PKE_EN		1
#define MUX_PKE_DIS		0

#define MUX_PUE_PULLEN		1
#define MUX_PUE_KEEPEREN	0

#define MUX_OBE_EN		1
#define MUX_OBE_DIS		0

#define MUX_IBE_EN		1
#define MUX_IBE_DIS		0

#define MUX_DDR_INPUT_DIFF	1
#define MUX_DDR_INPUT_CMOS	0

#define MUX_DDR_TRIM_150PS	3
#define MUX_DDR_TRIM_100PS	2
#define MUX_DDR_TRIM_50PS	1
#define MUX_DDR_TRIM_MIN	0

void pad_iomux_set(u32 pad_addr, pad_iomux_t *padio);

#endif				/*  __MACH_VYBRID_IOMUX_H__ */