xref: /rk3399_rockchip-uboot/board/freescale/mx51evk/mx51evk.c (revision e4d34492017c95e4041ea0c581e1ab8d1d49381b)
1c5fb70c9SStefano Babic /*
2c5fb70c9SStefano Babic  * (C) Copyright 2009 Freescale Semiconductor, Inc.
3c5fb70c9SStefano Babic  *
4c5fb70c9SStefano Babic  * See file CREDITS for list of people who contributed to this
5c5fb70c9SStefano Babic  * project.
6c5fb70c9SStefano Babic  *
7c5fb70c9SStefano Babic  * This program is free software; you can redistribute it and/or
8c5fb70c9SStefano Babic  * modify it under the terms of the GNU General Public License as
9c5fb70c9SStefano Babic  * published by the Free Software Foundation; either version 2 of
10c5fb70c9SStefano Babic  * the License, or (at your option) any later version.
11c5fb70c9SStefano Babic  *
12c5fb70c9SStefano Babic  * This program is distributed in the hope that it will be useful,
13c5fb70c9SStefano Babic  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14c5fb70c9SStefano Babic  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15c5fb70c9SStefano Babic  * GNU General Public License for more details.
16c5fb70c9SStefano Babic  *
17c5fb70c9SStefano Babic  * You should have received a copy of the GNU General Public License
18c5fb70c9SStefano Babic  * along with this program; if not, write to the Free Software
19c5fb70c9SStefano Babic  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
20c5fb70c9SStefano Babic  * MA 02111-1307 USA
21c5fb70c9SStefano Babic  */
22c5fb70c9SStefano Babic 
23c5fb70c9SStefano Babic #include <common.h>
24c5fb70c9SStefano Babic #include <asm/io.h>
25c5fb70c9SStefano Babic #include <asm/arch/imx-regs.h>
26c5fb70c9SStefano Babic #include <asm/arch/mx51_pins.h>
27c5fb70c9SStefano Babic #include <asm/arch/iomux.h>
28c5fb70c9SStefano Babic #include <asm/errno.h>
29*e4d34492SStefano Babic #include <asm/arch/sys_proto.h>
30c5fb70c9SStefano Babic #include <i2c.h>
31c5fb70c9SStefano Babic #include <mmc.h>
32c5fb70c9SStefano Babic #include <fsl_esdhc.h>
33c5fb70c9SStefano Babic #include "mx51evk.h"
34c5fb70c9SStefano Babic 
35c5fb70c9SStefano Babic DECLARE_GLOBAL_DATA_PTR;
36c5fb70c9SStefano Babic 
37c5fb70c9SStefano Babic static u32 system_rev;
38c5fb70c9SStefano Babic struct io_board_ctrl *mx51_io_board;
39c5fb70c9SStefano Babic 
40c5fb70c9SStefano Babic #ifdef CONFIG_FSL_ESDHC
41c5fb70c9SStefano Babic struct fsl_esdhc_cfg esdhc_cfg[2] = {
42c5fb70c9SStefano Babic 	{MMC_SDHC1_BASE_ADDR, 1, 1},
43c5fb70c9SStefano Babic 	{MMC_SDHC2_BASE_ADDR, 1, 1},
44c5fb70c9SStefano Babic };
45c5fb70c9SStefano Babic #endif
46c5fb70c9SStefano Babic 
47c5fb70c9SStefano Babic u32 get_board_rev(void)
48c5fb70c9SStefano Babic {
49c5fb70c9SStefano Babic 	return system_rev;
50c5fb70c9SStefano Babic }
51c5fb70c9SStefano Babic 
52c5fb70c9SStefano Babic int dram_init(void)
53c5fb70c9SStefano Babic {
54c5fb70c9SStefano Babic 	gd->bd->bi_dram[0].start = PHYS_SDRAM_1;
55c5fb70c9SStefano Babic 	gd->bd->bi_dram[0].size = get_ram_size((long *)PHYS_SDRAM_1,
56c5fb70c9SStefano Babic 			PHYS_SDRAM_1_SIZE);
57c5fb70c9SStefano Babic 	return 0;
58c5fb70c9SStefano Babic }
59c5fb70c9SStefano Babic 
60c5fb70c9SStefano Babic static void setup_iomux_uart(void)
61c5fb70c9SStefano Babic {
62c5fb70c9SStefano Babic 	unsigned int pad = PAD_CTL_HYS_ENABLE | PAD_CTL_PKE_ENABLE |
63c5fb70c9SStefano Babic 			PAD_CTL_PUE_PULL | PAD_CTL_DRV_HIGH;
64c5fb70c9SStefano Babic 
65c5fb70c9SStefano Babic 	mxc_request_iomux(MX51_PIN_UART1_RXD, IOMUX_CONFIG_ALT0);
66c5fb70c9SStefano Babic 	mxc_iomux_set_pad(MX51_PIN_UART1_RXD, pad | PAD_CTL_SRE_FAST);
67c5fb70c9SStefano Babic 	mxc_request_iomux(MX51_PIN_UART1_TXD, IOMUX_CONFIG_ALT0);
68c5fb70c9SStefano Babic 	mxc_iomux_set_pad(MX51_PIN_UART1_TXD, pad | PAD_CTL_SRE_FAST);
69c5fb70c9SStefano Babic 	mxc_request_iomux(MX51_PIN_UART1_RTS, IOMUX_CONFIG_ALT0);
70c5fb70c9SStefano Babic 	mxc_iomux_set_pad(MX51_PIN_UART1_RTS, pad);
71c5fb70c9SStefano Babic 	mxc_request_iomux(MX51_PIN_UART1_CTS, IOMUX_CONFIG_ALT0);
72c5fb70c9SStefano Babic 	mxc_iomux_set_pad(MX51_PIN_UART1_CTS, pad);
73c5fb70c9SStefano Babic }
74c5fb70c9SStefano Babic 
75c5fb70c9SStefano Babic static void setup_expio(void)
76c5fb70c9SStefano Babic {
77c5fb70c9SStefano Babic 	u32 reg;
78c5fb70c9SStefano Babic 	struct weim *pweim = (struct weim *)WEIM_BASE_ADDR;
79c5fb70c9SStefano Babic 	struct clkctl *pclkctl = (struct clkctl *)CCM_BASE_ADDR;
80c5fb70c9SStefano Babic 
81c5fb70c9SStefano Babic 	/* CS5 setup */
82c5fb70c9SStefano Babic 	mxc_request_iomux(MX51_PIN_EIM_CS5, IOMUX_CONFIG_ALT0);
83c5fb70c9SStefano Babic 	writel(0x00410089, &pweim[5].csgcr1);
84c5fb70c9SStefano Babic 	writel(0x00000002, &pweim[5].csgcr2);
85c5fb70c9SStefano Babic 
86c5fb70c9SStefano Babic 	/* RWSC=50, RADVA=2, RADVN=6, OEA=0, OEN=0, RCSA=0, RCSN=0 */
87c5fb70c9SStefano Babic 	writel(0x32260000, &pweim[5].csrcr1);
88c5fb70c9SStefano Babic 
89c5fb70c9SStefano Babic 	/* APR = 0 */
90c5fb70c9SStefano Babic 	writel(0x00000000, &pweim[5].csrcr2);
91c5fb70c9SStefano Babic 
92c5fb70c9SStefano Babic 	/*
93c5fb70c9SStefano Babic 	 * WAL=0, WBED=1, WWSC=50, WADVA=2, WADVN=6, WEA=0, WEN=0,
94c5fb70c9SStefano Babic 	 * WCSA=0, WCSN=0
95c5fb70c9SStefano Babic 	 */
96c5fb70c9SStefano Babic 	writel(0x72080F00, &pweim[5].cswcr1);
97c5fb70c9SStefano Babic 
98c5fb70c9SStefano Babic 	mx51_io_board = (struct io_board_ctrl *)(CS5_BASE_ADDR +
99c5fb70c9SStefano Babic 						IO_BOARD_OFFSET);
100c5fb70c9SStefano Babic 	if ((readw(&mx51_io_board->id1) == 0xAAAA) &&
101c5fb70c9SStefano Babic 		(readw(&mx51_io_board->id2) == 0x5555)) {
102c5fb70c9SStefano Babic 		if (is_soc_rev(CHIP_REV_2_0) < 0) {
103c5fb70c9SStefano Babic 			reg = readl(&pclkctl->cbcdr);
104c5fb70c9SStefano Babic 			reg = (reg & (~0x70000)) | 0x30000;
105c5fb70c9SStefano Babic 			writel(reg, &pclkctl->cbcdr);
106c5fb70c9SStefano Babic 			/* make sure divider effective */
107c5fb70c9SStefano Babic 			while (readl(&pclkctl->cdhipr) != 0)
108c5fb70c9SStefano Babic 				;
109c5fb70c9SStefano Babic 			writel(0x0, &pclkctl->ccdr);
110c5fb70c9SStefano Babic 		}
111c5fb70c9SStefano Babic 	} else {
112c5fb70c9SStefano Babic 		/* CS1 */
113c5fb70c9SStefano Babic 		writel(0x00410089, &pweim[1].csgcr1);
114c5fb70c9SStefano Babic 		writel(0x00000002, &pweim[1].csgcr2);
115c5fb70c9SStefano Babic 		/*  RWSC=50, RADVA=2, RADVN=6, OEA=0, OEN=0, RCSA=0, RCSN=0 */
116c5fb70c9SStefano Babic 		writel(0x32260000, &pweim[1].csrcr1);
117c5fb70c9SStefano Babic 		/* APR=0 */
118c5fb70c9SStefano Babic 		writel(0x00000000, &pweim[1].csrcr2);
119c5fb70c9SStefano Babic 		/*
120c5fb70c9SStefano Babic 		 * WAL=0, WBED=1, WWSC=50, WADVA=2, WADVN=6, WEA=0,
121c5fb70c9SStefano Babic 		 * WEN=0, WCSA=0, WCSN=0
122c5fb70c9SStefano Babic 		 */
123c5fb70c9SStefano Babic 		writel(0x72080F00, &pweim[1].cswcr1);
124c5fb70c9SStefano Babic 		mx51_io_board = (struct io_board_ctrl *)(CS1_BASE_ADDR +
125c5fb70c9SStefano Babic 						IO_BOARD_OFFSET);
126c5fb70c9SStefano Babic 	}
127c5fb70c9SStefano Babic 
128c5fb70c9SStefano Babic 	/* Reset interrupt status reg */
129c5fb70c9SStefano Babic 	writew(0x1F, &(mx51_io_board->int_rest));
130c5fb70c9SStefano Babic 	writew(0x00, &(mx51_io_board->int_rest));
131c5fb70c9SStefano Babic 	writew(0xFFFF, &(mx51_io_board->int_mask));
132c5fb70c9SStefano Babic 
133c5fb70c9SStefano Babic 	/* Reset the XUART and Ethernet controllers */
134c5fb70c9SStefano Babic 	reg = readw(&(mx51_io_board->sw_reset));
135c5fb70c9SStefano Babic 	reg |= 0x9;
136c5fb70c9SStefano Babic 	writew(reg, &(mx51_io_board->sw_reset));
137c5fb70c9SStefano Babic 	reg &= ~0x9;
138c5fb70c9SStefano Babic 	writew(reg, &(mx51_io_board->sw_reset));
139c5fb70c9SStefano Babic }
140c5fb70c9SStefano Babic 
141c5fb70c9SStefano Babic static void setup_iomux_fec(void)
142c5fb70c9SStefano Babic {
143c5fb70c9SStefano Babic 	/*FEC_MDIO*/
144c5fb70c9SStefano Babic 	mxc_request_iomux(MX51_PIN_EIM_EB2 , IOMUX_CONFIG_ALT3);
145c5fb70c9SStefano Babic 	mxc_iomux_set_pad(MX51_PIN_EIM_EB2 , 0x1FD);
146c5fb70c9SStefano Babic 
147c5fb70c9SStefano Babic 	/*FEC_MDC*/
148c5fb70c9SStefano Babic 	mxc_request_iomux(MX51_PIN_NANDF_CS3, IOMUX_CONFIG_ALT2);
149c5fb70c9SStefano Babic 	mxc_iomux_set_pad(MX51_PIN_NANDF_CS3, 0x2004);
150c5fb70c9SStefano Babic 
151c5fb70c9SStefano Babic 	/* FEC RDATA[3] */
152c5fb70c9SStefano Babic 	mxc_request_iomux(MX51_PIN_EIM_CS3, IOMUX_CONFIG_ALT3);
153c5fb70c9SStefano Babic 	mxc_iomux_set_pad(MX51_PIN_EIM_CS3, 0x180);
154c5fb70c9SStefano Babic 
155c5fb70c9SStefano Babic 	/* FEC RDATA[2] */
156c5fb70c9SStefano Babic 	mxc_request_iomux(MX51_PIN_EIM_CS2, IOMUX_CONFIG_ALT3);
157c5fb70c9SStefano Babic 	mxc_iomux_set_pad(MX51_PIN_EIM_CS2, 0x180);
158c5fb70c9SStefano Babic 
159c5fb70c9SStefano Babic 	/* FEC RDATA[1] */
160c5fb70c9SStefano Babic 	mxc_request_iomux(MX51_PIN_EIM_EB3, IOMUX_CONFIG_ALT3);
161c5fb70c9SStefano Babic 	mxc_iomux_set_pad(MX51_PIN_EIM_EB3, 0x180);
162c5fb70c9SStefano Babic 
163c5fb70c9SStefano Babic 	/* FEC RDATA[0] */
164c5fb70c9SStefano Babic 	mxc_request_iomux(MX51_PIN_NANDF_D9, IOMUX_CONFIG_ALT2);
165c5fb70c9SStefano Babic 	mxc_iomux_set_pad(MX51_PIN_NANDF_D9, 0x2180);
166c5fb70c9SStefano Babic 
167c5fb70c9SStefano Babic 	/* FEC TDATA[3] */
168c5fb70c9SStefano Babic 	mxc_request_iomux(MX51_PIN_NANDF_CS6, IOMUX_CONFIG_ALT2);
169c5fb70c9SStefano Babic 	mxc_iomux_set_pad(MX51_PIN_NANDF_CS6, 0x2004);
170c5fb70c9SStefano Babic 
171c5fb70c9SStefano Babic 	/* FEC TDATA[2] */
172c5fb70c9SStefano Babic 	mxc_request_iomux(MX51_PIN_NANDF_CS5, IOMUX_CONFIG_ALT2);
173c5fb70c9SStefano Babic 	mxc_iomux_set_pad(MX51_PIN_NANDF_CS5, 0x2004);
174c5fb70c9SStefano Babic 
175c5fb70c9SStefano Babic 	/* FEC TDATA[1] */
176c5fb70c9SStefano Babic 	mxc_request_iomux(MX51_PIN_NANDF_CS4, IOMUX_CONFIG_ALT2);
177c5fb70c9SStefano Babic 	mxc_iomux_set_pad(MX51_PIN_NANDF_CS4, 0x2004);
178c5fb70c9SStefano Babic 
179c5fb70c9SStefano Babic 	/* FEC TDATA[0] */
180c5fb70c9SStefano Babic 	mxc_request_iomux(MX51_PIN_NANDF_D8, IOMUX_CONFIG_ALT2);
181c5fb70c9SStefano Babic 	mxc_iomux_set_pad(MX51_PIN_NANDF_D8, 0x2004);
182c5fb70c9SStefano Babic 
183c5fb70c9SStefano Babic 	/* FEC TX_EN */
184c5fb70c9SStefano Babic 	mxc_request_iomux(MX51_PIN_NANDF_CS7, IOMUX_CONFIG_ALT1);
185c5fb70c9SStefano Babic 	mxc_iomux_set_pad(MX51_PIN_NANDF_CS7, 0x2004);
186c5fb70c9SStefano Babic 
187c5fb70c9SStefano Babic 	/* FEC TX_ER */
188c5fb70c9SStefano Babic 	mxc_request_iomux(MX51_PIN_NANDF_CS2, IOMUX_CONFIG_ALT2);
189c5fb70c9SStefano Babic 	mxc_iomux_set_pad(MX51_PIN_NANDF_CS2, 0x2004);
190c5fb70c9SStefano Babic 
191c5fb70c9SStefano Babic 	/* FEC TX_CLK */
192c5fb70c9SStefano Babic 	mxc_request_iomux(MX51_PIN_NANDF_RDY_INT, IOMUX_CONFIG_ALT1);
193c5fb70c9SStefano Babic 	mxc_iomux_set_pad(MX51_PIN_NANDF_RDY_INT, 0x2180);
194c5fb70c9SStefano Babic 
195c5fb70c9SStefano Babic 	/* FEC TX_COL */
196c5fb70c9SStefano Babic 	mxc_request_iomux(MX51_PIN_NANDF_RB2, IOMUX_CONFIG_ALT1);
197c5fb70c9SStefano Babic 	mxc_iomux_set_pad(MX51_PIN_NANDF_RB2, 0x2180);
198c5fb70c9SStefano Babic 
199c5fb70c9SStefano Babic 	/* FEC RX_CLK */
200c5fb70c9SStefano Babic 	mxc_request_iomux(MX51_PIN_NANDF_RB3, IOMUX_CONFIG_ALT1);
201c5fb70c9SStefano Babic 	mxc_iomux_set_pad(MX51_PIN_NANDF_RB3, 0x2180);
202c5fb70c9SStefano Babic 
203c5fb70c9SStefano Babic 	/* FEC RX_CRS */
204c5fb70c9SStefano Babic 	mxc_request_iomux(MX51_PIN_EIM_CS5, IOMUX_CONFIG_ALT3);
205c5fb70c9SStefano Babic 	mxc_iomux_set_pad(MX51_PIN_EIM_CS5, 0x180);
206c5fb70c9SStefano Babic 
207c5fb70c9SStefano Babic 	/* FEC RX_ER */
208c5fb70c9SStefano Babic 	mxc_request_iomux(MX51_PIN_EIM_CS4, IOMUX_CONFIG_ALT3);
209c5fb70c9SStefano Babic 	mxc_iomux_set_pad(MX51_PIN_EIM_CS4, 0x180);
210c5fb70c9SStefano Babic 
211c5fb70c9SStefano Babic 	/* FEC RX_DV */
212c5fb70c9SStefano Babic 	mxc_request_iomux(MX51_PIN_NANDF_D11, IOMUX_CONFIG_ALT2);
213c5fb70c9SStefano Babic 	mxc_iomux_set_pad(MX51_PIN_NANDF_D11, 0x2180);
214c5fb70c9SStefano Babic }
215c5fb70c9SStefano Babic 
216c5fb70c9SStefano Babic #ifdef CONFIG_FSL_ESDHC
217c5fb70c9SStefano Babic int board_mmc_getcd(u8 *cd, struct mmc *mmc)
218c5fb70c9SStefano Babic {
219c5fb70c9SStefano Babic 	struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv;
220c5fb70c9SStefano Babic 
221c5fb70c9SStefano Babic 	if (cfg->esdhc_base == MMC_SDHC1_BASE_ADDR)
222c5fb70c9SStefano Babic 		*cd = readl(GPIO1_BASE_ADDR) & 0x01;
223c5fb70c9SStefano Babic 	else
224c5fb70c9SStefano Babic 		*cd = readl(GPIO1_BASE_ADDR) & 0x40;
225c5fb70c9SStefano Babic 
226c5fb70c9SStefano Babic 	return 0;
227c5fb70c9SStefano Babic }
228c5fb70c9SStefano Babic 
229c5fb70c9SStefano Babic int board_mmc_init(bd_t *bis)
230c5fb70c9SStefano Babic {
231c5fb70c9SStefano Babic 	u32 index;
232c5fb70c9SStefano Babic 	s32 status = 0;
233c5fb70c9SStefano Babic 
234c5fb70c9SStefano Babic 	for (index = 0; index < CONFIG_SYS_FSL_ESDHC_NUM;
235c5fb70c9SStefano Babic 			index++) {
236c5fb70c9SStefano Babic 		switch (index) {
237c5fb70c9SStefano Babic 		case 0:
238c5fb70c9SStefano Babic 			mxc_request_iomux(MX51_PIN_SD1_CMD,
239c5fb70c9SStefano Babic 				IOMUX_CONFIG_ALT0 | IOMUX_CONFIG_SION);
240c5fb70c9SStefano Babic 			mxc_request_iomux(MX51_PIN_SD1_CLK,
241c5fb70c9SStefano Babic 				IOMUX_CONFIG_ALT0 | IOMUX_CONFIG_SION);
242c5fb70c9SStefano Babic 			mxc_request_iomux(MX51_PIN_SD1_DATA0,
243c5fb70c9SStefano Babic 				IOMUX_CONFIG_ALT0 | IOMUX_CONFIG_SION);
244c5fb70c9SStefano Babic 			mxc_request_iomux(MX51_PIN_SD1_DATA1,
245c5fb70c9SStefano Babic 				IOMUX_CONFIG_ALT0 | IOMUX_CONFIG_SION);
246c5fb70c9SStefano Babic 			mxc_request_iomux(MX51_PIN_SD1_DATA2,
247c5fb70c9SStefano Babic 				IOMUX_CONFIG_ALT0 | IOMUX_CONFIG_SION);
248c5fb70c9SStefano Babic 			mxc_request_iomux(MX51_PIN_SD1_DATA3,
249c5fb70c9SStefano Babic 				IOMUX_CONFIG_ALT0 | IOMUX_CONFIG_SION);
250c5fb70c9SStefano Babic 			mxc_iomux_set_pad(MX51_PIN_SD1_CMD,
251c5fb70c9SStefano Babic 				PAD_CTL_DRV_MAX | PAD_CTL_DRV_VOT_HIGH |
252c5fb70c9SStefano Babic 				PAD_CTL_HYS_ENABLE | PAD_CTL_47K_PU |
253c5fb70c9SStefano Babic 				PAD_CTL_PUE_PULL |
254c5fb70c9SStefano Babic 				PAD_CTL_PKE_ENABLE | PAD_CTL_SRE_FAST);
255c5fb70c9SStefano Babic 			mxc_iomux_set_pad(MX51_PIN_SD1_CLK,
256c5fb70c9SStefano Babic 				PAD_CTL_DRV_MAX | PAD_CTL_DRV_VOT_HIGH |
257c5fb70c9SStefano Babic 				PAD_CTL_HYS_NONE | PAD_CTL_47K_PU |
258c5fb70c9SStefano Babic 				PAD_CTL_PUE_PULL |
259c5fb70c9SStefano Babic 				PAD_CTL_PKE_ENABLE | PAD_CTL_SRE_FAST);
260c5fb70c9SStefano Babic 			mxc_iomux_set_pad(MX51_PIN_SD1_DATA0,
261c5fb70c9SStefano Babic 				PAD_CTL_DRV_MAX | PAD_CTL_DRV_VOT_HIGH |
262c5fb70c9SStefano Babic 				PAD_CTL_HYS_ENABLE | PAD_CTL_47K_PU |
263c5fb70c9SStefano Babic 				PAD_CTL_PUE_PULL |
264c5fb70c9SStefano Babic 				PAD_CTL_PKE_ENABLE | PAD_CTL_SRE_FAST);
265c5fb70c9SStefano Babic 			mxc_iomux_set_pad(MX51_PIN_SD1_DATA1,
266c5fb70c9SStefano Babic 				PAD_CTL_DRV_MAX | PAD_CTL_DRV_VOT_HIGH |
267c5fb70c9SStefano Babic 				PAD_CTL_HYS_ENABLE | PAD_CTL_47K_PU |
268c5fb70c9SStefano Babic 				PAD_CTL_PUE_PULL |
269c5fb70c9SStefano Babic 				PAD_CTL_PKE_ENABLE | PAD_CTL_SRE_FAST);
270c5fb70c9SStefano Babic 			mxc_iomux_set_pad(MX51_PIN_SD1_DATA2,
271c5fb70c9SStefano Babic 				PAD_CTL_DRV_MAX | PAD_CTL_DRV_VOT_HIGH |
272c5fb70c9SStefano Babic 				PAD_CTL_HYS_ENABLE | PAD_CTL_47K_PU |
273c5fb70c9SStefano Babic 				PAD_CTL_PUE_PULL |
274c5fb70c9SStefano Babic 				PAD_CTL_PKE_ENABLE | PAD_CTL_SRE_FAST);
275c5fb70c9SStefano Babic 			mxc_iomux_set_pad(MX51_PIN_SD1_DATA3,
276c5fb70c9SStefano Babic 				PAD_CTL_DRV_MAX | PAD_CTL_DRV_VOT_HIGH |
277c5fb70c9SStefano Babic 				PAD_CTL_HYS_ENABLE | PAD_CTL_100K_PD |
278c5fb70c9SStefano Babic 				PAD_CTL_PUE_PULL |
279c5fb70c9SStefano Babic 				PAD_CTL_PKE_ENABLE | PAD_CTL_SRE_FAST);
280c5fb70c9SStefano Babic 			mxc_request_iomux(MX51_PIN_GPIO1_0,
281c5fb70c9SStefano Babic 				IOMUX_CONFIG_ALT0 | IOMUX_CONFIG_SION);
282c5fb70c9SStefano Babic 			mxc_iomux_set_pad(MX51_PIN_GPIO1_0,
283c5fb70c9SStefano Babic 				PAD_CTL_HYS_ENABLE);
284c5fb70c9SStefano Babic 			mxc_request_iomux(MX51_PIN_GPIO1_1,
285c5fb70c9SStefano Babic 				IOMUX_CONFIG_ALT0 | IOMUX_CONFIG_SION);
286c5fb70c9SStefano Babic 			mxc_iomux_set_pad(MX51_PIN_GPIO1_1,
287c5fb70c9SStefano Babic 				PAD_CTL_HYS_ENABLE);
288c5fb70c9SStefano Babic 			break;
289c5fb70c9SStefano Babic 		case 1:
290c5fb70c9SStefano Babic 			mxc_request_iomux(MX51_PIN_SD2_CMD,
291c5fb70c9SStefano Babic 				IOMUX_CONFIG_ALT0 | IOMUX_CONFIG_SION);
292c5fb70c9SStefano Babic 			mxc_request_iomux(MX51_PIN_SD2_CLK,
293c5fb70c9SStefano Babic 				IOMUX_CONFIG_ALT0 | IOMUX_CONFIG_SION);
294c5fb70c9SStefano Babic 			mxc_request_iomux(MX51_PIN_SD2_DATA0,
295c5fb70c9SStefano Babic 				IOMUX_CONFIG_ALT0);
296c5fb70c9SStefano Babic 			mxc_request_iomux(MX51_PIN_SD2_DATA1,
297c5fb70c9SStefano Babic 				IOMUX_CONFIG_ALT0);
298c5fb70c9SStefano Babic 			mxc_request_iomux(MX51_PIN_SD2_DATA2,
299c5fb70c9SStefano Babic 				IOMUX_CONFIG_ALT0);
300c5fb70c9SStefano Babic 			mxc_request_iomux(MX51_PIN_SD2_DATA3,
301c5fb70c9SStefano Babic 				IOMUX_CONFIG_ALT0);
302c5fb70c9SStefano Babic 			mxc_iomux_set_pad(MX51_PIN_SD2_CMD,
303c5fb70c9SStefano Babic 				PAD_CTL_DRV_MAX | PAD_CTL_22K_PU |
304c5fb70c9SStefano Babic 				PAD_CTL_SRE_FAST);
305c5fb70c9SStefano Babic 			mxc_iomux_set_pad(MX51_PIN_SD2_CLK,
306c5fb70c9SStefano Babic 				PAD_CTL_DRV_MAX | PAD_CTL_22K_PU |
307c5fb70c9SStefano Babic 				PAD_CTL_SRE_FAST);
308c5fb70c9SStefano Babic 			mxc_iomux_set_pad(MX51_PIN_SD2_DATA0,
309c5fb70c9SStefano Babic 				PAD_CTL_DRV_MAX | PAD_CTL_22K_PU |
310c5fb70c9SStefano Babic 				PAD_CTL_SRE_FAST);
311c5fb70c9SStefano Babic 			mxc_iomux_set_pad(MX51_PIN_SD2_DATA1,
312c5fb70c9SStefano Babic 				PAD_CTL_DRV_MAX | PAD_CTL_22K_PU |
313c5fb70c9SStefano Babic 				PAD_CTL_SRE_FAST);
314c5fb70c9SStefano Babic 			mxc_iomux_set_pad(MX51_PIN_SD2_DATA2,
315c5fb70c9SStefano Babic 				PAD_CTL_DRV_MAX | PAD_CTL_22K_PU |
316c5fb70c9SStefano Babic 				PAD_CTL_SRE_FAST);
317c5fb70c9SStefano Babic 			mxc_iomux_set_pad(MX51_PIN_SD2_DATA3,
318c5fb70c9SStefano Babic 				PAD_CTL_DRV_MAX | PAD_CTL_22K_PU |
319c5fb70c9SStefano Babic 				PAD_CTL_SRE_FAST);
320c5fb70c9SStefano Babic 			mxc_request_iomux(MX51_PIN_SD2_CMD,
321c5fb70c9SStefano Babic 				IOMUX_CONFIG_ALT0 | IOMUX_CONFIG_SION);
322c5fb70c9SStefano Babic 			mxc_request_iomux(MX51_PIN_GPIO1_6,
323c5fb70c9SStefano Babic 				IOMUX_CONFIG_ALT0 | IOMUX_CONFIG_SION);
324c5fb70c9SStefano Babic 			mxc_iomux_set_pad(MX51_PIN_GPIO1_6,
325c5fb70c9SStefano Babic 				PAD_CTL_HYS_ENABLE);
326c5fb70c9SStefano Babic 			mxc_request_iomux(MX51_PIN_GPIO1_5,
327c5fb70c9SStefano Babic 				IOMUX_CONFIG_ALT0 | IOMUX_CONFIG_SION);
328c5fb70c9SStefano Babic 			mxc_iomux_set_pad(MX51_PIN_GPIO1_5,
329c5fb70c9SStefano Babic 				PAD_CTL_HYS_ENABLE);
330c5fb70c9SStefano Babic 			break;
331c5fb70c9SStefano Babic 		default:
332c5fb70c9SStefano Babic 			printf("Warning: you configured more ESDHC controller"
333c5fb70c9SStefano Babic 				"(%d) as supported by the board(2)\n",
334c5fb70c9SStefano Babic 				CONFIG_SYS_FSL_ESDHC_NUM);
335c5fb70c9SStefano Babic 			return status;
336c5fb70c9SStefano Babic 		}
337c5fb70c9SStefano Babic 		status |= fsl_esdhc_initialize(bis, &esdhc_cfg[index]);
338c5fb70c9SStefano Babic 	}
339c5fb70c9SStefano Babic 	return status;
340c5fb70c9SStefano Babic }
341c5fb70c9SStefano Babic #endif
342c5fb70c9SStefano Babic 
343c5fb70c9SStefano Babic int board_init(void)
344c5fb70c9SStefano Babic {
345c5fb70c9SStefano Babic 	system_rev = get_cpu_rev();
346c5fb70c9SStefano Babic 
347c5fb70c9SStefano Babic 	gd->bd->bi_arch_number = MACH_TYPE_MX51_BABBAGE;
348c5fb70c9SStefano Babic 	/* address of boot parameters */
349c5fb70c9SStefano Babic 	gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x100;
350c5fb70c9SStefano Babic 
351c5fb70c9SStefano Babic 	setup_iomux_uart();
352c5fb70c9SStefano Babic 	setup_expio();
353c5fb70c9SStefano Babic 	setup_iomux_fec();
354c5fb70c9SStefano Babic 	return 0;
355c5fb70c9SStefano Babic }
356c5fb70c9SStefano Babic 
357c5fb70c9SStefano Babic int checkboard(void)
358c5fb70c9SStefano Babic {
359c5fb70c9SStefano Babic 	puts("Board: MX51EVK ");
360c5fb70c9SStefano Babic 
361c5fb70c9SStefano Babic 	switch (system_rev & 0xff) {
362c5fb70c9SStefano Babic 	case CHIP_REV_3_0:
363c5fb70c9SStefano Babic 		puts("3.0 [");
364c5fb70c9SStefano Babic 		break;
365c5fb70c9SStefano Babic 	case CHIP_REV_2_5:
366c5fb70c9SStefano Babic 		puts("2.5 [");
367c5fb70c9SStefano Babic 		break;
368c5fb70c9SStefano Babic 	case CHIP_REV_2_0:
369c5fb70c9SStefano Babic 		puts("2.0 [");
370c5fb70c9SStefano Babic 		break;
371c5fb70c9SStefano Babic 	case CHIP_REV_1_1:
372c5fb70c9SStefano Babic 		puts("1.1 [");
373c5fb70c9SStefano Babic 		break;
374c5fb70c9SStefano Babic 	case CHIP_REV_1_0:
375c5fb70c9SStefano Babic 	default:
376c5fb70c9SStefano Babic 		puts("1.0 [");
377c5fb70c9SStefano Babic 		break;
378c5fb70c9SStefano Babic 	}
379c5fb70c9SStefano Babic 
380c5fb70c9SStefano Babic 	switch (__raw_readl(SRC_BASE_ADDR + 0x8)) {
381c5fb70c9SStefano Babic 	case 0x0001:
382c5fb70c9SStefano Babic 		puts("POR");
383c5fb70c9SStefano Babic 		break;
384c5fb70c9SStefano Babic 	case 0x0009:
385c5fb70c9SStefano Babic 		puts("RST");
386c5fb70c9SStefano Babic 		break;
387c5fb70c9SStefano Babic 	case 0x0010:
388c5fb70c9SStefano Babic 	case 0x0011:
389c5fb70c9SStefano Babic 		puts("WDOG");
390c5fb70c9SStefano Babic 		break;
391c5fb70c9SStefano Babic 	default:
392c5fb70c9SStefano Babic 		puts("unknown");
393c5fb70c9SStefano Babic 	}
394c5fb70c9SStefano Babic 	puts("]\n");
395c5fb70c9SStefano Babic 	return 0;
396c5fb70c9SStefano Babic }
397c5fb70c9SStefano Babic 
398