1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16#include <common.h>
17#include <asm/arch/sys_proto.h>
18#include <asm/arch/hardware.h>
19#include <asm/arch/mux.h>
20#include <asm/io.h>
21#include <i2c.h>
22#include "../common/board_detect.h"
23#include "board.h"
24
25static struct module_pin_mux uart0_pin_mux[] = {
26 {OFFSET(uart0_rxd), (MODE(0) | PULLUP_EN | RXACTIVE)},
27 {OFFSET(uart0_txd), (MODE(0) | PULLUDEN)},
28 {-1},
29};
30
31static struct module_pin_mux uart1_pin_mux[] = {
32 {OFFSET(uart1_rxd), (MODE(0) | PULLUP_EN | RXACTIVE)},
33 {OFFSET(uart1_txd), (MODE(0) | PULLUDEN)},
34 {-1},
35};
36
37static struct module_pin_mux uart2_pin_mux[] = {
38 {OFFSET(spi0_sclk), (MODE(1) | PULLUP_EN | RXACTIVE)},
39 {OFFSET(spi0_d0), (MODE(1) | PULLUDEN)},
40 {-1},
41};
42
43static struct module_pin_mux uart3_pin_mux[] = {
44 {OFFSET(spi0_cs1), (MODE(1) | PULLUP_EN | RXACTIVE)},
45 {OFFSET(ecap0_in_pwm0_out), (MODE(1) | PULLUDEN)},
46 {-1},
47};
48
49static struct module_pin_mux uart4_pin_mux[] = {
50 {OFFSET(gpmc_wait0), (MODE(6) | PULLUP_EN | RXACTIVE)},
51 {OFFSET(gpmc_wpn), (MODE(6) | PULLUDEN)},
52 {-1},
53};
54
55static struct module_pin_mux uart5_pin_mux[] = {
56 {OFFSET(lcd_data9), (MODE(4) | PULLUP_EN | RXACTIVE)},
57 {OFFSET(lcd_data8), (MODE(4) | PULLUDEN)},
58 {-1},
59};
60
61static struct module_pin_mux mmc0_pin_mux[] = {
62 {OFFSET(mmc0_dat3), (MODE(0) | RXACTIVE | PULLUP_EN)},
63 {OFFSET(mmc0_dat2), (MODE(0) | RXACTIVE | PULLUP_EN)},
64 {OFFSET(mmc0_dat1), (MODE(0) | RXACTIVE | PULLUP_EN)},
65 {OFFSET(mmc0_dat0), (MODE(0) | RXACTIVE | PULLUP_EN)},
66 {OFFSET(mmc0_clk), (MODE(0) | RXACTIVE | PULLUP_EN)},
67 {OFFSET(mmc0_cmd), (MODE(0) | RXACTIVE | PULLUP_EN)},
68 {OFFSET(mcasp0_aclkr), (MODE(4) | RXACTIVE)},
69 {OFFSET(spi0_cs1), (MODE(7) | RXACTIVE | PULLUP_EN)},
70 {-1},
71};
72
73static struct module_pin_mux mmc0_no_cd_pin_mux[] = {
74 {OFFSET(mmc0_dat3), (MODE(0) | RXACTIVE | PULLUP_EN)},
75 {OFFSET(mmc0_dat2), (MODE(0) | RXACTIVE | PULLUP_EN)},
76 {OFFSET(mmc0_dat1), (MODE(0) | RXACTIVE | PULLUP_EN)},
77 {OFFSET(mmc0_dat0), (MODE(0) | RXACTIVE | PULLUP_EN)},
78 {OFFSET(mmc0_clk), (MODE(0) | RXACTIVE | PULLUP_EN)},
79 {OFFSET(mmc0_cmd), (MODE(0) | RXACTIVE | PULLUP_EN)},
80 {OFFSET(mcasp0_aclkr), (MODE(4) | RXACTIVE)},
81 {-1},
82};
83
84static struct module_pin_mux mmc0_pin_mux_sk_evm[] = {
85 {OFFSET(mmc0_dat3), (MODE(0) | RXACTIVE | PULLUP_EN)},
86 {OFFSET(mmc0_dat2), (MODE(0) | RXACTIVE | PULLUP_EN)},
87 {OFFSET(mmc0_dat1), (MODE(0) | RXACTIVE | PULLUP_EN)},
88 {OFFSET(mmc0_dat0), (MODE(0) | RXACTIVE | PULLUP_EN)},
89 {OFFSET(mmc0_clk), (MODE(0) | RXACTIVE | PULLUP_EN)},
90 {OFFSET(mmc0_cmd), (MODE(0) | RXACTIVE | PULLUP_EN)},
91 {OFFSET(spi0_cs1), (MODE(5) | RXACTIVE | PULLUP_EN)},
92 {-1},
93};
94
95static struct module_pin_mux mmc1_pin_mux[] = {
96 {OFFSET(gpmc_ad7), (MODE(1) | RXACTIVE | PULLUP_EN)},
97 {OFFSET(gpmc_ad6), (MODE(1) | RXACTIVE | PULLUP_EN)},
98 {OFFSET(gpmc_ad5), (MODE(1) | RXACTIVE | PULLUP_EN)},
99 {OFFSET(gpmc_ad4), (MODE(1) | RXACTIVE | PULLUP_EN)},
100 {OFFSET(gpmc_ad3), (MODE(1) | RXACTIVE | PULLUP_EN)},
101 {OFFSET(gpmc_ad2), (MODE(1) | RXACTIVE | PULLUP_EN)},
102 {OFFSET(gpmc_ad1), (MODE(1) | RXACTIVE | PULLUP_EN)},
103 {OFFSET(gpmc_ad0), (MODE(1) | RXACTIVE | PULLUP_EN)},
104 {OFFSET(gpmc_csn1), (MODE(2) | RXACTIVE | PULLUP_EN)},
105 {OFFSET(gpmc_csn2), (MODE(2) | RXACTIVE | PULLUP_EN)},
106 {OFFSET(gpmc_csn0), (MODE(7) | RXACTIVE | PULLUP_EN)},
107 {OFFSET(gpmc_advn_ale), (MODE(7) | RXACTIVE | PULLUP_EN)},
108 {-1},
109};
110
111static struct module_pin_mux i2c0_pin_mux[] = {
112 {OFFSET(i2c0_sda), (MODE(0) | RXACTIVE |
113 PULLUDEN | SLEWCTRL)},
114 {OFFSET(i2c0_scl), (MODE(0) | RXACTIVE |
115 PULLUDEN | SLEWCTRL)},
116 {-1},
117};
118
119static struct module_pin_mux i2c1_pin_mux[] = {
120 {OFFSET(spi0_d1), (MODE(2) | RXACTIVE |
121 PULLUDEN | SLEWCTRL)},
122 {OFFSET(spi0_cs0), (MODE(2) | RXACTIVE |
123 PULLUDEN | SLEWCTRL)},
124 {-1},
125};
126
127static struct module_pin_mux i2c2_pin_mux[] = {
128 {OFFSET(uart1_ctsn), (MODE(3) | RXACTIVE |
129 PULLUDEN | PULLUP_EN | SLEWCTRL)},
130 {OFFSET(uart1_rtsn), (MODE(3) | RXACTIVE |
131 PULLUDEN | PULLUP_EN | SLEWCTRL)},
132 {-1},
133};
134
135static struct module_pin_mux spi0_pin_mux[] = {
136 {OFFSET(spi0_sclk), (MODE(0) | RXACTIVE | PULLUDEN)},
137 {OFFSET(spi0_d0), (MODE(0) | RXACTIVE |
138 PULLUDEN | PULLUP_EN)},
139 {OFFSET(spi0_d1), (MODE(0) | RXACTIVE | PULLUDEN)},
140 {OFFSET(spi0_cs0), (MODE(0) | RXACTIVE |
141 PULLUDEN | PULLUP_EN)},
142 {-1},
143};
144
145static struct module_pin_mux gpio0_7_pin_mux[] = {
146 {OFFSET(ecap0_in_pwm0_out), (MODE(7) | PULLUDEN)},
147 {-1},
148};
149
150static struct module_pin_mux gpio0_18_pin_mux[] = {
151 {OFFSET(usb0_drvvbus), (MODE(7) | PULLUDEN)},
152 {-1},
153};
154
155static struct module_pin_mux rgmii1_pin_mux[] = {
156 {OFFSET(mii1_txen), MODE(2)},
157 {OFFSET(mii1_rxdv), MODE(2) | RXACTIVE},
158 {OFFSET(mii1_txd3), MODE(2)},
159 {OFFSET(mii1_txd2), MODE(2)},
160 {OFFSET(mii1_txd1), MODE(2)},
161 {OFFSET(mii1_txd0), MODE(2)},
162 {OFFSET(mii1_txclk), MODE(2)},
163 {OFFSET(mii1_rxclk), MODE(2) | RXACTIVE},
164 {OFFSET(mii1_rxd3), MODE(2) | RXACTIVE},
165 {OFFSET(mii1_rxd2), MODE(2) | RXACTIVE},
166 {OFFSET(mii1_rxd1), MODE(2) | RXACTIVE},
167 {OFFSET(mii1_rxd0), MODE(2) | RXACTIVE},
168 {OFFSET(mdio_data), MODE(0) | RXACTIVE | PULLUP_EN},
169 {OFFSET(mdio_clk), MODE(0) | PULLUP_EN},
170 {-1},
171};
172
173static struct module_pin_mux mii1_pin_mux[] = {
174 {OFFSET(mii1_rxerr), MODE(0) | RXACTIVE},
175 {OFFSET(mii1_txen), MODE(0)},
176 {OFFSET(mii1_rxdv), MODE(0) | RXACTIVE},
177 {OFFSET(mii1_txd3), MODE(0)},
178 {OFFSET(mii1_txd2), MODE(0)},
179 {OFFSET(mii1_txd1), MODE(0)},
180 {OFFSET(mii1_txd0), MODE(0)},
181 {OFFSET(mii1_txclk), MODE(0) | RXACTIVE},
182 {OFFSET(mii1_rxclk), MODE(0) | RXACTIVE},
183 {OFFSET(mii1_rxd3), MODE(0) | RXACTIVE},
184 {OFFSET(mii1_rxd2), MODE(0) | RXACTIVE},
185 {OFFSET(mii1_rxd1), MODE(0) | RXACTIVE},
186 {OFFSET(mii1_rxd0), MODE(0) | RXACTIVE},
187 {OFFSET(mdio_data), MODE(0) | RXACTIVE | PULLUP_EN},
188 {OFFSET(mdio_clk), MODE(0) | PULLUP_EN},
189 {-1},
190};
191
192static struct module_pin_mux rmii1_pin_mux[] = {
193 {OFFSET(mdio_clk), MODE(0) | PULLUP_EN},
194 {OFFSET(mdio_data), MODE(0) | RXACTIVE | PULLUP_EN},
195 {OFFSET(mii1_crs), MODE(1) | RXACTIVE},
196 {OFFSET(mii1_rxerr), MODE(1) | RXACTIVE},
197 {OFFSET(mii1_txen), MODE(1)},
198 {OFFSET(mii1_txd1), MODE(1)},
199 {OFFSET(mii1_txd0), MODE(1)},
200 {OFFSET(mii1_rxd1), MODE(1) | RXACTIVE},
201 {OFFSET(mii1_rxd0), MODE(1) | RXACTIVE},
202 {OFFSET(rmii1_refclk), MODE(0) | RXACTIVE},
203 {-1},
204};
205
206#ifdef CONFIG_MTD_RAW_NAND
207static struct module_pin_mux nand_pin_mux[] = {
208 {OFFSET(gpmc_ad0), (MODE(0) | PULLUDDIS | RXACTIVE)},
209 {OFFSET(gpmc_ad1), (MODE(0) | PULLUDDIS | RXACTIVE)},
210 {OFFSET(gpmc_ad2), (MODE(0) | PULLUDDIS | RXACTIVE)},
211 {OFFSET(gpmc_ad3), (MODE(0) | PULLUDDIS | RXACTIVE)},
212 {OFFSET(gpmc_ad4), (MODE(0) | PULLUDDIS | RXACTIVE)},
213 {OFFSET(gpmc_ad5), (MODE(0) | PULLUDDIS | RXACTIVE)},
214 {OFFSET(gpmc_ad6), (MODE(0) | PULLUDDIS | RXACTIVE)},
215 {OFFSET(gpmc_ad7), (MODE(0) | PULLUDDIS | RXACTIVE)},
216#ifdef CONFIG_SYS_NAND_BUSWIDTH_16BIT
217 {OFFSET(gpmc_ad8), (MODE(0) | PULLUDDIS | RXACTIVE)},
218 {OFFSET(gpmc_ad9), (MODE(0) | PULLUDDIS | RXACTIVE)},
219 {OFFSET(gpmc_ad10), (MODE(0) | PULLUDDIS | RXACTIVE)},
220 {OFFSET(gpmc_ad11), (MODE(0) | PULLUDDIS | RXACTIVE)},
221 {OFFSET(gpmc_ad12), (MODE(0) | PULLUDDIS | RXACTIVE)},
222 {OFFSET(gpmc_ad13), (MODE(0) | PULLUDDIS | RXACTIVE)},
223 {OFFSET(gpmc_ad14), (MODE(0) | PULLUDDIS | RXACTIVE)},
224 {OFFSET(gpmc_ad15), (MODE(0) | PULLUDDIS | RXACTIVE)},
225#endif
226 {OFFSET(gpmc_wait0), (MODE(0) | PULLUP_EN | RXACTIVE)},
227 {OFFSET(gpmc_wpn), (MODE(7) | PULLUP_EN)},
228 {OFFSET(gpmc_csn0), (MODE(0) | PULLUP_EN)},
229 {OFFSET(gpmc_wen), (MODE(0) | PULLDOWN_EN)},
230 {OFFSET(gpmc_oen_ren), (MODE(0) | PULLDOWN_EN)},
231 {OFFSET(gpmc_advn_ale), (MODE(0) | PULLDOWN_EN)},
232 {OFFSET(gpmc_be0n_cle), (MODE(0) | PULLDOWN_EN)},
233 {-1},
234};
235#elif defined(CONFIG_NOR)
236static struct module_pin_mux bone_norcape_pin_mux[] = {
237 {OFFSET(gpmc_a0), MODE(0) | PULLUDDIS},
238 {OFFSET(gpmc_a1), MODE(0) | PULLUDDIS},
239 {OFFSET(gpmc_a2), MODE(0) | PULLUDDIS},
240 {OFFSET(gpmc_a3), MODE(0) | PULLUDDIS},
241 {OFFSET(gpmc_a4), MODE(0) | PULLUDDIS},
242 {OFFSET(gpmc_a5), MODE(0) | PULLUDDIS},
243 {OFFSET(gpmc_a6), MODE(0) | PULLUDDIS},
244 {OFFSET(gpmc_a7), MODE(0) | PULLUDDIS},
245 {OFFSET(gpmc_ad0), MODE(0) | PULLUDDIS | RXACTIVE},
246 {OFFSET(gpmc_ad1), MODE(0) | PULLUDDIS | RXACTIVE},
247 {OFFSET(gpmc_ad2), MODE(0) | PULLUDDIS | RXACTIVE},
248 {OFFSET(gpmc_ad3), MODE(0) | PULLUDDIS | RXACTIVE},
249 {OFFSET(gpmc_ad4), MODE(0) | PULLUDDIS | RXACTIVE},
250 {OFFSET(gpmc_ad5), MODE(0) | PULLUDDIS | RXACTIVE},
251 {OFFSET(gpmc_ad6), MODE(0) | PULLUDDIS | RXACTIVE},
252 {OFFSET(gpmc_ad7), MODE(0) | PULLUDDIS | RXACTIVE},
253 {OFFSET(gpmc_ad8), MODE(0) | PULLUDDIS | RXACTIVE},
254 {OFFSET(gpmc_ad9), MODE(0) | PULLUDDIS | RXACTIVE},
255 {OFFSET(gpmc_ad10), MODE(0) | PULLUDDIS | RXACTIVE},
256 {OFFSET(gpmc_ad11), MODE(0) | PULLUDDIS | RXACTIVE},
257 {OFFSET(gpmc_ad12), MODE(0) | PULLUDDIS | RXACTIVE},
258 {OFFSET(gpmc_ad13), MODE(0) | PULLUDDIS | RXACTIVE},
259 {OFFSET(gpmc_ad14), MODE(0) | PULLUDDIS | RXACTIVE},
260 {OFFSET(gpmc_ad15), MODE(0) | PULLUDDIS | RXACTIVE},
261 {OFFSET(gpmc_csn0), MODE(0) | PULLUDEN | PULLUP_EN},
262 {OFFSET(gpmc_advn_ale), MODE(0) | PULLUDEN | PULLDOWN_EN},
263 {OFFSET(gpmc_oen_ren), MODE(0) | PULLUDEN | PULLDOWN_EN},
264 {OFFSET(gpmc_be0n_cle), MODE(0) | PULLUDEN | PULLDOWN_EN},
265 {OFFSET(gpmc_wen), MODE(0) | PULLUDEN | PULLDOWN_EN},
266 {OFFSET(gpmc_wait0), MODE(0) | PULLUDEN | PULLUP_EN | RXACTIVE},
267 {-1},
268};
269#endif
270
271static struct module_pin_mux uart3_icev2_pin_mux[] = {
272 {OFFSET(mii1_rxd3), (MODE(1) | PULLUP_EN | RXACTIVE)},
273 {OFFSET(mii1_rxd2), MODE(1) | PULLUDEN},
274 {-1},
275};
276
277#if defined(CONFIG_NOR_BOOT)
278void enable_norboot_pin_mux(void)
279{
280 configure_module_pin_mux(bone_norcape_pin_mux);
281}
282#endif
283
284void enable_uart0_pin_mux(void)
285{
286 configure_module_pin_mux(uart0_pin_mux);
287}
288
289void enable_uart1_pin_mux(void)
290{
291 configure_module_pin_mux(uart1_pin_mux);
292}
293
294void enable_uart2_pin_mux(void)
295{
296 configure_module_pin_mux(uart2_pin_mux);
297}
298
299void enable_uart3_pin_mux(void)
300{
301 configure_module_pin_mux(uart3_pin_mux);
302}
303
304void enable_uart4_pin_mux(void)
305{
306 configure_module_pin_mux(uart4_pin_mux);
307}
308
309void enable_uart5_pin_mux(void)
310{
311 configure_module_pin_mux(uart5_pin_mux);
312}
313
314void enable_i2c0_pin_mux(void)
315{
316 configure_module_pin_mux(i2c0_pin_mux);
317}
318
319void enable_i2c2_pin_mux(void)
320{
321 configure_module_pin_mux(i2c2_pin_mux);
322}
323
324
325
326
327
328
329#define PROFILE_NONE 0x0
330#define PROFILE_0 (1 << 0)
331#define PROFILE_1 (1 << 1)
332#define PROFILE_2 (1 << 2)
333#define PROFILE_3 (1 << 3)
334#define PROFILE_4 (1 << 4)
335#define PROFILE_5 (1 << 5)
336#define PROFILE_6 (1 << 6)
337#define PROFILE_7 (1 << 7)
338#define PROFILE_MASK 0x7
339#define PROFILE_ALL 0xFF
340
341
342#define I2C_CPLD_ADDR 0x35
343#define CFG_REG 0x10
344
345static unsigned short detect_daughter_board_profile(void)
346{
347 unsigned short val;
348 struct udevice *dev = NULL;
349 int rc;
350
351 rc = i2c_get_chip_for_busnum(0, I2C_CPLD_ADDR, 1, &dev);
352 if (rc)
353 return PROFILE_NONE;
354 rc = dm_i2c_read(dev, CFG_REG, (unsigned char *)(&val), 2);
355 if (rc)
356 return PROFILE_NONE;
357 return (1 << (val & PROFILE_MASK));
358}
359
360void enable_board_pin_mux(void)
361{
362
363 if (board_is_bone()) {
364
365 configure_module_pin_mux(mii1_pin_mux);
366 configure_module_pin_mux(mmc0_pin_mux);
367#if defined(CONFIG_MTD_RAW_NAND)
368 configure_module_pin_mux(nand_pin_mux);
369#elif defined(CONFIG_NOR)
370 configure_module_pin_mux(bone_norcape_pin_mux);
371#else
372 configure_module_pin_mux(mmc1_pin_mux);
373#endif
374 configure_module_pin_mux(i2c2_pin_mux);
375 } else if (board_is_gp_evm()) {
376
377 unsigned short profile = detect_daughter_board_profile();
378 configure_module_pin_mux(rgmii1_pin_mux);
379 configure_module_pin_mux(mmc0_pin_mux);
380
381 if (profile & ~PROFILE_2)
382 configure_module_pin_mux(i2c1_pin_mux);
383
384#ifdef CONFIG_MTD_RAW_NAND
385 if (profile & ~(PROFILE_2 | PROFILE_3))
386 configure_module_pin_mux(nand_pin_mux);
387#endif
388 else if (profile == PROFILE_2) {
389 configure_module_pin_mux(mmc1_pin_mux);
390 configure_module_pin_mux(spi0_pin_mux);
391 }
392 } else if (board_is_idk()) {
393
394 configure_module_pin_mux(mii1_pin_mux);
395 configure_module_pin_mux(mmc0_no_cd_pin_mux);
396 } else if (board_is_evm_sk()) {
397
398 configure_module_pin_mux(i2c1_pin_mux);
399 configure_module_pin_mux(gpio0_7_pin_mux);
400 configure_module_pin_mux(rgmii1_pin_mux);
401 configure_module_pin_mux(mmc0_pin_mux_sk_evm);
402 } else if (board_is_bone_lt()) {
403 if (board_is_bben()) {
404
405 configure_module_pin_mux(rgmii1_pin_mux);
406 } else {
407
408 configure_module_pin_mux(mii1_pin_mux);
409 }
410
411 configure_module_pin_mux(mmc0_pin_mux);
412#if defined(CONFIG_MTD_RAW_NAND) && defined(CONFIG_EMMC_BOOT)
413 configure_module_pin_mux(nand_pin_mux);
414#elif defined(CONFIG_NOR) && defined(CONFIG_EMMC_BOOT)
415 configure_module_pin_mux(bone_norcape_pin_mux);
416#else
417 configure_module_pin_mux(mmc1_pin_mux);
418#endif
419 configure_module_pin_mux(i2c2_pin_mux);
420 } else if (board_is_pb()) {
421 configure_module_pin_mux(mii1_pin_mux);
422 configure_module_pin_mux(mmc0_pin_mux);
423 } else if (board_is_icev2()) {
424 configure_module_pin_mux(mmc0_pin_mux);
425 configure_module_pin_mux(gpio0_18_pin_mux);
426 configure_module_pin_mux(uart3_icev2_pin_mux);
427 configure_module_pin_mux(rmii1_pin_mux);
428 configure_module_pin_mux(spi0_pin_mux);
429 } else {
430
431 puts("Bad EEPROM or unknown board, cannot configure pinmux.");
432 }
433}
434