Commit de621ae63b27ec306d1148a17f82f467711524a7

Authored by Eric Lee
1 parent 3c86f1ca3a

Fix Fastboot Download Bugs

Showing 2 changed files with 4 additions and 6 deletions Inline Diff

board/embedian/smarcfimx6/smarcfimx6.c
1 /* 1 /*
2 * Copyright (C) 2012-2015 Freescale Semiconductor, Inc. 2 * Copyright (C) 2012-2015 Freescale Semiconductor, Inc.
3 * 3 *
4 * Author: Fabio Estevam <fabio.estevam@freescale.com> 4 * Author: Fabio Estevam <fabio.estevam@freescale.com>
5 * 5 *
6 * SPDX-License-Identifier: GPL-2.0+ 6 * SPDX-License-Identifier: GPL-2.0+
7 */ 7 */
8 8
9 #include <asm/arch/clock.h> 9 #include <asm/arch/clock.h>
10 #include <asm/arch/imx-regs.h> 10 #include <asm/arch/imx-regs.h>
11 #include <asm/arch/iomux.h> 11 #include <asm/arch/iomux.h>
12 #include <asm/arch/mx6-pins.h> 12 #include <asm/arch/mx6-pins.h>
13 #include <asm/errno.h> 13 #include <asm/errno.h>
14 #include <asm/gpio.h> 14 #include <asm/gpio.h>
15 #include <asm/imx-common/mxc_i2c.h> 15 #include <asm/imx-common/mxc_i2c.h>
16 #include <asm/imx-common/iomux-v3.h> 16 #include <asm/imx-common/iomux-v3.h>
17 #include <asm/imx-common/boot_mode.h> 17 #include <asm/imx-common/boot_mode.h>
18 #include <asm/imx-common/video.h> 18 #include <asm/imx-common/video.h>
19 #include <mmc.h> 19 #include <mmc.h>
20 #include <fsl_esdhc.h> 20 #include <fsl_esdhc.h>
21 #include <miiphy.h> 21 #include <miiphy.h>
22 #include <netdev.h> 22 #include <netdev.h>
23 23
24 #if defined(CONFIG_MX6DL) && defined(CONFIG_MXC_EPDC) 24 #if defined(CONFIG_MX6DL) && defined(CONFIG_MXC_EPDC)
25 #include <lcd.h> 25 #include <lcd.h>
26 #include <mxc_epdc_fb.h> 26 #include <mxc_epdc_fb.h>
27 #endif 27 #endif
28 #include <asm/arch/mxc_hdmi.h> 28 #include <asm/arch/mxc_hdmi.h>
29 #include <asm/arch/crm_regs.h> 29 #include <asm/arch/crm_regs.h>
30 #include <asm/io.h> 30 #include <asm/io.h>
31 #include <asm/arch/sys_proto.h> 31 #include <asm/arch/sys_proto.h>
32 #include <pwm.h> 32 #include <pwm.h>
33 #include <i2c.h> 33 #include <i2c.h>
34 #include <ipu_pixfmt.h> 34 #include <ipu_pixfmt.h>
35 #include <linux/fb.h> 35 #include <linux/fb.h>
36 #include <asm/arch/mx6-ddr.h> 36 #include <asm/arch/mx6-ddr.h>
37 #include <usb.h> 37 #include <usb.h>
38 38
39 #if defined(CONFIG_MX6DL) && defined(CONFIG_MXC_EPDC) 39 #if defined(CONFIG_MX6DL) && defined(CONFIG_MXC_EPDC)
40 #include <lcd.h> 40 #include <lcd.h>
41 #include <mxc_epdc_fb.h> 41 #include <mxc_epdc_fb.h>
42 #endif 42 #endif
43 #include "smarcfimx6.h" 43 #include "smarcfimx6.h"
44 #ifdef CONFIG_CMD_SATA 44 #ifdef CONFIG_CMD_SATA
45 #include <asm/imx-common/sata.h> 45 #include <asm/imx-common/sata.h>
46 #endif 46 #endif
47 #ifdef CONFIG_FSL_FASTBOOT 47 #ifdef CONFIG_FSL_FASTBOOT
48 #include <fsl_fastboot.h> 48 #include <fsl_fastboot.h>
49 #ifdef CONFIG_ANDROID_RECOVERY 49 #ifdef CONFIG_ANDROID_RECOVERY
50 #include <recovery.h> 50 #include <recovery.h>
51 #endif 51 #endif
52 #endif /*CONFIG_FSL_FASTBOOT*/ 52 #endif /*CONFIG_FSL_FASTBOOT*/
53 53
54 DECLARE_GLOBAL_DATA_PTR; 54 DECLARE_GLOBAL_DATA_PTR;
55 55
56 #define UART_PAD_CTRL (PAD_CTL_PUS_100K_UP | \ 56 #define UART_PAD_CTRL (PAD_CTL_PUS_100K_UP | \
57 PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm | \ 57 PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm | \
58 PAD_CTL_SRE_FAST | PAD_CTL_HYS) 58 PAD_CTL_SRE_FAST | PAD_CTL_HYS)
59 59
60 #define USDHC_PAD_CTRL (PAD_CTL_PUS_47K_UP | \ 60 #define USDHC_PAD_CTRL (PAD_CTL_PUS_47K_UP | \
61 PAD_CTL_SPEED_LOW | PAD_CTL_DSE_80ohm | \ 61 PAD_CTL_SPEED_LOW | PAD_CTL_DSE_80ohm | \
62 PAD_CTL_SRE_FAST | PAD_CTL_HYS) 62 PAD_CTL_SRE_FAST | PAD_CTL_HYS)
63 63
64 #define ENET_PAD_CTRL (PAD_CTL_PUS_100K_UP | \ 64 #define ENET_PAD_CTRL (PAD_CTL_PUS_100K_UP | \
65 PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm | PAD_CTL_HYS) 65 PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm | PAD_CTL_HYS)
66 66
67 #define SPI_PAD_CTRL (PAD_CTL_HYS | PAD_CTL_SPEED_MED | \ 67 #define SPI_PAD_CTRL (PAD_CTL_HYS | PAD_CTL_SPEED_MED | \
68 PAD_CTL_DSE_40ohm | PAD_CTL_SRE_FAST) 68 PAD_CTL_DSE_40ohm | PAD_CTL_SRE_FAST)
69 69
70 #define LCD_PAD_CTRL (PAD_CTL_HYS | PAD_CTL_SPEED_HIGH | \ 70 #define LCD_PAD_CTRL (PAD_CTL_HYS | PAD_CTL_SPEED_HIGH | \
71 PAD_CTL_DSE_40ohm | PAD_CTL_SRE_FAST) 71 PAD_CTL_DSE_40ohm | PAD_CTL_SRE_FAST)
72 72
73 #define I2C_PAD_CTRL (PAD_CTL_PKE | PAD_CTL_PUE | \ 73 #define I2C_PAD_CTRL (PAD_CTL_PKE | PAD_CTL_PUE | \
74 PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED | \ 74 PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED | \
75 PAD_CTL_DSE_40ohm | PAD_CTL_HYS | \ 75 PAD_CTL_DSE_40ohm | PAD_CTL_HYS | \
76 PAD_CTL_ODE | PAD_CTL_SRE_FAST) 76 PAD_CTL_ODE | PAD_CTL_SRE_FAST)
77 77
78 #define EPDC_PAD_CTRL (PAD_CTL_PKE | PAD_CTL_SPEED_MED | \ 78 #define EPDC_PAD_CTRL (PAD_CTL_PKE | PAD_CTL_SPEED_MED | \
79 PAD_CTL_DSE_40ohm | PAD_CTL_HYS) 79 PAD_CTL_DSE_40ohm | PAD_CTL_HYS)
80 80
81 #define OTG_ID_PAD_CTRL (PAD_CTL_PKE | PAD_CTL_PUE | \ 81 #define OTG_ID_PAD_CTRL (PAD_CTL_PKE | PAD_CTL_PUE | \
82 PAD_CTL_PUS_47K_UP | PAD_CTL_SPEED_LOW | \ 82 PAD_CTL_PUS_47K_UP | PAD_CTL_SPEED_LOW | \
83 PAD_CTL_DSE_80ohm | PAD_CTL_SRE_FAST | PAD_CTL_HYS) 83 PAD_CTL_DSE_80ohm | PAD_CTL_SRE_FAST | PAD_CTL_HYS)
84 84
85 #define WEAK_PULLUP (PAD_CTL_PUS_100K_UP | \ 85 #define WEAK_PULLUP (PAD_CTL_PUS_100K_UP | \
86 PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm | PAD_CTL_HYS | \ 86 PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm | PAD_CTL_HYS | \
87 PAD_CTL_SRE_SLOW) 87 PAD_CTL_SRE_SLOW)
88 88
89 #define I2C_PAD MUX_PAD_CTRL(I2C_PAD_CTRL) 89 #define I2C_PAD MUX_PAD_CTRL(I2C_PAD_CTRL)
90 90
91 #define DISP0_PWR_EN IMX_GPIO_NR(1, 02) 91 #define DISP0_PWR_EN IMX_GPIO_NR(1, 02)
92 92
93 #define EPDC_PAD_CTRL (PAD_CTL_PKE | PAD_CTL_SPEED_MED | \ 93 #define EPDC_PAD_CTRL (PAD_CTL_PKE | PAD_CTL_SPEED_MED | \
94 PAD_CTL_DSE_40ohm | PAD_CTL_HYS) 94 PAD_CTL_DSE_40ohm | PAD_CTL_HYS)
95 95
96 #define OUTPUT_40OHM (PAD_CTL_SPEED_MED|PAD_CTL_DSE_40ohm) 96 #define OUTPUT_40OHM (PAD_CTL_SPEED_MED|PAD_CTL_DSE_40ohm)
97 97
98 /* 98 /*
99 * Read header information from EEPROM into global structure. 99 * Read header information from EEPROM into global structure.
100 */ 100 */
101 static int read_eeprom(struct smarcfimx6_id *header) 101 static int read_eeprom(struct smarcfimx6_id *header)
102 { 102 {
103 /* Check if baseboard eeprom is available */ 103 /* Check if baseboard eeprom is available */
104 if (i2c_probe(CONFIG_SYS_I2C_EEPROM_ADDR)) { 104 if (i2c_probe(CONFIG_SYS_I2C_EEPROM_ADDR)) {
105 puts("Could not probe the EEPROM; something fundamentally " 105 puts("Could not probe the EEPROM; something fundamentally "
106 "wrong on the I2C bus.\n"); 106 "wrong on the I2C bus.\n");
107 return -ENODEV; 107 return -ENODEV;
108 } 108 }
109 109
110 /* read the eeprom using i2c */ 110 /* read the eeprom using i2c */
111 if (i2c_read(CONFIG_SYS_I2C_EEPROM_ADDR, 0, 2, (uchar *)header, 111 if (i2c_read(CONFIG_SYS_I2C_EEPROM_ADDR, 0, 2, (uchar *)header,
112 sizeof(struct smarcfimx6_id))) { 112 sizeof(struct smarcfimx6_id))) {
113 puts("Could not read the EEPROM; something fundamentally" 113 puts("Could not read the EEPROM; something fundamentally"
114 " wrong on the I2C bus.\n"); 114 " wrong on the I2C bus.\n");
115 return -EIO; 115 return -EIO;
116 } 116 }
117 117
118 if (header->magic != 0xEE3355AA) { 118 if (header->magic != 0xEE3355AA) {
119 /* 119 /*
120 * read the eeprom using i2c again, 120 * read the eeprom using i2c again,
121 * but use only a 1 byte address 121 * but use only a 1 byte address
122 */ 122 */
123 if (i2c_read(CONFIG_SYS_I2C_EEPROM_ADDR, 0, 1, (uchar *)header, 123 if (i2c_read(CONFIG_SYS_I2C_EEPROM_ADDR, 0, 1, (uchar *)header,
124 sizeof(struct smarcfimx6_id))) { 124 sizeof(struct smarcfimx6_id))) {
125 puts("Could not read the EEPROM; something " 125 puts("Could not read the EEPROM; something "
126 "fundamentally wrong on the I2C bus.\n"); 126 "fundamentally wrong on the I2C bus.\n");
127 return -EIO; 127 return -EIO;
128 } 128 }
129 129
130 if (header->magic != 0xEE3355AA) { 130 if (header->magic != 0xEE3355AA) {
131 printf("Incorrect magic number (0x%x) in EEPROM\n", 131 printf("Incorrect magic number (0x%x) in EEPROM\n",
132 header->magic); 132 header->magic);
133 return -EINVAL; 133 return -EINVAL;
134 } 134 }
135 } 135 }
136 136
137 return 0; 137 return 0;
138 } 138 }
139 139
140 /*I2C1 I2C_PM*/ 140 /*I2C1 I2C_PM*/
141 struct i2c_pads_info i2c_pad_info1 = { 141 struct i2c_pads_info i2c_pad_info1 = {
142 .scl = { 142 .scl = {
143 .i2c_mode = MX6_PAD_EIM_D21__I2C1_SCL | I2C_PAD, 143 .i2c_mode = MX6_PAD_EIM_D21__I2C1_SCL | I2C_PAD,
144 .gpio_mode = MX6_PAD_EIM_D21__GPIO3_IO21 | I2C_PAD, 144 .gpio_mode = MX6_PAD_EIM_D21__GPIO3_IO21 | I2C_PAD,
145 .gp = IMX_GPIO_NR(3, 21) 145 .gp = IMX_GPIO_NR(3, 21)
146 }, 146 },
147 .sda = { 147 .sda = {
148 .i2c_mode = MX6_PAD_EIM_D28__I2C1_SDA | I2C_PAD, 148 .i2c_mode = MX6_PAD_EIM_D28__I2C1_SDA | I2C_PAD,
149 .gpio_mode = MX6_PAD_EIM_D28__GPIO3_IO28 | I2C_PAD, 149 .gpio_mode = MX6_PAD_EIM_D28__GPIO3_IO28 | I2C_PAD,
150 .gp = IMX_GPIO_NR(3, 28) 150 .gp = IMX_GPIO_NR(3, 28)
151 } 151 }
152 }; 152 };
153 153
154 /* I2C2 HDMI */ 154 /* I2C2 HDMI */
155 struct i2c_pads_info i2c_pad_info2 = { 155 struct i2c_pads_info i2c_pad_info2 = {
156 .scl = { 156 .scl = {
157 .i2c_mode = MX6_PAD_KEY_COL3__I2C2_SCL | I2C_PAD, 157 .i2c_mode = MX6_PAD_KEY_COL3__I2C2_SCL | I2C_PAD,
158 .gpio_mode = MX6_PAD_KEY_COL3__GPIO4_IO12 | I2C_PAD, 158 .gpio_mode = MX6_PAD_KEY_COL3__GPIO4_IO12 | I2C_PAD,
159 .gp = IMX_GPIO_NR(4, 12) 159 .gp = IMX_GPIO_NR(4, 12)
160 }, 160 },
161 .sda = { 161 .sda = {
162 .i2c_mode = MX6_PAD_KEY_ROW3__I2C2_SDA | I2C_PAD, 162 .i2c_mode = MX6_PAD_KEY_ROW3__I2C2_SDA | I2C_PAD,
163 .gpio_mode = MX6_PAD_KEY_ROW3__GPIO4_IO13 | I2C_PAD, 163 .gpio_mode = MX6_PAD_KEY_ROW3__GPIO4_IO13 | I2C_PAD,
164 .gp = IMX_GPIO_NR(4, 13) 164 .gp = IMX_GPIO_NR(4, 13)
165 } 165 }
166 }; 166 };
167 167
168 /* I2C3 TCA9546APWR */ 168 /* I2C3 TCA9546APWR */
169 struct i2c_pads_info i2c_pad_info3 = { 169 struct i2c_pads_info i2c_pad_info3 = {
170 .scl = { 170 .scl = {
171 .i2c_mode = MX6_PAD_EIM_D17__I2C3_SCL | I2C_PAD, 171 .i2c_mode = MX6_PAD_EIM_D17__I2C3_SCL | I2C_PAD,
172 .gpio_mode = MX6_PAD_EIM_D17__GPIO3_IO17 | I2C_PAD, 172 .gpio_mode = MX6_PAD_EIM_D17__GPIO3_IO17 | I2C_PAD,
173 .gp = IMX_GPIO_NR(3, 17) 173 .gp = IMX_GPIO_NR(3, 17)
174 }, 174 },
175 .sda = { 175 .sda = {
176 .i2c_mode = MX6_PAD_EIM_D18__I2C3_SDA | I2C_PAD, 176 .i2c_mode = MX6_PAD_EIM_D18__I2C3_SDA | I2C_PAD,
177 .gpio_mode = MX6_PAD_EIM_D18__GPIO3_IO18 | I2C_PAD, 177 .gpio_mode = MX6_PAD_EIM_D18__GPIO3_IO18 | I2C_PAD,
178 .gp = IMX_GPIO_NR(3, 18) 178 .gp = IMX_GPIO_NR(3, 18)
179 } 179 }
180 }; 180 };
181 181
182 int dram_init(void) 182 int dram_init(void)
183 { 183 {
184 gd->ram_size = imx_ddr_size(); 184 gd->ram_size = imx_ddr_size();
185 185
186 return 0; 186 return 0;
187 } 187 }
188 188
189 /* SER0/UART1 */ 189 /* SER0/UART1 */
190 iomux_v3_cfg_t const uart1_pads[] = { 190 iomux_v3_cfg_t const uart1_pads[] = {
191 MX6_PAD_SD3_DAT7__UART1_TX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL), 191 MX6_PAD_SD3_DAT7__UART1_TX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL),
192 MX6_PAD_SD3_DAT6__UART1_RX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL), 192 MX6_PAD_SD3_DAT6__UART1_RX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL),
193 MX6_PAD_EIM_D20__UART1_CTS_B | MUX_PAD_CTRL(UART_PAD_CTRL), 193 MX6_PAD_EIM_D20__UART1_CTS_B | MUX_PAD_CTRL(UART_PAD_CTRL),
194 MX6_PAD_EIM_D19__UART1_RTS_B | MUX_PAD_CTRL(UART_PAD_CTRL), 194 MX6_PAD_EIM_D19__UART1_RTS_B | MUX_PAD_CTRL(UART_PAD_CTRL),
195 }; 195 };
196 196
197 /* SER1/UART2 */ 197 /* SER1/UART2 */
198 iomux_v3_cfg_t const uart2_pads[] = { 198 iomux_v3_cfg_t const uart2_pads[] = {
199 MX6_PAD_EIM_D26__UART2_TX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL), 199 MX6_PAD_EIM_D26__UART2_TX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL),
200 MX6_PAD_EIM_D27__UART2_RX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL), 200 MX6_PAD_EIM_D27__UART2_RX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL),
201 }; 201 };
202 202
203 /* SER2/UART4 */ 203 /* SER2/UART4 */
204 iomux_v3_cfg_t const uart4_pads[] = { 204 iomux_v3_cfg_t const uart4_pads[] = {
205 MX6_PAD_CSI0_DAT12__UART4_TX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL), 205 MX6_PAD_CSI0_DAT12__UART4_TX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL),
206 MX6_PAD_CSI0_DAT13__UART4_RX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL), 206 MX6_PAD_CSI0_DAT13__UART4_RX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL),
207 MX6_PAD_CSI0_DAT16__UART4_CTS_B | MUX_PAD_CTRL(UART_PAD_CTRL), 207 MX6_PAD_CSI0_DAT16__UART4_CTS_B | MUX_PAD_CTRL(UART_PAD_CTRL),
208 MX6_PAD_CSI0_DAT17__UART4_RTS_B | MUX_PAD_CTRL(UART_PAD_CTRL), 208 MX6_PAD_CSI0_DAT17__UART4_RTS_B | MUX_PAD_CTRL(UART_PAD_CTRL),
209 }; 209 };
210 210
211 /* SER3/UART5 Debug Port */ 211 /* SER3/UART5 Debug Port */
212 iomux_v3_cfg_t const uart5_pads[] = { 212 iomux_v3_cfg_t const uart5_pads[] = {
213 MX6_PAD_CSI0_DAT14__UART5_TX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL), 213 MX6_PAD_CSI0_DAT14__UART5_TX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL),
214 MX6_PAD_CSI0_DAT15__UART5_RX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL), 214 MX6_PAD_CSI0_DAT15__UART5_RX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL),
215 }; 215 };
216 216
217 iomux_v3_cfg_t const wdt_pads[] = { 217 iomux_v3_cfg_t const wdt_pads[] = {
218 MX6_PAD_EIM_D16__GPIO3_IO16 | MUX_PAD_CTRL(NO_PAD_CTRL), 218 MX6_PAD_EIM_D16__GPIO3_IO16 | MUX_PAD_CTRL(NO_PAD_CTRL),
219 }; 219 };
220 220
221 iomux_v3_cfg_t const reset_out_pads[] = { 221 iomux_v3_cfg_t const reset_out_pads[] = {
222 MX6_PAD_NANDF_CS3__GPIO6_IO16 | MUX_PAD_CTRL(NO_PAD_CTRL), 222 MX6_PAD_NANDF_CS3__GPIO6_IO16 | MUX_PAD_CTRL(NO_PAD_CTRL),
223 }; 223 };
224 224
225 static iomux_v3_cfg_t const enet_pads[] = { 225 static iomux_v3_cfg_t const enet_pads[] = {
226 MX6_PAD_ENET_MDIO__ENET_MDIO | MUX_PAD_CTRL(ENET_PAD_CTRL), 226 MX6_PAD_ENET_MDIO__ENET_MDIO | MUX_PAD_CTRL(ENET_PAD_CTRL),
227 MX6_PAD_ENET_MDC__ENET_MDC | MUX_PAD_CTRL(ENET_PAD_CTRL), 227 MX6_PAD_ENET_MDC__ENET_MDC | MUX_PAD_CTRL(ENET_PAD_CTRL),
228 MX6_PAD_RGMII_TXC__RGMII_TXC | MUX_PAD_CTRL(ENET_PAD_CTRL), 228 MX6_PAD_RGMII_TXC__RGMII_TXC | MUX_PAD_CTRL(ENET_PAD_CTRL),
229 MX6_PAD_RGMII_TD0__RGMII_TD0 | MUX_PAD_CTRL(ENET_PAD_CTRL), 229 MX6_PAD_RGMII_TD0__RGMII_TD0 | MUX_PAD_CTRL(ENET_PAD_CTRL),
230 MX6_PAD_RGMII_TD1__RGMII_TD1 | MUX_PAD_CTRL(ENET_PAD_CTRL), 230 MX6_PAD_RGMII_TD1__RGMII_TD1 | MUX_PAD_CTRL(ENET_PAD_CTRL),
231 MX6_PAD_RGMII_TD2__RGMII_TD2 | MUX_PAD_CTRL(ENET_PAD_CTRL), 231 MX6_PAD_RGMII_TD2__RGMII_TD2 | MUX_PAD_CTRL(ENET_PAD_CTRL),
232 MX6_PAD_RGMII_TD3__RGMII_TD3 | MUX_PAD_CTRL(ENET_PAD_CTRL), 232 MX6_PAD_RGMII_TD3__RGMII_TD3 | MUX_PAD_CTRL(ENET_PAD_CTRL),
233 MX6_PAD_RGMII_TX_CTL__RGMII_TX_CTL | MUX_PAD_CTRL(ENET_PAD_CTRL), 233 MX6_PAD_RGMII_TX_CTL__RGMII_TX_CTL | MUX_PAD_CTRL(ENET_PAD_CTRL),
234 MX6_PAD_ENET_REF_CLK__ENET_TX_CLK | MUX_PAD_CTRL(ENET_PAD_CTRL), 234 MX6_PAD_ENET_REF_CLK__ENET_TX_CLK | MUX_PAD_CTRL(ENET_PAD_CTRL),
235 MX6_PAD_RGMII_RXC__RGMII_RXC | MUX_PAD_CTRL(ENET_PAD_CTRL), 235 MX6_PAD_RGMII_RXC__RGMII_RXC | MUX_PAD_CTRL(ENET_PAD_CTRL),
236 MX6_PAD_RGMII_RD0__RGMII_RD0 | MUX_PAD_CTRL(ENET_PAD_CTRL), 236 MX6_PAD_RGMII_RD0__RGMII_RD0 | MUX_PAD_CTRL(ENET_PAD_CTRL),
237 MX6_PAD_RGMII_RD1__RGMII_RD1 | MUX_PAD_CTRL(ENET_PAD_CTRL), 237 MX6_PAD_RGMII_RD1__RGMII_RD1 | MUX_PAD_CTRL(ENET_PAD_CTRL),
238 MX6_PAD_RGMII_RD2__RGMII_RD2 | MUX_PAD_CTRL(ENET_PAD_CTRL), 238 MX6_PAD_RGMII_RD2__RGMII_RD2 | MUX_PAD_CTRL(ENET_PAD_CTRL),
239 MX6_PAD_RGMII_RD3__RGMII_RD3 | MUX_PAD_CTRL(ENET_PAD_CTRL), 239 MX6_PAD_RGMII_RD3__RGMII_RD3 | MUX_PAD_CTRL(ENET_PAD_CTRL),
240 MX6_PAD_RGMII_RX_CTL__RGMII_RX_CTL | MUX_PAD_CTRL(ENET_PAD_CTRL), 240 MX6_PAD_RGMII_RX_CTL__RGMII_RX_CTL | MUX_PAD_CTRL(ENET_PAD_CTRL),
241 }; 241 };
242 242
243 static void setup_iomux_enet(void) 243 static void setup_iomux_enet(void)
244 { 244 {
245 imx_iomux_v3_setup_multiple_pads(enet_pads, ARRAY_SIZE(enet_pads)); 245 imx_iomux_v3_setup_multiple_pads(enet_pads, ARRAY_SIZE(enet_pads));
246 gpio_direction_input(IMX_GPIO_NR(4, 11)); 246 gpio_direction_input(IMX_GPIO_NR(4, 11));
247 } 247 }
248 248
249 /* SDIO */ 249 /* SDIO */
250 iomux_v3_cfg_t const usdhc2_pads[] = { 250 iomux_v3_cfg_t const usdhc2_pads[] = {
251 MX6_PAD_SD2_CLK__SD2_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL), 251 MX6_PAD_SD2_CLK__SD2_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL),
252 MX6_PAD_SD2_CMD__SD2_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL), 252 MX6_PAD_SD2_CMD__SD2_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL),
253 MX6_PAD_SD2_DAT0__SD2_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL), 253 MX6_PAD_SD2_DAT0__SD2_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
254 MX6_PAD_SD2_DAT1__SD2_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL), 254 MX6_PAD_SD2_DAT1__SD2_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
255 MX6_PAD_SD2_DAT2__SD2_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL), 255 MX6_PAD_SD2_DAT2__SD2_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
256 MX6_PAD_SD2_DAT3__SD2_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL), 256 MX6_PAD_SD2_DAT3__SD2_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
257 MX6_PAD_ENET_TX_EN__GPIO1_IO28 | MUX_PAD_CTRL(NO_PAD_CTRL), /* CD */ 257 MX6_PAD_ENET_TX_EN__GPIO1_IO28 | MUX_PAD_CTRL(NO_PAD_CTRL), /* CD */
258 MX6_PAD_ENET_CRS_DV__GPIO1_IO25 | MUX_PAD_CTRL(NO_PAD_CTRL), /* WP */ 258 MX6_PAD_ENET_CRS_DV__GPIO1_IO25 | MUX_PAD_CTRL(NO_PAD_CTRL), /* WP */
259 MX6_PAD_SD1_CMD__GPIO1_IO18 | MUX_PAD_CTRL(NO_PAD_CTRL), /* SDIO_PWR_EN */ 259 MX6_PAD_SD1_CMD__GPIO1_IO18 | MUX_PAD_CTRL(NO_PAD_CTRL), /* SDIO_PWR_EN */
260 }; 260 };
261 261
262 /* SDMMC */ 262 /* SDMMC */
263 iomux_v3_cfg_t const usdhc3_pads[] = { 263 iomux_v3_cfg_t const usdhc3_pads[] = {
264 MX6_PAD_SD3_CLK__SD3_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL), 264 MX6_PAD_SD3_CLK__SD3_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL),
265 MX6_PAD_SD3_CMD__SD3_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL), 265 MX6_PAD_SD3_CMD__SD3_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL),
266 MX6_PAD_SD3_DAT0__SD3_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL), 266 MX6_PAD_SD3_DAT0__SD3_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
267 MX6_PAD_SD3_DAT1__SD3_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL), 267 MX6_PAD_SD3_DAT1__SD3_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
268 MX6_PAD_SD3_DAT2__SD3_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL), 268 MX6_PAD_SD3_DAT2__SD3_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
269 MX6_PAD_SD3_DAT3__SD3_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL), 269 MX6_PAD_SD3_DAT3__SD3_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
270 MX6_PAD_SD3_RST__SD3_RESET | MUX_PAD_CTRL(USDHC_PAD_CTRL), 270 MX6_PAD_SD3_RST__SD3_RESET | MUX_PAD_CTRL(USDHC_PAD_CTRL),
271 }; 271 };
272 272
273 /* eMMC */ 273 /* eMMC */
274 iomux_v3_cfg_t const usdhc4_pads[] = { 274 iomux_v3_cfg_t const usdhc4_pads[] = {
275 MX6_PAD_SD4_CLK__SD4_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL), 275 MX6_PAD_SD4_CLK__SD4_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL),
276 MX6_PAD_SD4_CMD__SD4_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL), 276 MX6_PAD_SD4_CMD__SD4_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL),
277 MX6_PAD_SD4_DAT0__SD4_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL), 277 MX6_PAD_SD4_DAT0__SD4_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
278 MX6_PAD_SD4_DAT1__SD4_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL), 278 MX6_PAD_SD4_DAT1__SD4_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
279 MX6_PAD_SD4_DAT2__SD4_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL), 279 MX6_PAD_SD4_DAT2__SD4_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
280 MX6_PAD_SD4_DAT3__SD4_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL), 280 MX6_PAD_SD4_DAT3__SD4_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
281 MX6_PAD_SD4_DAT4__SD4_DATA4 | MUX_PAD_CTRL(USDHC_PAD_CTRL), 281 MX6_PAD_SD4_DAT4__SD4_DATA4 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
282 MX6_PAD_SD4_DAT5__SD4_DATA5 | MUX_PAD_CTRL(USDHC_PAD_CTRL), 282 MX6_PAD_SD4_DAT5__SD4_DATA5 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
283 MX6_PAD_SD4_DAT6__SD4_DATA6 | MUX_PAD_CTRL(USDHC_PAD_CTRL), 283 MX6_PAD_SD4_DAT6__SD4_DATA6 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
284 MX6_PAD_SD4_DAT7__SD4_DATA7 | MUX_PAD_CTRL(USDHC_PAD_CTRL), 284 MX6_PAD_SD4_DAT7__SD4_DATA7 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
285 }; 285 };
286 286
287 #ifdef CONFIG_MXC_SPI 287 #ifdef CONFIG_MXC_SPI
288 /* SPI0 */ 288 /* SPI0 */
289 iomux_v3_cfg_t const ecspi2_pads[] = { 289 iomux_v3_cfg_t const ecspi2_pads[] = {
290 MX6_PAD_CSI0_DAT8__ECSPI2_SCLK | MUX_PAD_CTRL(SPI_PAD_CTRL), 290 MX6_PAD_CSI0_DAT8__ECSPI2_SCLK | MUX_PAD_CTRL(SPI_PAD_CTRL),
291 MX6_PAD_CSI0_DAT10__ECSPI2_MISO | MUX_PAD_CTRL(SPI_PAD_CTRL), 291 MX6_PAD_CSI0_DAT10__ECSPI2_MISO | MUX_PAD_CTRL(SPI_PAD_CTRL),
292 MX6_PAD_CSI0_DAT9__ECSPI2_MOSI | MUX_PAD_CTRL(SPI_PAD_CTRL), 292 MX6_PAD_CSI0_DAT9__ECSPI2_MOSI | MUX_PAD_CTRL(SPI_PAD_CTRL),
293 MX6_PAD_CSI0_DAT11__GPIO5_IO29 | MUX_PAD_CTRL(NO_PAD_CTRL), /*SS0#*/ 293 MX6_PAD_CSI0_DAT11__GPIO5_IO29 | MUX_PAD_CTRL(NO_PAD_CTRL), /*SS0#*/
294 MX6_PAD_EIM_D24__ECSPI2_SS2 | MUX_PAD_CTRL(NO_PAD_CTRL), /*SS2#*/ 294 MX6_PAD_EIM_D24__ECSPI2_SS2 | MUX_PAD_CTRL(NO_PAD_CTRL), /*SS2#*/
295 MX6_PAD_EIM_D25__ECSPI2_SS3 | MUX_PAD_CTRL(NO_PAD_CTRL), /*SS3#*/ 295 MX6_PAD_EIM_D25__ECSPI2_SS3 | MUX_PAD_CTRL(NO_PAD_CTRL), /*SS3#*/
296 }; 296 };
297 297
298 static void setup_spinor(void) 298 static void setup_spinor(void)
299 { 299 {
300 imx_iomux_v3_setup_multiple_pads(ecspi2_pads, ARRAY_SIZE(ecspi2_pads)); 300 imx_iomux_v3_setup_multiple_pads(ecspi2_pads, ARRAY_SIZE(ecspi2_pads));
301 gpio_direction_output(IMX_GPIO_NR(5, 29), 0); 301 gpio_direction_output(IMX_GPIO_NR(5, 29), 0);
302 } 302 }
303 303
304 int board_spi_cs_gpio(unsigned bus, unsigned cs) 304 int board_spi_cs_gpio(unsigned bus, unsigned cs)
305 { 305 {
306 return (bus == 1 && cs == 0) ? (IMX_GPIO_NR(5, 29)) : -1; 306 return (bus == 1 && cs == 0) ? (IMX_GPIO_NR(5, 29)) : -1;
307 } 307 }
308 #endif 308 #endif
309 309
310 /* SPI1 */ 310 /* SPI1 */
311 iomux_v3_cfg_t const ecspi1_pads[] = { 311 iomux_v3_cfg_t const ecspi1_pads[] = {
312 MX6_PAD_KEY_COL0__ECSPI1_SCLK | MUX_PAD_CTRL(SPI_PAD_CTRL), 312 MX6_PAD_KEY_COL0__ECSPI1_SCLK | MUX_PAD_CTRL(SPI_PAD_CTRL),
313 MX6_PAD_KEY_COL1__ECSPI1_MISO | MUX_PAD_CTRL(SPI_PAD_CTRL), 313 MX6_PAD_KEY_COL1__ECSPI1_MISO | MUX_PAD_CTRL(SPI_PAD_CTRL),
314 MX6_PAD_KEY_ROW0__ECSPI1_MOSI | MUX_PAD_CTRL(SPI_PAD_CTRL), 314 MX6_PAD_KEY_ROW0__ECSPI1_MOSI | MUX_PAD_CTRL(SPI_PAD_CTRL),
315 MX6_PAD_KEY_ROW1__ECSPI1_SS0 | MUX_PAD_CTRL(NO_PAD_CTRL), /*SS0#*/ 315 MX6_PAD_KEY_ROW1__ECSPI1_SS0 | MUX_PAD_CTRL(NO_PAD_CTRL), /*SS0#*/
316 MX6_PAD_KEY_COL2__ECSPI1_SS1 | MUX_PAD_CTRL(NO_PAD_CTRL), /*SS1#*/ 316 MX6_PAD_KEY_COL2__ECSPI1_SS1 | MUX_PAD_CTRL(NO_PAD_CTRL), /*SS1#*/
317 }; 317 };
318 318
319 static iomux_v3_cfg_t const rgb_pads[] = { 319 static iomux_v3_cfg_t const rgb_pads[] = {
320 MX6_PAD_DI0_DISP_CLK__IPU1_DI0_DISP_CLK | MUX_PAD_CTRL(LCD_PAD_CTRL), 320 MX6_PAD_DI0_DISP_CLK__IPU1_DI0_DISP_CLK | MUX_PAD_CTRL(LCD_PAD_CTRL),
321 MX6_PAD_DI0_PIN15__IPU1_DI0_PIN15 | MUX_PAD_CTRL(LCD_PAD_CTRL), 321 MX6_PAD_DI0_PIN15__IPU1_DI0_PIN15 | MUX_PAD_CTRL(LCD_PAD_CTRL),
322 MX6_PAD_DI0_PIN2__IPU1_DI0_PIN02 | MUX_PAD_CTRL(LCD_PAD_CTRL), 322 MX6_PAD_DI0_PIN2__IPU1_DI0_PIN02 | MUX_PAD_CTRL(LCD_PAD_CTRL),
323 MX6_PAD_DI0_PIN3__IPU1_DI0_PIN03 | MUX_PAD_CTRL(LCD_PAD_CTRL), 323 MX6_PAD_DI0_PIN3__IPU1_DI0_PIN03 | MUX_PAD_CTRL(LCD_PAD_CTRL),
324 MX6_PAD_DI0_PIN15__IPU1_DI0_PIN15 | MUX_PAD_CTRL(LCD_PAD_CTRL), /* DISP0_DRDY */ 324 MX6_PAD_DI0_PIN15__IPU1_DI0_PIN15 | MUX_PAD_CTRL(LCD_PAD_CTRL), /* DISP0_DRDY */
325 MX6_PAD_DISP0_DAT0__IPU1_DISP0_DATA00 | MUX_PAD_CTRL(LCD_PAD_CTRL), 325 MX6_PAD_DISP0_DAT0__IPU1_DISP0_DATA00 | MUX_PAD_CTRL(LCD_PAD_CTRL),
326 MX6_PAD_DISP0_DAT1__IPU1_DISP0_DATA01 | MUX_PAD_CTRL(LCD_PAD_CTRL), 326 MX6_PAD_DISP0_DAT1__IPU1_DISP0_DATA01 | MUX_PAD_CTRL(LCD_PAD_CTRL),
327 MX6_PAD_DISP0_DAT2__IPU1_DISP0_DATA02 | MUX_PAD_CTRL(LCD_PAD_CTRL), 327 MX6_PAD_DISP0_DAT2__IPU1_DISP0_DATA02 | MUX_PAD_CTRL(LCD_PAD_CTRL),
328 MX6_PAD_DISP0_DAT3__IPU1_DISP0_DATA03 | MUX_PAD_CTRL(LCD_PAD_CTRL), 328 MX6_PAD_DISP0_DAT3__IPU1_DISP0_DATA03 | MUX_PAD_CTRL(LCD_PAD_CTRL),
329 MX6_PAD_DISP0_DAT4__IPU1_DISP0_DATA04 | MUX_PAD_CTRL(LCD_PAD_CTRL), 329 MX6_PAD_DISP0_DAT4__IPU1_DISP0_DATA04 | MUX_PAD_CTRL(LCD_PAD_CTRL),
330 MX6_PAD_DISP0_DAT5__IPU1_DISP0_DATA05 | MUX_PAD_CTRL(LCD_PAD_CTRL), 330 MX6_PAD_DISP0_DAT5__IPU1_DISP0_DATA05 | MUX_PAD_CTRL(LCD_PAD_CTRL),
331 MX6_PAD_DISP0_DAT6__IPU1_DISP0_DATA06 | MUX_PAD_CTRL(LCD_PAD_CTRL), 331 MX6_PAD_DISP0_DAT6__IPU1_DISP0_DATA06 | MUX_PAD_CTRL(LCD_PAD_CTRL),
332 MX6_PAD_DISP0_DAT7__IPU1_DISP0_DATA07 | MUX_PAD_CTRL(LCD_PAD_CTRL), 332 MX6_PAD_DISP0_DAT7__IPU1_DISP0_DATA07 | MUX_PAD_CTRL(LCD_PAD_CTRL),
333 MX6_PAD_DISP0_DAT8__IPU1_DISP0_DATA08 | MUX_PAD_CTRL(LCD_PAD_CTRL), 333 MX6_PAD_DISP0_DAT8__IPU1_DISP0_DATA08 | MUX_PAD_CTRL(LCD_PAD_CTRL),
334 MX6_PAD_DISP0_DAT9__IPU1_DISP0_DATA09 | MUX_PAD_CTRL(LCD_PAD_CTRL), 334 MX6_PAD_DISP0_DAT9__IPU1_DISP0_DATA09 | MUX_PAD_CTRL(LCD_PAD_CTRL),
335 MX6_PAD_DISP0_DAT10__IPU1_DISP0_DATA10 | MUX_PAD_CTRL(LCD_PAD_CTRL), 335 MX6_PAD_DISP0_DAT10__IPU1_DISP0_DATA10 | MUX_PAD_CTRL(LCD_PAD_CTRL),
336 MX6_PAD_DISP0_DAT11__IPU1_DISP0_DATA11 | MUX_PAD_CTRL(LCD_PAD_CTRL), 336 MX6_PAD_DISP0_DAT11__IPU1_DISP0_DATA11 | MUX_PAD_CTRL(LCD_PAD_CTRL),
337 MX6_PAD_DISP0_DAT12__IPU1_DISP0_DATA12 | MUX_PAD_CTRL(LCD_PAD_CTRL), 337 MX6_PAD_DISP0_DAT12__IPU1_DISP0_DATA12 | MUX_PAD_CTRL(LCD_PAD_CTRL),
338 MX6_PAD_DISP0_DAT13__IPU1_DISP0_DATA13 | MUX_PAD_CTRL(LCD_PAD_CTRL), 338 MX6_PAD_DISP0_DAT13__IPU1_DISP0_DATA13 | MUX_PAD_CTRL(LCD_PAD_CTRL),
339 MX6_PAD_DISP0_DAT14__IPU1_DISP0_DATA14 | MUX_PAD_CTRL(LCD_PAD_CTRL), 339 MX6_PAD_DISP0_DAT14__IPU1_DISP0_DATA14 | MUX_PAD_CTRL(LCD_PAD_CTRL),
340 MX6_PAD_DISP0_DAT15__IPU1_DISP0_DATA15 | MUX_PAD_CTRL(LCD_PAD_CTRL), 340 MX6_PAD_DISP0_DAT15__IPU1_DISP0_DATA15 | MUX_PAD_CTRL(LCD_PAD_CTRL),
341 MX6_PAD_DISP0_DAT16__IPU1_DISP0_DATA16 | MUX_PAD_CTRL(LCD_PAD_CTRL), 341 MX6_PAD_DISP0_DAT16__IPU1_DISP0_DATA16 | MUX_PAD_CTRL(LCD_PAD_CTRL),
342 MX6_PAD_DISP0_DAT17__IPU1_DISP0_DATA17 | MUX_PAD_CTRL(LCD_PAD_CTRL), 342 MX6_PAD_DISP0_DAT17__IPU1_DISP0_DATA17 | MUX_PAD_CTRL(LCD_PAD_CTRL),
343 MX6_PAD_DISP0_DAT18__IPU1_DISP0_DATA18 | MUX_PAD_CTRL(LCD_PAD_CTRL), 343 MX6_PAD_DISP0_DAT18__IPU1_DISP0_DATA18 | MUX_PAD_CTRL(LCD_PAD_CTRL),
344 MX6_PAD_DISP0_DAT19__IPU1_DISP0_DATA19 | MUX_PAD_CTRL(LCD_PAD_CTRL), 344 MX6_PAD_DISP0_DAT19__IPU1_DISP0_DATA19 | MUX_PAD_CTRL(LCD_PAD_CTRL),
345 MX6_PAD_DISP0_DAT20__IPU1_DISP0_DATA20 | MUX_PAD_CTRL(LCD_PAD_CTRL), 345 MX6_PAD_DISP0_DAT20__IPU1_DISP0_DATA20 | MUX_PAD_CTRL(LCD_PAD_CTRL),
346 MX6_PAD_DISP0_DAT21__IPU1_DISP0_DATA21 | MUX_PAD_CTRL(LCD_PAD_CTRL), 346 MX6_PAD_DISP0_DAT21__IPU1_DISP0_DATA21 | MUX_PAD_CTRL(LCD_PAD_CTRL),
347 MX6_PAD_DISP0_DAT22__IPU1_DISP0_DATA22 | MUX_PAD_CTRL(LCD_PAD_CTRL), 347 MX6_PAD_DISP0_DAT22__IPU1_DISP0_DATA22 | MUX_PAD_CTRL(LCD_PAD_CTRL),
348 MX6_PAD_DISP0_DAT23__IPU1_DISP0_DATA23 | MUX_PAD_CTRL(LCD_PAD_CTRL), 348 MX6_PAD_DISP0_DAT23__IPU1_DISP0_DATA23 | MUX_PAD_CTRL(LCD_PAD_CTRL),
349 }; 349 };
350 350
351 static void enable_rgb(struct display_info_t const *dev) 351 static void enable_rgb(struct display_info_t const *dev)
352 { 352 {
353 imx_iomux_v3_setup_multiple_pads(rgb_pads, ARRAY_SIZE(rgb_pads)); 353 imx_iomux_v3_setup_multiple_pads(rgb_pads, ARRAY_SIZE(rgb_pads));
354 gpio_direction_output(DISP0_PWR_EN, 1); 354 gpio_direction_output(DISP0_PWR_EN, 1);
355 } 355 }
356 356
357 iomux_v3_cfg_t const pcie_pads[] = { 357 iomux_v3_cfg_t const pcie_pads[] = {
358 MX6_PAD_SD1_DAT1__GPIO1_IO17 | MUX_PAD_CTRL(NO_PAD_CTRL), /* PCIe Present */ 358 MX6_PAD_SD1_DAT1__GPIO1_IO17 | MUX_PAD_CTRL(NO_PAD_CTRL), /* PCIe Present */
359 MX6_PAD_SD1_CLK__GPIO1_IO20 | MUX_PAD_CTRL(NO_PAD_CTRL), /* RESET */ 359 MX6_PAD_SD1_CLK__GPIO1_IO20 | MUX_PAD_CTRL(NO_PAD_CTRL), /* RESET */
360 MX6_PAD_SD1_DAT0__GPIO1_IO16 | MUX_PAD_CTRL(NO_PAD_CTRL), /* PCIe Clock Request */ 360 MX6_PAD_SD1_DAT0__GPIO1_IO16 | MUX_PAD_CTRL(NO_PAD_CTRL), /* PCIe Clock Request */
361 }; 361 };
362 362
363 static void setup_pcie(void) 363 static void setup_pcie(void)
364 { 364 {
365 imx_iomux_v3_setup_multiple_pads(pcie_pads, ARRAY_SIZE(pcie_pads)); 365 imx_iomux_v3_setup_multiple_pads(pcie_pads, ARRAY_SIZE(pcie_pads));
366 gpio_direction_input(IMX_GPIO_NR(1, 16)); 366 gpio_direction_input(IMX_GPIO_NR(1, 16));
367 gpio_direction_input(IMX_GPIO_NR(1, 17)); 367 gpio_direction_input(IMX_GPIO_NR(1, 17));
368 gpio_direction_input(IMX_GPIO_NR(1, 19)); 368 gpio_direction_input(IMX_GPIO_NR(1, 19));
369 gpio_direction_output(IMX_GPIO_NR(1,20), 0); 369 gpio_direction_output(IMX_GPIO_NR(1,20), 0);
370 } 370 }
371 371
372 iomux_v3_cfg_t const di0_pads[] = { 372 iomux_v3_cfg_t const di0_pads[] = {
373 MX6_PAD_DI0_DISP_CLK__IPU1_DI0_DISP_CLK, /* DISP0_CLK */ 373 MX6_PAD_DI0_DISP_CLK__IPU1_DI0_DISP_CLK, /* DISP0_CLK */
374 MX6_PAD_DI0_PIN2__IPU1_DI0_PIN02, /* DISP0_HSYNC */ 374 MX6_PAD_DI0_PIN2__IPU1_DI0_PIN02, /* DISP0_HSYNC */
375 MX6_PAD_DI0_PIN3__IPU1_DI0_PIN03, /* DISP0_VSYNC */ 375 MX6_PAD_DI0_PIN3__IPU1_DI0_PIN03, /* DISP0_VSYNC */
376 }; 376 };
377 377
378 /* CAN0/FLEXCAN1 */ 378 /* CAN0/FLEXCAN1 */
379 iomux_v3_cfg_t const flexcan1_pads[] = { 379 iomux_v3_cfg_t const flexcan1_pads[] = {
380 380
381 MX6_PAD_GPIO_7__FLEXCAN1_TX | MUX_PAD_CTRL(WEAK_PULLUP), 381 MX6_PAD_GPIO_7__FLEXCAN1_TX | MUX_PAD_CTRL(WEAK_PULLUP),
382 MX6_PAD_GPIO_8__FLEXCAN1_RX | MUX_PAD_CTRL(WEAK_PULLUP), 382 MX6_PAD_GPIO_8__FLEXCAN1_RX | MUX_PAD_CTRL(WEAK_PULLUP),
383 }; 383 };
384 384
385 /* CAN1/FLEXCAN2 */ 385 /* CAN1/FLEXCAN2 */
386 iomux_v3_cfg_t const flexcan2_pads[] = { 386 iomux_v3_cfg_t const flexcan2_pads[] = {
387 MX6_PAD_KEY_COL4__FLEXCAN2_TX | MUX_PAD_CTRL(WEAK_PULLUP), 387 MX6_PAD_KEY_COL4__FLEXCAN2_TX | MUX_PAD_CTRL(WEAK_PULLUP),
388 MX6_PAD_KEY_ROW4__FLEXCAN2_RX | MUX_PAD_CTRL(WEAK_PULLUP), 388 MX6_PAD_KEY_ROW4__FLEXCAN2_RX | MUX_PAD_CTRL(WEAK_PULLUP),
389 }; 389 };
390 390
391 /* GPIOs */ 391 /* GPIOs */
392 iomux_v3_cfg_t const gpios_pads[] = { 392 iomux_v3_cfg_t const gpios_pads[] = {
393 MX6_PAD_NANDF_CS0__GPIO6_IO11 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO0 */ 393 MX6_PAD_NANDF_CS0__GPIO6_IO11 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO0 */
394 MX6_PAD_NANDF_D2__GPIO2_IO02 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO1 */ 394 MX6_PAD_NANDF_D2__GPIO2_IO02 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO1 */
395 MX6_PAD_NANDF_D6__GPIO2_IO06 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO2 */ 395 MX6_PAD_NANDF_D6__GPIO2_IO06 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO2 */
396 MX6_PAD_NANDF_D3__GPIO2_IO03 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO3 */ 396 MX6_PAD_NANDF_D3__GPIO2_IO03 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO3 */
397 MX6_PAD_NANDF_D7__GPIO2_IO07 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO4 */ 397 MX6_PAD_NANDF_D7__GPIO2_IO07 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO4 */
398 MX6_PAD_NANDF_CS1__GPIO6_IO14 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO6 */ 398 MX6_PAD_NANDF_CS1__GPIO6_IO14 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO6 */
399 MX6_PAD_NANDF_CLE__GPIO6_IO07 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO7 */ 399 MX6_PAD_NANDF_CLE__GPIO6_IO07 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO7 */
400 MX6_PAD_NANDF_D4__GPIO2_IO04 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO8 */ 400 MX6_PAD_NANDF_D4__GPIO2_IO04 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO8 */
401 MX6_PAD_NANDF_D0__GPIO2_IO00 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO9 */ 401 MX6_PAD_NANDF_D0__GPIO2_IO00 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO9 */
402 MX6_PAD_NANDF_D5__GPIO2_IO05 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO10 */ 402 MX6_PAD_NANDF_D5__GPIO2_IO05 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO10 */
403 MX6_PAD_NANDF_ALE__GPIO6_IO08 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO11 */ 403 MX6_PAD_NANDF_ALE__GPIO6_IO08 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO11 */
404 }; 404 };
405 405
406 #if defined(CONFIG_MX6DL) && defined(CONFIG_MXC_EPDC) 406 #if defined(CONFIG_MX6DL) && defined(CONFIG_MXC_EPDC)
407 static iomux_v3_cfg_t const epdc_enable_pads[] = { 407 static iomux_v3_cfg_t const epdc_enable_pads[] = {
408 MX6_PAD_EIM_A16__EPDC_DATA00 | MUX_PAD_CTRL(EPDC_PAD_CTRL), 408 MX6_PAD_EIM_A16__EPDC_DATA00 | MUX_PAD_CTRL(EPDC_PAD_CTRL),
409 MX6_PAD_EIM_DA10__EPDC_DATA01 | MUX_PAD_CTRL(EPDC_PAD_CTRL), 409 MX6_PAD_EIM_DA10__EPDC_DATA01 | MUX_PAD_CTRL(EPDC_PAD_CTRL),
410 MX6_PAD_EIM_DA12__EPDC_DATA02 | MUX_PAD_CTRL(EPDC_PAD_CTRL), 410 MX6_PAD_EIM_DA12__EPDC_DATA02 | MUX_PAD_CTRL(EPDC_PAD_CTRL),
411 MX6_PAD_EIM_DA11__EPDC_DATA03 | MUX_PAD_CTRL(EPDC_PAD_CTRL), 411 MX6_PAD_EIM_DA11__EPDC_DATA03 | MUX_PAD_CTRL(EPDC_PAD_CTRL),
412 MX6_PAD_EIM_LBA__EPDC_DATA04 | MUX_PAD_CTRL(EPDC_PAD_CTRL), 412 MX6_PAD_EIM_LBA__EPDC_DATA04 | MUX_PAD_CTRL(EPDC_PAD_CTRL),
413 MX6_PAD_EIM_EB2__EPDC_DATA05 | MUX_PAD_CTRL(EPDC_PAD_CTRL), 413 MX6_PAD_EIM_EB2__EPDC_DATA05 | MUX_PAD_CTRL(EPDC_PAD_CTRL),
414 MX6_PAD_EIM_CS0__EPDC_DATA06 | MUX_PAD_CTRL(EPDC_PAD_CTRL), 414 MX6_PAD_EIM_CS0__EPDC_DATA06 | MUX_PAD_CTRL(EPDC_PAD_CTRL),
415 MX6_PAD_EIM_RW__EPDC_DATA07 | MUX_PAD_CTRL(EPDC_PAD_CTRL), 415 MX6_PAD_EIM_RW__EPDC_DATA07 | MUX_PAD_CTRL(EPDC_PAD_CTRL),
416 MX6_PAD_EIM_A21__EPDC_GDCLK | MUX_PAD_CTRL(EPDC_PAD_CTRL), 416 MX6_PAD_EIM_A21__EPDC_GDCLK | MUX_PAD_CTRL(EPDC_PAD_CTRL),
417 MX6_PAD_EIM_A22__EPDC_GDSP | MUX_PAD_CTRL(EPDC_PAD_CTRL), 417 MX6_PAD_EIM_A22__EPDC_GDSP | MUX_PAD_CTRL(EPDC_PAD_CTRL),
418 MX6_PAD_EIM_A23__EPDC_GDOE | MUX_PAD_CTRL(EPDC_PAD_CTRL), 418 MX6_PAD_EIM_A23__EPDC_GDOE | MUX_PAD_CTRL(EPDC_PAD_CTRL),
419 MX6_PAD_EIM_A24__EPDC_GDRL | MUX_PAD_CTRL(EPDC_PAD_CTRL), 419 MX6_PAD_EIM_A24__EPDC_GDRL | MUX_PAD_CTRL(EPDC_PAD_CTRL),
420 MX6_PAD_EIM_D31__EPDC_SDCLK_P | MUX_PAD_CTRL(EPDC_PAD_CTRL), 420 MX6_PAD_EIM_D31__EPDC_SDCLK_P | MUX_PAD_CTRL(EPDC_PAD_CTRL),
421 MX6_PAD_EIM_D27__EPDC_SDOE | MUX_PAD_CTRL(EPDC_PAD_CTRL), 421 MX6_PAD_EIM_D27__EPDC_SDOE | MUX_PAD_CTRL(EPDC_PAD_CTRL),
422 MX6_PAD_EIM_DA1__EPDC_SDLE | MUX_PAD_CTRL(EPDC_PAD_CTRL), 422 MX6_PAD_EIM_DA1__EPDC_SDLE | MUX_PAD_CTRL(EPDC_PAD_CTRL),
423 MX6_PAD_EIM_EB1__EPDC_SDSHR | MUX_PAD_CTRL(EPDC_PAD_CTRL), 423 MX6_PAD_EIM_EB1__EPDC_SDSHR | MUX_PAD_CTRL(EPDC_PAD_CTRL),
424 MX6_PAD_EIM_DA2__EPDC_BDR0 | MUX_PAD_CTRL(EPDC_PAD_CTRL), 424 MX6_PAD_EIM_DA2__EPDC_BDR0 | MUX_PAD_CTRL(EPDC_PAD_CTRL),
425 MX6_PAD_EIM_DA4__EPDC_SDCE0 | MUX_PAD_CTRL(EPDC_PAD_CTRL), 425 MX6_PAD_EIM_DA4__EPDC_SDCE0 | MUX_PAD_CTRL(EPDC_PAD_CTRL),
426 MX6_PAD_EIM_DA5__EPDC_SDCE1 | MUX_PAD_CTRL(EPDC_PAD_CTRL), 426 MX6_PAD_EIM_DA5__EPDC_SDCE1 | MUX_PAD_CTRL(EPDC_PAD_CTRL),
427 MX6_PAD_EIM_DA6__EPDC_SDCE2 | MUX_PAD_CTRL(EPDC_PAD_CTRL), 427 MX6_PAD_EIM_DA6__EPDC_SDCE2 | MUX_PAD_CTRL(EPDC_PAD_CTRL),
428 }; 428 };
429 429
430 static iomux_v3_cfg_t const epdc_disable_pads[] = { 430 static iomux_v3_cfg_t const epdc_disable_pads[] = {
431 MX6_PAD_EIM_A16__GPIO2_IO22, 431 MX6_PAD_EIM_A16__GPIO2_IO22,
432 MX6_PAD_EIM_DA10__GPIO3_IO10, 432 MX6_PAD_EIM_DA10__GPIO3_IO10,
433 MX6_PAD_EIM_DA12__GPIO3_IO12, 433 MX6_PAD_EIM_DA12__GPIO3_IO12,
434 MX6_PAD_EIM_DA11__GPIO3_IO11, 434 MX6_PAD_EIM_DA11__GPIO3_IO11,
435 MX6_PAD_EIM_LBA__GPIO2_IO27, 435 MX6_PAD_EIM_LBA__GPIO2_IO27,
436 MX6_PAD_EIM_EB2__GPIO2_IO30, 436 MX6_PAD_EIM_EB2__GPIO2_IO30,
437 MX6_PAD_EIM_CS0__GPIO2_IO23, 437 MX6_PAD_EIM_CS0__GPIO2_IO23,
438 MX6_PAD_EIM_RW__GPIO2_IO26, 438 MX6_PAD_EIM_RW__GPIO2_IO26,
439 MX6_PAD_EIM_A21__GPIO2_IO17, 439 MX6_PAD_EIM_A21__GPIO2_IO17,
440 MX6_PAD_EIM_A22__GPIO2_IO16, 440 MX6_PAD_EIM_A22__GPIO2_IO16,
441 MX6_PAD_EIM_A23__GPIO6_IO06, 441 MX6_PAD_EIM_A23__GPIO6_IO06,
442 MX6_PAD_EIM_A24__GPIO5_IO04, 442 MX6_PAD_EIM_A24__GPIO5_IO04,
443 MX6_PAD_EIM_D31__GPIO3_IO31, 443 MX6_PAD_EIM_D31__GPIO3_IO31,
444 MX6_PAD_EIM_D27__GPIO3_IO27, 444 MX6_PAD_EIM_D27__GPIO3_IO27,
445 MX6_PAD_EIM_DA1__GPIO3_IO01, 445 MX6_PAD_EIM_DA1__GPIO3_IO01,
446 MX6_PAD_EIM_EB1__GPIO2_IO29, 446 MX6_PAD_EIM_EB1__GPIO2_IO29,
447 MX6_PAD_EIM_DA2__GPIO3_IO02, 447 MX6_PAD_EIM_DA2__GPIO3_IO02,
448 MX6_PAD_EIM_DA4__GPIO3_IO04, 448 MX6_PAD_EIM_DA4__GPIO3_IO04,
449 MX6_PAD_EIM_DA5__GPIO3_IO05, 449 MX6_PAD_EIM_DA5__GPIO3_IO05,
450 MX6_PAD_EIM_DA6__GPIO3_IO06, 450 MX6_PAD_EIM_DA6__GPIO3_IO06,
451 }; 451 };
452 #endif 452 #endif
453 453
454 static void setup_iomux_uart1(void) 454 static void setup_iomux_uart1(void)
455 { 455 {
456 imx_iomux_v3_setup_multiple_pads(uart1_pads, ARRAY_SIZE(uart1_pads)); 456 imx_iomux_v3_setup_multiple_pads(uart1_pads, ARRAY_SIZE(uart1_pads));
457 } 457 }
458 458
459 static void setup_iomux_uart2(void) 459 static void setup_iomux_uart2(void)
460 { 460 {
461 imx_iomux_v3_setup_multiple_pads(uart2_pads, ARRAY_SIZE(uart2_pads)); 461 imx_iomux_v3_setup_multiple_pads(uart2_pads, ARRAY_SIZE(uart2_pads));
462 } 462 }
463 463
464 static void setup_iomux_uart4(void) 464 static void setup_iomux_uart4(void)
465 { 465 {
466 imx_iomux_v3_setup_multiple_pads(uart4_pads, ARRAY_SIZE(uart4_pads)); 466 imx_iomux_v3_setup_multiple_pads(uart4_pads, ARRAY_SIZE(uart4_pads));
467 } 467 }
468 468
469 static void setup_iomux_uart5(void) 469 static void setup_iomux_uart5(void)
470 { 470 {
471 imx_iomux_v3_setup_multiple_pads(uart5_pads, ARRAY_SIZE(uart5_pads)); 471 imx_iomux_v3_setup_multiple_pads(uart5_pads, ARRAY_SIZE(uart5_pads));
472 } 472 }
473 473
474 static void setup_iomux_wdt(void) 474 static void setup_iomux_wdt(void)
475 { 475 {
476 imx_iomux_v3_setup_multiple_pads(wdt_pads, ARRAY_SIZE(wdt_pads)); 476 imx_iomux_v3_setup_multiple_pads(wdt_pads, ARRAY_SIZE(wdt_pads));
477 477
478 /* Set HW_WDT as Output High */ 478 /* Set HW_WDT as Output High */
479 gpio_direction_output(IMX_GPIO_NR(3, 16) , 1); 479 gpio_direction_output(IMX_GPIO_NR(3, 16) , 1);
480 } 480 }
481 481
482 static void setup_iomux_reset_out(void) 482 static void setup_iomux_reset_out(void)
483 { 483 {
484 imx_iomux_v3_setup_multiple_pads(reset_out_pads, ARRAY_SIZE(reset_out_pads)); 484 imx_iomux_v3_setup_multiple_pads(reset_out_pads, ARRAY_SIZE(reset_out_pads));
485 485
486 /* Set CPU RESET_OUT as Output */ 486 /* Set CPU RESET_OUT as Output */
487 gpio_direction_output(IMX_GPIO_NR(6, 16) , 0); 487 gpio_direction_output(IMX_GPIO_NR(6, 16) , 0);
488 } 488 }
489 489
490 static void setup_spi1(void) 490 static void setup_spi1(void)
491 { 491 {
492 imx_iomux_v3_setup_multiple_pads(ecspi1_pads, ARRAY_SIZE(ecspi1_pads)); 492 imx_iomux_v3_setup_multiple_pads(ecspi1_pads, ARRAY_SIZE(ecspi1_pads));
493 gpio_direction_output(IMX_GPIO_NR(4, 9), 0); 493 gpio_direction_output(IMX_GPIO_NR(4, 9), 0);
494 gpio_direction_output(IMX_GPIO_NR(4, 10), 0); 494 gpio_direction_output(IMX_GPIO_NR(4, 10), 0);
495 } 495 }
496 496
497 static void setup_flexcan1(void) 497 static void setup_flexcan1(void)
498 { 498 {
499 imx_iomux_v3_setup_multiple_pads(flexcan1_pads, ARRAY_SIZE(flexcan1_pads)); 499 imx_iomux_v3_setup_multiple_pads(flexcan1_pads, ARRAY_SIZE(flexcan1_pads));
500 } 500 }
501 501
502 static void setup_flexcan2(void) 502 static void setup_flexcan2(void)
503 { 503 {
504 imx_iomux_v3_setup_multiple_pads(flexcan2_pads, ARRAY_SIZE(flexcan2_pads)); 504 imx_iomux_v3_setup_multiple_pads(flexcan2_pads, ARRAY_SIZE(flexcan2_pads));
505 } 505 }
506 506
507 static void setup_gpios(void) 507 static void setup_gpios(void)
508 { 508 {
509 imx_iomux_v3_setup_multiple_pads(gpios_pads, ARRAY_SIZE(gpios_pads)); 509 imx_iomux_v3_setup_multiple_pads(gpios_pads, ARRAY_SIZE(gpios_pads));
510 gpio_direction_output(IMX_GPIO_NR(6, 11), 0); 510 gpio_direction_output(IMX_GPIO_NR(6, 11), 0);
511 gpio_direction_output(IMX_GPIO_NR(2, 02), 0); 511 gpio_direction_output(IMX_GPIO_NR(2, 02), 0);
512 gpio_direction_output(IMX_GPIO_NR(2, 06), 0); 512 gpio_direction_output(IMX_GPIO_NR(2, 06), 0);
513 gpio_direction_output(IMX_GPIO_NR(2, 03), 0); 513 gpio_direction_output(IMX_GPIO_NR(2, 03), 0);
514 gpio_direction_output(IMX_GPIO_NR(2, 07), 0); 514 gpio_direction_output(IMX_GPIO_NR(2, 07), 0);
515 gpio_direction_input(IMX_GPIO_NR(6, 14)); 515 gpio_direction_input(IMX_GPIO_NR(6, 14));
516 gpio_direction_input(IMX_GPIO_NR(6, 07)); 516 gpio_direction_input(IMX_GPIO_NR(6, 07));
517 gpio_direction_input(IMX_GPIO_NR(2, 04)); 517 gpio_direction_input(IMX_GPIO_NR(2, 04));
518 gpio_direction_input(IMX_GPIO_NR(2, 00)); 518 gpio_direction_input(IMX_GPIO_NR(2, 00));
519 gpio_direction_input(IMX_GPIO_NR(2, 05)); 519 gpio_direction_input(IMX_GPIO_NR(2, 05));
520 gpio_direction_input(IMX_GPIO_NR(6, 8)); 520 gpio_direction_input(IMX_GPIO_NR(6, 8));
521 } 521 }
522 522
523 #ifdef CONFIG_FSL_ESDHC 523 #ifdef CONFIG_FSL_ESDHC
524 struct fsl_esdhc_cfg usdhc_cfg[3] = { 524 struct fsl_esdhc_cfg usdhc_cfg[3] = {
525 {USDHC2_BASE_ADDR}, 525 {USDHC2_BASE_ADDR},
526 {USDHC3_BASE_ADDR}, 526 {USDHC3_BASE_ADDR},
527 {USDHC4_BASE_ADDR}, 527 {USDHC4_BASE_ADDR},
528 }; 528 };
529 529
530 int mmc_get_env_devno(void) 530 int mmc_get_env_devno(void)
531 { 531 {
532 u32 soc_sbmr = readl(SRC_BASE_ADDR + 0x4); 532 u32 soc_sbmr = readl(SRC_BASE_ADDR + 0x4);
533 u32 dev_no; 533 u32 dev_no;
534 u32 bootsel; 534 u32 bootsel;
535 535
536 bootsel = (soc_sbmr & 0x000000FF) >> 6 ; 536 bootsel = (soc_sbmr & 0x000000FF) >> 6 ;
537 537
538 /* If not boot from sd/mmc, use default value */ 538 /* If not boot from sd/mmc, use default value */
539 if (bootsel != 1) 539 if (bootsel != 1)
540 return CONFIG_SYS_MMC_ENV_DEV; 540 return CONFIG_SYS_MMC_ENV_DEV;
541 541
542 /* BOOT_CFG2[3] and BOOT_CFG2[4] */ 542 /* BOOT_CFG2[3] and BOOT_CFG2[4] */
543 dev_no = (soc_sbmr & 0x00001800) >> 11; 543 dev_no = (soc_sbmr & 0x00001800) >> 11;
544 544
545 /* need ubstract 1 to map to the mmc device id 545 /* need ubstract 1 to map to the mmc device id
546 * see the comments in board_mmc_init function 546 * see the comments in board_mmc_init function
547 */ 547 */
548 548
549 dev_no--; 549 dev_no--;
550 550
551 return dev_no; 551 return dev_no;
552 } 552 }
553 553
554 int mmc_map_to_kernel_blk(int dev_no) 554 int mmc_map_to_kernel_blk(int dev_no)
555 { 555 {
556 return dev_no + 1; 556 return dev_no + 1;
557 } 557 }
558 558
559 #define USDHC2_CD_GPIO IMX_GPIO_NR(1, 28) 559 #define USDHC2_CD_GPIO IMX_GPIO_NR(1, 28)
560 /*#define USDHC3_CD_GPIO IMX_GPIO_NR(2, 0)*/ 560 /*#define USDHC3_CD_GPIO IMX_GPIO_NR(2, 0)*/
561 561
562 int board_mmc_getcd(struct mmc *mmc) 562 int board_mmc_getcd(struct mmc *mmc)
563 { 563 {
564 struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv; 564 struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv;
565 int ret = 0; 565 int ret = 0;
566 566
567 switch (cfg->esdhc_base) { 567 switch (cfg->esdhc_base) {
568 case USDHC2_BASE_ADDR: 568 case USDHC2_BASE_ADDR:
569 ret = !gpio_get_value(USDHC2_CD_GPIO); 569 ret = !gpio_get_value(USDHC2_CD_GPIO);
570 break; 570 break;
571 case USDHC3_BASE_ADDR: 571 case USDHC3_BASE_ADDR:
572 /*ret = !gpio_get_value(USDHC3_CD_GPIO);*/ 572 /*ret = !gpio_get_value(USDHC3_CD_GPIO);*/
573 break; 573 break;
574 case USDHC4_BASE_ADDR: 574 case USDHC4_BASE_ADDR:
575 ret = 1; /* eMMC/uSDHC4 is always present */ 575 ret = 1; /* eMMC/uSDHC4 is always present */
576 break; 576 break;
577 } 577 }
578 578
579 return ret; 579 return ret;
580 } 580 }
581 581
582 int board_mmc_init(bd_t *bis) 582 int board_mmc_init(bd_t *bis)
583 { 583 {
584 #ifndef CONFIG_SPL_BUILD 584 #ifndef CONFIG_SPL_BUILD
585 int ret; 585 int ret;
586 int i; 586 int i;
587 587
588 /* 588 /*
589 * According to the board_mmc_init() the following map is done: 589 * According to the board_mmc_init() the following map is done:
590 * (U-boot device node) (Physical Port) 590 * (U-boot device node) (Physical Port)
591 * mmc0 SDIO 591 * mmc0 SDIO
592 * mmc1 SDMMC 592 * mmc1 SDMMC
593 * mmc2 eMMC 593 * mmc2 eMMC
594 */ 594 */
595 for (i = 0; i < CONFIG_SYS_FSL_USDHC_NUM; i++) { 595 for (i = 0; i < CONFIG_SYS_FSL_USDHC_NUM; i++) {
596 switch (i) { 596 switch (i) {
597 case 0: 597 case 0:
598 imx_iomux_v3_setup_multiple_pads( 598 imx_iomux_v3_setup_multiple_pads(
599 usdhc2_pads, ARRAY_SIZE(usdhc2_pads)); 599 usdhc2_pads, ARRAY_SIZE(usdhc2_pads));
600 gpio_direction_input(USDHC2_CD_GPIO); 600 gpio_direction_input(USDHC2_CD_GPIO);
601 usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC2_CLK); 601 usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC2_CLK);
602 break; 602 break;
603 case 1: 603 case 1:
604 imx_iomux_v3_setup_multiple_pads( 604 imx_iomux_v3_setup_multiple_pads(
605 usdhc3_pads, ARRAY_SIZE(usdhc3_pads)); 605 usdhc3_pads, ARRAY_SIZE(usdhc3_pads));
606 /*gpio_direction_input(USDHC3_CD_GPIO);*/ 606 /*gpio_direction_input(USDHC3_CD_GPIO);*/
607 usdhc_cfg[1].sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK); 607 usdhc_cfg[1].sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK);
608 break; 608 break;
609 case 2: 609 case 2:
610 imx_iomux_v3_setup_multiple_pads( 610 imx_iomux_v3_setup_multiple_pads(
611 usdhc4_pads, ARRAY_SIZE(usdhc4_pads)); 611 usdhc4_pads, ARRAY_SIZE(usdhc4_pads));
612 usdhc_cfg[2].sdhc_clk = mxc_get_clock(MXC_ESDHC4_CLK); 612 usdhc_cfg[2].sdhc_clk = mxc_get_clock(MXC_ESDHC4_CLK);
613 break; 613 break;
614 default: 614 default:
615 printf("Warning: you configured more USDHC controllers" 615 printf("Warning: you configured more USDHC controllers"
616 "(%d) then supported by the board (%d)\n", 616 "(%d) then supported by the board (%d)\n",
617 i + 1, CONFIG_SYS_FSL_USDHC_NUM); 617 i + 1, CONFIG_SYS_FSL_USDHC_NUM);
618 return -EINVAL; 618 return -EINVAL;
619 } 619 }
620 620
621 ret = fsl_esdhc_initialize(bis, &usdhc_cfg[i]); 621 ret = fsl_esdhc_initialize(bis, &usdhc_cfg[i]);
622 if (ret) 622 if (ret)
623 return ret; 623 return ret;
624 } 624 }
625 625
626 return 0; 626 return 0;
627 #else 627 #else
628 struct src *psrc = (struct src *)SRC_BASE_ADDR; 628 struct src *psrc = (struct src *)SRC_BASE_ADDR;
629 unsigned reg = readl(&psrc->sbmr1) >> 11; 629 unsigned reg = readl(&psrc->sbmr1) >> 11;
630 /* 630 /*
631 * Upon reading BOOT_CFG register the following map is done: 631 * Upon reading BOOT_CFG register the following map is done:
632 * Bit 11 and 12 of BOOT_CFG register can determine the current 632 * Bit 11 and 12 of BOOT_CFG register can determine the current
633 * mmc port 633 * mmc port
634 * 0x1 SDIO 634 * 0x1 SDIO
635 * 0x2 SDMMC 635 * 0x2 SDMMC
636 * 0x3 eMMC 636 * 0x3 eMMC
637 */ 637 */
638 638
639 switch (reg & 0x3) { 639 switch (reg & 0x3) {
640 case 0x1: 640 case 0x1:
641 imx_iomux_v3_setup_multiple_pads( 641 imx_iomux_v3_setup_multiple_pads(
642 usdhc2_pads, ARRAY_SIZE(usdhc2_pads)); 642 usdhc2_pads, ARRAY_SIZE(usdhc2_pads));
643 usdhc_cfg[0].esdhc_base = USDHC2_BASE_ADDR; 643 usdhc_cfg[0].esdhc_base = USDHC2_BASE_ADDR;
644 usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC2_CLK); 644 usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC2_CLK);
645 gd->arch.sdhc_clk = usdhc_cfg[0].sdhc_clk; 645 gd->arch.sdhc_clk = usdhc_cfg[0].sdhc_clk;
646 break; 646 break;
647 case 0x2: 647 case 0x2:
648 imx_iomux_v3_setup_multiple_pads( 648 imx_iomux_v3_setup_multiple_pads(
649 usdhc3_pads, ARRAY_SIZE(usdhc3_pads)); 649 usdhc3_pads, ARRAY_SIZE(usdhc3_pads));
650 usdhc_cfg[0].esdhc_base = USDHC3_BASE_ADDR; 650 usdhc_cfg[0].esdhc_base = USDHC3_BASE_ADDR;
651 usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK); 651 usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK);
652 gd->arch.sdhc_clk = usdhc_cfg[0].sdhc_clk; 652 gd->arch.sdhc_clk = usdhc_cfg[0].sdhc_clk;
653 break; 653 break;
654 case 0x3: 654 case 0x3:
655 imx_iomux_v3_setup_multiple_pads( 655 imx_iomux_v3_setup_multiple_pads(
656 usdhc4_pads, ARRAY_SIZE(usdhc4_pads)); 656 usdhc4_pads, ARRAY_SIZE(usdhc4_pads));
657 usdhc_cfg[0].esdhc_base = USDHC4_BASE_ADDR; 657 usdhc_cfg[0].esdhc_base = USDHC4_BASE_ADDR;
658 usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC4_CLK); 658 usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC4_CLK);
659 gd->arch.sdhc_clk = usdhc_cfg[0].sdhc_clk; 659 gd->arch.sdhc_clk = usdhc_cfg[0].sdhc_clk;
660 break; 660 break;
661 } 661 }
662 662
663 return fsl_esdhc_initialize(bis, &usdhc_cfg[0]); 663 return fsl_esdhc_initialize(bis, &usdhc_cfg[0]);
664 #endif 664 #endif
665 } 665 }
666 #endif 666 #endif
667 667
668 int check_mmc_autodetect(void) 668 int check_mmc_autodetect(void)
669 { 669 {
670 char *autodetect_str = getenv("mmcautodetect"); 670 char *autodetect_str = getenv("mmcautodetect");
671 671
672 if ((autodetect_str != NULL) && 672 if ((autodetect_str != NULL) &&
673 (strcmp(autodetect_str, "yes") == 0)) { 673 (strcmp(autodetect_str, "yes") == 0)) {
674 return 1; 674 return 1;
675 } 675 }
676 676
677 return 0; 677 return 0;
678 } 678 }
679 679
680 void board_late_mmc_env_init(void) 680 void board_late_mmc_env_init(void)
681 { 681 {
682 char cmd[32]; 682 char cmd[32];
683 char mmcblk[32]; 683 char mmcblk[32];
684 u32 dev_no = mmc_get_env_devno(); 684 u32 dev_no = mmc_get_env_devno();
685 685
686 if (!check_mmc_autodetect()) 686 if (!check_mmc_autodetect())
687 return; 687 return;
688 688
689 setenv_ulong("mmcdev", dev_no); 689 setenv_ulong("mmcdev", dev_no);
690 690
691 /* Set mmcblk env */ 691 /* Set mmcblk env */
692 sprintf(mmcblk, "/dev/mmcblk%dp2 rootwait rw", 692 sprintf(mmcblk, "/dev/mmcblk%dp2 rootwait rw",
693 mmc_map_to_kernel_blk(dev_no)); 693 mmc_map_to_kernel_blk(dev_no));
694 setenv("mmcroot", mmcblk); 694 setenv("mmcroot", mmcblk);
695 695
696 sprintf(cmd, "mmc dev %d", dev_no); 696 sprintf(cmd, "mmc dev %d", dev_no);
697 run_command(cmd, 0); 697 run_command(cmd, 0);
698 } 698 }
699 699
700 #if defined(CONFIG_MX6DL) && defined(CONFIG_MXC_EPDC) 700 #if defined(CONFIG_MX6DL) && defined(CONFIG_MXC_EPDC)
701 vidinfo_t panel_info = { 701 vidinfo_t panel_info = {
702 .vl_refresh = 85, 702 .vl_refresh = 85,
703 .vl_col = 800, 703 .vl_col = 800,
704 .vl_row = 600, 704 .vl_row = 600,
705 .vl_pixclock = 26666667, 705 .vl_pixclock = 26666667,
706 .vl_left_margin = 8, 706 .vl_left_margin = 8,
707 .vl_right_margin = 100, 707 .vl_right_margin = 100,
708 .vl_upper_margin = 4, 708 .vl_upper_margin = 4,
709 .vl_lower_margin = 8, 709 .vl_lower_margin = 8,
710 .vl_hsync = 4, 710 .vl_hsync = 4,
711 .vl_vsync = 1, 711 .vl_vsync = 1,
712 .vl_sync = 0, 712 .vl_sync = 0,
713 .vl_mode = 0, 713 .vl_mode = 0,
714 .vl_flag = 0, 714 .vl_flag = 0,
715 .vl_bpix = 3, 715 .vl_bpix = 3,
716 .cmap = 0, 716 .cmap = 0,
717 }; 717 };
718 718
719 struct epdc_timing_params panel_timings = { 719 struct epdc_timing_params panel_timings = {
720 .vscan_holdoff = 4, 720 .vscan_holdoff = 4,
721 .sdoed_width = 10, 721 .sdoed_width = 10,
722 .sdoed_delay = 20, 722 .sdoed_delay = 20,
723 .sdoez_width = 10, 723 .sdoez_width = 10,
724 .sdoez_delay = 20, 724 .sdoez_delay = 20,
725 .gdclk_hp_offs = 419, 725 .gdclk_hp_offs = 419,
726 .gdsp_offs = 20, 726 .gdsp_offs = 20,
727 .gdoe_offs = 0, 727 .gdoe_offs = 0,
728 .gdclk_offs = 5, 728 .gdclk_offs = 5,
729 .num_ce = 1, 729 .num_ce = 1,
730 }; 730 };
731 731
732 static void setup_epdc_power(void) 732 static void setup_epdc_power(void)
733 { 733 {
734 /* Setup epdc voltage */ 734 /* Setup epdc voltage */
735 735
736 /* EIM_A17 - GPIO2[21] for PWR_GOOD status */ 736 /* EIM_A17 - GPIO2[21] for PWR_GOOD status */
737 imx_iomux_v3_setup_pad(MX6_PAD_EIM_A17__GPIO2_IO21 | 737 imx_iomux_v3_setup_pad(MX6_PAD_EIM_A17__GPIO2_IO21 |
738 MUX_PAD_CTRL(EPDC_PAD_CTRL)); 738 MUX_PAD_CTRL(EPDC_PAD_CTRL));
739 /* Set as input */ 739 /* Set as input */
740 gpio_direction_input(IMX_GPIO_NR(2, 21)); 740 gpio_direction_input(IMX_GPIO_NR(2, 21));
741 741
742 /* EIM_D17 - GPIO3[17] for VCOM control */ 742 /* EIM_D17 - GPIO3[17] for VCOM control */
743 imx_iomux_v3_setup_pad(MX6_PAD_EIM_D17__GPIO3_IO17 | 743 imx_iomux_v3_setup_pad(MX6_PAD_EIM_D17__GPIO3_IO17 |
744 MUX_PAD_CTRL(EPDC_PAD_CTRL)); 744 MUX_PAD_CTRL(EPDC_PAD_CTRL));
745 745
746 /* Set as output */ 746 /* Set as output */
747 gpio_direction_output(IMX_GPIO_NR(3, 17), 1); 747 gpio_direction_output(IMX_GPIO_NR(3, 17), 1);
748 748
749 /* EIM_D20 - GPIO3[20] for EPD PMIC WAKEUP */ 749 /* EIM_D20 - GPIO3[20] for EPD PMIC WAKEUP */
750 imx_iomux_v3_setup_pad(MX6_PAD_EIM_D20__GPIO3_IO20 | 750 imx_iomux_v3_setup_pad(MX6_PAD_EIM_D20__GPIO3_IO20 |
751 MUX_PAD_CTRL(EPDC_PAD_CTRL)); 751 MUX_PAD_CTRL(EPDC_PAD_CTRL));
752 /* Set as output */ 752 /* Set as output */
753 gpio_direction_output(IMX_GPIO_NR(3, 20), 1); 753 gpio_direction_output(IMX_GPIO_NR(3, 20), 1);
754 754
755 /* EIM_A18 - GPIO2[20] for EPD PWR CTL0 */ 755 /* EIM_A18 - GPIO2[20] for EPD PWR CTL0 */
756 imx_iomux_v3_setup_pad(MX6_PAD_EIM_A18__GPIO2_IO20 | 756 imx_iomux_v3_setup_pad(MX6_PAD_EIM_A18__GPIO2_IO20 |
757 MUX_PAD_CTRL(EPDC_PAD_CTRL)); 757 MUX_PAD_CTRL(EPDC_PAD_CTRL));
758 /* Set as output */ 758 /* Set as output */
759 gpio_direction_output(IMX_GPIO_NR(2, 20), 1); 759 gpio_direction_output(IMX_GPIO_NR(2, 20), 1);
760 } 760 }
761 761
762 static void epdc_enable_pins(void) 762 static void epdc_enable_pins(void)
763 { 763 {
764 /* epdc iomux settings */ 764 /* epdc iomux settings */
765 imx_iomux_v3_setup_multiple_pads(epdc_enable_pads, 765 imx_iomux_v3_setup_multiple_pads(epdc_enable_pads,
766 ARRAY_SIZE(epdc_enable_pads)); 766 ARRAY_SIZE(epdc_enable_pads));
767 } 767 }
768 768
769 static void epdc_disable_pins(void) 769 static void epdc_disable_pins(void)
770 { 770 {
771 /* Configure MUX settings for EPDC pins to GPIO */ 771 /* Configure MUX settings for EPDC pins to GPIO */
772 imx_iomux_v3_setup_multiple_pads(epdc_disable_pads, 772 imx_iomux_v3_setup_multiple_pads(epdc_disable_pads,
773 ARRAY_SIZE(epdc_disable_pads)); 773 ARRAY_SIZE(epdc_disable_pads));
774 } 774 }
775 775
776 static void setup_epdc(void) 776 static void setup_epdc(void)
777 { 777 {
778 unsigned int reg; 778 unsigned int reg;
779 struct mxc_ccm_reg *ccm_regs = (struct mxc_ccm_reg *)CCM_BASE_ADDR; 779 struct mxc_ccm_reg *ccm_regs = (struct mxc_ccm_reg *)CCM_BASE_ADDR;
780 780
781 /*** epdc Maxim PMIC settings ***/ 781 /*** epdc Maxim PMIC settings ***/
782 782
783 /* EPDC PWRSTAT - GPIO2[21] for PWR_GOOD status */ 783 /* EPDC PWRSTAT - GPIO2[21] for PWR_GOOD status */
784 imx_iomux_v3_setup_pad(MX6_PAD_EIM_A17__GPIO2_IO21 | 784 imx_iomux_v3_setup_pad(MX6_PAD_EIM_A17__GPIO2_IO21 |
785 MUX_PAD_CTRL(EPDC_PAD_CTRL)); 785 MUX_PAD_CTRL(EPDC_PAD_CTRL));
786 786
787 /* EPDC VCOM0 - GPIO3[17] for VCOM control */ 787 /* EPDC VCOM0 - GPIO3[17] for VCOM control */
788 imx_iomux_v3_setup_pad(MX6_PAD_EIM_D17__GPIO3_IO17 | 788 imx_iomux_v3_setup_pad(MX6_PAD_EIM_D17__GPIO3_IO17 |
789 MUX_PAD_CTRL(EPDC_PAD_CTRL)); 789 MUX_PAD_CTRL(EPDC_PAD_CTRL));
790 790
791 /* UART4 TXD - GPIO3[20] for EPD PMIC WAKEUP */ 791 /* UART4 TXD - GPIO3[20] for EPD PMIC WAKEUP */
792 imx_iomux_v3_setup_pad(MX6_PAD_EIM_D20__GPIO3_IO20 | 792 imx_iomux_v3_setup_pad(MX6_PAD_EIM_D20__GPIO3_IO20 |
793 MUX_PAD_CTRL(EPDC_PAD_CTRL)); 793 MUX_PAD_CTRL(EPDC_PAD_CTRL));
794 794
795 /* EIM_A18 - GPIO2[20] for EPD PWR CTL0 */ 795 /* EIM_A18 - GPIO2[20] for EPD PWR CTL0 */
796 imx_iomux_v3_setup_pad(MX6_PAD_EIM_A18__GPIO2_IO20 | 796 imx_iomux_v3_setup_pad(MX6_PAD_EIM_A18__GPIO2_IO20 |
797 MUX_PAD_CTRL(EPDC_PAD_CTRL)); 797 MUX_PAD_CTRL(EPDC_PAD_CTRL));
798 798
799 /*** Set pixel clock rates for EPDC ***/ 799 /*** Set pixel clock rates for EPDC ***/
800 800
801 /* EPDC AXI clk (IPU2_CLK) from PFD_400M, set to 396/2 = 198MHz */ 801 /* EPDC AXI clk (IPU2_CLK) from PFD_400M, set to 396/2 = 198MHz */
802 reg = readl(&ccm_regs->cscdr3); 802 reg = readl(&ccm_regs->cscdr3);
803 reg &= ~0x7C000; 803 reg &= ~0x7C000;
804 reg |= (1 << 16) | (1 << 14); 804 reg |= (1 << 16) | (1 << 14);
805 writel(reg, &ccm_regs->cscdr3); 805 writel(reg, &ccm_regs->cscdr3);
806 806
807 /* EPDC AXI clk enable */ 807 /* EPDC AXI clk enable */
808 reg = readl(&ccm_regs->CCGR3); 808 reg = readl(&ccm_regs->CCGR3);
809 reg |= 0x00C0; 809 reg |= 0x00C0;
810 writel(reg, &ccm_regs->CCGR3); 810 writel(reg, &ccm_regs->CCGR3);
811 811
812 /* EPDC PIX clk (IPU2_DI1_CLK) from PLL5, set to 650/4/6 = ~27MHz */ 812 /* EPDC PIX clk (IPU2_DI1_CLK) from PLL5, set to 650/4/6 = ~27MHz */
813 reg = readl(&ccm_regs->cscdr2); 813 reg = readl(&ccm_regs->cscdr2);
814 reg &= ~0x3FE00; 814 reg &= ~0x3FE00;
815 reg |= (2 << 15) | (5 << 12); 815 reg |= (2 << 15) | (5 << 12);
816 writel(reg, &ccm_regs->cscdr2); 816 writel(reg, &ccm_regs->cscdr2);
817 817
818 /* PLL5 enable (defaults to 650) */ 818 /* PLL5 enable (defaults to 650) */
819 reg = readl(&ccm_regs->analog_pll_video); 819 reg = readl(&ccm_regs->analog_pll_video);
820 reg &= ~((1 << 16) | (1 << 12)); 820 reg &= ~((1 << 16) | (1 << 12));
821 reg |= (1 << 13); 821 reg |= (1 << 13);
822 writel(reg, &ccm_regs->analog_pll_video); 822 writel(reg, &ccm_regs->analog_pll_video);
823 823
824 /* EPDC PIX clk enable */ 824 /* EPDC PIX clk enable */
825 reg = readl(&ccm_regs->CCGR3); 825 reg = readl(&ccm_regs->CCGR3);
826 reg |= 0x0C00; 826 reg |= 0x0C00;
827 writel(reg, &ccm_regs->CCGR3); 827 writel(reg, &ccm_regs->CCGR3);
828 828
829 panel_info.epdc_data.wv_modes.mode_init = 0; 829 panel_info.epdc_data.wv_modes.mode_init = 0;
830 panel_info.epdc_data.wv_modes.mode_du = 1; 830 panel_info.epdc_data.wv_modes.mode_du = 1;
831 panel_info.epdc_data.wv_modes.mode_gc4 = 3; 831 panel_info.epdc_data.wv_modes.mode_gc4 = 3;
832 panel_info.epdc_data.wv_modes.mode_gc8 = 2; 832 panel_info.epdc_data.wv_modes.mode_gc8 = 2;
833 panel_info.epdc_data.wv_modes.mode_gc16 = 2; 833 panel_info.epdc_data.wv_modes.mode_gc16 = 2;
834 panel_info.epdc_data.wv_modes.mode_gc32 = 2; 834 panel_info.epdc_data.wv_modes.mode_gc32 = 2;
835 835
836 panel_info.epdc_data.epdc_timings = panel_timings; 836 panel_info.epdc_data.epdc_timings = panel_timings;
837 837
838 setup_epdc_power(); 838 setup_epdc_power();
839 } 839 }
840 840
841 void epdc_power_on(void) 841 void epdc_power_on(void)
842 { 842 {
843 unsigned int reg; 843 unsigned int reg;
844 struct gpio_regs *gpio_regs = (struct gpio_regs *)GPIO2_BASE_ADDR; 844 struct gpio_regs *gpio_regs = (struct gpio_regs *)GPIO2_BASE_ADDR;
845 845
846 /* Set EPD_PWR_CTL0 to high - enable EINK_VDD (3.15) */ 846 /* Set EPD_PWR_CTL0 to high - enable EINK_VDD (3.15) */
847 gpio_set_value(IMX_GPIO_NR(2, 20), 1); 847 gpio_set_value(IMX_GPIO_NR(2, 20), 1);
848 udelay(1000); 848 udelay(1000);
849 849
850 /* Enable epdc signal pin */ 850 /* Enable epdc signal pin */
851 epdc_enable_pins(); 851 epdc_enable_pins();
852 852
853 /* Set PMIC Wakeup to high - enable Display power */ 853 /* Set PMIC Wakeup to high - enable Display power */
854 gpio_set_value(IMX_GPIO_NR(3, 20), 1); 854 gpio_set_value(IMX_GPIO_NR(3, 20), 1);
855 855
856 /* Wait for PWRGOOD == 1 */ 856 /* Wait for PWRGOOD == 1 */
857 while (1) { 857 while (1) {
858 reg = readl(&gpio_regs->gpio_psr); 858 reg = readl(&gpio_regs->gpio_psr);
859 if (!(reg & (1 << 21))) 859 if (!(reg & (1 << 21)))
860 break; 860 break;
861 861
862 udelay(100); 862 udelay(100);
863 } 863 }
864 864
865 /* Enable VCOM */ 865 /* Enable VCOM */
866 gpio_set_value(IMX_GPIO_NR(3, 17), 1); 866 gpio_set_value(IMX_GPIO_NR(3, 17), 1);
867 867
868 udelay(500); 868 udelay(500);
869 } 869 }
870 870
871 void epdc_power_off(void) 871 void epdc_power_off(void)
872 { 872 {
873 /* Set PMIC Wakeup to low - disable Display power */ 873 /* Set PMIC Wakeup to low - disable Display power */
874 gpio_set_value(IMX_GPIO_NR(3, 20), 0); 874 gpio_set_value(IMX_GPIO_NR(3, 20), 0);
875 875
876 /* Disable VCOM */ 876 /* Disable VCOM */
877 gpio_set_value(IMX_GPIO_NR(3, 17), 0); 877 gpio_set_value(IMX_GPIO_NR(3, 17), 0);
878 878
879 epdc_disable_pins(); 879 epdc_disable_pins();
880 880
881 /* Set EPD_PWR_CTL0 to low - disable EINK_VDD (3.15) */ 881 /* Set EPD_PWR_CTL0 to low - disable EINK_VDD (3.15) */
882 gpio_set_value(IMX_GPIO_NR(2, 20), 0); 882 gpio_set_value(IMX_GPIO_NR(2, 20), 0);
883 } 883 }
884 #endif 884 #endif
885 885
886 #if defined(CONFIG_VIDEO_IPUV3) 886 #if defined(CONFIG_VIDEO_IPUV3)
887 static iomux_v3_cfg_t const backlight_pads[] = { 887 static iomux_v3_cfg_t const backlight_pads[] = {
888 /* Backlight Enable for RGB: S127 */ 888 /* Backlight Enable for RGB: S127 */
889 MX6_PAD_GPIO_0__GPIO1_IO00 | MUX_PAD_CTRL(NO_PAD_CTRL), 889 MX6_PAD_GPIO_0__GPIO1_IO00 | MUX_PAD_CTRL(NO_PAD_CTRL),
890 #define BACKLIGHT_EN IMX_GPIO_NR(1, 00) 890 #define BACKLIGHT_EN IMX_GPIO_NR(1, 00)
891 /* PWM Backlight Control: S141 */ 891 /* PWM Backlight Control: S141 */
892 892
893 /* Backlight Enable for LVDS: S127 */ 893 /* Backlight Enable for LVDS: S127 */
894 MX6_PAD_GPIO_1__PWM2_OUT | MUX_PAD_CTRL(NO_PAD_CTRL), 894 MX6_PAD_GPIO_1__PWM2_OUT | MUX_PAD_CTRL(NO_PAD_CTRL),
895 /* LCD VDD Enable(for parallel LCD): S133 */ 895 /* LCD VDD Enable(for parallel LCD): S133 */
896 MX6_PAD_GPIO_2__GPIO1_IO02 | MUX_PAD_CTRL(NO_PAD_CTRL), 896 MX6_PAD_GPIO_2__GPIO1_IO02 | MUX_PAD_CTRL(NO_PAD_CTRL),
897 }; 897 };
898 898
899 static void disable_lvds(struct display_info_t const *dev) 899 static void disable_lvds(struct display_info_t const *dev)
900 { 900 {
901 struct iomuxc *iomux = (struct iomuxc *)IOMUXC_BASE_ADDR; 901 struct iomuxc *iomux = (struct iomuxc *)IOMUXC_BASE_ADDR;
902 902
903 int reg = readl(&iomux->gpr[2]); 903 int reg = readl(&iomux->gpr[2]);
904 904
905 reg &= ~(IOMUXC_GPR2_LVDS_CH0_MODE_MASK | 905 reg &= ~(IOMUXC_GPR2_LVDS_CH0_MODE_MASK |
906 IOMUXC_GPR2_LVDS_CH1_MODE_MASK); 906 IOMUXC_GPR2_LVDS_CH1_MODE_MASK);
907 907
908 writel(reg, &iomux->gpr[2]); 908 writel(reg, &iomux->gpr[2]);
909 } 909 }
910 910
911 static void do_enable_hdmi(struct display_info_t const *dev) 911 static void do_enable_hdmi(struct display_info_t const *dev)
912 { 912 {
913 disable_lvds(dev); 913 disable_lvds(dev);
914 imx_enable_hdmi_phy(); 914 imx_enable_hdmi_phy();
915 } 915 }
916 916
917 static void enable_lvds(struct display_info_t const *dev) 917 static void enable_lvds(struct display_info_t const *dev)
918 { 918 {
919 struct iomuxc *iomux = (struct iomuxc *) 919 struct iomuxc *iomux = (struct iomuxc *)
920 IOMUXC_BASE_ADDR; 920 IOMUXC_BASE_ADDR;
921 u32 reg = readl(&iomux->gpr[2]); 921 u32 reg = readl(&iomux->gpr[2]);
922 reg |= IOMUXC_GPR2_DATA_WIDTH_CH0_18BIT | 922 reg |= IOMUXC_GPR2_DATA_WIDTH_CH0_18BIT |
923 IOMUXC_GPR2_DATA_WIDTH_CH1_18BIT; 923 IOMUXC_GPR2_DATA_WIDTH_CH1_18BIT;
924 writel(reg, &iomux->gpr[2]); 924 writel(reg, &iomux->gpr[2]);
925 } 925 }
926 926
927 struct display_info_t const displays[] = {{ 927 struct display_info_t const displays[] = {{
928 .bus = -1, 928 .bus = -1,
929 .addr = 0, 929 .addr = 0,
930 .pixfmt = IPU_PIX_FMT_LVDS666, 930 .pixfmt = IPU_PIX_FMT_LVDS666,
931 .detect = NULL, 931 .detect = NULL,
932 .enable = enable_lvds, 932 .enable = enable_lvds,
933 .mode = { 933 .mode = {
934 .name = "Hannstar-XGA", 934 .name = "Hannstar-XGA",
935 .refresh = 60, 935 .refresh = 60,
936 .xres = 1024, 936 .xres = 1024,
937 .yres = 768, 937 .yres = 768,
938 .pixclock = 15385, 938 .pixclock = 15385,
939 .left_margin = 220, 939 .left_margin = 220,
940 .right_margin = 40, 940 .right_margin = 40,
941 .upper_margin = 21, 941 .upper_margin = 21,
942 .lower_margin = 7, 942 .lower_margin = 7,
943 .hsync_len = 60, 943 .hsync_len = 60,
944 .vsync_len = 10, 944 .vsync_len = 10,
945 .sync = FB_SYNC_EXT, 945 .sync = FB_SYNC_EXT,
946 .vmode = FB_VMODE_NONINTERLACED 946 .vmode = FB_VMODE_NONINTERLACED
947 } }, { 947 } }, {
948 .bus = -1, 948 .bus = -1,
949 .addr = 0, 949 .addr = 0,
950 .pixfmt = IPU_PIX_FMT_RGB24, 950 .pixfmt = IPU_PIX_FMT_RGB24,
951 .detect = NULL, 951 .detect = NULL,
952 .enable = do_enable_hdmi, 952 .enable = do_enable_hdmi,
953 .mode = { 953 .mode = {
954 .name = "HDMI", 954 .name = "HDMI",
955 .refresh = 60, 955 .refresh = 60,
956 .xres = 640, 956 .xres = 640,
957 .yres = 480, 957 .yres = 480,
958 .pixclock = 39721, 958 .pixclock = 39721,
959 .left_margin = 48, 959 .left_margin = 48,
960 .right_margin = 16, 960 .right_margin = 16,
961 .upper_margin = 33, 961 .upper_margin = 33,
962 .lower_margin = 10, 962 .lower_margin = 10,
963 .hsync_len = 96, 963 .hsync_len = 96,
964 .vsync_len = 2, 964 .vsync_len = 2,
965 .sync = 0, 965 .sync = 0,
966 .vmode = FB_VMODE_NONINTERLACED 966 .vmode = FB_VMODE_NONINTERLACED
967 } }, { 967 } }, {
968 .bus = -1, 968 .bus = -1,
969 .addr = 0, 969 .addr = 0,
970 .pixfmt = IPU_PIX_FMT_RGB24, 970 .pixfmt = IPU_PIX_FMT_RGB24,
971 .detect = NULL, 971 .detect = NULL,
972 .enable = enable_rgb, 972 .enable = enable_rgb,
973 .mode = { 973 .mode = {
974 .name = "SEIKO-WVGA", 974 .name = "SEIKO-WVGA",
975 .refresh = 57, 975 .refresh = 57,
976 .xres = 800, 976 .xres = 800,
977 .yres = 480, 977 .yres = 480,
978 .pixclock = 37037, 978 .pixclock = 37037,
979 .left_margin = 40, 979 .left_margin = 40,
980 .right_margin = 60, 980 .right_margin = 60,
981 .upper_margin = 10, 981 .upper_margin = 10,
982 .lower_margin = 10, 982 .lower_margin = 10,
983 .hsync_len = 20, 983 .hsync_len = 20,
984 .vsync_len = 10, 984 .vsync_len = 10,
985 .sync = 0, 985 .sync = 0,
986 .vmode = FB_VMODE_NONINTERLACED 986 .vmode = FB_VMODE_NONINTERLACED
987 } } }; 987 } } };
988 size_t display_count = ARRAY_SIZE(displays); 988 size_t display_count = ARRAY_SIZE(displays);
989 989
990 static void setup_display(void) 990 static void setup_display(void)
991 { 991 {
992 struct mxc_ccm_reg *mxc_ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR; 992 struct mxc_ccm_reg *mxc_ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR;
993 struct iomuxc *iomux = (struct iomuxc *)IOMUXC_BASE_ADDR; 993 struct iomuxc *iomux = (struct iomuxc *)IOMUXC_BASE_ADDR;
994 int reg; 994 int reg;
995 995
996 /* Setup HSYNC, VSYNC, DISP_CLK for debugging purposes */ 996 /* Setup HSYNC, VSYNC, DISP_CLK for debugging purposes */
997 imx_iomux_v3_setup_multiple_pads(di0_pads, ARRAY_SIZE(di0_pads)); 997 imx_iomux_v3_setup_multiple_pads(di0_pads, ARRAY_SIZE(di0_pads));
998 998
999 enable_ipu_clock(); 999 enable_ipu_clock();
1000 imx_setup_hdmi(); 1000 imx_setup_hdmi();
1001 1001
1002 /* Turn on LDB0, LDB1, IPU,IPU DI0 clocks */ 1002 /* Turn on LDB0, LDB1, IPU,IPU DI0 clocks */
1003 reg = readl(&mxc_ccm->CCGR3); 1003 reg = readl(&mxc_ccm->CCGR3);
1004 reg |= MXC_CCM_CCGR3_LDB_DI0_MASK | MXC_CCM_CCGR3_LDB_DI1_MASK; 1004 reg |= MXC_CCM_CCGR3_LDB_DI0_MASK | MXC_CCM_CCGR3_LDB_DI1_MASK;
1005 writel(reg, &mxc_ccm->CCGR3); 1005 writel(reg, &mxc_ccm->CCGR3);
1006 1006
1007 /* set LDB0, LDB1 clk select to 011/011 */ 1007 /* set LDB0, LDB1 clk select to 011/011 */
1008 reg = readl(&mxc_ccm->cs2cdr); 1008 reg = readl(&mxc_ccm->cs2cdr);
1009 reg &= ~(MXC_CCM_CS2CDR_LDB_DI0_CLK_SEL_MASK 1009 reg &= ~(MXC_CCM_CS2CDR_LDB_DI0_CLK_SEL_MASK
1010 | MXC_CCM_CS2CDR_LDB_DI1_CLK_SEL_MASK); 1010 | MXC_CCM_CS2CDR_LDB_DI1_CLK_SEL_MASK);
1011 reg |= (3 << MXC_CCM_CS2CDR_LDB_DI0_CLK_SEL_OFFSET) 1011 reg |= (3 << MXC_CCM_CS2CDR_LDB_DI0_CLK_SEL_OFFSET)
1012 | (3 << MXC_CCM_CS2CDR_LDB_DI1_CLK_SEL_OFFSET); 1012 | (3 << MXC_CCM_CS2CDR_LDB_DI1_CLK_SEL_OFFSET);
1013 writel(reg, &mxc_ccm->cs2cdr); 1013 writel(reg, &mxc_ccm->cs2cdr);
1014 1014
1015 reg = readl(&mxc_ccm->cscmr2); 1015 reg = readl(&mxc_ccm->cscmr2);
1016 reg |= MXC_CCM_CSCMR2_LDB_DI0_IPU_DIV | MXC_CCM_CSCMR2_LDB_DI1_IPU_DIV; 1016 reg |= MXC_CCM_CSCMR2_LDB_DI0_IPU_DIV | MXC_CCM_CSCMR2_LDB_DI1_IPU_DIV;
1017 writel(reg, &mxc_ccm->cscmr2); 1017 writel(reg, &mxc_ccm->cscmr2);
1018 1018
1019 reg = readl(&mxc_ccm->chsccdr); 1019 reg = readl(&mxc_ccm->chsccdr);
1020 reg |= (CHSCCDR_CLK_SEL_LDB_DI0 1020 reg |= (CHSCCDR_CLK_SEL_LDB_DI0
1021 << MXC_CCM_CHSCCDR_IPU1_DI0_CLK_SEL_OFFSET); 1021 << MXC_CCM_CHSCCDR_IPU1_DI0_CLK_SEL_OFFSET);
1022 reg |= (CHSCCDR_CLK_SEL_LDB_DI0 1022 reg |= (CHSCCDR_CLK_SEL_LDB_DI0
1023 << MXC_CCM_CHSCCDR_IPU1_DI1_CLK_SEL_OFFSET); 1023 << MXC_CCM_CHSCCDR_IPU1_DI1_CLK_SEL_OFFSET);
1024 writel(reg, &mxc_ccm->chsccdr); 1024 writel(reg, &mxc_ccm->chsccdr);
1025 1025
1026 reg = IOMUXC_GPR2_BGREF_RRMODE_EXTERNAL_RES 1026 reg = IOMUXC_GPR2_BGREF_RRMODE_EXTERNAL_RES
1027 | IOMUXC_GPR2_DI1_VS_POLARITY_ACTIVE_LOW 1027 | IOMUXC_GPR2_DI1_VS_POLARITY_ACTIVE_LOW
1028 | IOMUXC_GPR2_DI0_VS_POLARITY_ACTIVE_LOW 1028 | IOMUXC_GPR2_DI0_VS_POLARITY_ACTIVE_LOW
1029 | IOMUXC_GPR2_BIT_MAPPING_CH1_SPWG 1029 | IOMUXC_GPR2_BIT_MAPPING_CH1_SPWG
1030 | IOMUXC_GPR2_DATA_WIDTH_CH1_18BIT 1030 | IOMUXC_GPR2_DATA_WIDTH_CH1_18BIT
1031 | IOMUXC_GPR2_BIT_MAPPING_CH0_SPWG 1031 | IOMUXC_GPR2_BIT_MAPPING_CH0_SPWG
1032 | IOMUXC_GPR2_DATA_WIDTH_CH0_18BIT 1032 | IOMUXC_GPR2_DATA_WIDTH_CH0_18BIT
1033 | IOMUXC_GPR2_LVDS_CH0_MODE_DISABLED 1033 | IOMUXC_GPR2_LVDS_CH0_MODE_DISABLED
1034 | IOMUXC_GPR2_LVDS_CH1_MODE_ENABLED_DI0; 1034 | IOMUXC_GPR2_LVDS_CH1_MODE_ENABLED_DI0;
1035 writel(reg, &iomux->gpr[2]); 1035 writel(reg, &iomux->gpr[2]);
1036 1036
1037 reg = readl(&iomux->gpr[3]); 1037 reg = readl(&iomux->gpr[3]);
1038 reg = (reg & ~(IOMUXC_GPR3_LVDS1_MUX_CTL_MASK 1038 reg = (reg & ~(IOMUXC_GPR3_LVDS1_MUX_CTL_MASK
1039 | IOMUXC_GPR3_HDMI_MUX_CTL_MASK)) 1039 | IOMUXC_GPR3_HDMI_MUX_CTL_MASK))
1040 | (IOMUXC_GPR3_MUX_SRC_IPU1_DI0 1040 | (IOMUXC_GPR3_MUX_SRC_IPU1_DI0
1041 << IOMUXC_GPR3_LVDS1_MUX_CTL_OFFSET); 1041 << IOMUXC_GPR3_LVDS1_MUX_CTL_OFFSET);
1042 writel(reg, &iomux->gpr[3]); 1042 writel(reg, &iomux->gpr[3]);
1043 1043
1044 /*turn on backlight*/ 1044 /*turn on backlight*/
1045 1045
1046 imx_iomux_v3_setup_multiple_pads(backlight_pads, 1046 imx_iomux_v3_setup_multiple_pads(backlight_pads,
1047 ARRAY_SIZE(backlight_pads)); 1047 ARRAY_SIZE(backlight_pads));
1048 gpio_direction_output(BACKLIGHT_EN, 1); 1048 gpio_direction_output(BACKLIGHT_EN, 1);
1049 gpio_direction_output(DISP0_PWR_EN, 1); 1049 gpio_direction_output(DISP0_PWR_EN, 1);
1050 /* enable backlight PWM 2 */ 1050 /* enable backlight PWM 2 */
1051 if (pwm_init(1, 0, 0)) 1051 if (pwm_init(1, 0, 0))
1052 goto error; 1052 goto error;
1053 /* duty cycle 500ns, period: 3000ns */ 1053 /* duty cycle 500ns, period: 3000ns */
1054 if (pwm_config(1, 1000, 3000)) 1054 if (pwm_config(1, 1000, 3000))
1055 goto error; 1055 goto error;
1056 if (pwm_enable(1)) 1056 if (pwm_enable(1))
1057 goto error; 1057 goto error;
1058 return; 1058 return;
1059 1059
1060 error: 1060 error:
1061 puts("error init pwm for backlight\n"); 1061 puts("error init pwm for backlight\n");
1062 return; 1062 return;
1063 } 1063 }
1064 #endif /* CONFIG_VIDEO_IPUV3 */ 1064 #endif /* CONFIG_VIDEO_IPUV3 */
1065 1065
1066 /* 1066 /*
1067 * Do not overwrite the console 1067 * Do not overwrite the console
1068 * Use always serial for U-Boot console 1068 * Use always serial for U-Boot console
1069 */ 1069 */
1070 int overwrite_console(void) 1070 int overwrite_console(void)
1071 { 1071 {
1072 return 1; 1072 return 1;
1073 } 1073 }
1074 1074
1075 int board_eth_init(bd_t *bis) 1075 int board_eth_init(bd_t *bis)
1076 { 1076 {
1077 #if defined(CONFIG_MAC_ADDR_IN_EEPROM) 1077 #if defined(CONFIG_MAC_ADDR_IN_EEPROM)
1078 1078
1079 uchar env_enetaddr[6]; 1079 uchar env_enetaddr[6];
1080 int enetaddr_found; 1080 int enetaddr_found;
1081 1081
1082 enetaddr_found = eth_getenv_enetaddr("ethaddr", env_enetaddr); 1082 enetaddr_found = eth_getenv_enetaddr("ethaddr", env_enetaddr);
1083 1083
1084 uint8_t enetaddr[8]; 1084 uint8_t enetaddr[8];
1085 int eeprom_mac_read; 1085 int eeprom_mac_read;
1086 1086
1087 /* Read Ethernet MAC address from EEPROM */ 1087 /* Read Ethernet MAC address from EEPROM */
1088 eeprom_mac_read = smarcfimx6_read_mac_address(enetaddr); 1088 eeprom_mac_read = smarcfimx6_read_mac_address(enetaddr);
1089 1089
1090 /* 1090 /*
1091 * MAC address not present in the environment 1091 * MAC address not present in the environment
1092 * try and read the MAC address from EEPROM flash 1092 * try and read the MAC address from EEPROM flash
1093 * and set it. 1093 * and set it.
1094 */ 1094 */
1095 if (!enetaddr_found) { 1095 if (!enetaddr_found) {
1096 if (eeprom_mac_read) 1096 if (eeprom_mac_read)
1097 /* Set Ethernet MAC address from EEPROM */ 1097 /* Set Ethernet MAC address from EEPROM */
1098 smarcfimx6_sync_env_enetaddr(enetaddr); 1098 smarcfimx6_sync_env_enetaddr(enetaddr);
1099 } else { 1099 } else {
1100 /* 1100 /*
1101 * MAC address present in environment compare it with 1101 * MAC address present in environment compare it with
1102 * the MAC address in EEPROM and warn on mismatch 1102 * the MAC address in EEPROM and warn on mismatch
1103 */ 1103 */
1104 if (eeprom_mac_read && memcmp(enetaddr, env_enetaddr, 6)) 1104 if (eeprom_mac_read && memcmp(enetaddr, env_enetaddr, 6))
1105 printf("Warning: MAC address in EEPROM don't match " 1105 printf("Warning: MAC address in EEPROM don't match "
1106 "with the MAC address in the environment\n"); 1106 "with the MAC address in the environment\n");
1107 printf("Default using MAC address from environment\n"); 1107 printf("Default using MAC address from environment\n");
1108 } 1108 }
1109 1109
1110 #endif 1110 #endif
1111 setup_iomux_enet(); 1111 setup_iomux_enet();
1112 setup_pcie(); 1112 setup_pcie();
1113 1113
1114 return cpu_eth_init(bis); 1114 return cpu_eth_init(bis);
1115 } 1115 }
1116 1116
1117 #ifdef CONFIG_USB_EHCI_MX6 1117 #ifdef CONFIG_USB_EHCI_MX6
1118 #define USB_OTHERREGS_OFFSET 0x800 1118 #define USB_OTHERREGS_OFFSET 0x800
1119 #define UCTRL_PWR_POL (1 << 9) 1119 #define UCTRL_PWR_POL (1 << 9)
1120 1120
1121 static iomux_v3_cfg_t const usb_otg_pads[] = { 1121 static iomux_v3_cfg_t const usb_otg_pads[] = {
1122 MX6_PAD_ENET_TXD0__GPIO1_IO30 | MUX_PAD_CTRL(WEAK_PULLUP), 1122 MX6_PAD_ENET_TXD0__GPIO1_IO30 | MUX_PAD_CTRL(WEAK_PULLUP),
1123 MX6_PAD_ENET_RX_ER__USB_OTG_ID | MUX_PAD_CTRL(WEAK_PULLUP), 1123 MX6_PAD_ENET_RX_ER__USB_OTG_ID | MUX_PAD_CTRL(OTG_ID_PAD_CTRL),
1124 /* OTG Power enable */ 1124 /* OTG Power enable */
1125 MX6_PAD_ENET_TXD1__GPIO1_IO29 | MUX_PAD_CTRL(OUTPUT_40OHM), 1125 MX6_PAD_ENET_TXD1__GPIO1_IO29 | MUX_PAD_CTRL(OUTPUT_40OHM),
1126 }; 1126 };
1127 1127
1128 static iomux_v3_cfg_t const usb_hc1_pads[] = { 1128 static iomux_v3_cfg_t const usb_hc1_pads[] = {
1129 MX6_PAD_ENET_RXD0__GPIO1_IO27 | MUX_PAD_CTRL(WEAK_PULLUP), 1129 MX6_PAD_ENET_RXD0__GPIO1_IO27 | MUX_PAD_CTRL(WEAK_PULLUP),
1130 /* USB1 Power enable */ 1130 /* USB1 Power enable */
1131 MX6_PAD_ENET_RXD1__GPIO1_IO26 | MUX_PAD_CTRL(OUTPUT_40OHM), 1131 MX6_PAD_ENET_RXD1__GPIO1_IO26 | MUX_PAD_CTRL(OUTPUT_40OHM),
1132 }; 1132 };
1133 1133
1134 static void setup_usb(void) 1134 static void setup_usb(void)
1135 { 1135 {
1136 imx_iomux_v3_setup_multiple_pads(usb_otg_pads, 1136 imx_iomux_v3_setup_multiple_pads(usb_otg_pads,
1137 ARRAY_SIZE(usb_otg_pads)); 1137 ARRAY_SIZE(usb_otg_pads));
1138 1138
1139 /* 1139 /*
1140 * set daisy chain for otg_pin_id on 6q. 1140 * set daisy chain for otg_pin_id on 6q.
1141 * for 6dl, this bit is reserved 1141 * for 6dl, this bit is reserved
1142 */ 1142 */
1143 imx_iomux_set_gpr_register(1, 13, 1, 0); 1143 imx_iomux_set_gpr_register(1, 13, 1, 0);
1144 1144
1145 imx_iomux_v3_setup_multiple_pads(usb_hc1_pads, 1145 imx_iomux_v3_setup_multiple_pads(usb_hc1_pads,
1146 ARRAY_SIZE(usb_hc1_pads)); 1146 ARRAY_SIZE(usb_hc1_pads));
1147 } 1147 }
1148 1148
1149 int board_ehci_hcd_init(int port) 1149 int board_ehci_hcd_init(int port)
1150 { 1150 {
1151 u32 *usbnc_usb_ctrl; 1151 u32 *usbnc_usb_ctrl;
1152 1152
1153 if (port > 1) 1153 if (port > 1)
1154 return -EINVAL; 1154 return -EINVAL;
1155 1155
1156 usbnc_usb_ctrl = (u32 *)(USB_BASE_ADDR + USB_OTHERREGS_OFFSET + 1156 usbnc_usb_ctrl = (u32 *)(USB_BASE_ADDR + USB_OTHERREGS_OFFSET +
1157 port * 4); 1157 port * 4);
1158 1158
1159 setbits_le32(usbnc_usb_ctrl, UCTRL_PWR_POL); 1159 setbits_le32(usbnc_usb_ctrl, UCTRL_PWR_POL);
1160 1160
1161 return 0; 1161 return 0;
1162 } 1162 }
1163 1163
1164 int board_ehci_power(int port, int on) 1164 int board_ehci_power(int port, int on)
1165 { 1165 {
1166 switch (port) { 1166 switch (port) {
1167 case 0: 1167 case 0:
1168 /* Set USB OTG Over Current */ 1168 /* Set USB OTG Over Current */
1169 gpio_direction_input(IMX_GPIO_NR(1, 30)); 1169 gpio_direction_input(IMX_GPIO_NR(1, 30));
1170 /* Trun On USB OTG Power */ 1170 /* Trun On USB OTG Power */
1171 gpio_direction_output(IMX_GPIO_NR(1, 29),1); 1171 gpio_direction_output(IMX_GPIO_NR(1, 29),1);
1172 break; 1172 break;
1173 case 1: 1173 case 1:
1174 if (on){ 1174 if (on){
1175 /* Set USB1 Over Current */ 1175 /* Set USB1 Over Current */
1176 gpio_direction_input(IMX_GPIO_NR(1, 27)); 1176 gpio_direction_input(IMX_GPIO_NR(1, 27));
1177 /* Trun On USB1 Power */ 1177 /* Trun On USB1 Power */
1178 gpio_direction_output(IMX_GPIO_NR(1, 26),1); 1178 gpio_direction_output(IMX_GPIO_NR(1, 26),1);
1179 } 1179 }
1180 else 1180 else
1181 gpio_direction_output(IMX_GPIO_NR(1, 26), 0); 1181 gpio_direction_output(IMX_GPIO_NR(1, 26), 0);
1182 break; 1182 break;
1183 default: 1183 default:
1184 printf("MXC USB port %d not yet supported\n", port); 1184 printf("MXC USB port %d not yet supported\n", port);
1185 return -EINVAL; 1185 return -EINVAL;
1186 } 1186 }
1187 1187
1188 return 0; 1188 return 0;
1189 } 1189 }
1190 #endif 1190 #endif
1191 1191
1192 int board_early_init_f(void) 1192 int board_early_init_f(void)
1193 { 1193 {
1194 setup_iomux_wdt(); 1194 setup_iomux_wdt();
1195 setup_iomux_reset_out(); 1195 setup_iomux_reset_out();
1196 setup_iomux_uart1(); 1196 setup_iomux_uart1();
1197 setup_iomux_uart2(); 1197 setup_iomux_uart2();
1198 setup_iomux_uart4(); 1198 setup_iomux_uart4();
1199 setup_iomux_uart5(); 1199 setup_iomux_uart5();
1200 #if defined(CONFIG_VIDEO_IPUV3) 1200 #if defined(CONFIG_VIDEO_IPUV3)
1201 setup_display(); 1201 setup_display();
1202 #endif 1202 #endif
1203 1203
1204 #ifdef CONFIG_MXC_SPI 1204 #ifdef CONFIG_MXC_SPI
1205 /*Unlock SPI Flash*/ 1205 /*Unlock SPI Flash*/
1206 gpio_direction_output(IMX_GPIO_NR(4,20), 1); 1206 gpio_direction_output(IMX_GPIO_NR(4,20), 1);
1207 setup_spinor(); 1207 setup_spinor();
1208 /*Lock SPI Flash and Free SPI0*/ 1208 /*Lock SPI Flash and Free SPI0*/
1209 gpio_direction_output(IMX_GPIO_NR(4,20), 0); 1209 gpio_direction_output(IMX_GPIO_NR(4,20), 0);
1210 #endif 1210 #endif
1211 setup_spi1(); 1211 setup_spi1();
1212 setup_flexcan1(); 1212 setup_flexcan1();
1213 setup_flexcan2(); 1213 setup_flexcan2();
1214 setup_gpios(); 1214 setup_gpios();
1215 1215
1216 return 0; 1216 return 0;
1217 } 1217 }
1218 1218
1219 int board_init(void) 1219 int board_init(void)
1220 { 1220 {
1221 /* address of boot parameters */ 1221 /* address of boot parameters */
1222 gd->bd->bi_boot_params = PHYS_SDRAM + 0x100; 1222 gd->bd->bi_boot_params = PHYS_SDRAM + 0x100;
1223 1223
1224 setup_i2c(2, CONFIG_SYS_I2C_SPEED, 1224 setup_i2c(2, CONFIG_SYS_I2C_SPEED,
1225 0x70, &i2c_pad_info3); 1225 0x70, &i2c_pad_info3);
1226 1226
1227 /* Configure I2C switch (PCA9546) to enable channel 0. */ 1227 /* Configure I2C switch (PCA9546) to enable channel 0. */
1228 i2c_set_bus_num(2); 1228 i2c_set_bus_num(2);
1229 uint8_t i2cbuf; 1229 uint8_t i2cbuf;
1230 i2cbuf = CONFIG_SYS_I2C_PCA9546_ENABLE; 1230 i2cbuf = CONFIG_SYS_I2C_PCA9546_ENABLE;
1231 if (i2c_write(CONFIG_SYS_I2C_PCA9546_ADDR, 0, 1231 if (i2c_write(CONFIG_SYS_I2C_PCA9546_ADDR, 0,
1232 CONFIG_SYS_I2C_PCA9546_ADDR_LEN, &i2cbuf, 1)) { 1232 CONFIG_SYS_I2C_PCA9546_ADDR_LEN, &i2cbuf, 1)) {
1233 printf("Write to MUX @ 0x%02x failed\n", CONFIG_SYS_I2C_PCA9546_ADDR); 1233 printf("Write to MUX @ 0x%02x failed\n", CONFIG_SYS_I2C_PCA9546_ADDR);
1234 return 1; 1234 return 1;
1235 } 1235 }
1236 1236
1237 #ifdef CONFIG_USB_EHCI_MX6 1237 #ifdef CONFIG_USB_EHCI_MX6
1238 setup_usb(); 1238 setup_usb();
1239 #endif 1239 #endif
1240 1240
1241 #if defined(CONFIG_MX6DL) && defined(CONFIG_MXC_EPDC) 1241 #if defined(CONFIG_MX6DL) && defined(CONFIG_MXC_EPDC)
1242 setup_epdc(); 1242 setup_epdc();
1243 #endif 1243 #endif
1244 1244
1245 #ifdef CONFIG_CMD_SATA 1245 #ifdef CONFIG_CMD_SATA
1246 setup_sata(); 1246 setup_sata();
1247 #endif 1247 #endif
1248 1248
1249 return 0; 1249 return 0;
1250 } 1250 }
1251 1251
1252 #ifdef CONFIG_CMD_BMODE 1252 #ifdef CONFIG_CMD_BMODE
1253 static const struct boot_mode board_boot_modes[] = { 1253 static const struct boot_mode board_boot_modes[] = {
1254 /* 4 bit bus width */ 1254 /* 4 bit bus width */
1255 {"sd2", MAKE_CFGVAL(0x40, 0x28, 0x00, 0x00)}, 1255 {"sd2", MAKE_CFGVAL(0x40, 0x28, 0x00, 0x00)},
1256 {"sd3", MAKE_CFGVAL(0x40, 0x30, 0x00, 0x00)}, 1256 {"sd3", MAKE_CFGVAL(0x40, 0x30, 0x00, 0x00)},
1257 /* 8 bit bus width */ 1257 /* 8 bit bus width */
1258 {"emmc", MAKE_CFGVAL(0x60, 0x58, 0x00, 0x00)}, 1258 {"emmc", MAKE_CFGVAL(0x60, 0x58, 0x00, 0x00)},
1259 {NULL, 0}, 1259 {NULL, 0},
1260 }; 1260 };
1261 #endif 1261 #endif
1262 1262
1263 int board_late_init(void) 1263 int board_late_init(void)
1264 { 1264 {
1265 // Make sure we enable ECSPI2 clock 1265 // Make sure we enable ECSPI2 clock
1266 int reg; 1266 int reg;
1267 struct mxc_ccm_reg *mxc_ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR; 1267 struct mxc_ccm_reg *mxc_ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR;
1268 reg = readl(&mxc_ccm->CCGR1); 1268 reg = readl(&mxc_ccm->CCGR1);
1269 reg |= MXC_CCM_CCGR1_ECSPI2S_MASK; 1269 reg |= MXC_CCM_CCGR1_ECSPI2S_MASK;
1270 writel(reg, &mxc_ccm->CCGR1); 1270 writel(reg, &mxc_ccm->CCGR1);
1271 #ifdef CONFIG_CMD_BMODE 1271 #ifdef CONFIG_CMD_BMODE
1272 add_board_boot_modes(board_boot_modes); 1272 add_board_boot_modes(board_boot_modes);
1273 #endif 1273 #endif
1274 1274
1275 #ifdef CONFIG_ENV_IS_IN_MMC 1275 #ifdef CONFIG_ENV_IS_IN_MMC
1276 board_late_mmc_env_init(); 1276 board_late_mmc_env_init();
1277 #endif 1277 #endif
1278 1278
1279 /* Check Board Information */ 1279 /* Check Board Information */
1280 setup_i2c(0, CONFIG_SYS_I2C_SPEED, 1280 setup_i2c(0, CONFIG_SYS_I2C_SPEED,
1281 0x50, &i2c_pad_info1); 1281 0x50, &i2c_pad_info1);
1282 1282
1283 struct smarcfimx6_id header; 1283 struct smarcfimx6_id header;
1284 1284
1285 if (read_eeprom(&header) < 0) 1285 if (read_eeprom(&header) < 0)
1286 puts("Could not get board ID.\n"); 1286 puts("Could not get board ID.\n");
1287 1287
1288 puts("-----------------------------------------\n"); 1288 puts("-----------------------------------------\n");
1289 printf("Board ID: %.*s\n", 1289 printf("Board ID: %.*s\n",
1290 sizeof(header.name), header.name); 1290 sizeof(header.name), header.name);
1291 printf("Board Revision: %.*s\n", 1291 printf("Board Revision: %.*s\n",
1292 sizeof(header.version), header.version); 1292 sizeof(header.version), header.version);
1293 printf("Board Serial#: %.*s\n", 1293 printf("Board Serial#: %.*s\n",
1294 sizeof(header.serial), header.serial); 1294 sizeof(header.serial), header.serial);
1295 puts("-----------------------------------------\n"); 1295 puts("-----------------------------------------\n");
1296 1296
1297 /* SMARC BOOT_SEL*/ 1297 /* SMARC BOOT_SEL*/
1298 if ((gpio_get_value(IMX_GPIO_NR(1, 4)) == 0)&&(gpio_get_value(IMX_GPIO_NR(1, 5)) == 0)&&(gpio_get_value(IMX_GPIO_NR(1, 6)) == 0)) { 1298 if ((gpio_get_value(IMX_GPIO_NR(1, 4)) == 0)&&(gpio_get_value(IMX_GPIO_NR(1, 5)) == 0)&&(gpio_get_value(IMX_GPIO_NR(1, 6)) == 0)) {
1299 puts("BOOT_SEL Detected: OFF OFF OFF, Load zImage from Carrier SATA...\n"); 1299 puts("BOOT_SEL Detected: OFF OFF OFF, Load zImage from Carrier SATA...\n");
1300 if (!getenv("bootcmd")) 1300 if (!getenv("bootcmd"))
1301 setenv("bootcmd", "boota sata"); 1301 setenv("bootcmd", "boota sata");
1302 } else if ((gpio_get_value(IMX_GPIO_NR(1, 4)) == 0)&&(gpio_get_value(IMX_GPIO_NR(1, 5)) == 0)&&(gpio_get_value(IMX_GPIO_NR(1, 6)) == 1)) { 1302 } else if ((gpio_get_value(IMX_GPIO_NR(1, 4)) == 0)&&(gpio_get_value(IMX_GPIO_NR(1, 5)) == 0)&&(gpio_get_value(IMX_GPIO_NR(1, 6)) == 1)) {
1303 puts("BOOT_SEL Detected: OFF OFF ON, USB Boot Up Not Defined...Carrier SPI Boot Not Supported...\n"); 1303 puts("BOOT_SEL Detected: OFF OFF ON, USB Boot Up Not Defined...Carrier SPI Boot Not Supported...\n");
1304 hang(); 1304 hang();
1305 } else if ((gpio_get_value(IMX_GPIO_NR(1, 4)) == 0)&&(gpio_get_value(IMX_GPIO_NR(1, 5)) == 1)&&(gpio_get_value(IMX_GPIO_NR(1, 6)) == 0)) { 1305 } else if ((gpio_get_value(IMX_GPIO_NR(1, 4)) == 0)&&(gpio_get_value(IMX_GPIO_NR(1, 5)) == 1)&&(gpio_get_value(IMX_GPIO_NR(1, 6)) == 0)) {
1306 puts("BOOT_SEL Detected: OFF ON OFF, Load zImage from Carrier SDMMC...\n"); 1306 puts("BOOT_SEL Detected: OFF ON OFF, Load zImage from Carrier SDMMC...\n");
1307 setenv_ulong("mmcdev", 1); 1307 setenv_ulong("mmcdev", 1);
1308 if (!getenv("fastboot_dev")) 1308 if (!getenv("fastboot_dev"))
1309 setenv("fastboot_dev", "mmc1"); 1309 setenv("fastboot_dev", "mmc1");
1310 if (!getenv("bootcmd")) 1310 if (!getenv("bootcmd"))
1311 setenv("bootcmd", "boota mmc1"); 1311 setenv("bootcmd", "boota mmc1");
1312 } else if ((gpio_get_value(IMX_GPIO_NR(1, 4)) == 1)&&(gpio_get_value(IMX_GPIO_NR(1, 5)) == 0)&&(gpio_get_value(IMX_GPIO_NR(1, 6)) == 0)) { 1312 } else if ((gpio_get_value(IMX_GPIO_NR(1, 4)) == 1)&&(gpio_get_value(IMX_GPIO_NR(1, 5)) == 0)&&(gpio_get_value(IMX_GPIO_NR(1, 6)) == 0)) {
1313 puts("BOOT_SEL Detected: ON OFF OFF, Load zImage from Carrier SD Card...\n"); 1313 puts("BOOT_SEL Detected: ON OFF OFF, Load zImage from Carrier SD Card...\n");
1314 setenv_ulong("mmcdev", 0); 1314 setenv_ulong("mmcdev", 0);
1315 if (!getenv("fastboot_dev")) 1315 if (!getenv("fastboot_dev"))
1316 setenv("fastboot_dev", "mmc0"); 1316 setenv("fastboot_dev", "mmc0");
1317 if (!getenv("bootcmd")) 1317 if (!getenv("bootcmd"))
1318 setenv("bootcmd", "boota mmc0"); 1318 setenv("bootcmd", "boota mmc0");
1319 } else if ((gpio_get_value(IMX_GPIO_NR(1, 4)) == 0)&&(gpio_get_value(IMX_GPIO_NR(1, 5)) == 1)&&(gpio_get_value(IMX_GPIO_NR(1, 6)) == 1)) { 1319 } else if ((gpio_get_value(IMX_GPIO_NR(1, 4)) == 0)&&(gpio_get_value(IMX_GPIO_NR(1, 5)) == 1)&&(gpio_get_value(IMX_GPIO_NR(1, 6)) == 1)) {
1320 puts("BOOT_SEL Detected: OFF ON ON, Load zImage from Module eMMC Flash...\n"); 1320 puts("BOOT_SEL Detected: OFF ON ON, Load zImage from Module eMMC Flash...\n");
1321 setenv_ulong("mmcdev", 2); 1321 setenv_ulong("mmcdev", 2);
1322 if (!getenv("fastboot_dev")) 1322 if (!getenv("fastboot_dev"))
1323 setenv("fastboot_dev", "mmc2"); 1323 setenv("fastboot_dev", "mmc2");
1324 if (!getenv("bootcmd")) 1324 if (!getenv("bootcmd"))
1325 setenv("bootcmd", "boota mmc2"); 1325 setenv("bootcmd", "boota mmc2");
1326 } else if ((gpio_get_value(IMX_GPIO_NR(1, 4)) == 1)&&(gpio_get_value(IMX_GPIO_NR(1, 5)) == 0)&&(gpio_get_value(IMX_GPIO_NR(1, 6)) == 1)) { 1326 } else if ((gpio_get_value(IMX_GPIO_NR(1, 4)) == 1)&&(gpio_get_value(IMX_GPIO_NR(1, 5)) == 0)&&(gpio_get_value(IMX_GPIO_NR(1, 6)) == 1)) {
1327 puts("BOOT_SEL Detected: ON OFF ON, Load zImage from GBE...\n"); 1327 puts("BOOT_SEL Detected: ON OFF ON, Load zImage from GBE...\n");
1328 setenv("bootcmd", "run netboot;"); 1328 setenv("bootcmd", "run netboot;");
1329 } else if ((gpio_get_value(IMX_GPIO_NR(1, 4)) == 1)&&(gpio_get_value(IMX_GPIO_NR(1, 5)) == 1)&&(gpio_get_value(IMX_GPIO_NR(1, 6)) == 0)) { 1329 } else if ((gpio_get_value(IMX_GPIO_NR(1, 4)) == 1)&&(gpio_get_value(IMX_GPIO_NR(1, 5)) == 1)&&(gpio_get_value(IMX_GPIO_NR(1, 6)) == 0)) {
1330 puts("Carrier SPI Boot 110\n"); 1330 puts("Carrier SPI Boot 110\n");
1331 hang(); 1331 hang();
1332 } else if ((gpio_get_value(IMX_GPIO_NR(1, 4)) == 1)&&(gpio_get_value(IMX_GPIO_NR(1, 5)) == 1)&&(gpio_get_value(IMX_GPIO_NR(1, 6)) == 1)) { 1332 } else if ((gpio_get_value(IMX_GPIO_NR(1, 4)) == 1)&&(gpio_get_value(IMX_GPIO_NR(1, 5)) == 1)&&(gpio_get_value(IMX_GPIO_NR(1, 6)) == 1)) {
1333 puts("BOOT_SEL Detected: ON ON ON, MOdule SPI Boot up is Default, Load zImage from Module eMMC...\n"); 1333 puts("BOOT_SEL Detected: ON ON ON, MOdule SPI Boot up is Default, Load zImage from Module eMMC...\n");
1334 setenv_ulong("mmcdev", 2); 1334 setenv_ulong("mmcdev", 2);
1335 if (!getenv("fastboot_dev")) 1335 if (!getenv("fastboot_dev"))
1336 setenv("fastboot_dev", "mmc2"); 1336 setenv("fastboot_dev", "mmc2");
1337 if (!getenv("bootcmd")) 1337 if (!getenv("bootcmd"))
1338 setenv("bootcmd", "boota mmc2"); 1338 setenv("bootcmd", "boota mmc2");
1339 } else { 1339 } else {
1340 puts("unsupported boot devices\n"); 1340 puts("unsupported boot devices\n");
1341 hang(); 1341 hang();
1342 } 1342 }
1343 1343
1344 return 0; 1344 return 0;
1345 } 1345 }
1346 1346
1347 #ifdef CONFIG_FSL_FASTBOOT 1347 #ifdef CONFIG_FSL_FASTBOOT
1348 1348
1349 void board_fastboot_setup(void) 1349 void board_fastboot_setup(void)
1350 { 1350 {
1351 #if defined(CONFIG_FASTBOOT_STORAGE_SATA) 1351 #if defined(CONFIG_FASTBOOT_STORAGE_SATA)
1352 if ((gpio_get_value(IMX_GPIO_NR(1, 4)) == 0)&&(gpio_get_value(IMX_GPIO_NR(1, 5)) == 0)&&(gpio_get_value(IMX_GPIO_NR(1, 6)) == 0)) 1352 if ((gpio_get_value(IMX_GPIO_NR(1, 4)) == 0)&&(gpio_get_value(IMX_GPIO_NR(1, 5)) == 0)&&(gpio_get_value(IMX_GPIO_NR(1, 6)) == 0))
1353 if (!getenv("fastboot_dev")) 1353 if (!getenv("fastboot_dev"))
1354 setenv("fastboot_dev", "sata"); 1354 setenv("fastboot_dev", "sata");
1355 if (!getenv("bootcmd")) 1355 if (!getenv("bootcmd"))
1356 setenv("bootcmd", "boota sata"); 1356 setenv("bootcmd", "boota sata");
1357 #endif /*CONFIG_FASTBOOT_STORAGE_SATA*/ 1357 #endif /*CONFIG_FASTBOOT_STORAGE_SATA*/
1358 #if defined(CONFIG_FASTBOOT_STORAGE_MMC) 1358 #if defined(CONFIG_FASTBOOT_STORAGE_MMC)
1359 if ((gpio_get_value(IMX_GPIO_NR(1, 4)) == 1)&&(gpio_get_value(IMX_GPIO_NR(1, 5)) == 0)&&(gpio_get_value(IMX_GPIO_NR(1, 6)) == 0)) { 1359 if ((gpio_get_value(IMX_GPIO_NR(1, 4)) == 1)&&(gpio_get_value(IMX_GPIO_NR(1, 5)) == 0)&&(gpio_get_value(IMX_GPIO_NR(1, 6)) == 0)) {
1360 setenv_ulong("mmcdev", 0); 1360 setenv_ulong("mmcdev", 0);
1361 if (!getenv("fastboot_dev")) 1361 if (!getenv("fastboot_dev"))
1362 setenv("fastboot_dev", "mmc0"); 1362 setenv("fastboot_dev", "mmc0");
1363 if (!getenv("bootcmd")) 1363 if (!getenv("bootcmd"))
1364 setenv("bootcmd", "boota mmc0"); 1364 setenv("bootcmd", "boota mmc0");
1365 } else if ((gpio_get_value(IMX_GPIO_NR(1, 4)) == 0)&&(gpio_get_value(IMX_GPIO_NR(1, 5)) == 1)&&(gpio_get_value(IMX_GPIO_NR(1, 6)) == 0)) { 1365 } else if ((gpio_get_value(IMX_GPIO_NR(1, 4)) == 0)&&(gpio_get_value(IMX_GPIO_NR(1, 5)) == 1)&&(gpio_get_value(IMX_GPIO_NR(1, 6)) == 0)) {
1366 setenv_ulong("mmcdev", 1); 1366 setenv_ulong("mmcdev", 1);
1367 if (!getenv("fastboot_dev")) 1367 if (!getenv("fastboot_dev"))
1368 setenv("fastboot_dev", "mmc1"); 1368 setenv("fastboot_dev", "mmc1");
1369 if (!getenv("bootcmd")) 1369 if (!getenv("bootcmd"))
1370 setenv("bootcmd", "boota mmc1"); 1370 setenv("bootcmd", "boota mmc1");
1371 } else if((gpio_get_value(IMX_GPIO_NR(1, 4)) == 0)&&(gpio_get_value(IMX_GPIO_NR(1, 5)) == 1)&&(gpio_get_value(IMX_GPIO_NR(1, 6)) == 1)) { 1371 } else if((gpio_get_value(IMX_GPIO_NR(1, 4)) == 0)&&(gpio_get_value(IMX_GPIO_NR(1, 5)) == 1)&&(gpio_get_value(IMX_GPIO_NR(1, 6)) == 1)) {
1372 setenv_ulong("mmcdev", 2); 1372 setenv_ulong("mmcdev", 2);
1373 if (!getenv("fastboot_dev")) 1373 if (!getenv("fastboot_dev"))
1374 setenv("fastboot_dev", "mmc2"); 1374 setenv("fastboot_dev", "mmc2");
1375 if (!getenv("bootcmd")) 1375 if (!getenv("bootcmd"))
1376 setenv("bootcmd", "boota mmc2"); 1376 setenv("bootcmd", "boota mmc2");
1377 #endif /*CONFIG_FASTBOOT_STORAGE_MMC*/ 1377 #endif /*CONFIG_FASTBOOT_STORAGE_MMC*/
1378 } else { 1378 } else {
1379 printf("unsupported boot devices\n"); 1379 printf("unsupported boot devices\n");
1380 return; 1380 return;
1381 } 1381 }
1382 1382
1383 } 1383 }
1384 1384
1385 #ifdef CONFIG_ANDROID_RECOVERY 1385 #ifdef CONFIG_ANDROID_RECOVERY
1386 1386
1387 /* Use LID# as Recovery Key */ 1387 /* Use LID# as Recovery Key */
1388 #define GPIO_VOL_DN_KEY IMX_GPIO_NR(2, 25) 1388 #define GPIO_VOL_DN_KEY IMX_GPIO_NR(2, 25)
1389 iomux_v3_cfg_t const recovery_key_pads[] = { 1389 iomux_v3_cfg_t const recovery_key_pads[] = {
1390 (MX6_PAD_EIM_OE__GPIO2_IO25 | MUX_PAD_CTRL(NO_PAD_CTRL)), 1390 (MX6_PAD_EIM_OE__GPIO2_IO25 | MUX_PAD_CTRL(NO_PAD_CTRL)),
1391 }; 1391 };
1392 1392
1393 int check_recovery_cmd_file(void) 1393 int check_recovery_cmd_file(void)
1394 { 1394 {
1395 int button_pressed = 0; 1395 int button_pressed = 0;
1396 int recovery_mode = 0; 1396 int recovery_mode = 0;
1397 1397
1398 recovery_mode = recovery_check_and_clean_flag(); 1398 recovery_mode = recovery_check_and_clean_flag();
1399 1399
1400 /* Check Recovery Combo Button press or not. */ 1400 /* Check Recovery Combo Button press or not. */
1401 imx_iomux_v3_setup_multiple_pads(recovery_key_pads, 1401 imx_iomux_v3_setup_multiple_pads(recovery_key_pads,
1402 ARRAY_SIZE(recovery_key_pads)); 1402 ARRAY_SIZE(recovery_key_pads));
1403 1403
1404 gpio_direction_input(GPIO_VOL_DN_KEY); 1404 gpio_direction_input(GPIO_VOL_DN_KEY);
1405 1405
1406 if (gpio_get_value(GPIO_VOL_DN_KEY) == 0) { /* VOL_DN key is low assert */ 1406 if (gpio_get_value(GPIO_VOL_DN_KEY) == 0) { /* VOL_DN key is low assert */
1407 button_pressed = 1; 1407 button_pressed = 1;
1408 printf("Recovery key pressed\n"); 1408 printf("Recovery key pressed\n");
1409 } 1409 }
1410 1410
1411 return recovery_mode || button_pressed; 1411 return recovery_mode || button_pressed;
1412 } 1412 }
1413 1413
1414 void board_recovery_setup(void) 1414 void board_recovery_setup(void)
1415 { 1415 {
1416 #if defined(CONFIG_FASTBOOT_STORAGE_SATA) 1416 #if defined(CONFIG_FASTBOOT_STORAGE_SATA)
1417 if ((gpio_get_value(IMX_GPIO_NR(1, 4)) == 0)&&(gpio_get_value(IMX_GPIO_NR(1, 5)) == 0)&&(gpio_get_value(IMX_GPIO_NR(1, 6)) == 0)) 1417 if ((gpio_get_value(IMX_GPIO_NR(1, 4)) == 0)&&(gpio_get_value(IMX_GPIO_NR(1, 5)) == 0)&&(gpio_get_value(IMX_GPIO_NR(1, 6)) == 0))
1418 puts("Entering Recovery Mode into SATA...\n"); 1418 puts("Entering Recovery Mode into SATA...\n");
1419 if (!getenv("bootcmd_android_recovery")) 1419 if (!getenv("bootcmd_android_recovery"))
1420 setenv("bootcmd_android_recovery", 1420 setenv("bootcmd_android_recovery",
1421 "boota sata recovery"); 1421 "boota sata recovery");
1422 #endif /*CONFIG_FASTBOOT_STORAGE_SATA*/ 1422 #endif /*CONFIG_FASTBOOT_STORAGE_SATA*/
1423 #if defined(CONFIG_FASTBOOT_STORAGE_MMC) 1423 #if defined(CONFIG_FASTBOOT_STORAGE_MMC)
1424 if ((gpio_get_value(IMX_GPIO_NR(1, 4)) == 1)&&(gpio_get_value(IMX_GPIO_NR(1, 5)) == 0)&&(gpio_get_value(IMX_GPIO_NR(1, 6)) == 0)) { 1424 if ((gpio_get_value(IMX_GPIO_NR(1, 4)) == 1)&&(gpio_get_value(IMX_GPIO_NR(1, 5)) == 0)&&(gpio_get_value(IMX_GPIO_NR(1, 6)) == 0)) {
1425 puts("Entering Recovery Mode into Carrier SD Card...\n"); 1425 puts("Entering Recovery Mode into Carrier SD Card...\n");
1426 setenv_ulong("mmcdev", 0); 1426 setenv_ulong("mmcdev", 0);
1427 if (!getenv("bootcmd_android_recovery")) 1427 if (!getenv("bootcmd_android_recovery"))
1428 setenv("bootcmd_android_recovery", 1428 setenv("bootcmd_android_recovery",
1429 "boota mmc0 recovery"); 1429 "boota mmc0 recovery");
1430 } else if ((gpio_get_value(IMX_GPIO_NR(1, 4)) == 0)&&(gpio_get_value(IMX_GPIO_NR(1, 5)) == 1)&&(gpio_get_value(IMX_GPIO_NR(1, 6)) == 0)) { 1430 } else if ((gpio_get_value(IMX_GPIO_NR(1, 4)) == 0)&&(gpio_get_value(IMX_GPIO_NR(1, 5)) == 1)&&(gpio_get_value(IMX_GPIO_NR(1, 6)) == 0)) {
1431 puts("Entering Recovery Mode into Carrier SDMMC...\n"); 1431 puts("Entering Recovery Mode into Carrier SDMMC...\n");
1432 setenv_ulong("mmcdev", 1); 1432 setenv_ulong("mmcdev", 1);
1433 if (!getenv("bootcmd_android_recovery")) 1433 if (!getenv("bootcmd_android_recovery"))
1434 setenv("bootcmd_android_recovery", 1434 setenv("bootcmd_android_recovery",
1435 "boota mmc1 recovery"); 1435 "boota mmc1 recovery");
1436 } else if((gpio_get_value(IMX_GPIO_NR(1, 4)) == 0)&&(gpio_get_value(IMX_GPIO_NR(1, 5)) == 1)&&(gpio_get_value(IMX_GPIO_NR(1, 6)) == 1)) { 1436 } else if((gpio_get_value(IMX_GPIO_NR(1, 4)) == 0)&&(gpio_get_value(IMX_GPIO_NR(1, 5)) == 1)&&(gpio_get_value(IMX_GPIO_NR(1, 6)) == 1)) {
1437 puts("Entering Recovery Mode into on Module eMMC Flash...\n"); 1437 puts("Entering Recovery Mode into on Module eMMC Flash...\n");
1438 setenv_ulong("mmcdev", 2); 1438 setenv_ulong("mmcdev", 2);
1439 if (!getenv("bootcmd_android_recovery")) 1439 if (!getenv("bootcmd_android_recovery"))
1440 setenv("bootcmd_android_recovery", 1440 setenv("bootcmd_android_recovery",
1441 "boota mmc2 recovery"); 1441 "boota mmc2 recovery");
1442 #endif /*CONFIG_FASTBOOT_STORAGE_MMC*/ 1442 #endif /*CONFIG_FASTBOOT_STORAGE_MMC*/
1443 } else { 1443 } else {
1444 puts("Unsupported bootup device for recovery\n"); 1444 puts("Unsupported bootup device for recovery\n");
1445 return; 1445 return;
1446 } 1446 }
1447 1447
1448 printf("setup env for recovery..\n"); 1448 printf("setup env for recovery..\n");
1449 setenv("bootcmd", "run bootcmd_android_recovery"); 1449 setenv("bootcmd", "run bootcmd_android_recovery");
1450 } 1450 }
1451 1451
1452 #endif /*CONFIG_ANDROID_RECOVERY*/ 1452 #endif /*CONFIG_ANDROID_RECOVERY*/
1453 1453
1454 #endif /*CONFIG_FSL_FASTBOOT*/ 1454 #endif /*CONFIG_FSL_FASTBOOT*/
1455 1455
1456 #ifdef CONFIG_SPL_BUILD 1456 #ifdef CONFIG_SPL_BUILD
1457 #include <spl.h> 1457 #include <spl.h>
1458 #include <libfdt.h> 1458 #include <libfdt.h>
1459 1459
1460 const struct mx6dq_iomux_ddr_regs mx6_ddr_ioregs = { 1460 const struct mx6dq_iomux_ddr_regs mx6_ddr_ioregs = {
1461 .dram_sdclk_0 = 0x00020030, 1461 .dram_sdclk_0 = 0x00020030,
1462 .dram_sdclk_1 = 0x00020030, 1462 .dram_sdclk_1 = 0x00020030,
1463 .dram_cas = 0x00020030, 1463 .dram_cas = 0x00020030,
1464 .dram_ras = 0x00020030, 1464 .dram_ras = 0x00020030,
1465 .dram_reset = 0x00020030, 1465 .dram_reset = 0x00020030,
1466 .dram_sdcke0 = 0x00003000, 1466 .dram_sdcke0 = 0x00003000,
1467 .dram_sdcke1 = 0x00003000, 1467 .dram_sdcke1 = 0x00003000,
1468 .dram_sdba2 = 0x00000000, 1468 .dram_sdba2 = 0x00000000,
1469 .dram_sdodt0 = 0x00003030, 1469 .dram_sdodt0 = 0x00003030,
1470 .dram_sdodt1 = 0x00003030, 1470 .dram_sdodt1 = 0x00003030,
1471 .dram_sdqs0 = 0x00000030, 1471 .dram_sdqs0 = 0x00000030,
1472 .dram_sdqs1 = 0x00000030, 1472 .dram_sdqs1 = 0x00000030,
1473 .dram_sdqs2 = 0x00000030, 1473 .dram_sdqs2 = 0x00000030,
1474 .dram_sdqs3 = 0x00000030, 1474 .dram_sdqs3 = 0x00000030,
1475 .dram_sdqs4 = 0x00000030, 1475 .dram_sdqs4 = 0x00000030,
1476 .dram_sdqs5 = 0x00000030, 1476 .dram_sdqs5 = 0x00000030,
1477 .dram_sdqs6 = 0x00000030, 1477 .dram_sdqs6 = 0x00000030,
1478 .dram_sdqs7 = 0x00000030, 1478 .dram_sdqs7 = 0x00000030,
1479 .dram_dqm0 = 0x00020030, 1479 .dram_dqm0 = 0x00020030,
1480 .dram_dqm1 = 0x00020030, 1480 .dram_dqm1 = 0x00020030,
1481 .dram_dqm2 = 0x00020030, 1481 .dram_dqm2 = 0x00020030,
1482 .dram_dqm3 = 0x00020030, 1482 .dram_dqm3 = 0x00020030,
1483 .dram_dqm4 = 0x00020030, 1483 .dram_dqm4 = 0x00020030,
1484 .dram_dqm5 = 0x00020030, 1484 .dram_dqm5 = 0x00020030,
1485 .dram_dqm6 = 0x00020030, 1485 .dram_dqm6 = 0x00020030,
1486 .dram_dqm7 = 0x00020030, 1486 .dram_dqm7 = 0x00020030,
1487 }; 1487 };
1488 1488
1489 const struct mx6dq_iomux_grp_regs mx6_grp_ioregs = { 1489 const struct mx6dq_iomux_grp_regs mx6_grp_ioregs = {
1490 .grp_ddr_type = 0x000C0000, 1490 .grp_ddr_type = 0x000C0000,
1491 .grp_ddrmode_ctl = 0x00020000, 1491 .grp_ddrmode_ctl = 0x00020000,
1492 .grp_ddrpke = 0x00000000, 1492 .grp_ddrpke = 0x00000000,
1493 .grp_addds = 0x00000030, 1493 .grp_addds = 0x00000030,
1494 .grp_ctlds = 0x00000030, 1494 .grp_ctlds = 0x00000030,
1495 .grp_ddrmode = 0x00020000, 1495 .grp_ddrmode = 0x00020000,
1496 .grp_b0ds = 0x00000030, 1496 .grp_b0ds = 0x00000030,
1497 .grp_b1ds = 0x00000030, 1497 .grp_b1ds = 0x00000030,
1498 .grp_b2ds = 0x00000030, 1498 .grp_b2ds = 0x00000030,
1499 .grp_b3ds = 0x00000030, 1499 .grp_b3ds = 0x00000030,
1500 .grp_b4ds = 0x00000030, 1500 .grp_b4ds = 0x00000030,
1501 .grp_b5ds = 0x00000030, 1501 .grp_b5ds = 0x00000030,
1502 .grp_b6ds = 0x00000030, 1502 .grp_b6ds = 0x00000030,
1503 .grp_b7ds = 0x00000030, 1503 .grp_b7ds = 0x00000030,
1504 }; 1504 };
1505 1505
1506 const struct mx6_mmdc_calibration mx6_mmcd_calib = { 1506 const struct mx6_mmdc_calibration mx6_mmcd_calib = {
1507 .p0_mpwldectrl0 = 0x001F001F, 1507 .p0_mpwldectrl0 = 0x001F001F,
1508 .p0_mpwldectrl1 = 0x001F001F, 1508 .p0_mpwldectrl1 = 0x001F001F,
1509 .p1_mpwldectrl0 = 0x00440044, 1509 .p1_mpwldectrl0 = 0x00440044,
1510 .p1_mpwldectrl1 = 0x00440044, 1510 .p1_mpwldectrl1 = 0x00440044,
1511 .p0_mpdgctrl0 = 0x434B0350, 1511 .p0_mpdgctrl0 = 0x434B0350,
1512 .p0_mpdgctrl1 = 0x034C0359, 1512 .p0_mpdgctrl1 = 0x034C0359,
1513 .p1_mpdgctrl0 = 0x434B0350, 1513 .p1_mpdgctrl0 = 0x434B0350,
1514 .p1_mpdgctrl1 = 0x03650348, 1514 .p1_mpdgctrl1 = 0x03650348,
1515 .p0_mprddlctl = 0x4436383B, 1515 .p0_mprddlctl = 0x4436383B,
1516 .p1_mprddlctl = 0x39393341, 1516 .p1_mprddlctl = 0x39393341,
1517 .p0_mpwrdlctl = 0x35373933, 1517 .p0_mpwrdlctl = 0x35373933,
1518 .p1_mpwrdlctl = 0x48254A36, 1518 .p1_mpwrdlctl = 0x48254A36,
1519 }; 1519 };
1520 1520
1521 static struct mx6_ddr3_cfg mem_ddr = { 1521 static struct mx6_ddr3_cfg mem_ddr = {
1522 .mem_speed = 1600, 1522 .mem_speed = 1600,
1523 .density = 4, 1523 .density = 4,
1524 .width = 64, 1524 .width = 64,
1525 .banks = 8, 1525 .banks = 8,
1526 .rowaddr = 14, 1526 .rowaddr = 14,
1527 .coladdr = 10, 1527 .coladdr = 10,
1528 .pagesz = 2, 1528 .pagesz = 2,
1529 .trcd = 1375, 1529 .trcd = 1375,
1530 .trcmin = 4875, 1530 .trcmin = 4875,
1531 .trasmin = 3500, 1531 .trasmin = 3500,
1532 }; 1532 };
1533 1533
1534 static void ccgr_init(void) 1534 static void ccgr_init(void)
1535 { 1535 {
1536 struct mxc_ccm_reg *ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR; 1536 struct mxc_ccm_reg *ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR;
1537 1537
1538 writel(0x00C03F3F, &ccm->CCGR0); 1538 writel(0x00C03F3F, &ccm->CCGR0);
1539 writel(0x0030FC03, &ccm->CCGR1); 1539 writel(0x0030FC03, &ccm->CCGR1);
1540 writel(0x0FFFC000, &ccm->CCGR2); 1540 writel(0x0FFFC000, &ccm->CCGR2);
1541 writel(0x3FF00000, &ccm->CCGR3); 1541 writel(0x3FF00000, &ccm->CCGR3);
1542 writel(0x00FFF300, &ccm->CCGR4); 1542 writel(0x00FFF300, &ccm->CCGR4);
1543 writel(0x0F0000C3, &ccm->CCGR5); 1543 writel(0x0F0000C3, &ccm->CCGR5);
1544 writel(0x000003FF, &ccm->CCGR6); 1544 writel(0x000003FF, &ccm->CCGR6);
1545 } 1545 }
1546 1546
1547 static void gpr_init(void) 1547 static void gpr_init(void)
1548 { 1548 {
1549 struct iomuxc *iomux = (struct iomuxc *)IOMUXC_BASE_ADDR; 1549 struct iomuxc *iomux = (struct iomuxc *)IOMUXC_BASE_ADDR;
1550 1550
1551 /* enable AXI cache for VDOA/VPU/IPU */ 1551 /* enable AXI cache for VDOA/VPU/IPU */
1552 writel(0xF00000CF, &iomux->gpr[4]); 1552 writel(0xF00000CF, &iomux->gpr[4]);
1553 /* set IPU AXI-id0 Qos=0xf(bypass) AXI-id1 Qos=0x7 */ 1553 /* set IPU AXI-id0 Qos=0xf(bypass) AXI-id1 Qos=0x7 */
1554 writel(0x007F007F, &iomux->gpr[6]); 1554 writel(0x007F007F, &iomux->gpr[6]);
1555 writel(0x007F007F, &iomux->gpr[7]); 1555 writel(0x007F007F, &iomux->gpr[7]);
1556 } 1556 }
1557 1557
1558 /* 1558 /*
1559 * This section requires the differentiation between iMX6 Sabre boards, but 1559 * This section requires the differentiation between iMX6 Sabre boards, but
1560 * for now, it will configure only for the mx6q variant. 1560 * for now, it will configure only for the mx6q variant.
1561 */ 1561 */
1562 static void spl_dram_init(void) 1562 static void spl_dram_init(void)
1563 { 1563 {
1564 struct mx6_ddr_sysinfo sysinfo = { 1564 struct mx6_ddr_sysinfo sysinfo = {
1565 /* width of data bus:0=16,1=32,2=64 */ 1565 /* width of data bus:0=16,1=32,2=64 */
1566 .dsize = mem_ddr.width/32, 1566 .dsize = mem_ddr.width/32,
1567 /* config for full 4GB range so that get_mem_size() works */ 1567 /* config for full 4GB range so that get_mem_size() works */
1568 .cs_density = 32, /* 32Gb per CS */ 1568 .cs_density = 32, /* 32Gb per CS */
1569 /* single chip select */ 1569 /* single chip select */
1570 .ncs = 1, 1570 .ncs = 1,
1571 .cs1_mirror = 0, 1571 .cs1_mirror = 0,
1572 .rtt_wr = 1 /*DDR3_RTT_60_OHM*/, /* RTT_Wr = RZQ/4 */ 1572 .rtt_wr = 1 /*DDR3_RTT_60_OHM*/, /* RTT_Wr = RZQ/4 */
1573 #ifdef RTT_NOM_120OHM 1573 #ifdef RTT_NOM_120OHM
1574 .rtt_nom = 2 /*DDR3_RTT_120_OHM*/, /* RTT_Nom = RZQ/2 */ 1574 .rtt_nom = 2 /*DDR3_RTT_120_OHM*/, /* RTT_Nom = RZQ/2 */
1575 #else 1575 #else
1576 .rtt_nom = 1 /*DDR3_RTT_60_OHM*/, /* RTT_Nom = RZQ/4 */ 1576 .rtt_nom = 1 /*DDR3_RTT_60_OHM*/, /* RTT_Nom = RZQ/4 */
1577 #endif 1577 #endif
1578 .walat = 1, /* Write additional latency */ 1578 .walat = 1, /* Write additional latency */
1579 .ralat = 5, /* Read additional latency */ 1579 .ralat = 5, /* Read additional latency */
1580 .mif3_mode = 3, /* Command prediction working mode */ 1580 .mif3_mode = 3, /* Command prediction working mode */
1581 .bi_on = 1, /* Bank interleaving enabled */ 1581 .bi_on = 1, /* Bank interleaving enabled */
1582 .sde_to_rst = 0x10, /* 14 cycles, 200us (JEDEC default) */ 1582 .sde_to_rst = 0x10, /* 14 cycles, 200us (JEDEC default) */
1583 .rst_to_cke = 0x23, /* 33 cycles, 500us (JEDEC default) */ 1583 .rst_to_cke = 0x23, /* 33 cycles, 500us (JEDEC default) */
1584 }; 1584 };
1585 1585
1586 mx6dq_dram_iocfg(mem_ddr.width, &mx6_ddr_ioregs, &mx6_grp_ioregs); 1586 mx6dq_dram_iocfg(mem_ddr.width, &mx6_ddr_ioregs, &mx6_grp_ioregs);
1587 mx6_dram_cfg(&sysinfo, &mx6_mmcd_calib, &mem_ddr); 1587 mx6_dram_cfg(&sysinfo, &mx6_mmcd_calib, &mem_ddr);
1588 } 1588 }
1589 1589
1590 void board_init_f(ulong dummy) 1590 void board_init_f(ulong dummy)
1591 { 1591 {
1592 /* setup AIPS and disable watchdog */ 1592 /* setup AIPS and disable watchdog */
1593 arch_cpu_init(); 1593 arch_cpu_init();
1594 1594
1595 ccgr_init(); 1595 ccgr_init();
1596 gpr_init(); 1596 gpr_init();
1597 1597
1598 /* iomux and setup of i2c */ 1598 /* iomux and setup of i2c */
1599 board_early_init_f(); 1599 board_early_init_f();
1600 1600
1601 /* setup GP timer */ 1601 /* setup GP timer */
1602 timer_init(); 1602 timer_init();
1603 1603
1604 /* UART clocks enabled and gd valid - init serial console */ 1604 /* UART clocks enabled and gd valid - init serial console */
1605 preloader_console_init(); 1605 preloader_console_init();
1606 1606
1607 /* DDR initialization */ 1607 /* DDR initialization */
1608 spl_dram_init(); 1608 spl_dram_init();
1609 1609
1610 /* Clear the BSS. */ 1610 /* Clear the BSS. */
1611 memset(__bss_start, 0, __bss_end - __bss_start); 1611 memset(__bss_start, 0, __bss_end - __bss_start);
1612 1612
1613 /* load/boot image from boot device */ 1613 /* load/boot image from boot device */
1614 board_init_r(NULL, 0); 1614 board_init_r(NULL, 0);
1615 } 1615 }
1616 1616
1617 void reset_cpu(ulong addr) 1617 void reset_cpu(ulong addr)
1618 { 1618 {
1619 } 1619 }
1620 #endif 1620 #endif
1621 1621
include/configs/smarcfimx6.h
1 /* 1 /*
2 * Copyright (C) 2012-2015 Freescale Semiconductor, Inc. 2 * Copyright (C) 2012-2015 Freescale Semiconductor, Inc.
3 * 3 *
4 * Configuration settings for the Freescale i.MX6Q SabreSD board. 4 * Configuration settings for the Freescale i.MX6Q SabreSD board.
5 * 5 *
6 * SPDX-License-Identifier: GPL-2.0+ 6 * SPDX-License-Identifier: GPL-2.0+
7 */ 7 */
8 8
9 #ifndef __SMARCFIMX6_CONFIG_H 9 #ifndef __SMARCFIMX6_CONFIG_H
10 #define __SMARCFIMX6_CONFIG_H 10 #define __SMARCFIMX6_CONFIG_H
11 11
12 #include <asm/arch/imx-regs.h> 12 #include <asm/arch/imx-regs.h>
13 #include <asm/imx-common/gpio.h> 13 #include <asm/imx-common/gpio.h>
14 14
15 #ifdef CONFIG_SPL 15 #ifdef CONFIG_SPL
16 #define CONFIG_SPL_LIBCOMMON_SUPPORT 16 #define CONFIG_SPL_LIBCOMMON_SUPPORT
17 #define CONFIG_SPL_MMC_SUPPORT 17 #define CONFIG_SPL_MMC_SUPPORT
18 #include "imx6_spl.h" 18 #include "imx6_spl.h"
19 #endif 19 #endif
20 20
21 #define CONFIG_MACH_TYPE_SMARCFIMX6 3990 21 #define CONFIG_MACH_TYPE_SMARCFIMX6 3990
22 #define CONFIG_MACH_TYPE MACH_TYPE_SMARCFIMX6 22 #define CONFIG_MACH_TYPE MACH_TYPE_SMARCFIMX6
23 #if defined(CONFIG_SER0) 23 #if defined(CONFIG_SER0)
24 #define CONFIG_MXC_UART_BASE UART1_BASE 24 #define CONFIG_MXC_UART_BASE UART1_BASE
25 #define CONFIG_CONSOLE_DEV "ttymxc0" 25 #define CONFIG_CONSOLE_DEV "ttymxc0"
26 #endif 26 #endif
27 #if defined(CONFIG_SER1) 27 #if defined(CONFIG_SER1)
28 #define CONFIG_MXC_UART_BASE UART2_BASE 28 #define CONFIG_MXC_UART_BASE UART2_BASE
29 #define CONFIG_CONSOLE_DEV "ttymxc1" 29 #define CONFIG_CONSOLE_DEV "ttymxc1"
30 #endif 30 #endif
31 #if defined(CONFIG_SER2) 31 #if defined(CONFIG_SER2)
32 #define CONFIG_MXC_UART_BASE UART4_BASE 32 #define CONFIG_MXC_UART_BASE UART4_BASE
33 #define CONFIG_CONSOLE_DEV "ttymxc3" 33 #define CONFIG_CONSOLE_DEV "ttymxc3"
34 #endif 34 #endif
35 #if defined(CONFIG_SER3) 35 #if defined(CONFIG_SER3)
36 #define CONFIG_MXC_UART_BASE UART5_BASE 36 #define CONFIG_MXC_UART_BASE UART5_BASE
37 #define CONFIG_CONSOLE_DEV "ttymxc4" 37 #define CONFIG_CONSOLE_DEV "ttymxc4"
38 #endif 38 #endif
39 #define CONFIG_MMCROOT "/dev/mmcblk2p2" /* SDHC3 */ 39 #define CONFIG_MMCROOT "/dev/mmcblk2p2" /* SDHC3 */
40 #if defined(CONFIG_MX6QP) 40 #if defined(CONFIG_MX6QP)
41 #define CONFIG_DEFAULT_FDT_FILE "imx6qp-smarcfimx6.dtb" 41 #define CONFIG_DEFAULT_FDT_FILE "imx6qp-smarcfimx6.dtb"
42 #define PHYS_SDRAM_SIZE (1u * 1024 * 1024 * 1024) 42 #define PHYS_SDRAM_SIZE (1u * 1024 * 1024 * 1024)
43 #elif defined(CONFIG_MX6Q) 43 #elif defined(CONFIG_MX6Q)
44 #define CONFIG_DEFAULT_FDT_FILE "imx6q-smarcfimx6.dtb" 44 #define CONFIG_DEFAULT_FDT_FILE "imx6q-smarcfimx6.dtb"
45 #define PHYS_SDRAM_SIZE (1u * 1024 * 1024 * 1024) 45 #define PHYS_SDRAM_SIZE (1u * 1024 * 1024 * 1024)
46 #elif defined(CONFIG_MX6DL) 46 #elif defined(CONFIG_MX6DL)
47 #define CONFIG_DEFAULT_FDT_FILE "imx6dl-smarcfimx6.dtb" 47 #define CONFIG_DEFAULT_FDT_FILE "imx6dl-smarcfimx6.dtb"
48 #define PHYS_SDRAM_SIZE (1u * 1024 * 1024 * 1024) 48 #define PHYS_SDRAM_SIZE (1u * 1024 * 1024 * 1024)
49 #elif defined(CONFIG_MX6SOLO) 49 #elif defined(CONFIG_MX6SOLO)
50 #define CONFIG_DEFAULT_FDT_FILE "imx6dl-smarcfimx6.dtb" 50 #define CONFIG_DEFAULT_FDT_FILE "imx6dl-smarcfimx6.dtb"
51 #define PHYS_SDRAM_SIZE (512u * 1024 * 1024) 51 #define PHYS_SDRAM_SIZE (512u * 1024 * 1024)
52 #endif 52 #endif
53 53
54 #include "smarcfimx6_common.h" 54 #include "smarcfimx6_common.h"
55 55
56 #define CONFIG_SYS_FSL_USDHC_NUM 3 56 #define CONFIG_SYS_FSL_USDHC_NUM 3
57 #define CONFIG_SYS_MMC_ENV_DEV 2 /* SDHC3 */ 57 #define CONFIG_SYS_MMC_ENV_DEV 2 /* SDHC3 */
58 #define CONFIG_SYS_MMC_ENV_PART 0 /* user partition */ 58 #define CONFIG_SYS_MMC_ENV_PART 0 /* user partition */
59 59
60 #ifdef CONFIG_SYS_USE_SPINOR 60 #ifdef CONFIG_SYS_USE_SPINOR
61 #define CONFIG_SF_DEFAULT_CS 0 61 #define CONFIG_SF_DEFAULT_CS 0
62 #endif 62 #endif
63 63
64 /* 64 /*
65 * imx6 q/dl/solo pcie would be failed to work properly in kernel, if 65 * imx6 q/dl/solo pcie would be failed to work properly in kernel, if
66 * the pcie module is iniialized/enumerated both in uboot and linux 66 * the pcie module is iniialized/enumerated both in uboot and linux
67 * kernel. 67 * kernel.
68 * rootcause:imx6 q/dl/solo pcie don't have the reset mechanism. 68 * rootcause:imx6 q/dl/solo pcie don't have the reset mechanism.
69 * it is only be RESET by the POR. So, the pcie module only be 69 * it is only be RESET by the POR. So, the pcie module only be
70 * initialized/enumerated once in one POR. 70 * initialized/enumerated once in one POR.
71 * Set to use pcie in kernel defaultly, mask the pcie config here. 71 * Set to use pcie in kernel defaultly, mask the pcie config here.
72 * Remove the mask freely, if the uboot pcie functions, rather than 72 * Remove the mask freely, if the uboot pcie functions, rather than
73 * the kernel's, are required. 73 * the kernel's, are required.
74 */ 74 */
75 /* #define CONFIG_CMD_PCI */ 75 /* #define CONFIG_CMD_PCI */
76 #ifdef CONFIG_CMD_PCI 76 #ifdef CONFIG_CMD_PCI
77 #define CONFIG_PCI 77 #define CONFIG_PCI
78 #define CONFIG_PCI_PNP 78 #define CONFIG_PCI_PNP
79 #define CONFIG_PCI_SCAN_SHOW 79 #define CONFIG_PCI_SCAN_SHOW
80 #define CONFIG_PCIE_IMX 80 #define CONFIG_PCIE_IMX
81 #endif 81 #endif
82 82
83 /* PWM Configs */ 83 /* PWM Configs */
84 #define CONFIG_PWM_IMX 84 #define CONFIG_PWM_IMX
85 #define CONFIG_IMX6_PWM_PER_CLK 66000000 85 #define CONFIG_IMX6_PWM_PER_CLK 66000000
86 86
87 /* USB Configs */ 87 /* USB Configs */
88 #define CONFIG_CMD_USB 88 #define CONFIG_CMD_USB
89 #ifdef CONFIG_CMD_USB 89 #ifdef CONFIG_CMD_USB
90 #define CONFIG_USB_EHCI 90 #define CONFIG_USB_EHCI
91 #define CONFIG_USB_EHCI_MX6 91 #define CONFIG_USB_EHCI_MX6
92 #define CONFIG_USB_STORAGE 92 #define CONFIG_USB_STORAGE
93 #define CONFIG_EHCI_HCD_INIT_AFTER_RESET 93 #define CONFIG_EHCI_HCD_INIT_AFTER_RESET
94 #define CONFIG_USB_HOST_ETHER 94 #define CONFIG_USB_HOST_ETHER
95 #define CONFIG_USB_ETHER_ASIX 95 #define CONFIG_USB_ETHER_ASIX
96 #define CONFIG_MXC_USB_PORTSC (PORT_PTS_UTMI | PORT_PTS_PTW) 96 #define CONFIG_MXC_USB_PORTSC (PORT_PTS_UTMI | PORT_PTS_PTW)
97 #define CONFIG_MXC_USB_FLAGS 0 97 #define CONFIG_MXC_USB_FLAGS 0
98 #define CONFIG_USB_MAX_CONTROLLER_COUNT 2 /* Enabled USB controller number */ 98 #define CONFIG_USB_MAX_CONTROLLER_COUNT 2 /* Enabled USB controller number */
99 #define CONFIG_EHCI_HCD_INIT_AFTER_RESET /* For OTG port */ 99 #define CONFIG_EHCI_HCD_INIT_AFTER_RESET /* For OTG port */
100 #define CONFIG_MXC_USB_PORTSC (PORT_PTS_UTMI | PORT_PTS_PTW) 100 #define CONFIG_MXC_USB_PORTSC (PORT_PTS_UTMI | PORT_PTS_PTW)
101 #define CONFIG_USB_KEYBOARD 101 #define CONFIG_USB_KEYBOARD
102 #ifdef CONFIG_USB_KEYBOARD 102 #ifdef CONFIG_USB_KEYBOARD
103 #define CONFIG_SYS_USB_EVENT_POLL 103 #define CONFIG_SYS_USB_EVENT_POLL
104 #endif /* CONFIG_USB_KEYBOARD */ 104 #endif /* CONFIG_USB_KEYBOARD */
105 /* Client */ 105 /* Client */
106 #define CONFIG_USB_GADGET 106 #define CONFIG_USB_GADGET
107 #define CONFIG_USB_GADGET_VBUS_DRAW 2 107 #define CONFIG_USB_GADGET_VBUS_DRAW 2
108 #define CONFIG_CI_UDC 108 #define CONFIG_CI_UDC
109 #define CONFIG_USBD_HS 109 #define CONFIG_USBD_HS
110 #define CONFIG_USB_GADGET_DUALSPEED 110 #define CONFIG_USB_GADGET_DUALSPEED
111 111
112 #define CONFIG_CMD_USB_MASS_STORAGE 112 #define CONFIG_CMD_USB_MASS_STORAGE
113 #define CONFIG_USB_GADGET_MASS_STORAGE 113 #define CONFIG_USB_GADGET_MASS_STORAGE
114 #define CONFIG_USBDOWNLOAD_GADGET 114 #define CONFIG_USBDOWNLOAD_GADGET
115 #define CONFIG_EMB_VID 0x1B67 115 #define CONFIG_G_DNL_VENDOR_NUM 0x18d1
116 #define CONFIG_EMB_PID_SMARCFIMX6 0x0027 116 #define CONFIG_G_DNL_PRODUCT_NUM 0x0d02
117 #define CONFIG_G_DNL_MANUFACTURER "Embedian" 117 #define CONFIG_G_DNL_MANUFACTURER "FSL"
118 #define CONFIG_G_DNL_VENDOR_NUM CONFIG_EMB_VID
119 #define CONFIG_G_DNL_PRODUCT_NUM CONFIG_EMB_PID_SMARCFIMX6
120 /* USB DFU */ 118 /* USB DFU */
121 #define CONFIG_CMD_DFU 119 #define CONFIG_CMD_DFU
122 #define CONFIG_DFU_FUNCTION 120 #define CONFIG_DFU_FUNCTION
123 #define CONFIG_DFU_MMC 121 #define CONFIG_DFU_MMC
124 #endif 122 #endif
125 123
126 /*#define CONFIG_SPLASH_SCREEN*/ 124 /*#define CONFIG_SPLASH_SCREEN*/
127 /*#define CONFIG_MXC_EPDC*/ 125 /*#define CONFIG_MXC_EPDC*/
128 126
129 /* 127 /*
130 * SPLASH SCREEN Configs 128 * SPLASH SCREEN Configs
131 */ 129 */
132 #if defined(CONFIG_SPLASH_SCREEN) && defined(CONFIG_MXC_EPDC) 130 #if defined(CONFIG_SPLASH_SCREEN) && defined(CONFIG_MXC_EPDC)
133 /* 131 /*
134 * Framebuffer and LCD 132 * Framebuffer and LCD
135 */ 133 */
136 #define CONFIG_CMD_BMP 134 #define CONFIG_CMD_BMP
137 #define CONFIG_LCD 135 #define CONFIG_LCD
138 #define CONFIG_SYS_CONSOLE_IS_IN_ENV 136 #define CONFIG_SYS_CONSOLE_IS_IN_ENV
139 #undef LCD_TEST_PATTERN 137 #undef LCD_TEST_PATTERN
140 /* #define CONFIG_SPLASH_IS_IN_MMC 1 */ 138 /* #define CONFIG_SPLASH_IS_IN_MMC 1 */
141 #define LCD_BPP LCD_MONOCHROME 139 #define LCD_BPP LCD_MONOCHROME
142 /* #define CONFIG_SPLASH_SCREEN_ALIGN 1 */ 140 /* #define CONFIG_SPLASH_SCREEN_ALIGN 1 */
143 141
144 #define CONFIG_WAVEFORM_BUF_SIZE 0x200000 142 #define CONFIG_WAVEFORM_BUF_SIZE 0x200000
145 #endif /* CONFIG_SPLASH_SCREEN && CONFIG_MXC_EPDC */ 143 #endif /* CONFIG_SPLASH_SCREEN && CONFIG_MXC_EPDC */
146 144
147 #endif /* __SMARCFIMX6_CONFIG_H */ 145 #endif /* __SMARCFIMX6_CONFIG_H */
148 146