Commit 9bd91eb64588d4eefd59bf3fc906a296d594111f

Authored by Eric Lee
1 parent b03fe79506

Pinmux fixed for rev. 00B0 i.MX7 SMARC module

Showing 4 changed files with 16 additions and 12 deletions Inline Diff

board/embedian/smarcfimx7/smarcfimx7.c
1 /* 1 /*
2 * Copyright (C) 2015-2016 Freescale Semiconductor, Inc. 2 * Copyright (C) 2015-2016 Freescale Semiconductor, Inc.
3 * 3 *
4 * SPDX-License-Identifier: GPL-2.0+ 4 * SPDX-License-Identifier: GPL-2.0+
5 */ 5 */
6 6
7 #include <asm/arch/clock.h> 7 #include <asm/arch/clock.h>
8 #include <asm/arch/imx-regs.h> 8 #include <asm/arch/imx-regs.h>
9 #include <asm/arch/mx7-pins.h> 9 #include <asm/arch/mx7-pins.h>
10 #include <asm/arch/sys_proto.h> 10 #include <asm/arch/sys_proto.h>
11 #include <asm/gpio.h> 11 #include <asm/gpio.h>
12 #include <asm/imx-common/iomux-v3.h> 12 #include <asm/imx-common/iomux-v3.h>
13 #include <asm/imx-common/boot_mode.h> 13 #include <asm/imx-common/boot_mode.h>
14 #include <asm/io.h> 14 #include <asm/io.h>
15 #include <linux/sizes.h> 15 #include <linux/sizes.h>
16 #include <common.h> 16 #include <common.h>
17 #include <fsl_esdhc.h> 17 #include <fsl_esdhc.h>
18 #include <mmc.h> 18 #include <mmc.h>
19 #include <miiphy.h> 19 #include <miiphy.h>
20 #include <netdev.h> 20 #include <netdev.h>
21 #include <power/pmic.h> 21 #include <power/pmic.h>
22 #include <power/pfuze3000_pmic.h> 22 #include <power/pfuze3000_pmic.h>
23 #include "pfuze.h" 23 #include "pfuze.h"
24 #include <pwm.h> 24 #include <pwm.h>
25 #include <i2c.h> 25 #include <i2c.h>
26 #include <asm/imx-common/mxc_i2c.h> 26 #include <asm/imx-common/mxc_i2c.h>
27 #include <asm/arch/crm_regs.h> 27 #include <asm/arch/crm_regs.h>
28 #include <usb.h> 28 #include <usb.h>
29 #include <usb/ehci-fsl.h> 29 #include <usb/ehci-fsl.h>
30 #if defined(CONFIG_MXC_EPDC) 30 #if defined(CONFIG_MXC_EPDC)
31 #include <lcd.h> 31 #include <lcd.h>
32 #include <mxc_epdc_fb.h> 32 #include <mxc_epdc_fb.h>
33 #endif 33 #endif
34 #include <asm/imx-common/video.h> 34 #include <asm/imx-common/video.h>
35 35
36 #include "smarcfimx7.h" 36 #include "smarcfimx7.h"
37 #ifdef CONFIG_FSL_FASTBOOT 37 #ifdef CONFIG_FSL_FASTBOOT
38 #include <fsl_fastboot.h> 38 #include <fsl_fastboot.h>
39 #ifdef CONFIG_ANDROID_RECOVERY 39 #ifdef CONFIG_ANDROID_RECOVERY
40 #include <recovery.h> 40 #include <recovery.h>
41 #endif 41 #endif
42 #endif /*CONFIG_FSL_FASTBOOT*/ 42 #endif /*CONFIG_FSL_FASTBOOT*/
43 43
44 DECLARE_GLOBAL_DATA_PTR; 44 DECLARE_GLOBAL_DATA_PTR;
45 45
46 #define UART_PAD_CTRL (PAD_CTL_DSE_3P3V_49OHM | \ 46 #define UART_PAD_CTRL (PAD_CTL_DSE_3P3V_49OHM | \
47 PAD_CTL_PUS_PU100KOHM | PAD_CTL_HYS) 47 PAD_CTL_PUS_PU100KOHM | PAD_CTL_HYS)
48 48
49 #define USDHC_PAD_CTRL (PAD_CTL_DSE_3P3V_32OHM | PAD_CTL_SRE_SLOW | \ 49 #define USDHC_PAD_CTRL (PAD_CTL_DSE_3P3V_32OHM | PAD_CTL_SRE_SLOW | \
50 PAD_CTL_HYS | PAD_CTL_PUE | PAD_CTL_PUS_PU47KOHM) 50 PAD_CTL_HYS | PAD_CTL_PUE | PAD_CTL_PUS_PU47KOHM)
51 51
52 #define ENET_PAD_CTRL (PAD_CTL_PUS_PU100KOHM | PAD_CTL_DSE_3P3V_49OHM) 52 #define ENET_PAD_CTRL (PAD_CTL_PUS_PU100KOHM | PAD_CTL_DSE_3P3V_49OHM)
53 #define ENET_PAD_CTRL_MII (PAD_CTL_DSE_3P3V_32OHM) 53 #define ENET_PAD_CTRL_MII (PAD_CTL_DSE_3P3V_32OHM)
54 54
55 #define ENET_RX_PAD_CTRL (PAD_CTL_PUS_PU100KOHM | PAD_CTL_DSE_3P3V_49OHM) 55 #define ENET_RX_PAD_CTRL (PAD_CTL_PUS_PU100KOHM | PAD_CTL_DSE_3P3V_49OHM)
56 56
57 #define I2C_PAD_CTRL (PAD_CTL_DSE_3P3V_32OHM | PAD_CTL_SRE_SLOW | \ 57 #define I2C_PAD_CTRL (PAD_CTL_DSE_3P3V_32OHM | PAD_CTL_SRE_SLOW | \
58 PAD_CTL_HYS | PAD_CTL_PUE | PAD_CTL_PUS_PU100KOHM) 58 PAD_CTL_HYS | PAD_CTL_PUE | PAD_CTL_PUS_PU100KOHM)
59 59
60 #define LCD_PAD_CTRL (PAD_CTL_HYS | PAD_CTL_PUS_PU100KOHM | \ 60 #define LCD_PAD_CTRL (PAD_CTL_HYS | PAD_CTL_PUS_PU100KOHM | \
61 PAD_CTL_DSE_3P3V_49OHM) 61 PAD_CTL_DSE_3P3V_49OHM)
62 62
63 #define SPI_PAD_CTRL (PAD_CTL_DSE_3P3V_49OHM | PAD_CTL_SRE_FAST | PAD_CTL_HYS) 63 #define SPI_PAD_CTRL (PAD_CTL_DSE_3P3V_49OHM | PAD_CTL_SRE_FAST | PAD_CTL_HYS)
64 64
65 #define BUTTON_PAD_CTRL (PAD_CTL_PUS_PU5KOHM | PAD_CTL_DSE_3P3V_98OHM) 65 #define BUTTON_PAD_CTRL (PAD_CTL_PUS_PU5KOHM | PAD_CTL_DSE_3P3V_98OHM)
66 66
67 #define NAND_PAD_CTRL (PAD_CTL_DSE_3P3V_49OHM | PAD_CTL_SRE_SLOW | PAD_CTL_HYS) 67 #define NAND_PAD_CTRL (PAD_CTL_DSE_3P3V_49OHM | PAD_CTL_SRE_SLOW | PAD_CTL_HYS)
68 68
69 #define NAND_PAD_READY0_CTRL (PAD_CTL_DSE_3P3V_49OHM | PAD_CTL_PUS_PU5KOHM) 69 #define NAND_PAD_READY0_CTRL (PAD_CTL_DSE_3P3V_49OHM | PAD_CTL_PUS_PU5KOHM)
70 70
71 #define EPDC_PAD_CTRL 0x0 71 #define EPDC_PAD_CTRL 0x0
72 72
73 #define WEAK_PULLUP (PAD_CTL_PUS_PU100KOHM | PAD_CTL_DSE_3P3V_49OHM | \ 73 #define WEAK_PULLUP (PAD_CTL_PUS_PU100KOHM | PAD_CTL_DSE_3P3V_49OHM | \
74 PAD_CTL_HYS | PAD_CTL_SRE_SLOW) 74 PAD_CTL_HYS | PAD_CTL_SRE_SLOW)
75 75
76 #ifdef CONFIG_SYS_I2C_MXC 76 #ifdef CONFIG_SYS_I2C_MXC
77 #define PC MUX_PAD_CTRL(I2C_PAD_CTRL) 77 #define PC MUX_PAD_CTRL(I2C_PAD_CTRL)
78 /* 78 /*
79 * Read header information from EEPROM into global structure. 79 * Read header information from EEPROM into global structure.
80 */ 80 */
81 static int read_eeprom(struct smarcfimx7_id *header) 81 static int read_eeprom(struct smarcfimx7_id *header)
82 { 82 {
83 i2c_set_bus_num(1); 83 i2c_set_bus_num(1);
84 /* Check if baseboard eeprom is available */ 84 /* Check if baseboard eeprom is available */
85 if (i2c_probe(CONFIG_SYS_I2C_EEPROM_ADDR)) { 85 if (i2c_probe(CONFIG_SYS_I2C_EEPROM_ADDR)) {
86 puts("Could not probe the EEPROM; something fundamentally " 86 puts("Could not probe the EEPROM; something fundamentally "
87 "wrong on the I2C bus.\n"); 87 "wrong on the I2C bus.\n");
88 return -ENODEV; 88 return -ENODEV;
89 } 89 }
90 90
91 /* read the eeprom using i2c */ 91 /* read the eeprom using i2c */
92 if (i2c_read(CONFIG_SYS_I2C_EEPROM_ADDR, 0, 2, (uchar *)header, 92 if (i2c_read(CONFIG_SYS_I2C_EEPROM_ADDR, 0, 2, (uchar *)header,
93 sizeof(struct smarcfimx7_id))) { 93 sizeof(struct smarcfimx7_id))) {
94 puts("Could not read the EEPROM; something fundamentally" 94 puts("Could not read the EEPROM; something fundamentally"
95 " wrong on the I2C bus.\n"); 95 " wrong on the I2C bus.\n");
96 return -EIO; 96 return -EIO;
97 } 97 }
98 98
99 if (header->magic != 0xEE3355AA) { 99 if (header->magic != 0xEE3355AA) {
100 /* 100 /*
101 * read the eeprom using i2c again, 101 * read the eeprom using i2c again,
102 * but use only a 1 byte address 102 * but use only a 1 byte address
103 */ 103 */
104 if (i2c_read(CONFIG_SYS_I2C_EEPROM_ADDR, 0, 1, (uchar *)header, 104 if (i2c_read(CONFIG_SYS_I2C_EEPROM_ADDR, 0, 1, (uchar *)header,
105 sizeof(struct smarcfimx7_id))) { 105 sizeof(struct smarcfimx7_id))) {
106 puts("Could not read the EEPROM; something " 106 puts("Could not read the EEPROM; something "
107 "fundamentally wrong on the I2C bus.\n"); 107 "fundamentally wrong on the I2C bus.\n");
108 return -EIO; 108 return -EIO;
109 } 109 }
110 110
111 if (header->magic != 0xEE3355AA) { 111 if (header->magic != 0xEE3355AA) {
112 printf("Incorrect magic number (0x%x) in EEPROM\n", 112 printf("Incorrect magic number (0x%x) in EEPROM\n",
113 header->magic); 113 header->magic);
114 return -EINVAL; 114 return -EINVAL;
115 } 115 }
116 } 116 }
117 117
118 return 0; 118 return 0;
119 } 119 }
120 120
121 /* I2C1 for PMIC (I2C_PM)*/ 121 /* I2C1 for PMIC (I2C_PM)*/
122 static struct i2c_pads_info i2c_pad_info1 = { 122 static struct i2c_pads_info i2c_pad_info1 = {
123 .scl = { 123 .scl = {
124 .i2c_mode = MX7D_PAD_I2C1_SCL__I2C1_SCL | PC, 124 .i2c_mode = MX7D_PAD_I2C1_SCL__I2C1_SCL | PC,
125 .gpio_mode = MX7D_PAD_I2C1_SCL__GPIO4_IO8 | PC, 125 .gpio_mode = MX7D_PAD_I2C1_SCL__GPIO4_IO8 | PC,
126 .gp = IMX_GPIO_NR(4, 8), 126 .gp = IMX_GPIO_NR(4, 8),
127 }, 127 },
128 .sda = { 128 .sda = {
129 .i2c_mode = MX7D_PAD_I2C1_SDA__I2C1_SDA | PC, 129 .i2c_mode = MX7D_PAD_I2C1_SDA__I2C1_SDA | PC,
130 .gpio_mode = MX7D_PAD_I2C1_SDA__GPIO4_IO9 | PC, 130 .gpio_mode = MX7D_PAD_I2C1_SDA__GPIO4_IO9 | PC,
131 .gp = IMX_GPIO_NR(4, 9), 131 .gp = IMX_GPIO_NR(4, 9),
132 }, 132 },
133 }; 133 };
134 134
135 /* I2C2 for I2C_GP */ 135 /* I2C2 for I2C_GP */
136 static struct i2c_pads_info i2c_pad_info2 = { 136 static struct i2c_pads_info i2c_pad_info2 = {
137 .scl = { 137 .scl = {
138 .i2c_mode = MX7D_PAD_I2C2_SCL__I2C2_SCL | PC, 138 .i2c_mode = MX7D_PAD_I2C2_SCL__I2C2_SCL | PC,
139 .gpio_mode = MX7D_PAD_I2C2_SCL__GPIO4_IO10 | PC, 139 .gpio_mode = MX7D_PAD_I2C2_SCL__GPIO4_IO10 | PC,
140 .gp = IMX_GPIO_NR(4, 10), 140 .gp = IMX_GPIO_NR(4, 10),
141 }, 141 },
142 .sda = { 142 .sda = {
143 .i2c_mode = MX7D_PAD_I2C2_SDA__I2C2_SDA | PC, 143 .i2c_mode = MX7D_PAD_I2C2_SDA__I2C2_SDA | PC,
144 .gpio_mode = MX7D_PAD_I2C2_SDA__GPIO4_IO11 | PC, 144 .gpio_mode = MX7D_PAD_I2C2_SDA__GPIO4_IO11 | PC,
145 .gp = IMX_GPIO_NR(4, 11), 145 .gp = IMX_GPIO_NR(4, 11),
146 }, 146 },
147 }; 147 };
148 148
149 /* I2C3 for I2C_LCD */ 149 /* I2C3 for I2C_LCD */
150 static struct i2c_pads_info i2c_pad_info3 = { 150 static struct i2c_pads_info i2c_pad_info3 = {
151 .scl = { 151 .scl = {
152 .i2c_mode = MX7D_PAD_I2C3_SCL__I2C3_SCL | PC, 152 .i2c_mode = MX7D_PAD_I2C3_SCL__I2C3_SCL | PC,
153 .gpio_mode = MX7D_PAD_I2C3_SCL__GPIO4_IO12 | PC, 153 .gpio_mode = MX7D_PAD_I2C3_SCL__GPIO4_IO12 | PC,
154 .gp = IMX_GPIO_NR(4, 12), 154 .gp = IMX_GPIO_NR(4, 12),
155 }, 155 },
156 .sda = { 156 .sda = {
157 .i2c_mode = MX7D_PAD_I2C3_SDA__I2C3_SDA | PC, 157 .i2c_mode = MX7D_PAD_I2C3_SDA__I2C3_SDA | PC,
158 .gpio_mode = MX7D_PAD_I2C3_SDA__GPIO4_IO13 | PC, 158 .gpio_mode = MX7D_PAD_I2C3_SDA__GPIO4_IO13 | PC,
159 .gp = IMX_GPIO_NR(4, 13), 159 .gp = IMX_GPIO_NR(4, 13),
160 }, 160 },
161 }; 161 };
162 162
163 /* I2C4 for I2C_CAM1 */ 163 /* I2C4 for I2C_CAM1 */
164 static struct i2c_pads_info i2c_pad_info4 = { 164 static struct i2c_pads_info i2c_pad_info4 = {
165 .scl = { 165 .scl = {
166 .i2c_mode = MX7D_PAD_I2C4_SCL__I2C4_SCL | PC, 166 .i2c_mode = MX7D_PAD_I2C4_SCL__I2C4_SCL | PC,
167 .gpio_mode = MX7D_PAD_I2C4_SCL__GPIO4_IO14 | PC, 167 .gpio_mode = MX7D_PAD_I2C4_SCL__GPIO4_IO14 | PC,
168 .gp = IMX_GPIO_NR(4, 14), 168 .gp = IMX_GPIO_NR(4, 14),
169 }, 169 },
170 .sda = { 170 .sda = {
171 .i2c_mode = MX7D_PAD_I2C4_SDA__I2C4_SDA | PC, 171 .i2c_mode = MX7D_PAD_I2C4_SDA__I2C4_SDA | PC,
172 .gpio_mode = MX7D_PAD_I2C4_SDA__GPIO4_IO15 | PC, 172 .gpio_mode = MX7D_PAD_I2C4_SDA__GPIO4_IO15 | PC,
173 .gp = IMX_GPIO_NR(4, 15), 173 .gp = IMX_GPIO_NR(4, 15),
174 }, 174 },
175 }; 175 };
176 #endif 176 #endif
177 177
178 int dram_init(void) 178 int dram_init(void)
179 { 179 {
180 gd->ram_size = PHYS_SDRAM_SIZE; 180 gd->ram_size = PHYS_SDRAM_SIZE;
181 181
182 return 0; 182 return 0;
183 } 183 }
184 184
185 static iomux_v3_cfg_t const wdog_pads[] = { 185 static iomux_v3_cfg_t const wdog_pads[] = {
186 MX7D_PAD_ENET1_RX_CLK__WDOG2_WDOG_B | MUX_PAD_CTRL(NO_PAD_CTRL), 186 MX7D_PAD_GPIO1_IO00__WDOG1_WDOG_B | MUX_PAD_CTRL(NO_PAD_CTRL),
187 }; 187 };
188 188
189 /* SER0/UART6 */ 189 /* SER0/UART6 */
190 static iomux_v3_cfg_t const uart6_pads[] = { 190 static iomux_v3_cfg_t const uart6_pads[] = {
191 MX7D_PAD_EPDC_DATA09__UART6_DCE_TX | MUX_PAD_CTRL(UART_PAD_CTRL), 191 MX7D_PAD_EPDC_DATA09__UART6_DCE_TX | MUX_PAD_CTRL(UART_PAD_CTRL),
192 MX7D_PAD_EPDC_DATA08__UART6_DCE_RX | MUX_PAD_CTRL(UART_PAD_CTRL), 192 MX7D_PAD_EPDC_DATA08__UART6_DCE_RX | MUX_PAD_CTRL(UART_PAD_CTRL),
193 MX7D_PAD_EPDC_DATA10__UART6_DTE_CTS | MUX_PAD_CTRL(UART_PAD_CTRL), 193 MX7D_PAD_EPDC_DATA10__UART6_DTE_CTS | MUX_PAD_CTRL(UART_PAD_CTRL),
194 MX7D_PAD_EPDC_DATA11__UART6_DTE_RTS | MUX_PAD_CTRL(UART_PAD_CTRL), 194 MX7D_PAD_EPDC_DATA11__UART6_DTE_RTS | MUX_PAD_CTRL(UART_PAD_CTRL),
195 }; 195 };
196 196
197 /* SER1/UART2 */ 197 /* SER1/UART2 */
198 static iomux_v3_cfg_t const uart2_pads[] = { 198 static iomux_v3_cfg_t const uart2_pads[] = {
199 MX7D_PAD_UART2_TX_DATA__UART2_DCE_TX | MUX_PAD_CTRL(UART_PAD_CTRL), 199 MX7D_PAD_UART2_TX_DATA__UART2_DCE_TX | MUX_PAD_CTRL(UART_PAD_CTRL),
200 MX7D_PAD_UART2_RX_DATA__UART2_DCE_RX | MUX_PAD_CTRL(UART_PAD_CTRL), 200 MX7D_PAD_UART2_RX_DATA__UART2_DCE_RX | MUX_PAD_CTRL(UART_PAD_CTRL),
201 }; 201 };
202 202
203 /* SER2/UART7 */ 203 /* SER2/UART7 */
204 static iomux_v3_cfg_t const uart7_pads[] = { 204 static iomux_v3_cfg_t const uart7_pads[] = {
205 MX7D_PAD_EPDC_DATA13__UART7_DCE_TX | MUX_PAD_CTRL(UART_PAD_CTRL), 205 MX7D_PAD_EPDC_DATA13__UART7_DCE_TX | MUX_PAD_CTRL(UART_PAD_CTRL),
206 MX7D_PAD_EPDC_DATA12__UART7_DCE_RX | MUX_PAD_CTRL(UART_PAD_CTRL), 206 MX7D_PAD_EPDC_DATA12__UART7_DCE_RX | MUX_PAD_CTRL(UART_PAD_CTRL),
207 MX7D_PAD_EPDC_DATA14__UART7_DTE_CTS | MUX_PAD_CTRL(UART_PAD_CTRL), 207 MX7D_PAD_EPDC_DATA14__UART7_DTE_CTS | MUX_PAD_CTRL(UART_PAD_CTRL),
208 MX7D_PAD_EPDC_DATA15__UART7_DTE_RTS | MUX_PAD_CTRL(UART_PAD_CTRL), 208 MX7D_PAD_EPDC_DATA15__UART7_DTE_RTS | MUX_PAD_CTRL(UART_PAD_CTRL),
209 }; 209 };
210 210
211 /* SER3/UART3 Debug Port */ 211 /* SER3/UART3 Debug Port */
212 static iomux_v3_cfg_t const uart3_pads[] = { 212 static iomux_v3_cfg_t const uart3_pads[] = {
213 MX7D_PAD_UART3_TX_DATA__UART3_DCE_TX | MUX_PAD_CTRL(UART_PAD_CTRL), 213 MX7D_PAD_UART3_TX_DATA__UART3_DCE_TX | MUX_PAD_CTRL(UART_PAD_CTRL),
214 MX7D_PAD_UART3_RX_DATA__UART3_DCE_RX | MUX_PAD_CTRL(UART_PAD_CTRL), 214 MX7D_PAD_UART3_RX_DATA__UART3_DCE_RX | MUX_PAD_CTRL(UART_PAD_CTRL),
215 }; 215 };
216 216
217 /* RESET_OUT# */ 217 /* RESET_OUT# */
218 static iomux_v3_cfg_t const reset_out_pads[] = { 218 static iomux_v3_cfg_t const reset_out_pads[] = {
219 MX7D_PAD_EPDC_BDR1__GPIO2_IO29 | MUX_PAD_CTRL(NO_PAD_CTRL), 219 MX7D_PAD_EPDC_BDR1__GPIO2_IO29 | MUX_PAD_CTRL(NO_PAD_CTRL),
220 }; 220 };
221 221
222 /* SD Card */ 222 /* SD Card */
223 static iomux_v3_cfg_t const usdhc1_pads[] = { 223 static iomux_v3_cfg_t const usdhc1_pads[] = {
224 MX7D_PAD_SD1_CLK__SD1_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL), 224 MX7D_PAD_SD1_CLK__SD1_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL),
225 MX7D_PAD_SD1_CMD__SD1_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL), 225 MX7D_PAD_SD1_CMD__SD1_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL),
226 MX7D_PAD_SD1_DATA0__SD1_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL), 226 MX7D_PAD_SD1_DATA0__SD1_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
227 MX7D_PAD_SD1_DATA1__SD1_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL), 227 MX7D_PAD_SD1_DATA1__SD1_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
228 MX7D_PAD_SD1_DATA2__SD1_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL), 228 MX7D_PAD_SD1_DATA2__SD1_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
229 MX7D_PAD_SD1_DATA3__SD1_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL), 229 MX7D_PAD_SD1_DATA3__SD1_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
230 230
231 MX7D_PAD_SD1_CD_B__GPIO5_IO0 | MUX_PAD_CTRL(USDHC_PAD_CTRL), /*CD */ 231 MX7D_PAD_SD1_CD_B__GPIO5_IO0 | MUX_PAD_CTRL(USDHC_PAD_CTRL), /*CD */
232 MX7D_PAD_SD1_WP__GPIO5_IO1 | MUX_PAD_CTRL(NO_PAD_CTRL), /* WP */ 232 MX7D_PAD_SD1_WP__GPIO5_IO1 | MUX_PAD_CTRL(NO_PAD_CTRL), /* WP */
233 MX7D_PAD_SD1_RESET_B__GPIO5_IO2 | MUX_PAD_CTRL(USDHC_PAD_CTRL), /* SDIO_PWR_EN */ 233 MX7D_PAD_SD1_RESET_B__GPIO5_IO2 | MUX_PAD_CTRL(USDHC_PAD_CTRL), /* SDIO_PWR_EN */
234 }; 234 };
235 235
236 /* eMMC */ 236 /* eMMC */
237 static iomux_v3_cfg_t const usdhc3_emmc_pads[] = { 237 static iomux_v3_cfg_t const usdhc3_emmc_pads[] = {
238 MX7D_PAD_SD3_CLK__SD3_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL), 238 MX7D_PAD_SD3_CLK__SD3_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL),
239 MX7D_PAD_SD3_CMD__SD3_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL), 239 MX7D_PAD_SD3_CMD__SD3_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL),
240 MX7D_PAD_SD3_DATA0__SD3_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL), 240 MX7D_PAD_SD3_DATA0__SD3_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
241 MX7D_PAD_SD3_DATA1__SD3_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL), 241 MX7D_PAD_SD3_DATA1__SD3_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
242 MX7D_PAD_SD3_DATA2__SD3_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL), 242 MX7D_PAD_SD3_DATA2__SD3_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
243 MX7D_PAD_SD3_DATA3__SD3_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL), 243 MX7D_PAD_SD3_DATA3__SD3_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
244 MX7D_PAD_SD3_DATA4__SD3_DATA4 | MUX_PAD_CTRL(USDHC_PAD_CTRL), 244 MX7D_PAD_SD3_DATA4__SD3_DATA4 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
245 MX7D_PAD_SD3_DATA5__SD3_DATA5 | MUX_PAD_CTRL(USDHC_PAD_CTRL), 245 MX7D_PAD_SD3_DATA5__SD3_DATA5 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
246 MX7D_PAD_SD3_DATA6__SD3_DATA6 | MUX_PAD_CTRL(USDHC_PAD_CTRL), 246 MX7D_PAD_SD3_DATA6__SD3_DATA6 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
247 MX7D_PAD_SD3_DATA7__SD3_DATA7 | MUX_PAD_CTRL(USDHC_PAD_CTRL), 247 MX7D_PAD_SD3_DATA7__SD3_DATA7 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
248 MX7D_PAD_SD3_STROBE__SD3_STROBE | MUX_PAD_CTRL(USDHC_PAD_CTRL), 248 MX7D_PAD_SD3_STROBE__SD3_STROBE | MUX_PAD_CTRL(USDHC_PAD_CTRL),
249 MX7D_PAD_SD3_RESET_B__GPIO6_IO11 | MUX_PAD_CTRL(USDHC_PAD_CTRL), 249 MX7D_PAD_SD3_RESET_B__GPIO6_IO11 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
250 }; 250 };
251 251
252 /* SPI0 */ 252 /* SPI0 */
253 static iomux_v3_cfg_t const ecspi1_pads[] = { 253 static iomux_v3_cfg_t const ecspi1_pads[] = {
254 MX7D_PAD_ECSPI1_SCLK__ECSPI1_SCLK | MUX_PAD_CTRL(SPI_PAD_CTRL), 254 MX7D_PAD_ECSPI1_SCLK__ECSPI1_SCLK | MUX_PAD_CTRL(SPI_PAD_CTRL),
255 MX7D_PAD_ECSPI1_MOSI__ECSPI1_MOSI | MUX_PAD_CTRL(SPI_PAD_CTRL), 255 MX7D_PAD_ECSPI1_MOSI__ECSPI1_MOSI | MUX_PAD_CTRL(SPI_PAD_CTRL),
256 MX7D_PAD_ECSPI1_MISO__ECSPI1_MISO | MUX_PAD_CTRL(SPI_PAD_CTRL), 256 MX7D_PAD_ECSPI1_MISO__ECSPI1_MISO | MUX_PAD_CTRL(SPI_PAD_CTRL),
257 MX7D_PAD_ECSPI1_SS0__ECSPI1_SS0 | MUX_PAD_CTRL(NO_PAD_CTRL), /*SS0#*/ 257 MX7D_PAD_ECSPI1_SS0__ECSPI1_SS0 | MUX_PAD_CTRL(NO_PAD_CTRL), /*SS0#*/
258 MX7D_PAD_UART1_RX_DATA__ECSPI1_SS1 | MUX_PAD_CTRL(NO_PAD_CTRL), /*SS1#*/ 258 MX7D_PAD_UART1_RX_DATA__ECSPI1_SS1 | MUX_PAD_CTRL(NO_PAD_CTRL), /*SS1#*/
259 }; 259 };
260 260
261 /* ESPI */ 261 /* ESPI */
262 static iomux_v3_cfg_t const ecspi3_pads[] = { 262 static iomux_v3_cfg_t const ecspi3_pads[] = {
263 MX7D_PAD_SAI2_RX_DATA__ECSPI3_SCLK | MUX_PAD_CTRL(SPI_PAD_CTRL), 263 MX7D_PAD_SAI2_RX_DATA__ECSPI3_SCLK | MUX_PAD_CTRL(SPI_PAD_CTRL),
264 MX7D_PAD_SAI2_TX_BCLK__ECSPI3_MOSI | MUX_PAD_CTRL(SPI_PAD_CTRL), 264 MX7D_PAD_SAI2_TX_BCLK__ECSPI3_MOSI | MUX_PAD_CTRL(SPI_PAD_CTRL),
265 MX7D_PAD_SAI2_TX_SYNC__ECSPI3_MISO | MUX_PAD_CTRL(SPI_PAD_CTRL), 265 MX7D_PAD_SAI2_TX_SYNC__ECSPI3_MISO | MUX_PAD_CTRL(SPI_PAD_CTRL),
266 MX7D_PAD_SAI2_TX_DATA__ECSPI3_SS0 | MUX_PAD_CTRL(NO_PAD_CTRL), /*SS0#*/ 266 MX7D_PAD_SAI2_TX_DATA__ECSPI3_SS0 | MUX_PAD_CTRL(NO_PAD_CTRL), /*SS0#*/
267 MX7D_PAD_SD2_CD_B__ECSPI3_SS2 | MUX_PAD_CTRL(NO_PAD_CTRL), /*SS2#*/ 267 MX7D_PAD_SD2_CD_B__ECSPI3_SS2 | MUX_PAD_CTRL(NO_PAD_CTRL), /*SS2#*/
268 }; 268 };
269 269
270 /* CAN0/FLEXCAN1 */ 270 /* CAN0/FLEXCAN1 */
271 static iomux_v3_cfg_t const flexcan1_pads[] = { 271 static iomux_v3_cfg_t const flexcan1_pads[] = {
272 MX7D_PAD_GPIO1_IO13__FLEXCAN1_TX | MUX_PAD_CTRL(WEAK_PULLUP), 272 MX7D_PAD_GPIO1_IO13__FLEXCAN1_TX | MUX_PAD_CTRL(WEAK_PULLUP),
273 MX7D_PAD_GPIO1_IO12__FLEXCAN1_RX | MUX_PAD_CTRL(WEAK_PULLUP), 273 MX7D_PAD_GPIO1_IO12__FLEXCAN1_RX | MUX_PAD_CTRL(WEAK_PULLUP),
274 }; 274 };
275 275
276 /* CAN1/FLEXCAN2 */ 276 /* CAN1/FLEXCAN2 */
277 static iomux_v3_cfg_t const flexcan2_pads[] = { 277 static iomux_v3_cfg_t const flexcan2_pads[] = {
278 MX7D_PAD_GPIO1_IO15__FLEXCAN2_TX | MUX_PAD_CTRL(WEAK_PULLUP), 278 MX7D_PAD_GPIO1_IO15__FLEXCAN2_TX | MUX_PAD_CTRL(WEAK_PULLUP),
279 MX7D_PAD_GPIO1_IO14__FLEXCAN2_RX | MUX_PAD_CTRL(WEAK_PULLUP), 279 MX7D_PAD_GPIO1_IO14__FLEXCAN2_RX | MUX_PAD_CTRL(WEAK_PULLUP),
280 }; 280 };
281 281
282 /* GPIOs */ 282 /* GPIOs */
283 static iomux_v3_cfg_t const gpios_pads[] = { 283 static iomux_v3_cfg_t const gpios_pads[] = {
284 MX7D_PAD_EPDC_DATA00__GPIO2_IO0 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO0 */ 284 MX7D_PAD_EPDC_DATA00__GPIO2_IO0 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO0 */
285 MX7D_PAD_EPDC_DATA01__GPIO2_IO1 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO1 */ 285 MX7D_PAD_EPDC_DATA01__GPIO2_IO1 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO1 */
286 MX7D_PAD_EPDC_DATA02__GPIO2_IO2 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO2 */ 286 MX7D_PAD_EPDC_DATA02__GPIO2_IO2 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO2 */
287 MX7D_PAD_EPDC_DATA03__GPIO2_IO3 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO3 */ 287 MX7D_PAD_EPDC_DATA03__GPIO2_IO3 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO3 */
288 MX7D_PAD_EPDC_DATA04__GPIO2_IO4 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO4 */ 288 MX7D_PAD_EPDC_DATA04__GPIO2_IO4 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO4 */
289 MX7D_PAD_EPDC_DATA05__GPIO2_IO5 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO6 */ 289 MX7D_PAD_EPDC_DATA05__GPIO2_IO5 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO6 */
290 MX7D_PAD_EPDC_DATA07__GPIO2_IO7 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO7 */ 290 MX7D_PAD_EPDC_DATA07__GPIO2_IO7 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO7 */
291 MX7D_PAD_EPDC_DATA06__GPIO2_IO6 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO8 */ 291 MX7D_PAD_EPDC_DATA06__GPIO2_IO6 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO8 */
292 MX7D_PAD_UART1_TX_DATA__GPIO4_IO1 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO9 */ 292 MX7D_PAD_UART1_TX_DATA__GPIO4_IO1 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO9 */
293 MX7D_PAD_UART3_RTS_B__GPIO4_IO6 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO10 */ 293 MX7D_PAD_UART3_RTS_B__GPIO4_IO6 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO10 */
294 MX7D_PAD_UART3_CTS_B__GPIO4_IO7 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO11 */ 294 MX7D_PAD_UART3_CTS_B__GPIO4_IO7 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO11 */
295 }; 295 };
296 296
297 /* LVDS channel selection, set low as single channel LVDS and high as dual channel LVDS */ 297 /* LVDS channel selection, set low as single channel LVDS and high as dual channel LVDS */
298 static iomux_v3_cfg_t const lvds_ch_sel_pads[] = { 298 static iomux_v3_cfg_t const lvds_ch_sel_pads[] = {
299 MX7D_PAD_SD2_CMD__GPIO5_IO13 | MUX_PAD_CTRL(WEAK_PULLUP), /* LVDS_CH_SEL */ 299 MX7D_PAD_SD2_CMD__GPIO5_IO13 | MUX_PAD_CTRL(WEAK_PULLUP), /* LVDS_CH_SEL */
300 }; 300 };
301 301
302 /* Misc. pins */ 302 /* Misc. pins */
303 static iomux_v3_cfg_t const misc_pads[] = { 303 static iomux_v3_cfg_t const misc_pads[] = {
304 MX7D_PAD_SD2_DATA0__GPIO5_IO14 | MUX_PAD_CTRL(WEAK_PULLUP), /* SLEEP# */ 304 MX7D_PAD_SD2_DATA0__GPIO5_IO14 | MUX_PAD_CTRL(WEAK_PULLUP), /* SLEEP# */
305 MX7D_PAD_GPIO1_IO09__GPIO1_IO9 | MUX_PAD_CTRL(WEAK_PULLUP), /* CHARGER_PRSNT# */ 305 MX7D_PAD_ENET1_RX_CLK__GPIO7_IO13 | MUX_PAD_CTRL(WEAK_PULLUP), /* CHARGER_PRSNT# */
306 MX7D_PAD_GPIO1_IO08__GPIO1_IO8 | MUX_PAD_CTRL(WEAK_PULLUP), /* CHARGING# */ 306 MX7D_PAD_GPIO1_IO08__GPIO1_IO8 | MUX_PAD_CTRL(WEAK_PULLUP), /* CHARGING# */
307 MX7D_PAD_SAI1_RX_SYNC__GPIO6_IO16 | MUX_PAD_CTRL(WEAK_PULLUP), /* CARRIER_STBY# */ 307 MX7D_PAD_SAI1_RX_SYNC__GPIO6_IO16 | MUX_PAD_CTRL(WEAK_PULLUP), /* CARRIER_STBY# */
308 MX7D_PAD_SAI1_RX_BCLK__GPIO6_IO17 | MUX_PAD_CTRL(WEAK_PULLUP), /* CARRIER_PWR_ON# */ 308 MX7D_PAD_SAI1_RX_BCLK__GPIO6_IO17 | MUX_PAD_CTRL(WEAK_PULLUP), /* CARRIER_PWR_ON# */
309 MX7D_PAD_SD2_RESET_B__GPIO5_IO11 | MUX_PAD_CTRL(WEAK_PULLUP), /* BATLOW# */ 309 MX7D_PAD_SD2_RESET_B__GPIO5_IO11 | MUX_PAD_CTRL(WEAK_PULLUP), /* BATLOW# */
310 MX7D_PAD_EPDC_BDR0__GPIO2_IO28 | MUX_PAD_CTRL(NO_PAD_CTRL), /* PCIe_RST# */ 310 MX7D_PAD_EPDC_BDR0__GPIO2_IO28 | MUX_PAD_CTRL(NO_PAD_CTRL), /* PCIe_RST# */
311 MX7D_PAD_EPDC_PWR_STAT__GPIO2_IO31 | MUX_PAD_CTRL(NO_PAD_CTRL), /* PCIe_WAKE# */
311 }; 312 };
312 313
313 #ifdef CONFIG_VIDEO_MXS 314 #ifdef CONFIG_VIDEO_MXS
314 static iomux_v3_cfg_t const lcd_pads[] = { 315 static iomux_v3_cfg_t const lcd_pads[] = {
315 MX7D_PAD_LCD_CLK__LCD_CLK | MUX_PAD_CTRL(LCD_PAD_CTRL), 316 MX7D_PAD_LCD_CLK__LCD_CLK | MUX_PAD_CTRL(LCD_PAD_CTRL),
316 MX7D_PAD_LCD_ENABLE__LCD_ENABLE | MUX_PAD_CTRL(LCD_PAD_CTRL), 317 MX7D_PAD_LCD_ENABLE__LCD_ENABLE | MUX_PAD_CTRL(LCD_PAD_CTRL),
317 MX7D_PAD_LCD_HSYNC__LCD_HSYNC | MUX_PAD_CTRL(LCD_PAD_CTRL), 318 MX7D_PAD_LCD_HSYNC__LCD_HSYNC | MUX_PAD_CTRL(LCD_PAD_CTRL),
318 MX7D_PAD_LCD_VSYNC__LCD_VSYNC | MUX_PAD_CTRL(LCD_PAD_CTRL), 319 MX7D_PAD_LCD_VSYNC__LCD_VSYNC | MUX_PAD_CTRL(LCD_PAD_CTRL),
319 MX7D_PAD_LCD_DATA00__LCD_DATA0 | MUX_PAD_CTRL(LCD_PAD_CTRL), 320 MX7D_PAD_LCD_DATA00__LCD_DATA0 | MUX_PAD_CTRL(LCD_PAD_CTRL),
320 MX7D_PAD_LCD_DATA01__LCD_DATA1 | MUX_PAD_CTRL(LCD_PAD_CTRL), 321 MX7D_PAD_LCD_DATA01__LCD_DATA1 | MUX_PAD_CTRL(LCD_PAD_CTRL),
321 MX7D_PAD_LCD_DATA02__LCD_DATA2 | MUX_PAD_CTRL(LCD_PAD_CTRL), 322 MX7D_PAD_LCD_DATA02__LCD_DATA2 | MUX_PAD_CTRL(LCD_PAD_CTRL),
322 MX7D_PAD_LCD_DATA03__LCD_DATA3 | MUX_PAD_CTRL(LCD_PAD_CTRL), 323 MX7D_PAD_LCD_DATA03__LCD_DATA3 | MUX_PAD_CTRL(LCD_PAD_CTRL),
323 MX7D_PAD_LCD_DATA04__LCD_DATA4 | MUX_PAD_CTRL(LCD_PAD_CTRL), 324 MX7D_PAD_LCD_DATA04__LCD_DATA4 | MUX_PAD_CTRL(LCD_PAD_CTRL),
324 MX7D_PAD_LCD_DATA05__LCD_DATA5 | MUX_PAD_CTRL(LCD_PAD_CTRL), 325 MX7D_PAD_LCD_DATA05__LCD_DATA5 | MUX_PAD_CTRL(LCD_PAD_CTRL),
325 MX7D_PAD_LCD_DATA06__LCD_DATA6 | MUX_PAD_CTRL(LCD_PAD_CTRL), 326 MX7D_PAD_LCD_DATA06__LCD_DATA6 | MUX_PAD_CTRL(LCD_PAD_CTRL),
326 MX7D_PAD_LCD_DATA07__LCD_DATA7 | MUX_PAD_CTRL(LCD_PAD_CTRL), 327 MX7D_PAD_LCD_DATA07__LCD_DATA7 | MUX_PAD_CTRL(LCD_PAD_CTRL),
327 MX7D_PAD_LCD_DATA08__LCD_DATA8 | MUX_PAD_CTRL(LCD_PAD_CTRL), 328 MX7D_PAD_LCD_DATA08__LCD_DATA8 | MUX_PAD_CTRL(LCD_PAD_CTRL),
328 MX7D_PAD_LCD_DATA09__LCD_DATA9 | MUX_PAD_CTRL(LCD_PAD_CTRL), 329 MX7D_PAD_LCD_DATA09__LCD_DATA9 | MUX_PAD_CTRL(LCD_PAD_CTRL),
329 MX7D_PAD_LCD_DATA10__LCD_DATA10 | MUX_PAD_CTRL(LCD_PAD_CTRL), 330 MX7D_PAD_LCD_DATA10__LCD_DATA10 | MUX_PAD_CTRL(LCD_PAD_CTRL),
330 MX7D_PAD_LCD_DATA11__LCD_DATA11 | MUX_PAD_CTRL(LCD_PAD_CTRL), 331 MX7D_PAD_LCD_DATA11__LCD_DATA11 | MUX_PAD_CTRL(LCD_PAD_CTRL),
331 MX7D_PAD_LCD_DATA12__LCD_DATA12 | MUX_PAD_CTRL(LCD_PAD_CTRL), 332 MX7D_PAD_LCD_DATA12__LCD_DATA12 | MUX_PAD_CTRL(LCD_PAD_CTRL),
332 MX7D_PAD_LCD_DATA13__LCD_DATA13 | MUX_PAD_CTRL(LCD_PAD_CTRL), 333 MX7D_PAD_LCD_DATA13__LCD_DATA13 | MUX_PAD_CTRL(LCD_PAD_CTRL),
333 MX7D_PAD_LCD_DATA14__LCD_DATA14 | MUX_PAD_CTRL(LCD_PAD_CTRL), 334 MX7D_PAD_LCD_DATA14__LCD_DATA14 | MUX_PAD_CTRL(LCD_PAD_CTRL),
334 MX7D_PAD_LCD_DATA15__LCD_DATA15 | MUX_PAD_CTRL(LCD_PAD_CTRL), 335 MX7D_PAD_LCD_DATA15__LCD_DATA15 | MUX_PAD_CTRL(LCD_PAD_CTRL),
335 MX7D_PAD_LCD_DATA16__LCD_DATA16 | MUX_PAD_CTRL(LCD_PAD_CTRL), 336 MX7D_PAD_LCD_DATA16__LCD_DATA16 | MUX_PAD_CTRL(LCD_PAD_CTRL),
336 MX7D_PAD_LCD_DATA17__LCD_DATA17 | MUX_PAD_CTRL(LCD_PAD_CTRL), 337 MX7D_PAD_LCD_DATA17__LCD_DATA17 | MUX_PAD_CTRL(LCD_PAD_CTRL),
337 MX7D_PAD_LCD_DATA18__LCD_DATA18 | MUX_PAD_CTRL(LCD_PAD_CTRL), 338 MX7D_PAD_LCD_DATA18__LCD_DATA18 | MUX_PAD_CTRL(LCD_PAD_CTRL),
338 MX7D_PAD_LCD_DATA19__LCD_DATA19 | MUX_PAD_CTRL(LCD_PAD_CTRL), 339 MX7D_PAD_LCD_DATA19__LCD_DATA19 | MUX_PAD_CTRL(LCD_PAD_CTRL),
339 MX7D_PAD_LCD_DATA20__LCD_DATA20 | MUX_PAD_CTRL(LCD_PAD_CTRL), 340 MX7D_PAD_LCD_DATA20__LCD_DATA20 | MUX_PAD_CTRL(LCD_PAD_CTRL),
340 MX7D_PAD_LCD_DATA21__LCD_DATA21 | MUX_PAD_CTRL(LCD_PAD_CTRL), 341 MX7D_PAD_LCD_DATA21__LCD_DATA21 | MUX_PAD_CTRL(LCD_PAD_CTRL),
341 MX7D_PAD_LCD_DATA22__LCD_DATA22 | MUX_PAD_CTRL(LCD_PAD_CTRL), 342 MX7D_PAD_LCD_DATA22__LCD_DATA22 | MUX_PAD_CTRL(LCD_PAD_CTRL),
342 MX7D_PAD_LCD_DATA23__LCD_DATA23 | MUX_PAD_CTRL(LCD_PAD_CTRL), 343 MX7D_PAD_LCD_DATA23__LCD_DATA23 | MUX_PAD_CTRL(LCD_PAD_CTRL),
343 344
344 MX7D_PAD_LCD_RESET__GPIO3_IO4 | MUX_PAD_CTRL(LCD_PAD_CTRL), 345 MX7D_PAD_LCD_RESET__GPIO3_IO4 | MUX_PAD_CTRL(LCD_PAD_CTRL),
345 }; 346 };
346 347
347 static iomux_v3_cfg_t const backlight_pads[] = { 348 static iomux_v3_cfg_t const backlight_pads[] = {
348 /* Backlight Enable for RGB: S127 */ 349 /* Backlight Enable for RGB: S127 */
349 MX7D_PAD_GPIO1_IO02__GPIO1_IO2 | MUX_PAD_CTRL(WEAK_PULLUP), 350 MX7D_PAD_GPIO1_IO02__GPIO1_IO2 | MUX_PAD_CTRL(WEAK_PULLUP),
350 351
351 /* PWM Backlight Control: S141. Use GPIO for Brightness adjustment, duty cycle = period */ 352 /* PWM Backlight Control: S141. Use GPIO for Brightness adjustment, duty cycle = period */
352 MX7D_PAD_GPIO1_IO00__GPIO1_IO0 | MUX_PAD_CTRL(NO_PAD_CTRL), 353 MX7D_PAD_GPIO1_IO01__GPIO1_IO1 | MUX_PAD_CTRL(NO_PAD_CTRL),
353 }; 354 };
354 355
355 void do_enable_parallel_lcd(struct display_info_t const *dev) 356 void do_enable_parallel_lcd(struct display_info_t const *dev)
356 { 357 {
357 imx_iomux_v3_setup_multiple_pads(lcd_pads, ARRAY_SIZE(lcd_pads)); 358 imx_iomux_v3_setup_multiple_pads(lcd_pads, ARRAY_SIZE(lcd_pads));
358 359
359 imx_iomux_v3_setup_multiple_pads(backlight_pads, ARRAY_SIZE(backlight_pads)); 360 imx_iomux_v3_setup_multiple_pads(backlight_pads, ARRAY_SIZE(backlight_pads));
360 361
361 /* Reset LCD */ 362 /* Reset LCD */
362 /*gpio_direction_output(IMX_GPIO_NR(3, 4) , 0);
363 udelay(500);*/
364 gpio_direction_output(IMX_GPIO_NR(3, 4) , 1); 363 gpio_direction_output(IMX_GPIO_NR(3, 4) , 1);
365 364
366 /* Turn on Backlight */ 365 /* Turn on Backlight */
367 gpio_direction_output(IMX_GPIO_NR(1, 2), 1); 366 gpio_direction_output(IMX_GPIO_NR(1, 2), 1);
368 367
369 /* Set Brightness to high */ 368 /* Set Brightness to high */
370 gpio_direction_output(IMX_GPIO_NR(1, 0) , 1); 369 gpio_direction_output(IMX_GPIO_NR(1, 1) , 1);
371 } 370 }
372 371
373 372
374 /* LVDS Panel for AUO G070VW01 V0 7-inch Color TFT 800x480 Panel Settings */ 373 /* LVDS Panel for AUO G070VW01 V0 7-inch Color TFT 800x480 Panel Settings */
375 struct display_info_t const displays[] = {{ 374 struct display_info_t const displays[] = {{
376 .bus = ELCDIF1_IPS_BASE_ADDR, 375 .bus = ELCDIF1_IPS_BASE_ADDR,
377 .addr = 0, 376 .addr = 0,
378 .pixfmt = 24, 377 .pixfmt = 24,
379 .detect = NULL, 378 .detect = NULL,
380 .enable = do_enable_parallel_lcd, 379 .enable = do_enable_parallel_lcd,
381 .mode = { 380 .mode = {
382 .name = "G070VW01", 381 .name = "G070VW01",
383 .xres = 800, 382 .xres = 800,
384 .yres = 480, 383 .yres = 480,
385 .pixclock = 31069, 384 .pixclock = 31069,
386 .left_margin = 64, 385 .left_margin = 64,
387 .right_margin = 64, 386 .right_margin = 64,
388 .upper_margin = 12, 387 .upper_margin = 12,
389 .lower_margin = 4, 388 .lower_margin = 4,
390 .hsync_len = 128, 389 .hsync_len = 128,
391 .vsync_len = 12, 390 .vsync_len = 12,
392 .sync = 0, 391 .sync = 0,
393 .vmode = FB_VMODE_NONINTERLACED 392 .vmode = FB_VMODE_NONINTERLACED
394 } } }; 393 } } };
395 size_t display_count = ARRAY_SIZE(displays); 394 size_t display_count = ARRAY_SIZE(displays);
396 #endif 395 #endif
397 396
398 static void setup_iomux_uart6(void) 397 static void setup_iomux_uart6(void)
399 { 398 {
400 imx_iomux_v3_setup_multiple_pads(uart6_pads, ARRAY_SIZE(uart6_pads)); 399 imx_iomux_v3_setup_multiple_pads(uart6_pads, ARRAY_SIZE(uart6_pads));
401 } 400 }
402 401
403 static void setup_iomux_uart2(void) 402 static void setup_iomux_uart2(void)
404 { 403 {
405 imx_iomux_v3_setup_multiple_pads(uart2_pads, ARRAY_SIZE(uart2_pads)); 404 imx_iomux_v3_setup_multiple_pads(uart2_pads, ARRAY_SIZE(uart2_pads));
406 } 405 }
407 406
408 static void setup_iomux_uart7(void) 407 static void setup_iomux_uart7(void)
409 { 408 {
410 imx_iomux_v3_setup_multiple_pads(uart7_pads, ARRAY_SIZE(uart7_pads)); 409 imx_iomux_v3_setup_multiple_pads(uart7_pads, ARRAY_SIZE(uart7_pads));
411 } 410 }
412 411
413 static void setup_iomux_uart3(void) 412 static void setup_iomux_uart3(void)
414 { 413 {
415 imx_iomux_v3_setup_multiple_pads(uart3_pads, ARRAY_SIZE(uart3_pads)); 414 imx_iomux_v3_setup_multiple_pads(uart3_pads, ARRAY_SIZE(uart3_pads));
416 } 415 }
417 416
418 static void setup_iomux_reset_out(void) 417 static void setup_iomux_reset_out(void)
419 { 418 {
420 imx_iomux_v3_setup_multiple_pads(reset_out_pads, ARRAY_SIZE(reset_out_pads)); 419 imx_iomux_v3_setup_multiple_pads(reset_out_pads, ARRAY_SIZE(reset_out_pads));
421 420
422 /* Set CPU RESET_OUT as Output */ 421 /* Set CPU RESET_OUT as Output */
423 gpio_direction_output(IMX_GPIO_NR(2, 29) , 0); 422 gpio_direction_output(IMX_GPIO_NR(2, 29) , 0);
424 } 423 }
425 424
426 static void setup_iomux_spi1(void) 425 static void setup_iomux_spi1(void)
427 { 426 {
428 imx_iomux_v3_setup_multiple_pads(ecspi1_pads, ARRAY_SIZE(ecspi1_pads)); 427 imx_iomux_v3_setup_multiple_pads(ecspi1_pads, ARRAY_SIZE(ecspi1_pads));
429 gpio_direction_output(IMX_GPIO_NR(4, 19), 0); 428 gpio_direction_output(IMX_GPIO_NR(4, 19), 0);
430 gpio_direction_output(IMX_GPIO_NR(4, 0), 0); 429 gpio_direction_output(IMX_GPIO_NR(4, 0), 0);
431 } 430 }
432 431
433 static void setup_iomux_spi3(void) 432 static void setup_iomux_spi3(void)
434 { 433 {
435 imx_iomux_v3_setup_multiple_pads(ecspi3_pads, ARRAY_SIZE(ecspi3_pads)); 434 imx_iomux_v3_setup_multiple_pads(ecspi3_pads, ARRAY_SIZE(ecspi3_pads));
436 gpio_direction_output(IMX_GPIO_NR(6, 22), 0); 435 gpio_direction_output(IMX_GPIO_NR(6, 22), 0);
437 gpio_direction_output(IMX_GPIO_NR(5, 9), 0); 436 gpio_direction_output(IMX_GPIO_NR(5, 9), 0);
438 } 437 }
439 438
440 static void setup_iomux_gpios(void) 439 static void setup_iomux_gpios(void)
441 { 440 {
442 imx_iomux_v3_setup_multiple_pads(gpios_pads, ARRAY_SIZE(gpios_pads)); 441 imx_iomux_v3_setup_multiple_pads(gpios_pads, ARRAY_SIZE(gpios_pads));
443 gpio_direction_output(IMX_GPIO_NR(2, 0), 0); 442 gpio_direction_output(IMX_GPIO_NR(2, 0), 0);
444 gpio_direction_output(IMX_GPIO_NR(2, 1), 0); 443 gpio_direction_output(IMX_GPIO_NR(2, 1), 0);
445 gpio_direction_output(IMX_GPIO_NR(2, 2), 0); 444 gpio_direction_output(IMX_GPIO_NR(2, 2), 0);
446 gpio_direction_output(IMX_GPIO_NR(2, 3), 0); 445 gpio_direction_output(IMX_GPIO_NR(2, 3), 0);
447 gpio_direction_output(IMX_GPIO_NR(2, 4), 0); 446 gpio_direction_output(IMX_GPIO_NR(2, 4), 0);
448 gpio_direction_input(IMX_GPIO_NR(2, 5)); 447 gpio_direction_input(IMX_GPIO_NR(2, 5));
449 gpio_direction_input(IMX_GPIO_NR(2, 7)); 448 gpio_direction_input(IMX_GPIO_NR(2, 7));
450 gpio_direction_input(IMX_GPIO_NR(2, 6)); 449 gpio_direction_input(IMX_GPIO_NR(2, 6));
451 gpio_direction_input(IMX_GPIO_NR(4, 1)); 450 gpio_direction_input(IMX_GPIO_NR(4, 1));
452 gpio_direction_input(IMX_GPIO_NR(4, 6)); 451 gpio_direction_input(IMX_GPIO_NR(4, 6));
453 gpio_direction_input(IMX_GPIO_NR(4, 7)); 452 gpio_direction_input(IMX_GPIO_NR(4, 7));
454 } 453 }
455 454
456 static void setup_iomux_lvds_ch_sel(void) 455 static void setup_iomux_lvds_ch_sel(void)
457 { 456 {
458 imx_iomux_v3_setup_multiple_pads(lvds_ch_sel_pads, ARRAY_SIZE(lvds_ch_sel_pads)); 457 imx_iomux_v3_setup_multiple_pads(lvds_ch_sel_pads, ARRAY_SIZE(lvds_ch_sel_pads));
459 gpio_direction_output(IMX_GPIO_NR(5, 13), 0); 458 gpio_direction_output(IMX_GPIO_NR(5, 13), 0);
460 } 459 }
461 460
462 static void setup_iomux_misc(void) 461 static void setup_iomux_misc(void)
463 { 462 {
464 imx_iomux_v3_setup_multiple_pads(misc_pads, ARRAY_SIZE(misc_pads)); 463 imx_iomux_v3_setup_multiple_pads(misc_pads, ARRAY_SIZE(misc_pads));
465 gpio_direction_input(IMX_GPIO_NR(5, 14)); 464 gpio_direction_input(IMX_GPIO_NR(5, 14));
466 gpio_direction_input(IMX_GPIO_NR(1, 8)); 465 gpio_direction_input(IMX_GPIO_NR(1, 8));
467 gpio_direction_input(IMX_GPIO_NR(1, 9)); 466 gpio_direction_input(IMX_GPIO_NR(1, 9));
468 gpio_direction_input(IMX_GPIO_NR(5, 11)); 467 gpio_direction_input(IMX_GPIO_NR(5, 11));
469 gpio_direction_output(IMX_GPIO_NR(6, 16), 0); 468 gpio_direction_output(IMX_GPIO_NR(6, 16), 0);
470 gpio_direction_output(IMX_GPIO_NR(6, 17), 0); 469 gpio_direction_output(IMX_GPIO_NR(6, 17), 0);
471 gpio_direction_output(IMX_GPIO_NR(2, 28), 0); 470 gpio_direction_output(IMX_GPIO_NR(2, 28), 0);
471 udelay(500);
472 gpio_direction_output(IMX_GPIO_NR(2, 28), 1);
473 gpio_direction_input(IMX_GPIO_NR(2, 31));
472 } 474 }
473 475
474 static void setup_iomux_flexcan1(void) 476 static void setup_iomux_flexcan1(void)
475 { 477 {
476 imx_iomux_v3_setup_multiple_pads(flexcan1_pads, ARRAY_SIZE(flexcan1_pads)); 478 imx_iomux_v3_setup_multiple_pads(flexcan1_pads, ARRAY_SIZE(flexcan1_pads));
477 } 479 }
478 480
479 static void setup_iomux_flexcan2(void) 481 static void setup_iomux_flexcan2(void)
480 { 482 {
481 imx_iomux_v3_setup_multiple_pads(flexcan2_pads, ARRAY_SIZE(flexcan2_pads)); 483 imx_iomux_v3_setup_multiple_pads(flexcan2_pads, ARRAY_SIZE(flexcan2_pads));
482 } 484 }
483 485
484 #ifdef CONFIG_FSL_ESDHC 486 #ifdef CONFIG_FSL_ESDHC
485 487
486 #define USDHC1_CD_GPIO IMX_GPIO_NR(5, 0) 488 #define USDHC1_CD_GPIO IMX_GPIO_NR(5, 0)
487 #define USDHC1_PWR_GPIO IMX_GPIO_NR(5, 2) 489 #define USDHC1_PWR_GPIO IMX_GPIO_NR(5, 2)
488 #define USDHC3_PWR_GPIO IMX_GPIO_NR(6, 11) 490 #define USDHC3_PWR_GPIO IMX_GPIO_NR(6, 11)
489 491
490 static struct fsl_esdhc_cfg usdhc_cfg[3] = { 492 static struct fsl_esdhc_cfg usdhc_cfg[3] = {
491 {USDHC1_BASE_ADDR, 0, 4}, 493 {USDHC1_BASE_ADDR, 0, 4},
492 {USDHC3_BASE_ADDR}, 494 {USDHC3_BASE_ADDR},
493 }; 495 };
494 496
495 int board_mmc_get_env_dev(int devno) 497 int board_mmc_get_env_dev(int devno)
496 { 498 {
497 if (devno == 2) 499 if (devno == 2)
498 devno--; 500 devno--;
499 501
500 return devno; 502 return devno;
501 } 503 }
502 504
503 int mmc_map_to_kernel_blk(int dev_no) 505 int mmc_map_to_kernel_blk(int dev_no)
504 { 506 {
505 if (dev_no == 1) 507 if (dev_no == 1)
506 dev_no++; 508 dev_no++;
507 509
508 return dev_no; 510 return dev_no;
509 } 511 }
510 512
511 int board_mmc_getcd(struct mmc *mmc) 513 int board_mmc_getcd(struct mmc *mmc)
512 { 514 {
513 struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv; 515 struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv;
514 int ret = 0; 516 int ret = 0;
515 517
516 switch (cfg->esdhc_base) { 518 switch (cfg->esdhc_base) {
517 case USDHC1_BASE_ADDR: 519 case USDHC1_BASE_ADDR:
518 ret = !gpio_get_value(USDHC1_CD_GPIO); 520 ret = !gpio_get_value(USDHC1_CD_GPIO);
519 break; 521 break;
520 case USDHC3_BASE_ADDR: 522 case USDHC3_BASE_ADDR:
521 ret = 1; /* Assume uSDHC3 emmc is always present */ 523 ret = 1; /* Assume uSDHC3 emmc is always present */
522 break; 524 break;
523 } 525 }
524 526
525 return ret; 527 return ret;
526 } 528 }
527 529
528 int board_mmc_init(bd_t *bis) 530 int board_mmc_init(bd_t *bis)
529 { 531 {
530 int i, ret; 532 int i, ret;
531 /* 533 /*
532 * According to the board_mmc_init() the following map is done: 534 * According to the board_mmc_init() the following map is done:
533 * (U-Boot device node) (Physical Port) 535 * (U-Boot device node) (Physical Port)
534 * mmc0 USDHC1 536 * mmc0 USDHC1
535 * mmc2 USDHC3 (eMMC) 537 * mmc2 USDHC3 (eMMC)
536 */ 538 */
537 for (i = 0; i < CONFIG_SYS_FSL_USDHC_NUM; i++) { 539 for (i = 0; i < CONFIG_SYS_FSL_USDHC_NUM; i++) {
538 switch (i) { 540 switch (i) {
539 case 0: 541 case 0:
540 imx_iomux_v3_setup_multiple_pads( 542 imx_iomux_v3_setup_multiple_pads(
541 usdhc1_pads, ARRAY_SIZE(usdhc1_pads)); 543 usdhc1_pads, ARRAY_SIZE(usdhc1_pads));
542 gpio_request(USDHC1_CD_GPIO, "usdhc1_cd"); 544 gpio_request(USDHC1_CD_GPIO, "usdhc1_cd");
543 gpio_direction_input(USDHC1_CD_GPIO); 545 gpio_direction_input(USDHC1_CD_GPIO);
544 gpio_request(USDHC1_PWR_GPIO, "usdhc1_pwr"); 546 gpio_request(USDHC1_PWR_GPIO, "usdhc1_pwr");
545 gpio_direction_output(USDHC1_PWR_GPIO, 0); 547 gpio_direction_output(USDHC1_PWR_GPIO, 0);
546 udelay(500); 548 udelay(500);
547 gpio_direction_output(USDHC1_PWR_GPIO, 1); 549 gpio_direction_output(USDHC1_PWR_GPIO, 1);
548 usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC_CLK); 550 usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC_CLK);
549 break; 551 break;
550 case 1: 552 case 1:
551 imx_iomux_v3_setup_multiple_pads( 553 imx_iomux_v3_setup_multiple_pads(
552 usdhc3_emmc_pads, ARRAY_SIZE(usdhc3_emmc_pads)); 554 usdhc3_emmc_pads, ARRAY_SIZE(usdhc3_emmc_pads));
553 gpio_request(USDHC3_PWR_GPIO, "usdhc3_pwr"); 555 gpio_request(USDHC3_PWR_GPIO, "usdhc3_pwr");
554 gpio_direction_output(USDHC3_PWR_GPIO, 0); 556 gpio_direction_output(USDHC3_PWR_GPIO, 0);
555 udelay(500); 557 udelay(500);
556 gpio_direction_output(USDHC3_PWR_GPIO, 1); 558 gpio_direction_output(USDHC3_PWR_GPIO, 1);
557 usdhc_cfg[1].sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK); 559 usdhc_cfg[1].sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK);
558 break; 560 break;
559 default: 561 default:
560 printf("Warning: you configured more USDHC controllers" 562 printf("Warning: you configured more USDHC controllers"
561 "(%d) than supported by the board\n", i + 1); 563 "(%d) than supported by the board\n", i + 1);
562 return -EINVAL; 564 return -EINVAL;
563 } 565 }
564 566
565 ret = fsl_esdhc_initialize(bis, &usdhc_cfg[i]); 567 ret = fsl_esdhc_initialize(bis, &usdhc_cfg[i]);
566 if (ret) 568 if (ret)
567 return ret; 569 return ret;
568 } 570 }
569 571
570 return 0; 572 return 0;
571 } 573 }
572 #endif 574 #endif
573 575
574 #ifdef CONFIG_FEC_MXC 576 #ifdef CONFIG_FEC_MXC
575 static iomux_v3_cfg_t const fec1_pads[] = { 577 static iomux_v3_cfg_t const fec1_pads[] = {
576 MX7D_PAD_ENET1_RGMII_RX_CTL__ENET1_RGMII_RX_CTL | MUX_PAD_CTRL(ENET_RX_PAD_CTRL), 578 MX7D_PAD_ENET1_RGMII_RX_CTL__ENET1_RGMII_RX_CTL | MUX_PAD_CTRL(ENET_RX_PAD_CTRL),
577 MX7D_PAD_ENET1_RGMII_RD0__ENET1_RGMII_RD0 | MUX_PAD_CTRL(ENET_RX_PAD_CTRL), 579 MX7D_PAD_ENET1_RGMII_RD0__ENET1_RGMII_RD0 | MUX_PAD_CTRL(ENET_RX_PAD_CTRL),
578 MX7D_PAD_ENET1_RGMII_RD1__ENET1_RGMII_RD1 | MUX_PAD_CTRL(ENET_RX_PAD_CTRL), 580 MX7D_PAD_ENET1_RGMII_RD1__ENET1_RGMII_RD1 | MUX_PAD_CTRL(ENET_RX_PAD_CTRL),
579 MX7D_PAD_ENET1_RGMII_RD2__ENET1_RGMII_RD2 | MUX_PAD_CTRL(ENET_RX_PAD_CTRL), 581 MX7D_PAD_ENET1_RGMII_RD2__ENET1_RGMII_RD2 | MUX_PAD_CTRL(ENET_RX_PAD_CTRL),
580 MX7D_PAD_ENET1_RGMII_RD3__ENET1_RGMII_RD3 | MUX_PAD_CTRL(ENET_RX_PAD_CTRL), 582 MX7D_PAD_ENET1_RGMII_RD3__ENET1_RGMII_RD3 | MUX_PAD_CTRL(ENET_RX_PAD_CTRL),
581 MX7D_PAD_ENET1_RGMII_RXC__ENET1_RGMII_RXC | MUX_PAD_CTRL(ENET_RX_PAD_CTRL), 583 MX7D_PAD_ENET1_RGMII_RXC__ENET1_RGMII_RXC | MUX_PAD_CTRL(ENET_RX_PAD_CTRL),
582 MX7D_PAD_ENET1_RGMII_TX_CTL__ENET1_RGMII_TX_CTL | MUX_PAD_CTRL(ENET_PAD_CTRL), 584 MX7D_PAD_ENET1_RGMII_TX_CTL__ENET1_RGMII_TX_CTL | MUX_PAD_CTRL(ENET_PAD_CTRL),
583 MX7D_PAD_ENET1_RGMII_TD0__ENET1_RGMII_TD0 | MUX_PAD_CTRL(ENET_PAD_CTRL), 585 MX7D_PAD_ENET1_RGMII_TD0__ENET1_RGMII_TD0 | MUX_PAD_CTRL(ENET_PAD_CTRL),
584 MX7D_PAD_ENET1_RGMII_TD1__ENET1_RGMII_TD1 | MUX_PAD_CTRL(ENET_PAD_CTRL), 586 MX7D_PAD_ENET1_RGMII_TD1__ENET1_RGMII_TD1 | MUX_PAD_CTRL(ENET_PAD_CTRL),
585 MX7D_PAD_ENET1_RGMII_TD2__ENET1_RGMII_TD2 | MUX_PAD_CTRL(ENET_PAD_CTRL), 587 MX7D_PAD_ENET1_RGMII_TD2__ENET1_RGMII_TD2 | MUX_PAD_CTRL(ENET_PAD_CTRL),
586 MX7D_PAD_ENET1_RGMII_TD3__ENET1_RGMII_TD3 | MUX_PAD_CTRL(ENET_PAD_CTRL), 588 MX7D_PAD_ENET1_RGMII_TD3__ENET1_RGMII_TD3 | MUX_PAD_CTRL(ENET_PAD_CTRL),
587 MX7D_PAD_ENET1_RGMII_TXC__ENET1_RGMII_TXC | MUX_PAD_CTRL(ENET_PAD_CTRL), 589 MX7D_PAD_ENET1_RGMII_TXC__ENET1_RGMII_TXC | MUX_PAD_CTRL(ENET_PAD_CTRL),
588 MX7D_PAD_GPIO1_IO10__ENET1_MDIO | MUX_PAD_CTRL(ENET_PAD_CTRL_MII), 590 MX7D_PAD_GPIO1_IO10__ENET1_MDIO | MUX_PAD_CTRL(ENET_PAD_CTRL_MII),
589 MX7D_PAD_GPIO1_IO11__ENET1_MDC | MUX_PAD_CTRL(ENET_PAD_CTRL_MII), 591 MX7D_PAD_GPIO1_IO11__ENET1_MDC | MUX_PAD_CTRL(ENET_PAD_CTRL_MII),
590 }; 592 };
591 593
592 static iomux_v3_cfg_t const fec2_pads[] = { 594 static iomux_v3_cfg_t const fec2_pads[] = {
593 MX7D_PAD_EPDC_SDCE0__ENET2_RGMII_RX_CTL | MUX_PAD_CTRL(ENET_RX_PAD_CTRL), 595 MX7D_PAD_EPDC_SDCE0__ENET2_RGMII_RX_CTL | MUX_PAD_CTRL(ENET_RX_PAD_CTRL),
594 MX7D_PAD_EPDC_SDCLK__ENET2_RGMII_RD0 | MUX_PAD_CTRL(ENET_RX_PAD_CTRL), 596 MX7D_PAD_EPDC_SDCLK__ENET2_RGMII_RD0 | MUX_PAD_CTRL(ENET_RX_PAD_CTRL),
595 MX7D_PAD_EPDC_SDLE__ENET2_RGMII_RD1 | MUX_PAD_CTRL(ENET_RX_PAD_CTRL), 597 MX7D_PAD_EPDC_SDLE__ENET2_RGMII_RD1 | MUX_PAD_CTRL(ENET_RX_PAD_CTRL),
596 MX7D_PAD_EPDC_SDOE__ENET2_RGMII_RD2 | MUX_PAD_CTRL(ENET_RX_PAD_CTRL), 598 MX7D_PAD_EPDC_SDOE__ENET2_RGMII_RD2 | MUX_PAD_CTRL(ENET_RX_PAD_CTRL),
597 MX7D_PAD_EPDC_SDSHR__ENET2_RGMII_RD3 | MUX_PAD_CTRL(ENET_RX_PAD_CTRL), 599 MX7D_PAD_EPDC_SDSHR__ENET2_RGMII_RD3 | MUX_PAD_CTRL(ENET_RX_PAD_CTRL),
598 MX7D_PAD_EPDC_SDCE1__ENET2_RGMII_RXC | MUX_PAD_CTRL(ENET_RX_PAD_CTRL), 600 MX7D_PAD_EPDC_SDCE1__ENET2_RGMII_RXC | MUX_PAD_CTRL(ENET_RX_PAD_CTRL),
599 MX7D_PAD_EPDC_GDRL__ENET2_RGMII_TX_CTL | MUX_PAD_CTRL(ENET_PAD_CTRL), 601 MX7D_PAD_EPDC_GDRL__ENET2_RGMII_TX_CTL | MUX_PAD_CTRL(ENET_PAD_CTRL),
600 MX7D_PAD_EPDC_SDCE2__ENET2_RGMII_TD0 | MUX_PAD_CTRL(ENET_PAD_CTRL), 602 MX7D_PAD_EPDC_SDCE2__ENET2_RGMII_TD0 | MUX_PAD_CTRL(ENET_PAD_CTRL),
601 MX7D_PAD_EPDC_SDCE3__ENET2_RGMII_TD1 | MUX_PAD_CTRL(ENET_PAD_CTRL), 603 MX7D_PAD_EPDC_SDCE3__ENET2_RGMII_TD1 | MUX_PAD_CTRL(ENET_PAD_CTRL),
602 MX7D_PAD_EPDC_GDCLK__ENET2_RGMII_TD2 | MUX_PAD_CTRL(ENET_PAD_CTRL), 604 MX7D_PAD_EPDC_GDCLK__ENET2_RGMII_TD2 | MUX_PAD_CTRL(ENET_PAD_CTRL),
603 MX7D_PAD_EPDC_GDOE__ENET2_RGMII_TD3 | MUX_PAD_CTRL(ENET_PAD_CTRL), 605 MX7D_PAD_EPDC_GDOE__ENET2_RGMII_TD3 | MUX_PAD_CTRL(ENET_PAD_CTRL),
604 MX7D_PAD_EPDC_GDSP__ENET2_RGMII_TXC | MUX_PAD_CTRL(ENET_PAD_CTRL), 606 MX7D_PAD_EPDC_GDSP__ENET2_RGMII_TXC | MUX_PAD_CTRL(ENET_PAD_CTRL),
605 MX7D_PAD_GPIO1_IO10__ENET1_MDIO | MUX_PAD_CTRL(ENET_PAD_CTRL_MII), 607 MX7D_PAD_GPIO1_IO10__ENET1_MDIO | MUX_PAD_CTRL(ENET_PAD_CTRL_MII),
606 MX7D_PAD_GPIO1_IO11__ENET1_MDC | MUX_PAD_CTRL(ENET_PAD_CTRL_MII), 608 MX7D_PAD_GPIO1_IO11__ENET1_MDC | MUX_PAD_CTRL(ENET_PAD_CTRL_MII),
607 }; 609 };
608 610
609 static void setup_iomux_fec(void) 611 static void setup_iomux_fec(void)
610 { 612 {
611 if (0 == CONFIG_FEC_ENET_DEV) { 613 if (0 == CONFIG_FEC_ENET_DEV) {
612 imx_iomux_v3_setup_multiple_pads(fec1_pads, ARRAY_SIZE(fec1_pads)); 614 imx_iomux_v3_setup_multiple_pads(fec1_pads, ARRAY_SIZE(fec1_pads));
613 gpio_direction_input(IMX_GPIO_NR(7, 15)); 615 gpio_direction_input(IMX_GPIO_NR(7, 15));
614 } else { 616 } else {
615 imx_iomux_v3_setup_multiple_pads(fec2_pads, ARRAY_SIZE(fec2_pads)); 617 imx_iomux_v3_setup_multiple_pads(fec2_pads, ARRAY_SIZE(fec2_pads));
616 gpio_direction_input(IMX_GPIO_NR(7, 14)); 618 gpio_direction_input(IMX_GPIO_NR(7, 14));
617 } 619 }
618 } 620 }
619 621
620 int board_eth_init(bd_t *bis) 622 int board_eth_init(bd_t *bis)
621 { 623 {
622 #if defined(CONFIG_MAC_ADDR_IN_EEPROM) 624 #if defined(CONFIG_MAC_ADDR_IN_EEPROM)
623 625
624 uchar env_enetaddr[6]; 626 uchar env_enetaddr[6];
625 int enetaddr_found; 627 int enetaddr_found;
626 628
627 enetaddr_found = eth_getenv_enetaddr("ethaddr", env_enetaddr); 629 enetaddr_found = eth_getenv_enetaddr("ethaddr", env_enetaddr);
628 630
629 uint8_t enetaddr[8]; 631 uint8_t enetaddr[8];
630 int eeprom_mac_read; 632 int eeprom_mac_read;
631 633
632 /* Read Ethernet MAC address from EEPROM */ 634 /* Read Ethernet MAC address from EEPROM */
633 eeprom_mac_read = smarcfimx7_read_mac_address(enetaddr); 635 eeprom_mac_read = smarcfimx7_read_mac_address(enetaddr);
634 636
635 /* 637 /*
636 * MAC address not present in the environment 638 * MAC address not present in the environment
637 * try and read the MAC address from EEPROM flash 639 * try and read the MAC address from EEPROM flash
638 * and set it. 640 * and set it.
639 */ 641 */
640 if (!enetaddr_found) { 642 if (!enetaddr_found) {
641 if (eeprom_mac_read) 643 if (eeprom_mac_read)
642 /* Set Ethernet MAC address from EEPROM */ 644 /* Set Ethernet MAC address from EEPROM */
643 smarcfimx7_sync_env_enetaddr(enetaddr); 645 smarcfimx7_sync_env_enetaddr(enetaddr);
644 } else { 646 } else {
645 /* 647 /*
646 * MAC address present in environment compare it with 648 * MAC address present in environment compare it with
647 * the MAC address in EEPROM and warn on mismatch 649 * the MAC address in EEPROM and warn on mismatch
648 */ 650 */
649 if (eeprom_mac_read && memcmp(enetaddr, env_enetaddr, 6)) 651 if (eeprom_mac_read && memcmp(enetaddr, env_enetaddr, 6))
650 printf("Warning: MAC address in EEPROM don't match " 652 printf("Warning: MAC address in EEPROM don't match "
651 "with the MAC address in the environment\n"); 653 "with the MAC address in the environment\n");
652 printf("Default using MAC address from environment\n"); 654 printf("Default using MAC address from environment\n");
653 } 655 }
654 656
655 uchar env_enet1addr[6]; 657 uchar env_enet1addr[6];
656 int enet1addr_found; 658 int enet1addr_found;
657 659
658 enet1addr_found = eth_getenv_enetaddr("eth1addr", env_enet1addr); 660 enet1addr_found = eth_getenv_enetaddr("eth1addr", env_enet1addr);
659 661
660 uint8_t enet1addr[8]; 662 uint8_t enet1addr[8];
661 int eeprom_mac1_read; 663 int eeprom_mac1_read;
662 664
663 /* Read Ethernet MAC address from EEPROM */ 665 /* Read Ethernet MAC address from EEPROM */
664 eeprom_mac1_read = smarcfimx7_read_mac_address(enet1addr); 666 eeprom_mac1_read = smarcfimx7_read_mac1_address(enet1addr);
665 667
666 /* 668 /*
667 * MAC address not present in the environment 669 * MAC address not present in the environment
668 * try and read the MAC address from EEPROM flash 670 * try and read the MAC address from EEPROM flash
669 * and set it. 671 * and set it.
670 */ 672 */
671 if (!enet1addr_found) { 673 if (!enet1addr_found) {
672 if (eeprom_mac1_read) 674 if (eeprom_mac1_read)
673 /* Set Ethernet MAC address from EEPROM */ 675 /* Set Ethernet MAC address from EEPROM */
674 smarcfimx7_sync_env_enet1addr(enet1addr); 676 smarcfimx7_sync_env_enet1addr(enet1addr);
675 } else { 677 } else {
676 /* 678 /*
677 * MAC address present in environment compare it with 679 * MAC address present in environment compare it with
678 * the MAC address in EEPROM and warn on mismatch 680 * the MAC address in EEPROM and warn on mismatch
679 */ 681 */
680 if (eeprom_mac_read && memcmp(enet1addr, env_enet1addr, 6)) 682 if (eeprom_mac_read && memcmp(enet1addr, env_enet1addr, 6))
681 printf("Warning: 2nd GBE MAC address in EEPROM don't match " 683 printf("Warning: 2nd GBE MAC address in EEPROM don't match "
682 "with the MAC address in the environment\n"); 684 "with the MAC address in the environment\n");
683 printf("Default using 2nd GBE MAC address from environment\n"); 685 printf("Default using 2nd GBE MAC address from environment\n");
684 } 686 }
685 687
686 #endif 688 #endif
687 689
688 int ret; 690 int ret;
689 691
690 setup_iomux_fec(); 692 setup_iomux_fec();
691 693
692 ret = fecmxc_initialize_multi(bis, CONFIG_FEC_ENET_DEV, 694 ret = fecmxc_initialize_multi(bis, CONFIG_FEC_ENET_DEV,
693 CONFIG_FEC_MXC_PHYADDR, IMX_FEC_BASE); 695 CONFIG_FEC_MXC_PHYADDR, IMX_FEC_BASE);
694 if (ret) 696 if (ret)
695 printf("FEC1 MXC: %s:failed\n", __func__); 697 printf("FEC1 MXC: %s:failed\n", __func__);
696 698
697 return ret; 699 return ret;
698 } 700 }
699 701
700 static int setup_fec(int fec_id) 702 static int setup_fec(int fec_id)
701 { 703 {
702 struct iomuxc_gpr_base_regs *const iomuxc_gpr_regs 704 struct iomuxc_gpr_base_regs *const iomuxc_gpr_regs
703 = (struct iomuxc_gpr_base_regs *) IOMUXC_GPR_BASE_ADDR; 705 = (struct iomuxc_gpr_base_regs *) IOMUXC_GPR_BASE_ADDR;
704 706
705 if (0 == fec_id) { 707 if (0 == fec_id) {
706 /* Use 125M anatop REF_CLK1 for ENET1, clear gpr1[13], gpr1[17]*/ 708 /* Use 125M anatop REF_CLK1 for ENET1, clear gpr1[13], gpr1[17]*/
707 clrsetbits_le32(&iomuxc_gpr_regs->gpr[1], 709 clrsetbits_le32(&iomuxc_gpr_regs->gpr[1],
708 (IOMUXC_GPR_GPR1_GPR_ENET1_TX_CLK_SEL_MASK | 710 (IOMUXC_GPR_GPR1_GPR_ENET1_TX_CLK_SEL_MASK |
709 IOMUXC_GPR_GPR1_GPR_ENET1_CLK_DIR_MASK), 0); 711 IOMUXC_GPR_GPR1_GPR_ENET1_CLK_DIR_MASK), 0);
710 } else { 712 } else {
711 /* Use 125M anatop REF_CLK2 for ENET2, clear gpr1[14], gpr1[18]*/ 713 /* Use 125M anatop REF_CLK2 for ENET2, clear gpr1[14], gpr1[18]*/
712 clrsetbits_le32(&iomuxc_gpr_regs->gpr[1], 714 clrsetbits_le32(&iomuxc_gpr_regs->gpr[1],
713 (IOMUXC_GPR_GPR1_GPR_ENET2_TX_CLK_SEL_MASK | 715 (IOMUXC_GPR_GPR1_GPR_ENET2_TX_CLK_SEL_MASK |
714 IOMUXC_GPR_GPR1_GPR_ENET2_CLK_DIR_MASK), 0); 716 IOMUXC_GPR_GPR1_GPR_ENET2_CLK_DIR_MASK), 0);
715 } 717 }
716 718
717 return set_clk_enet(ENET_125MHz); 719 return set_clk_enet(ENET_125MHz);
718 720
719 } 721 }
720 722
721 int board_phy_config(struct phy_device *phydev) 723 int board_phy_config(struct phy_device *phydev)
722 { 724 {
723 /* enable rgmii rxc skew and phy mode select to RGMII copper */ 725 /* enable rgmii rxc skew and phy mode select to RGMII copper */
724 /*phy_write(phydev, MDIO_DEVAD_NONE, 0x1e, 0x21); 726 /*phy_write(phydev, MDIO_DEVAD_NONE, 0x1e, 0x21);
725 phy_write(phydev, MDIO_DEVAD_NONE, 0x1f, 0x7ea8); 727 phy_write(phydev, MDIO_DEVAD_NONE, 0x1f, 0x7ea8);
726 phy_write(phydev, MDIO_DEVAD_NONE, 0x1e, 0x2f); 728 phy_write(phydev, MDIO_DEVAD_NONE, 0x1e, 0x2f);
727 phy_write(phydev, MDIO_DEVAD_NONE, 0x1f, 0x71b7);*/ 729 phy_write(phydev, MDIO_DEVAD_NONE, 0x1f, 0x71b7);*/
728 730
729 if (phydev->drv->config) 731 if (phydev->drv->config)
730 phydev->drv->config(phydev); 732 phydev->drv->config(phydev);
731 return 0; 733 return 0;
732 } 734 }
733 #endif 735 #endif
734 736
735 #ifdef CONFIG_MXC_SPI 737 #ifdef CONFIG_MXC_SPI
736 /* SPI2 (SPINOR) */ 738 /* SPI2 (SPINOR) */
737 static iomux_v3_cfg_t const ecspi2_pads[] = { 739 static iomux_v3_cfg_t const ecspi2_pads[] = {
738 MX7D_PAD_ECSPI2_SCLK__ECSPI2_SCLK | MUX_PAD_CTRL(SPI_PAD_CTRL), 740 MX7D_PAD_ECSPI2_SCLK__ECSPI2_SCLK | MUX_PAD_CTRL(SPI_PAD_CTRL),
739 MX7D_PAD_ECSPI2_MOSI__ECSPI2_MOSI | MUX_PAD_CTRL(SPI_PAD_CTRL), 741 MX7D_PAD_ECSPI2_MOSI__ECSPI2_MOSI | MUX_PAD_CTRL(SPI_PAD_CTRL),
740 MX7D_PAD_ECSPI2_MISO__ECSPI2_MISO | MUX_PAD_CTRL(SPI_PAD_CTRL), 742 MX7D_PAD_ECSPI2_MISO__ECSPI2_MISO | MUX_PAD_CTRL(SPI_PAD_CTRL),
741 MX7D_PAD_ECSPI2_SS0__GPIO4_IO23 | MUX_PAD_CTRL(NO_PAD_CTRL), /*SS0#*/ 743 MX7D_PAD_ECSPI2_SS0__GPIO4_IO23 | MUX_PAD_CTRL(NO_PAD_CTRL), /*SS0#*/
742 }; 744 };
743 745
744 static void setup_spinor(void) 746 static void setup_spinor(void)
745 { 747 {
746 imx_iomux_v3_setup_multiple_pads(ecspi2_pads, ARRAY_SIZE(ecspi2_pads)); 748 imx_iomux_v3_setup_multiple_pads(ecspi2_pads, ARRAY_SIZE(ecspi2_pads));
747 gpio_direction_output(IMX_GPIO_NR(4, 23), 0); 749 gpio_direction_output(IMX_GPIO_NR(4, 23), 0);
748 } 750 }
749 751
750 int board_spi_cs_gpio(unsigned bus, unsigned cs) 752 int board_spi_cs_gpio(unsigned bus, unsigned cs)
751 { 753 {
752 return (bus == 1 && cs == 0) ? (IMX_GPIO_NR(4, 23)) : -1; 754 return (bus == 1 && cs == 0) ? (IMX_GPIO_NR(4, 23)) : -1;
753 } 755 }
754 #endif 756 #endif
755 757
756 #ifdef CONFIG_MXC_EPDC 758 #ifdef CONFIG_MXC_EPDC
757 static iomux_v3_cfg_t const epdc_enable_pads[] = { 759 static iomux_v3_cfg_t const epdc_enable_pads[] = {
758 MX7D_PAD_EPDC_DATA00__EPDC_DATA0 | MUX_PAD_CTRL(EPDC_PAD_CTRL), 760 MX7D_PAD_EPDC_DATA00__EPDC_DATA0 | MUX_PAD_CTRL(EPDC_PAD_CTRL),
759 MX7D_PAD_EPDC_DATA01__EPDC_DATA1 | MUX_PAD_CTRL(EPDC_PAD_CTRL), 761 MX7D_PAD_EPDC_DATA01__EPDC_DATA1 | MUX_PAD_CTRL(EPDC_PAD_CTRL),
760 MX7D_PAD_EPDC_DATA02__EPDC_DATA2 | MUX_PAD_CTRL(EPDC_PAD_CTRL), 762 MX7D_PAD_EPDC_DATA02__EPDC_DATA2 | MUX_PAD_CTRL(EPDC_PAD_CTRL),
761 MX7D_PAD_EPDC_DATA03__EPDC_DATA3 | MUX_PAD_CTRL(EPDC_PAD_CTRL), 763 MX7D_PAD_EPDC_DATA03__EPDC_DATA3 | MUX_PAD_CTRL(EPDC_PAD_CTRL),
762 MX7D_PAD_EPDC_DATA04__EPDC_DATA4 | MUX_PAD_CTRL(EPDC_PAD_CTRL), 764 MX7D_PAD_EPDC_DATA04__EPDC_DATA4 | MUX_PAD_CTRL(EPDC_PAD_CTRL),
763 MX7D_PAD_EPDC_DATA05__EPDC_DATA5 | MUX_PAD_CTRL(EPDC_PAD_CTRL), 765 MX7D_PAD_EPDC_DATA05__EPDC_DATA5 | MUX_PAD_CTRL(EPDC_PAD_CTRL),
764 MX7D_PAD_EPDC_DATA06__EPDC_DATA6 | MUX_PAD_CTRL(EPDC_PAD_CTRL), 766 MX7D_PAD_EPDC_DATA06__EPDC_DATA6 | MUX_PAD_CTRL(EPDC_PAD_CTRL),
765 MX7D_PAD_EPDC_DATA07__EPDC_DATA7 | MUX_PAD_CTRL(EPDC_PAD_CTRL), 767 MX7D_PAD_EPDC_DATA07__EPDC_DATA7 | MUX_PAD_CTRL(EPDC_PAD_CTRL),
766 MX7D_PAD_EPDC_SDCLK__EPDC_SDCLK | MUX_PAD_CTRL(EPDC_PAD_CTRL), 768 MX7D_PAD_EPDC_SDCLK__EPDC_SDCLK | MUX_PAD_CTRL(EPDC_PAD_CTRL),
767 MX7D_PAD_EPDC_SDLE__EPDC_SDLE | MUX_PAD_CTRL(EPDC_PAD_CTRL), 769 MX7D_PAD_EPDC_SDLE__EPDC_SDLE | MUX_PAD_CTRL(EPDC_PAD_CTRL),
768 MX7D_PAD_EPDC_SDOE__EPDC_SDOE | MUX_PAD_CTRL(EPDC_PAD_CTRL), 770 MX7D_PAD_EPDC_SDOE__EPDC_SDOE | MUX_PAD_CTRL(EPDC_PAD_CTRL),
769 MX7D_PAD_EPDC_SDSHR__EPDC_SDSHR | MUX_PAD_CTRL(EPDC_PAD_CTRL), 771 MX7D_PAD_EPDC_SDSHR__EPDC_SDSHR | MUX_PAD_CTRL(EPDC_PAD_CTRL),
770 MX7D_PAD_EPDC_SDCE0__EPDC_SDCE0 | MUX_PAD_CTRL(EPDC_PAD_CTRL), 772 MX7D_PAD_EPDC_SDCE0__EPDC_SDCE0 | MUX_PAD_CTRL(EPDC_PAD_CTRL),
771 MX7D_PAD_EPDC_SDCE1__EPDC_SDCE1 | MUX_PAD_CTRL(EPDC_PAD_CTRL), 773 MX7D_PAD_EPDC_SDCE1__EPDC_SDCE1 | MUX_PAD_CTRL(EPDC_PAD_CTRL),
772 MX7D_PAD_EPDC_GDCLK__EPDC_GDCLK | MUX_PAD_CTRL(EPDC_PAD_CTRL), 774 MX7D_PAD_EPDC_GDCLK__EPDC_GDCLK | MUX_PAD_CTRL(EPDC_PAD_CTRL),
773 MX7D_PAD_EPDC_GDOE__EPDC_GDOE | MUX_PAD_CTRL(EPDC_PAD_CTRL), 775 MX7D_PAD_EPDC_GDOE__EPDC_GDOE | MUX_PAD_CTRL(EPDC_PAD_CTRL),
774 MX7D_PAD_EPDC_GDRL__EPDC_GDRL | MUX_PAD_CTRL(EPDC_PAD_CTRL), 776 MX7D_PAD_EPDC_GDRL__EPDC_GDRL | MUX_PAD_CTRL(EPDC_PAD_CTRL),
775 MX7D_PAD_EPDC_GDSP__EPDC_GDSP | MUX_PAD_CTRL(EPDC_PAD_CTRL), 777 MX7D_PAD_EPDC_GDSP__EPDC_GDSP | MUX_PAD_CTRL(EPDC_PAD_CTRL),
776 MX7D_PAD_EPDC_BDR0__EPDC_BDR0 | MUX_PAD_CTRL(EPDC_PAD_CTRL), 778 MX7D_PAD_EPDC_BDR0__EPDC_BDR0 | MUX_PAD_CTRL(EPDC_PAD_CTRL),
777 MX7D_PAD_EPDC_BDR1__EPDC_BDR1 | MUX_PAD_CTRL(EPDC_PAD_CTRL), 779 MX7D_PAD_EPDC_BDR1__EPDC_BDR1 | MUX_PAD_CTRL(EPDC_PAD_CTRL),
778 }; 780 };
779 781
780 static iomux_v3_cfg_t const epdc_disable_pads[] = { 782 static iomux_v3_cfg_t const epdc_disable_pads[] = {
781 MX7D_PAD_EPDC_DATA00__GPIO2_IO0, 783 MX7D_PAD_EPDC_DATA00__GPIO2_IO0,
782 MX7D_PAD_EPDC_DATA01__GPIO2_IO1, 784 MX7D_PAD_EPDC_DATA01__GPIO2_IO1,
783 MX7D_PAD_EPDC_DATA02__GPIO2_IO2, 785 MX7D_PAD_EPDC_DATA02__GPIO2_IO2,
784 MX7D_PAD_EPDC_DATA03__GPIO2_IO3, 786 MX7D_PAD_EPDC_DATA03__GPIO2_IO3,
785 MX7D_PAD_EPDC_DATA04__GPIO2_IO4, 787 MX7D_PAD_EPDC_DATA04__GPIO2_IO4,
786 MX7D_PAD_EPDC_DATA05__GPIO2_IO5, 788 MX7D_PAD_EPDC_DATA05__GPIO2_IO5,
787 MX7D_PAD_EPDC_DATA06__GPIO2_IO6, 789 MX7D_PAD_EPDC_DATA06__GPIO2_IO6,
788 MX7D_PAD_EPDC_DATA07__GPIO2_IO7, 790 MX7D_PAD_EPDC_DATA07__GPIO2_IO7,
789 MX7D_PAD_EPDC_SDCLK__GPIO2_IO16, 791 MX7D_PAD_EPDC_SDCLK__GPIO2_IO16,
790 MX7D_PAD_EPDC_SDLE__GPIO2_IO17, 792 MX7D_PAD_EPDC_SDLE__GPIO2_IO17,
791 MX7D_PAD_EPDC_SDOE__GPIO2_IO18, 793 MX7D_PAD_EPDC_SDOE__GPIO2_IO18,
792 MX7D_PAD_EPDC_SDSHR__GPIO2_IO19, 794 MX7D_PAD_EPDC_SDSHR__GPIO2_IO19,
793 MX7D_PAD_EPDC_SDCE0__GPIO2_IO20, 795 MX7D_PAD_EPDC_SDCE0__GPIO2_IO20,
794 MX7D_PAD_EPDC_SDCE1__GPIO2_IO21, 796 MX7D_PAD_EPDC_SDCE1__GPIO2_IO21,
795 MX7D_PAD_EPDC_GDCLK__GPIO2_IO24, 797 MX7D_PAD_EPDC_GDCLK__GPIO2_IO24,
796 MX7D_PAD_EPDC_GDOE__GPIO2_IO25, 798 MX7D_PAD_EPDC_GDOE__GPIO2_IO25,
797 MX7D_PAD_EPDC_GDRL__GPIO2_IO26, 799 MX7D_PAD_EPDC_GDRL__GPIO2_IO26,
798 MX7D_PAD_EPDC_GDSP__GPIO2_IO27, 800 MX7D_PAD_EPDC_GDSP__GPIO2_IO27,
799 MX7D_PAD_EPDC_BDR0__GPIO2_IO28, 801 MX7D_PAD_EPDC_BDR0__GPIO2_IO28,
800 MX7D_PAD_EPDC_BDR1__GPIO2_IO29, 802 MX7D_PAD_EPDC_BDR1__GPIO2_IO29,
801 }; 803 };
802 804
803 vidinfo_t panel_info = { 805 vidinfo_t panel_info = {
804 .vl_refresh = 85, 806 .vl_refresh = 85,
805 .vl_col = 1024, 807 .vl_col = 1024,
806 .vl_row = 758, 808 .vl_row = 758,
807 .vl_pixclock = 40000000, 809 .vl_pixclock = 40000000,
808 .vl_left_margin = 12, 810 .vl_left_margin = 12,
809 .vl_right_margin = 76, 811 .vl_right_margin = 76,
810 .vl_upper_margin = 4, 812 .vl_upper_margin = 4,
811 .vl_lower_margin = 5, 813 .vl_lower_margin = 5,
812 .vl_hsync = 12, 814 .vl_hsync = 12,
813 .vl_vsync = 2, 815 .vl_vsync = 2,
814 .vl_sync = 0, 816 .vl_sync = 0,
815 .vl_mode = 0, 817 .vl_mode = 0,
816 .vl_flag = 0, 818 .vl_flag = 0,
817 .vl_bpix = 3, 819 .vl_bpix = 3,
818 .cmap = 0, 820 .cmap = 0,
819 }; 821 };
820 822
821 struct epdc_timing_params panel_timings = { 823 struct epdc_timing_params panel_timings = {
822 .vscan_holdoff = 4, 824 .vscan_holdoff = 4,
823 .sdoed_width = 10, 825 .sdoed_width = 10,
824 .sdoed_delay = 20, 826 .sdoed_delay = 20,
825 .sdoez_width = 10, 827 .sdoez_width = 10,
826 .sdoez_delay = 20, 828 .sdoez_delay = 20,
827 .gdclk_hp_offs = 524, 829 .gdclk_hp_offs = 524,
828 .gdsp_offs = 327, 830 .gdsp_offs = 327,
829 .gdoe_offs = 0, 831 .gdoe_offs = 0,
830 .gdclk_offs = 19, 832 .gdclk_offs = 19,
831 .num_ce = 1, 833 .num_ce = 1,
832 }; 834 };
833 835
834 static void setup_epdc_power(void) 836 static void setup_epdc_power(void)
835 { 837 {
836 /* IOMUX_GPR1: bit30: Disable On-chip RAM EPDC Function */ 838 /* IOMUX_GPR1: bit30: Disable On-chip RAM EPDC Function */
837 struct iomuxc_gpr_base_regs *const iomuxc_gpr_regs 839 struct iomuxc_gpr_base_regs *const iomuxc_gpr_regs
838 = (struct iomuxc_gpr_base_regs *) IOMUXC_GPR_BASE_ADDR; 840 = (struct iomuxc_gpr_base_regs *) IOMUXC_GPR_BASE_ADDR;
839 841
840 clrsetbits_le32(&iomuxc_gpr_regs->gpr[1], 842 clrsetbits_le32(&iomuxc_gpr_regs->gpr[1],
841 IOMUXC_GPR_GPR1_GPR_ENABLE_OCRAM_EPDC_MASK, 0); 843 IOMUXC_GPR_GPR1_GPR_ENABLE_OCRAM_EPDC_MASK, 0);
842 844
843 /* Setup epdc voltage */ 845 /* Setup epdc voltage */
844 846
845 /* EPDC_PWRSTAT - GPIO2[31] for PWR_GOOD status */ 847 /* EPDC_PWRSTAT - GPIO2[31] for PWR_GOOD status */
846 imx_iomux_v3_setup_pad(MX7D_PAD_EPDC_PWR_STAT__GPIO2_IO31 | 848 imx_iomux_v3_setup_pad(MX7D_PAD_EPDC_PWR_STAT__GPIO2_IO31 |
847 MUX_PAD_CTRL(EPDC_PAD_CTRL)); 849 MUX_PAD_CTRL(EPDC_PAD_CTRL));
848 gpio_direction_input(IMX_GPIO_NR(2, 31)); 850 gpio_direction_input(IMX_GPIO_NR(2, 31));
849 851
850 /* EPDC_VCOM0 - GPIO4[14] for VCOM control */ 852 /* EPDC_VCOM0 - GPIO4[14] for VCOM control */
851 imx_iomux_v3_setup_pad(MX7D_PAD_I2C4_SCL__GPIO4_IO14 | 853 imx_iomux_v3_setup_pad(MX7D_PAD_I2C4_SCL__GPIO4_IO14 |
852 MUX_PAD_CTRL(EPDC_PAD_CTRL)); 854 MUX_PAD_CTRL(EPDC_PAD_CTRL));
853 855
854 /* Set as output */ 856 /* Set as output */
855 gpio_direction_output(IMX_GPIO_NR(4, 14), 1); 857 gpio_direction_output(IMX_GPIO_NR(4, 14), 1);
856 858
857 /* EPDC_PWRWAKEUP - GPIO2[23] for EPD PMIC WAKEUP */ 859 /* EPDC_PWRWAKEUP - GPIO2[23] for EPD PMIC WAKEUP */
858 imx_iomux_v3_setup_pad(MX7D_PAD_EPDC_SDCE3__GPIO2_IO23 | 860 imx_iomux_v3_setup_pad(MX7D_PAD_EPDC_SDCE3__GPIO2_IO23 |
859 MUX_PAD_CTRL(EPDC_PAD_CTRL)); 861 MUX_PAD_CTRL(EPDC_PAD_CTRL));
860 /* Set as output */ 862 /* Set as output */
861 gpio_direction_output(IMX_GPIO_NR(2, 23), 1); 863 gpio_direction_output(IMX_GPIO_NR(2, 23), 1);
862 864
863 /* EPDC_PWRCTRL0 - GPIO2[30] for EPD PWR CTL0 */ 865 /* EPDC_PWRCTRL0 - GPIO2[30] for EPD PWR CTL0 */
864 imx_iomux_v3_setup_pad(MX7D_PAD_EPDC_PWR_COM__GPIO2_IO30 | 866 imx_iomux_v3_setup_pad(MX7D_PAD_EPDC_PWR_COM__GPIO2_IO30 |
865 MUX_PAD_CTRL(EPDC_PAD_CTRL)); 867 MUX_PAD_CTRL(EPDC_PAD_CTRL));
866 /* Set as output */ 868 /* Set as output */
867 gpio_direction_output(IMX_GPIO_NR(2, 30), 1); 869 gpio_direction_output(IMX_GPIO_NR(2, 30), 1);
868 } 870 }
869 871
870 static void epdc_enable_pins(void) 872 static void epdc_enable_pins(void)
871 { 873 {
872 /* epdc iomux settings */ 874 /* epdc iomux settings */
873 imx_iomux_v3_setup_multiple_pads(epdc_enable_pads, 875 imx_iomux_v3_setup_multiple_pads(epdc_enable_pads,
874 ARRAY_SIZE(epdc_enable_pads)); 876 ARRAY_SIZE(epdc_enable_pads));
875 } 877 }
876 878
877 static void epdc_disable_pins(void) 879 static void epdc_disable_pins(void)
878 { 880 {
879 /* Configure MUX settings for EPDC pins to GPIO and drive to 0 */ 881 /* Configure MUX settings for EPDC pins to GPIO and drive to 0 */
880 imx_iomux_v3_setup_multiple_pads(epdc_disable_pads, 882 imx_iomux_v3_setup_multiple_pads(epdc_disable_pads,
881 ARRAY_SIZE(epdc_disable_pads)); 883 ARRAY_SIZE(epdc_disable_pads));
882 } 884 }
883 885
884 static void setup_epdc(void) 886 static void setup_epdc(void)
885 { 887 {
886 /*** epdc Maxim PMIC settings ***/ 888 /*** epdc Maxim PMIC settings ***/
887 889
888 /* EPDC_PWRSTAT - GPIO2[31] for PWR_GOOD status */ 890 /* EPDC_PWRSTAT - GPIO2[31] for PWR_GOOD status */
889 imx_iomux_v3_setup_pad(MX7D_PAD_EPDC_PWR_STAT__GPIO2_IO31 | 891 imx_iomux_v3_setup_pad(MX7D_PAD_EPDC_PWR_STAT__GPIO2_IO31 |
890 MUX_PAD_CTRL(EPDC_PAD_CTRL)); 892 MUX_PAD_CTRL(EPDC_PAD_CTRL));
891 893
892 /* EPDC_VCOM0 - GPIO4[14] for VCOM control */ 894 /* EPDC_VCOM0 - GPIO4[14] for VCOM control */
893 imx_iomux_v3_setup_pad(MX7D_PAD_I2C4_SCL__GPIO4_IO14 | 895 imx_iomux_v3_setup_pad(MX7D_PAD_I2C4_SCL__GPIO4_IO14 |
894 MUX_PAD_CTRL(EPDC_PAD_CTRL)); 896 MUX_PAD_CTRL(EPDC_PAD_CTRL));
895 897
896 /* EPDC_PWRWAKEUP - GPIO4[23] for EPD PMIC WAKEUP */ 898 /* EPDC_PWRWAKEUP - GPIO4[23] for EPD PMIC WAKEUP */
897 imx_iomux_v3_setup_pad(MX7D_PAD_EPDC_SDCE3__GPIO2_IO23 | 899 imx_iomux_v3_setup_pad(MX7D_PAD_EPDC_SDCE3__GPIO2_IO23 |
898 MUX_PAD_CTRL(EPDC_PAD_CTRL)); 900 MUX_PAD_CTRL(EPDC_PAD_CTRL));
899 901
900 /* EPDC_PWRCTRL0 - GPIO4[20] for EPD PWR CTL0 */ 902 /* EPDC_PWRCTRL0 - GPIO4[20] for EPD PWR CTL0 */
901 imx_iomux_v3_setup_pad(MX7D_PAD_EPDC_PWR_COM__GPIO2_IO30 | 903 imx_iomux_v3_setup_pad(MX7D_PAD_EPDC_PWR_COM__GPIO2_IO30 |
902 MUX_PAD_CTRL(EPDC_PAD_CTRL)); 904 MUX_PAD_CTRL(EPDC_PAD_CTRL));
903 905
904 /* Set pixel clock rates for EPDC in clock.c */ 906 /* Set pixel clock rates for EPDC in clock.c */
905 907
906 panel_info.epdc_data.wv_modes.mode_init = 0; 908 panel_info.epdc_data.wv_modes.mode_init = 0;
907 panel_info.epdc_data.wv_modes.mode_du = 1; 909 panel_info.epdc_data.wv_modes.mode_du = 1;
908 panel_info.epdc_data.wv_modes.mode_gc4 = 3; 910 panel_info.epdc_data.wv_modes.mode_gc4 = 3;
909 panel_info.epdc_data.wv_modes.mode_gc8 = 2; 911 panel_info.epdc_data.wv_modes.mode_gc8 = 2;
910 panel_info.epdc_data.wv_modes.mode_gc16 = 2; 912 panel_info.epdc_data.wv_modes.mode_gc16 = 2;
911 panel_info.epdc_data.wv_modes.mode_gc32 = 2; 913 panel_info.epdc_data.wv_modes.mode_gc32 = 2;
912 914
913 panel_info.epdc_data.epdc_timings = panel_timings; 915 panel_info.epdc_data.epdc_timings = panel_timings;
914 916
915 setup_epdc_power(); 917 setup_epdc_power();
916 } 918 }
917 919
918 void epdc_power_on(void) 920 void epdc_power_on(void)
919 { 921 {
920 unsigned int reg; 922 unsigned int reg;
921 struct gpio_regs *gpio_regs = (struct gpio_regs *)GPIO2_BASE_ADDR; 923 struct gpio_regs *gpio_regs = (struct gpio_regs *)GPIO2_BASE_ADDR;
922 924
923 /* Set EPD_PWR_CTL0 to high - enable EINK_VDD (3.15) */ 925 /* Set EPD_PWR_CTL0 to high - enable EINK_VDD (3.15) */
924 gpio_set_value(IMX_GPIO_NR(2, 30), 1); 926 gpio_set_value(IMX_GPIO_NR(2, 30), 1);
925 udelay(1000); 927 udelay(1000);
926 928
927 /* Enable epdc signal pin */ 929 /* Enable epdc signal pin */
928 epdc_enable_pins(); 930 epdc_enable_pins();
929 931
930 /* Set PMIC Wakeup to high - enable Display power */ 932 /* Set PMIC Wakeup to high - enable Display power */
931 gpio_set_value(IMX_GPIO_NR(2, 23), 1); 933 gpio_set_value(IMX_GPIO_NR(2, 23), 1);
932 934
933 /* Wait for PWRGOOD == 1 */ 935 /* Wait for PWRGOOD == 1 */
934 while (1) { 936 while (1) {
935 reg = readl(&gpio_regs->gpio_psr); 937 reg = readl(&gpio_regs->gpio_psr);
936 if (!(reg & (1 << 31))) 938 if (!(reg & (1 << 31)))
937 break; 939 break;
938 940
939 udelay(100); 941 udelay(100);
940 } 942 }
941 943
942 /* Enable VCOM */ 944 /* Enable VCOM */
943 gpio_set_value(IMX_GPIO_NR(4, 14), 1); 945 gpio_set_value(IMX_GPIO_NR(4, 14), 1);
944 946
945 udelay(500); 947 udelay(500);
946 } 948 }
947 949
948 void epdc_power_off(void) 950 void epdc_power_off(void)
949 { 951 {
950 /* Set PMIC Wakeup to low - disable Display power */ 952 /* Set PMIC Wakeup to low - disable Display power */
951 gpio_set_value(IMX_GPIO_NR(2, 23), 0); 953 gpio_set_value(IMX_GPIO_NR(2, 23), 0);
952 954
953 /* Disable VCOM */ 955 /* Disable VCOM */
954 gpio_set_value(IMX_GPIO_NR(4, 14), 0); 956 gpio_set_value(IMX_GPIO_NR(4, 14), 0);
955 957
956 epdc_disable_pins(); 958 epdc_disable_pins();
957 959
958 /* Set EPD_PWR_CTL0 to low - disable EINK_VDD (3.15) */ 960 /* Set EPD_PWR_CTL0 to low - disable EINK_VDD (3.15) */
959 gpio_set_value(IMX_GPIO_NR(2, 30), 0); 961 gpio_set_value(IMX_GPIO_NR(2, 30), 0);
960 } 962 }
961 #endif 963 #endif
962 964
963 #ifdef CONFIG_USB_EHCI_MX7 965 #ifdef CONFIG_USB_EHCI_MX7
964 static iomux_v3_cfg_t const usb_otg1_pads[] = { 966 static iomux_v3_cfg_t const usb_otg1_pads[] = {
965 MX7D_PAD_GPIO1_IO12__USB_OTG1_ID | MUX_PAD_CTRL(WEAK_PULLUP), 967 MX7D_PAD_GPIO1_IO12__USB_OTG1_ID | MUX_PAD_CTRL(WEAK_PULLUP),
966 /* OTG1 Power Enable */ 968 /* OTG1 Power Enable */
967 MX7D_PAD_GPIO1_IO05__USB_OTG1_PWR | MUX_PAD_CTRL(NO_PAD_CTRL), 969 MX7D_PAD_GPIO1_IO05__USB_OTG1_PWR | MUX_PAD_CTRL(NO_PAD_CTRL),
968 /* OTG1 Over Current */ 970 /* OTG1 Over Current */
969 MX7D_PAD_GPIO1_IO04__GPIO1_IO4 | MUX_PAD_CTRL(WEAK_PULLUP), 971 MX7D_PAD_GPIO1_IO04__GPIO1_IO4 | MUX_PAD_CTRL(WEAK_PULLUP),
970 972
971 }; 973 };
972 974
973 static iomux_v3_cfg_t const usb_otg2_pads[] = { 975 static iomux_v3_cfg_t const usb_otg2_pads[] = {
974 /* OTG2 Power Enable */ 976 /* OTG2 Power Enable */
975 MX7D_PAD_GPIO1_IO07__USB_OTG2_PWR | MUX_PAD_CTRL(NO_PAD_CTRL), 977 MX7D_PAD_GPIO1_IO07__USB_OTG2_PWR | MUX_PAD_CTRL(NO_PAD_CTRL),
976 /* OTG2 Over Current */ 978 /* OTG2 Over Current */
977 MX7D_PAD_GPIO1_IO06__GPIO1_IO6 | MUX_PAD_CTRL(WEAK_PULLUP), 979 MX7D_PAD_GPIO1_IO06__GPIO1_IO6 | MUX_PAD_CTRL(WEAK_PULLUP),
978 }; 980 };
979 981
980 static void setup_usb(void) 982 static void setup_usb(void)
981 { 983 {
982 imx_iomux_v3_setup_multiple_pads(usb_otg1_pads, 984 imx_iomux_v3_setup_multiple_pads(usb_otg1_pads,
983 ARRAY_SIZE(usb_otg1_pads)); 985 ARRAY_SIZE(usb_otg1_pads));
984 gpio_direction_input(IMX_GPIO_NR(1, 4)); 986 gpio_direction_input(IMX_GPIO_NR(1, 4));
985 987
986 imx_iomux_v3_setup_multiple_pads(usb_otg2_pads, 988 imx_iomux_v3_setup_multiple_pads(usb_otg2_pads,
987 ARRAY_SIZE(usb_otg2_pads)); 989 ARRAY_SIZE(usb_otg2_pads));
988 gpio_direction_input(IMX_GPIO_NR(1, 6)); 990 gpio_direction_input(IMX_GPIO_NR(1, 6));
989 } 991 }
990 992
991 int board_usb_phy_mode(int port) 993 int board_usb_phy_mode(int port)
992 { 994 {
993 if (port == 0) 995 if (port == 0)
994 return usb_phy_mode(port); 996 return usb_phy_mode(port);
995 else 997 else
996 return USB_INIT_HOST; 998 return USB_INIT_HOST;
997 } 999 }
998 #endif 1000 #endif
999 1001
1000 int board_early_init_f(void) 1002 int board_early_init_f(void)
1001 { 1003 {
1002 setup_iomux_reset_out(); 1004 setup_iomux_reset_out();
1003 setup_iomux_uart6(); 1005 setup_iomux_uart6();
1004 setup_iomux_uart2(); 1006 setup_iomux_uart2();
1005 setup_iomux_uart7(); 1007 setup_iomux_uart7();
1006 setup_iomux_uart3(); 1008 setup_iomux_uart3();
1007 1009
1008 #ifdef CONFIG_SYS_I2C_MXC 1010 #ifdef CONFIG_SYS_I2C_MXC
1009 setup_i2c(0, CONFIG_SYS_I2C_SPEED, 0x7f, &i2c_pad_info1); 1011 setup_i2c(0, CONFIG_SYS_I2C_SPEED, 0x7f, &i2c_pad_info1);
1010 setup_i2c(1, CONFIG_SYS_I2C_SPEED, 0x7f, &i2c_pad_info2); 1012 setup_i2c(1, CONFIG_SYS_I2C_SPEED, 0x7f, &i2c_pad_info2);
1011 setup_i2c(2, CONFIG_SYS_I2C_SPEED, 0x7f, &i2c_pad_info3); 1013 setup_i2c(2, CONFIG_SYS_I2C_SPEED, 0x7f, &i2c_pad_info3);
1012 setup_i2c(3, CONFIG_SYS_I2C_SPEED, 0x7f, &i2c_pad_info4); 1014 setup_i2c(3, CONFIG_SYS_I2C_SPEED, 0x7f, &i2c_pad_info4);
1013 #endif 1015 #endif
1014 1016
1015 #ifdef CONFIG_MXC_SPI 1017 #ifdef CONFIG_MXC_SPI
1016 setup_spinor(); 1018 setup_spinor();
1017 #endif 1019 #endif
1018 1020
1019 #ifdef CONFIG_USB_EHCI_MX7 1021 #ifdef CONFIG_USB_EHCI_MX7
1020 setup_usb(); 1022 setup_usb();
1021 #endif 1023 #endif
1022 setup_iomux_spi1(); 1024 setup_iomux_spi1();
1023 setup_iomux_spi3(); 1025 setup_iomux_spi3();
1024 setup_iomux_flexcan1(); 1026 setup_iomux_flexcan1();
1025 setup_iomux_flexcan2(); 1027 setup_iomux_flexcan2();
1026 setup_iomux_gpios(); 1028 setup_iomux_gpios();
1027 setup_iomux_lvds_ch_sel(); 1029 setup_iomux_lvds_ch_sel();
1028 setup_iomux_misc(); 1030 setup_iomux_misc();
1029 1031
1030 return 0; 1032 return 0;
1031 } 1033 }
1032 1034
1033 int board_init(void) 1035 int board_init(void)
1034 { 1036 {
1035 /* address of boot parameters */ 1037 /* address of boot parameters */
1036 gd->bd->bi_boot_params = PHYS_SDRAM + 0x100; 1038 gd->bd->bi_boot_params = PHYS_SDRAM + 0x100;
1037 1039
1038 #ifdef CONFIG_FEC_MXC 1040 #ifdef CONFIG_FEC_MXC
1039 setup_fec(CONFIG_FEC_ENET_DEV); 1041 setup_fec(CONFIG_FEC_ENET_DEV);
1040 #endif 1042 #endif
1041 1043
1042 #ifdef CONFIG_NAND_MXS 1044 #ifdef CONFIG_NAND_MXS
1043 setup_gpmi_nand(); 1045 setup_gpmi_nand();
1044 #endif 1046 #endif
1045 1047
1046 #ifdef CONFIG_FSL_QSPI 1048 #ifdef CONFIG_FSL_QSPI
1047 board_qspi_init(); 1049 board_qspi_init();
1048 #endif 1050 #endif
1049 1051
1050 return 0; 1052 return 0;
1051 } 1053 }
1052 1054
1053 #ifdef CONFIG_CMD_BMODE 1055 #ifdef CONFIG_CMD_BMODE
1054 static const struct boot_mode board_boot_modes[] = { 1056 static const struct boot_mode board_boot_modes[] = {
1055 /* 4 bit bus width */ 1057 /* 4 bit bus width */
1056 {"sd1", MAKE_CFGVAL(0x10, 0x10, 0x00, 0x00)}, 1058 {"sd1", MAKE_CFGVAL(0x10, 0x10, 0x00, 0x00)},
1057 {"emmc", MAKE_CFGVAL(0x10, 0x2a, 0x00, 0x00)}, 1059 {"emmc", MAKE_CFGVAL(0x10, 0x2a, 0x00, 0x00)},
1058 /* TODO: Nand */ 1060 /* TODO: Nand */
1059 {"qspi", MAKE_CFGVAL(0x00, 0x40, 0x00, 0x00)}, 1061 {"qspi", MAKE_CFGVAL(0x00, 0x40, 0x00, 0x00)},
1060 {NULL, 0}, 1062 {NULL, 0},
1061 }; 1063 };
1062 #endif 1064 #endif
1063 1065
1064 #ifdef CONFIG_POWER 1066 #ifdef CONFIG_POWER
1065 #define I2C_PMIC 0 1067 #define I2C_PMIC 0
1066 int power_init_board(void) 1068 int power_init_board(void)
1067 { 1069 {
1068 struct pmic *p; 1070 struct pmic *p;
1069 int ret; 1071 int ret;
1070 unsigned int reg, rev_id; 1072 unsigned int reg, rev_id;
1071 1073
1072 ret = power_pfuze3000_init(I2C_PMIC); 1074 ret = power_pfuze3000_init(I2C_PMIC);
1073 if (ret) 1075 if (ret)
1074 return ret; 1076 return ret;
1075 1077
1076 p = pmic_get("PFUZE3000"); 1078 p = pmic_get("PFUZE3000");
1077 ret = pmic_probe(p); 1079 ret = pmic_probe(p);
1078 if (ret) 1080 if (ret)
1079 return ret; 1081 return ret;
1080 1082
1081 pmic_reg_read(p, PFUZE3000_DEVICEID, &reg); 1083 pmic_reg_read(p, PFUZE3000_DEVICEID, &reg);
1082 pmic_reg_read(p, PFUZE3000_REVID, &rev_id); 1084 pmic_reg_read(p, PFUZE3000_REVID, &rev_id);
1083 printf("PMIC: PFUZE3000 DEV_ID=0x%x REV_ID=0x%x\n", reg, rev_id); 1085 printf("PMIC: PFUZE3000 DEV_ID=0x%x REV_ID=0x%x\n", reg, rev_id);
1084 1086
1085 /* disable Low Power Mode during standby mode */ 1087 /* disable Low Power Mode during standby mode */
1086 pmic_reg_read(p, PFUZE3000_LDOGCTL, &reg); 1088 pmic_reg_read(p, PFUZE3000_LDOGCTL, &reg);
1087 reg |= 0x1; 1089 reg |= 0x1;
1088 pmic_reg_write(p, PFUZE3000_LDOGCTL, reg); 1090 pmic_reg_write(p, PFUZE3000_LDOGCTL, reg);
1089 1091
1090 /* SW1A/1B mode set to APS/APS */ 1092 /* SW1A/1B mode set to APS/APS */
1091 reg = 0x8; 1093 reg = 0x8;
1092 pmic_reg_write(p, PFUZE3000_SW1AMODE, reg); 1094 pmic_reg_write(p, PFUZE3000_SW1AMODE, reg);
1093 pmic_reg_write(p, PFUZE3000_SW1BMODE, reg); 1095 pmic_reg_write(p, PFUZE3000_SW1BMODE, reg);
1094 1096
1095 /* SW1A/1B standby voltage set to 0.975V */ 1097 /* SW1A/1B standby voltage set to 0.975V */
1096 reg = 0xb; 1098 reg = 0xb;
1097 pmic_reg_write(p, PFUZE3000_SW1ASTBY, reg); 1099 pmic_reg_write(p, PFUZE3000_SW1ASTBY, reg);
1098 pmic_reg_write(p, PFUZE3000_SW1BSTBY, reg); 1100 pmic_reg_write(p, PFUZE3000_SW1BSTBY, reg);
1099 1101
1100 /* decrease SW1B normal voltage to 0.975V */ 1102 /* decrease SW1B normal voltage to 0.975V */
1101 pmic_reg_read(p, PFUZE3000_SW1BVOLT, &reg); 1103 pmic_reg_read(p, PFUZE3000_SW1BVOLT, &reg);
1102 reg &= ~0x1f; 1104 reg &= ~0x1f;
1103 reg |= PFUZE3000_SW1AB_SETP(975); 1105 reg |= PFUZE3000_SW1AB_SETP(975);
1104 pmic_reg_write(p, PFUZE3000_SW1BVOLT, reg); 1106 pmic_reg_write(p, PFUZE3000_SW1BVOLT, reg);
1105 1107
1106 return 0; 1108 return 0;
1107 } 1109 }
1108 #endif 1110 #endif
1109 1111
1110 int board_late_init(void) 1112 int board_late_init(void)
1111 { 1113 {
1112 struct wdog_regs *wdog = (struct wdog_regs *)WDOG1_BASE_ADDR; 1114 struct wdog_regs *wdog = (struct wdog_regs *)WDOG1_BASE_ADDR;
1113 #ifdef CONFIG_CMD_BMODE 1115 #ifdef CONFIG_CMD_BMODE
1114 add_board_boot_modes(board_boot_modes); 1116 add_board_boot_modes(board_boot_modes);
1115 #endif 1117 #endif
1116 1118
1117 #ifdef CONFIG_ENV_IS_IN_MMC 1119 #ifdef CONFIG_ENV_IS_IN_MMC
1118 board_late_mmc_env_init(); 1120 board_late_mmc_env_init();
1119 #endif 1121 #endif
1120 1122
1121 imx_iomux_v3_setup_multiple_pads(wdog_pads, ARRAY_SIZE(wdog_pads)); 1123 imx_iomux_v3_setup_multiple_pads(wdog_pads, ARRAY_SIZE(wdog_pads));
1122 1124
1123 set_wdog_reset(wdog); 1125 set_wdog_reset(wdog);
1124 1126
1125 /* Check Board Information */ 1127 /* Check Board Information */
1126 setup_i2c(1, CONFIG_SYS_I2C_SPEED, 1128 setup_i2c(1, CONFIG_SYS_I2C_SPEED,
1127 0x50, &i2c_pad_info2); 1129 0x50, &i2c_pad_info2);
1128 1130
1129 struct smarcfimx7_id header; 1131 struct smarcfimx7_id header;
1130 1132
1131 if (read_eeprom(&header) < 0) 1133 if (read_eeprom(&header) < 0)
1132 puts("Could not get board ID.\n"); 1134 puts("Could not get board ID.\n");
1133 1135
1134 puts("---------Embedian SMARC-FiMX7------------\n"); 1136 puts("---------Embedian SMARC-FiMX7------------\n");
1135 printf("Board ID: %.*s\n", 1137 printf("Board ID: %.*s\n",
1136 sizeof(header.name), header.name); 1138 sizeof(header.name), header.name);
1137 printf("Board Revision: %.*s\n", 1139 printf("Board Revision: %.*s\n",
1138 sizeof(header.version), header.version); 1140 sizeof(header.version), header.version);
1139 printf("Board Serial#: %.*s\n", 1141 printf("Board Serial#: %.*s\n",
1140 sizeof(header.serial), header.serial); 1142 sizeof(header.serial), header.serial);
1141 puts("-----------------------------------------\n"); 1143 puts("-----------------------------------------\n");
1142 1144
1143 /* SMARC BOOT_SEL*/ 1145 /* SMARC BOOT_SEL*/
1144 if ((gpio_get_value(IMX_GPIO_NR(5, 15)) == 0)&&(gpio_get_value(IMX_GPIO_NR(5, 16)) == 0)&&(gpio_get_value(IMX_GPIO_NR(5, 17)) == 0)) { 1146 if ((gpio_get_value(IMX_GPIO_NR(5, 15)) == 0)&&(gpio_get_value(IMX_GPIO_NR(5, 16)) == 0)&&(gpio_get_value(IMX_GPIO_NR(5, 17)) == 0)) {
1145 puts("BOOT_SEL Detected: OFF OFF OFF, unsupported boot up device: SATA...\n"); 1147 puts("BOOT_SEL Detected: OFF OFF OFF, unsupported boot up device: SATA...\n");
1146 hang(); 1148 hang();
1147 } else if ((gpio_get_value(IMX_GPIO_NR(5, 15)) == 0)&&(gpio_get_value(IMX_GPIO_NR(5, 16)) == 0)&&(gpio_get_value(IMX_GPIO_NR(5, 17)) == 1)) { 1149 } else if ((gpio_get_value(IMX_GPIO_NR(5, 15)) == 0)&&(gpio_get_value(IMX_GPIO_NR(5, 16)) == 0)&&(gpio_get_value(IMX_GPIO_NR(5, 17)) == 1)) {
1148 puts("BOOT_SEL Detected: OFF OFF ON, unsupported boot up device: NAND...\n"); 1150 puts("BOOT_SEL Detected: OFF OFF ON, unsupported boot up device: NAND...\n");
1149 hang(); 1151 hang();
1150 } else if ((gpio_get_value(IMX_GPIO_NR(5, 15)) == 0)&&(gpio_get_value(IMX_GPIO_NR(5, 16)) == 1)&&(gpio_get_value(IMX_GPIO_NR(5, 17)) == 0)) { 1152 } else if ((gpio_get_value(IMX_GPIO_NR(5, 15)) == 0)&&(gpio_get_value(IMX_GPIO_NR(5, 16)) == 1)&&(gpio_get_value(IMX_GPIO_NR(5, 17)) == 0)) {
1151 puts("BOOT_SEL Detected: OFF ON OFF, unsupported boot up device: Carrier eSPI...\n"); 1153 puts("BOOT_SEL Detected: OFF ON OFF, unsupported boot up device: Carrier eSPI...\n");
1152 hang(); 1154 hang();
1153 } else if ((gpio_get_value(IMX_GPIO_NR(5, 15)) == 1)&&(gpio_get_value(IMX_GPIO_NR(5, 16)) == 0)&&(gpio_get_value(IMX_GPIO_NR(5, 17)) == 0)) { 1155 } else if ((gpio_get_value(IMX_GPIO_NR(5, 15)) == 1)&&(gpio_get_value(IMX_GPIO_NR(5, 16)) == 0)&&(gpio_get_value(IMX_GPIO_NR(5, 17)) == 0)) {
1154 puts("BOOT_SEL Detected: ON OFF OFF, Load zImage from Carrier SD Card...\n"); 1156 puts("BOOT_SEL Detected: ON OFF OFF, Load zImage from Carrier SD Card...\n");
1155 setenv_ulong("mmcdev", 0); 1157 setenv_ulong("mmcdev", 0);
1156 setenv("bootcmd", "mmc rescan; run loadbootenv; run importbootenv; run uenvcmd; run loadzimage; run loadfdt; run mmcboot;"); 1158 setenv("bootcmd", "mmc rescan; run loadbootenv; run importbootenv; run uenvcmd; run loadzimage; run loadfdt; run mmcboot;");
1157 } else if ((gpio_get_value(IMX_GPIO_NR(5, 15)) == 0)&&(gpio_get_value(IMX_GPIO_NR(5, 16)) == 1)&&(gpio_get_value(IMX_GPIO_NR(5, 17)) == 1)) { 1159 } else if ((gpio_get_value(IMX_GPIO_NR(5, 15)) == 0)&&(gpio_get_value(IMX_GPIO_NR(5, 16)) == 1)&&(gpio_get_value(IMX_GPIO_NR(5, 17)) == 1)) {
1158 puts("BOOT_SEL Detected: OFF ON ON, Load zImage from Module eMMC Flash...\n"); 1160 puts("BOOT_SEL Detected: OFF ON ON, Load zImage from Module eMMC Flash...\n");
1159 setenv_ulong("mmcdev", 1); 1161 setenv_ulong("mmcdev", 1);
1160 setenv("bootcmd", "mmc rescan; run loadbootenv; run importbootenv; run uenvcmd; run loadzimage; run loadfdt; run mmcboot;"); 1162 setenv("bootcmd", "mmc rescan; run loadbootenv; run importbootenv; run uenvcmd; run loadzimage; run loadfdt; run mmcboot;");
1161 } else if ((gpio_get_value(IMX_GPIO_NR(5, 15)) == 1)&&(gpio_get_value(IMX_GPIO_NR(5, 16)) == 0)&&(gpio_get_value(IMX_GPIO_NR(5, 17)) == 1)) { 1163 } else if ((gpio_get_value(IMX_GPIO_NR(5, 15)) == 1)&&(gpio_get_value(IMX_GPIO_NR(5, 16)) == 0)&&(gpio_get_value(IMX_GPIO_NR(5, 17)) == 1)) {
1162 puts("BOOT_SEL Detected: ON OFF ON, Load zImage from GBE...\n"); 1164 puts("BOOT_SEL Detected: ON OFF ON, Load zImage from GBE...\n");
1163 setenv("bootcmd", "run netboot;"); 1165 setenv("bootcmd", "run netboot;");
1164 } else if ((gpio_get_value(IMX_GPIO_NR(5, 15)) == 1)&&(gpio_get_value(IMX_GPIO_NR(5, 16)) == 1)&&(gpio_get_value(IMX_GPIO_NR(5, 17)) == 0)) { 1166 } else if ((gpio_get_value(IMX_GPIO_NR(5, 15)) == 1)&&(gpio_get_value(IMX_GPIO_NR(5, 16)) == 1)&&(gpio_get_value(IMX_GPIO_NR(5, 17)) == 0)) {
1165 puts("BOOT_SEL Detected: OFF ON OFF, unsupported boot up device: Carrier SPI...\n"); 1167 puts("BOOT_SEL Detected: OFF ON OFF, unsupported boot up device: Carrier SPI...\n");
1166 hang(); 1168 hang();
1167 } else if ((gpio_get_value(IMX_GPIO_NR(5, 15)) == 1)&&(gpio_get_value(IMX_GPIO_NR(5, 16)) == 1)&&(gpio_get_value(IMX_GPIO_NR(5, 17)) == 1)) { 1169 } else if ((gpio_get_value(IMX_GPIO_NR(5, 15)) == 1)&&(gpio_get_value(IMX_GPIO_NR(5, 16)) == 1)&&(gpio_get_value(IMX_GPIO_NR(5, 17)) == 1)) {
1168 puts("BOOT_SEL Detected: ON ON ON, MOdule SPI Boot up is Default, Load zImage from Module eMMC...\n"); 1170 puts("BOOT_SEL Detected: ON ON ON, MOdule SPI Boot up is Default, Load zImage from Module eMMC...\n");
1169 setenv_ulong("mmcdev", 1); 1171 setenv_ulong("mmcdev", 1);
1170 setenv("bootcmd", "mmc rescan; run loadbootenv; run importbootenv; run uenvcmd; run loadzimage; run loadfdt; run mmcboot;"); 1172 setenv("bootcmd", "mmc rescan; run loadbootenv; run importbootenv; run uenvcmd; run loadzimage; run loadfdt; run mmcboot;");
1171 } else { 1173 } else {
1172 puts("unsupported boot devices\n"); 1174 puts("unsupported boot devices\n");
1173 hang(); 1175 hang();
1174 } 1176 }
1175 1177
1176 return 0; 1178 return 0;
1177 } 1179 }
1178 1180
1179 #ifdef CONFIG_FSL_FASTBOOT 1181 #ifdef CONFIG_FSL_FASTBOOT
1180 void board_fastboot_setup(void) 1182 void board_fastboot_setup(void)
1181 { 1183 {
1182 switch (get_boot_device()) { 1184 switch (get_boot_device()) {
1183 #if defined(CONFIG_FASTBOOT_STORAGE_MMC) 1185 #if defined(CONFIG_FASTBOOT_STORAGE_MMC)
1184 case SD1_BOOT: 1186 case SD1_BOOT:
1185 case MMC1_BOOT: 1187 case MMC1_BOOT:
1186 if (!getenv("fastboot_dev")) 1188 if (!getenv("fastboot_dev"))
1187 setenv("fastboot_dev", "mmc0"); 1189 setenv("fastboot_dev", "mmc0");
1188 if (!getenv("bootcmd")) 1190 if (!getenv("bootcmd"))
1189 setenv("bootcmd", "boota mmc0"); 1191 setenv("bootcmd", "boota mmc0");
1190 break; 1192 break;
1191 case SD3_BOOT: 1193 case SD3_BOOT:
1192 case MMC3_BOOT: 1194 case MMC3_BOOT:
1193 if (!getenv("fastboot_dev")) 1195 if (!getenv("fastboot_dev"))
1194 setenv("fastboot_dev", "mmc1"); 1196 setenv("fastboot_dev", "mmc1");
1195 if (!getenv("bootcmd")) 1197 if (!getenv("bootcmd"))
1196 setenv("bootcmd", "boota mmc1"); 1198 setenv("bootcmd", "boota mmc1");
1197 break; 1199 break;
1198 #endif /*CONFIG_FASTBOOT_STORAGE_MMC*/ 1200 #endif /*CONFIG_FASTBOOT_STORAGE_MMC*/
1199 default: 1201 default:
1200 printf("unsupported boot devices\n"); 1202 printf("unsupported boot devices\n");
1201 break; 1203 break;
1202 } 1204 }
1203 } 1205 }
1204 1206
1205 #ifdef CONFIG_ANDROID_RECOVERY 1207 #ifdef CONFIG_ANDROID_RECOVERY
1206 1208
1207 /* Use LID# for recovery key */ 1209 /* Use LID# for recovery key */
1208 #define GPIO_VOL_DN_KEY IMX_GPIO_NR(5, 10) 1210 #define GPIO_VOL_DN_KEY IMX_GPIO_NR(5, 10)
1209 iomux_v3_cfg_t const recovery_key_pads[] = { 1211 iomux_v3_cfg_t const recovery_key_pads[] = {
1210 (MX7D_PAD_SD2_WP__GPIO5_IO10 | MUX_PAD_CTRL(BUTTON_PAD_CTRL)), 1212 (MX7D_PAD_SD2_WP__GPIO5_IO10 | MUX_PAD_CTRL(BUTTON_PAD_CTRL)),
1211 }; 1213 };
1212 1214
1213 int check_recovery_cmd_file(void) 1215 int check_recovery_cmd_file(void)
1214 { 1216 {
1215 int button_pressed = 0; 1217 int button_pressed = 0;
1216 int recovery_mode = 0; 1218 int recovery_mode = 0;
1217 1219
1218 recovery_mode = recovery_check_and_clean_flag(); 1220 recovery_mode = recovery_check_and_clean_flag();
1219 1221
1220 /* Check Recovery Combo Button press or not. */ 1222 /* Check Recovery Combo Button press or not. */
1221 imx_iomux_v3_setup_multiple_pads(recovery_key_pads, 1223 imx_iomux_v3_setup_multiple_pads(recovery_key_pads,
1222 ARRAY_SIZE(recovery_key_pads)); 1224 ARRAY_SIZE(recovery_key_pads));
1223 1225
1224 gpio_direction_input(GPIO_VOL_DN_KEY); 1226 gpio_direction_input(GPIO_VOL_DN_KEY);
1225 1227
1226 if (gpio_get_value(GPIO_VOL_DN_KEY) == 0) { /* VOL_DN key is low assert */ 1228 if (gpio_get_value(GPIO_VOL_DN_KEY) == 0) { /* VOL_DN key is low assert */
1227 button_pressed = 1; 1229 button_pressed = 1;
1228 printf("Recovery key pressed\n"); 1230 printf("Recovery key pressed\n");
1229 } 1231 }
1230 1232
1231 return recovery_mode || button_pressed; 1233 return recovery_mode || button_pressed;
1232 } 1234 }
1233 1235
1234 void board_recovery_setup(void) 1236 void board_recovery_setup(void)
1235 { 1237 {
1236 int bootdev = get_boot_device(); 1238 int bootdev = get_boot_device();
1237 1239
1238 switch (bootdev) { 1240 switch (bootdev) {
1239 #if defined(CONFIG_FASTBOOT_STORAGE_MMC) 1241 #if defined(CONFIG_FASTBOOT_STORAGE_MMC)
1240 case SD1_BOOT: 1242 case SD1_BOOT:
1241 case MMC1_BOOT: 1243 case MMC1_BOOT:
1242 if (!getenv("bootcmd_android_recovery")) 1244 if (!getenv("bootcmd_android_recovery"))
1243 setenv("bootcmd_android_recovery", "boota mmc0 recovery"); 1245 setenv("bootcmd_android_recovery", "boota mmc0 recovery");
1244 break; 1246 break;
1245 case SD3_BOOT: 1247 case SD3_BOOT:
1246 case MMC3_BOOT: 1248 case MMC3_BOOT:
1247 if (!getenv("bootcmd_android_recovery")) 1249 if (!getenv("bootcmd_android_recovery"))
1248 setenv("bootcmd_android_recovery", "boota mmc1 recovery"); 1250 setenv("bootcmd_android_recovery", "boota mmc1 recovery");
1249 break; 1251 break;
1250 #endif /*CONFIG_FASTBOOT_STORAGE_MMC*/ 1252 #endif /*CONFIG_FASTBOOT_STORAGE_MMC*/
1251 default: 1253 default:
1252 printf("Unsupported bootup device for recovery: dev: %d\n", 1254 printf("Unsupported bootup device for recovery: dev: %d\n",
1253 bootdev); 1255 bootdev);
1254 return; 1256 return;
1255 } 1257 }
1256 1258
1257 printf("setup env for recovery..\n"); 1259 printf("setup env for recovery..\n");
1258 setenv("bootcmd", "run bootcmd_android_recovery"); 1260 setenv("bootcmd", "run bootcmd_android_recovery");
1259 } 1261 }
1260 #endif /*CONFIG_ANDROID_RECOVERY*/ 1262 #endif /*CONFIG_ANDROID_RECOVERY*/
1261 1263
1262 #endif /*CONFIG_FSL_FASTBOOT*/ 1264 #endif /*CONFIG_FSL_FASTBOOT*/
board/embedian/smarcfimx7/smarcfimx7.h
1 /* 1 /*
2 * smarcfimx7.h 2 * smarcfimx7.h
3 * 3 *
4 * Embedian SMARC-FiMX7 boards information header 4 * Embedian SMARC-FiMX7 boards information header
5 * 5 *
6 * Copyright (C) 2017, Embedian, Inc. - http://www.embedian.com/ 6 * Copyright (C) 2017, Embedian, Inc. - http://www.embedian.com/
7 * 7 *
8 * SPDX-License-Identifier: GPL-2.0+ 8 * SPDX-License-Identifier: GPL-2.0+
9 */ 9 */
10 10
11 #ifndef _SMARCFIMX7_H_ 11 #ifndef _SMARCFIMX7_H_
12 #define _SMARCFIMX7_H_ 12 #define _SMARCFIMX7_H_
13 /* 13 /*
14 * SMARC-FiMX7 Config held in module eeprom device. 14 * SMARC-FiMX7 Config held in module eeprom device.
15 * 15 *
16 * Header Format 16 * Header Format
17 * 17 *
18 * Name Size Contents 18 * Name Size Contents
19 * (Bytes) 19 * (Bytes)
20 *------------------------------------------------------------- 20 *-------------------------------------------------------------
21 * Header 4 0xAA, 0x55, 0x33, 0xEE 21 * Header 4 0xAA, 0x55, 0x33, 0xEE
22 * 22 *
23 * Board Name 8 Name for board in ASCII. 23 * Board Name 8 Name for board in ASCII.
24 * example "SMCMX7D1" = "SMARC-FiMX7 24 * example "SMCMX7D1" = "SMARC-FiMX7
25 * Dual Core and 1GB DDR3 memory". "SMCMX7S0" = 25 * Dual Core and 1GB DDR3 memory". "SMCMX7S0" =
26 * SMARC-FiMX7 Computer on Module with solo Core 26 * SMARC-FiMX7 Computer on Module with solo Core
27 * and 512MB DDR3L Configuration 27 * and 512MB DDR3L Configuration
28 * 28 *
29 * Version 4 Hardware version code for board in 29 * Version 4 Hardware version code for board in
30 * in ASCII. "00A0" = rev.0A 30 * in ASCII. "00A0" = rev.0A
31 * Serial Number 12 Serial number of the board. This is a 12 31 * Serial Number 12 Serial number of the board. This is a 12
32 * character string which is: WWYYMSkknnnn, where 32 * character string which is: WWYYMSkknnnn, where
33 * WW = 2 digit week of the year of production 33 * WW = 2 digit week of the year of production
34 * YY = 2 digit year of production 34 * YY = 2 digit year of production
35 * kk = 2 digit module variants 35 * kk = 2 digit module variants
36 * nnnn = incrementing board number 36 * nnnn = incrementing board number
37 * Configuration Option 32 Codes to show the configuration 37 * Configuration Option 32 Codes to show the configuration
38 * setup on this board. 38 * setup on this board.
39 * MAC Address (LAN1) MAC Address for FEC controller 39 * MAC Address (LAN1) MAC Address for FEC controller
40 * MAC Address (LAN2, if any) MAC Address for 2nd LAN (if any) 40 * MAC Address (LAN2, if any) MAC Address for 2nd LAN (if any)
41 * Available 32700 Available space for other non-volatile 41 * Available 32700 Available space for other non-volatile
42 * codes/data 42 * codes/data
43 */ 43 */
44 44
45 #define HDR_NO_OF_MAC_ADDR 3 45 #define HDR_NO_OF_MAC_ADDR 3
46 #define HDR_ETH_ALEN 6 46 #define HDR_ETH_ALEN 6
47 #define HDR_NAME_LEN 8 47 #define HDR_NAME_LEN 8
48 48
49 struct smarcfimx7_id { 49 struct smarcfimx7_id {
50 unsigned int magic; 50 unsigned int magic;
51 char name[HDR_NAME_LEN]; 51 char name[HDR_NAME_LEN];
52 char version[4]; 52 char version[4];
53 char serial[12]; 53 char serial[12];
54 char config[32]; 54 char config[32];
55 char mac_addr[HDR_NO_OF_MAC_ADDR][HDR_ETH_ALEN]; 55 char mac_addr[HDR_NO_OF_MAC_ADDR][HDR_ETH_ALEN];
56 }; 56 };
57 57
58 static inline int board_is_smcmx7s0(struct smarcfimx7_id *header) 58 static inline int board_is_smcmx7s0(struct smarcfimx7_id *header)
59 { 59 {
60 return !strncmp(header->name, "SMCMX7S0", HDR_NAME_LEN); 60 return !strncmp(header->name, "SMCMX7S0", HDR_NAME_LEN);
61 } 61 }
62 62
63 static inline int board_is_smcmx7d1(struct smarcfimx7_id *header) 63 static inline int board_is_smcmx7d1(struct smarcfimx7_id *header)
64 { 64 {
65 return !strncmp(header->name, "SMCMX7D1", HDR_NAME_LEN); 65 return !strncmp(header->name, "SMCMX7D1", HDR_NAME_LEN);
66 } 66 }
67 67
68 /* 68 /*
69 * Read ethernet MAC address from EEPROM for SMARC-FiMX7 compatible boards. 69 * Read ethernet MAC address from EEPROM for SMARC-FiMX7 compatible boards.
70 * Returns 1 if found, 0 otherwise. 70 * Returns 1 if found, 0 otherwise.
71 */ 71 */
72 int smarcfimx7_read_mac_address(uint8_t *buf) 72 int smarcfimx7_read_mac_address(uint8_t *buf)
73 { 73 {
74 #ifdef CONFIG_SYS_I2C_EEPROM_ADDR 74 #ifdef CONFIG_SYS_I2C_EEPROM_ADDR
75 /* Read MAC address. */ 75 /* Read MAC address. */
76 i2c_set_bus_num(1); 76 i2c_set_bus_num(1);
77 if (i2c_read(CONFIG_SYS_I2C_EEPROM_ADDR, 0x3C, 77 if (i2c_read(CONFIG_SYS_I2C_EEPROM_ADDR, 0x3C,
78 CONFIG_SYS_I2C_EEPROM_ADDR_LEN, (uint8_t *) &buf[0], 6)) 78 CONFIG_SYS_I2C_EEPROM_ADDR_LEN, (uint8_t *) &buf[0], 6))
79 goto i2cerr; 79 goto i2cerr;
80 80
81 /* Check that MAC address is valid. */ 81 /* Check that MAC address is valid. */
82 if (!is_valid_ethaddr(buf)) 82 if (!is_valid_ethaddr(buf))
83 goto err; 83 goto err;
84 84
85 return 1; /* Found */ 85 return 1; /* Found */
86 86
87 i2cerr: 87 i2cerr:
88 printf("Read from EEPROM @ 0x%02x failed\n", 88 printf("Read from EEPROM @ 0x%02x failed\n",
89 CONFIG_SYS_I2C_EEPROM_ADDR); 89 CONFIG_SYS_I2C_EEPROM_ADDR);
90 err: 90 err:
91 #endif /* CONFIG_SYS_I2C_EEPROM_ADDR */ 91 #endif /* CONFIG_SYS_I2C_EEPROM_ADDR */
92 92
93 return 0; 93 return 0;
94 } 94 }
95 95
96 /* 96 /*
97 * If there is no MAC address in the environment, then it will be initialized 97 * If there is no MAC address in the environment, then it will be initialized
98 * (silently) from the value in the EEPROM. 98 * (silently) from the value in the EEPROM.
99 */ 99 */
100 void smarcfimx7_sync_env_enetaddr(uint8_t *rom_enetaddr) 100 void smarcfimx7_sync_env_enetaddr(uint8_t *rom_enetaddr)
101 { 101 {
102 i2c_set_bus_num(1); 102 i2c_set_bus_num(1);
103 uint8_t env_enetaddr[6]; 103 uint8_t env_enetaddr[6];
104 int ret; 104 int ret;
105 105
106 ret = eth_getenv_enetaddr_by_index("eth", 0, env_enetaddr); 106 ret = eth_getenv_enetaddr_by_index("eth", 0, env_enetaddr);
107 if (!ret) { 107 if (!ret) {
108 /* 108 /*
109 * There is no MAC address in the environment, so we 109 * There is no MAC address in the environment, so we
110 * initialize it from the value in the EEPROM. 110 * initialize it from the value in the EEPROM.
111 */ 111 */
112 debug("### Setting environment from EEPROM MAC address = " 112 debug("### Setting environment from EEPROM MAC address = "
113 "\"%pM\"\n", 113 "\"%pM\"\n",
114 env_enetaddr); 114 env_enetaddr);
115 ret = !eth_setenv_enetaddr("ethaddr", rom_enetaddr); 115 ret = !eth_setenv_enetaddr("ethaddr", rom_enetaddr);
116 } 116 }
117 if (!ret) 117 if (!ret)
118 printf("Failed to set mac address from EEPROM: %d\n", ret); 118 printf("Failed to set mac address from EEPROM: %d\n", ret);
119 } 119 }
120 120
121 int smarcfimx7_read_mac_address1(uint8_t *buf) 121 int smarcfimx7_read_mac1_address(uint8_t *buf)
122 { 122 {
123 #ifdef CONFIG_SYS_I2C_EEPROM_ADDR 123 #ifdef CONFIG_SYS_I2C_EEPROM_ADDR
124 /* Read MAC address. */ 124 /* Read MAC address. */
125 i2c_set_bus_num(1); 125 i2c_set_bus_num(1);
126 if (i2c_read(CONFIG_SYS_I2C_EEPROM_ADDR, 0x42, 126 if (i2c_read(CONFIG_SYS_I2C_EEPROM_ADDR, 0x42,
127 CONFIG_SYS_I2C_EEPROM_ADDR_LEN, (uint8_t *) &buf[0], 6)) 127 CONFIG_SYS_I2C_EEPROM_ADDR_LEN, (uint8_t *) &buf[0], 6))
128 goto i2cerr; 128 goto i2cerr;
129 129
130 /* Check that MAC address is valid. */ 130 /* Check that MAC address is valid. */
131 if (!is_valid_ethaddr(buf)) 131 if (!is_valid_ethaddr(buf))
132 goto err; 132 goto err;
133 133
134 return 1; /* Found */ 134 return 1; /* Found */
135 135
136 i2cerr: 136 i2cerr:
137 printf("Read 2nd GBE MAC address from EEPROM @ 0x%02x failed\n", 137 printf("Read 2nd GBE MAC address from EEPROM @ 0x%02x failed\n",
138 CONFIG_SYS_I2C_EEPROM_ADDR); 138 CONFIG_SYS_I2C_EEPROM_ADDR);
139 err: 139 err:
140 #endif /* CONFIG_SYS_I2C_EEPROM_ADDR */ 140 #endif /* CONFIG_SYS_I2C_EEPROM_ADDR */
141 141
142 return 0; 142 return 0;
143 } 143 }
144 144
145 /* 145 /*
146 * If there is no MAC address in the environment, then it will be initialized 146 * If there is no MAC address in the environment, then it will be initialized
147 * (silently) from the value in the EEPROM. 147 * (silently) from the value in the EEPROM.
148 */ 148 */
149 void smarcfimx7_sync_env_enet1addr(uint8_t *rom_enet1addr) 149 void smarcfimx7_sync_env_enet1addr(uint8_t *rom_enet1addr)
150 { 150 {
151 i2c_set_bus_num(1); 151 i2c_set_bus_num(1);
152 uint8_t env_enet1addr[6]; 152 uint8_t env_enet1addr[6];
153 int ret; 153 int ret;
154 154
155 ret = eth_getenv_enetaddr_by_index("eth1", 0, env_enet1addr); 155 ret = eth_getenv_enetaddr_by_index("eth", 1, env_enet1addr);
156 if (!ret) { 156 if (!ret) {
157 /* 157 /*
158 * There is no MAC address in the environment, so we 158 * There is no MAC address in the environment, so we
159 * initialize it from the value in the EEPROM. 159 * initialize it from the value in the EEPROM.
160 */ 160 */
161 debug("### Setting environment from EEPROM MAC address = " 161 debug("### Setting environment from EEPROM MAC address = "
162 "\"%pM\"\n", 162 "\"%pM\"\n",
163 env_enet1addr); 163 env_enet1addr);
164 ret = !eth_setenv_enetaddr("eth1addr", rom_enet1addr); 164 ret = !eth_setenv_enetaddr("eth1addr", rom_enet1addr);
165 } 165 }
166 if (!ret) 166 if (!ret)
167 printf("Failed to set 2nd GBE mac address from EEPROM: %d\n", ret); 167 printf("Failed to set 2nd GBE mac address from EEPROM: %d\n", ret);
168 } 168 }
169 169
170 #endif 170 #endif
171 171
drivers/video/mxsfb.c
1 /* 1 /*
2 * Freescale i.MX23/i.MX28 LCDIF driver 2 * Freescale i.MX23/i.MX28 LCDIF driver
3 * 3 *
4 * Copyright (C) 2011-2013 Marek Vasut <marex@denx.de> 4 * Copyright (C) 2011-2013 Marek Vasut <marex@denx.de>
5 * 5 *
6 * Copyright (C) 2014-2016 Freescale Semiconductor, Inc. 6 * Copyright (C) 2014-2016 Freescale Semiconductor, Inc.
7 * 7 *
8 * SPDX-License-Identifier: GPL-2.0+ 8 * SPDX-License-Identifier: GPL-2.0+
9 */ 9 */
10 #include <common.h> 10 #include <common.h>
11 #include <malloc.h> 11 #include <malloc.h>
12 #include <video_fb.h> 12 #include <video_fb.h>
13 13
14 #include <asm/arch/imx-regs.h> 14 #include <asm/arch/imx-regs.h>
15 #include <asm/arch/clock.h> 15 #include <asm/arch/clock.h>
16 #include <asm/arch/sys_proto.h> 16 #include <asm/arch/sys_proto.h>
17 #include <asm/errno.h> 17 #include <asm/errno.h>
18 #include <asm/io.h> 18 #include <asm/io.h>
19 19
20 #include <asm/imx-common/dma.h> 20 #include <asm/imx-common/dma.h>
21 21
22 #include "videomodes.h" 22 #include "videomodes.h"
23 #include <linux/string.h> 23 #include <linux/string.h>
24 #include <linux/list.h> 24 #include <linux/list.h>
25 #include <linux/fb.h> 25 #include <linux/fb.h>
26 #include <mxsfb.h> 26 #include <mxsfb.h>
27 27
28 #ifdef CONFIG_VIDEO_GIS 28 #ifdef CONFIG_VIDEO_GIS
29 #include <gis.h> 29 #include <gis.h>
30 #endif 30 #endif
31 31
32 #define PS2KHZ(ps) (1000000000UL / (ps)) 32 #define PS2KHZ(ps) (1000000000UL / (ps))
33 33
34 static GraphicDevice panel; 34 static GraphicDevice panel;
35 struct mxs_dma_desc desc; 35 struct mxs_dma_desc desc;
36 36
37 /** 37 /**
38 * mxsfb_system_setup() - Fine-tune LCDIF configuration 38 * mxsfb_system_setup() - Fine-tune LCDIF configuration
39 * 39 *
40 * This function is used to adjust the LCDIF configuration. This is usually 40 * This function is used to adjust the LCDIF configuration. This is usually
41 * needed when driving the controller in System-Mode to operate an 8080 or 41 * needed when driving the controller in System-Mode to operate an 8080 or
42 * 6800 connected SmartLCD. 42 * 6800 connected SmartLCD.
43 */ 43 */
44 __weak void mxsfb_system_setup(void) 44 __weak void mxsfb_system_setup(void)
45 { 45 {
46 } 46 }
47 47
48 static int setup; 48 static int setup;
49 static struct fb_videomode fbmode; 49 static struct fb_videomode fbmode;
50 static int depth; 50 static int depth;
51 51
52 int mxs_lcd_panel_setup(struct fb_videomode mode, int bpp, 52 int mxs_lcd_panel_setup(struct fb_videomode mode, int bpp,
53 uint32_t base_addr) 53 uint32_t base_addr)
54 { 54 {
55 fbmode = mode; 55 fbmode = mode;
56 depth = bpp; 56 depth = bpp;
57 panel.isaBase = base_addr; 57 panel.isaBase = base_addr;
58 58
59 setup = 1; 59 setup = 1;
60 60
61 return 0; 61 return 0;
62 } 62 }
63 63
64 void mxs_lcd_get_panel(struct display_panel *dispanel) 64 void mxs_lcd_get_panel(struct display_panel *dispanel)
65 { 65 {
66 dispanel->width = fbmode.xres; 66 dispanel->width = fbmode.xres;
67 dispanel->height = fbmode.yres; 67 dispanel->height = fbmode.yres;
68 dispanel->reg_base = panel.isaBase; 68 dispanel->reg_base = panel.isaBase;
69 dispanel->gdfindex = panel.gdfIndex; 69 dispanel->gdfindex = panel.gdfIndex;
70 dispanel->gdfbytespp = panel.gdfBytesPP; 70 dispanel->gdfbytespp = panel.gdfBytesPP;
71 } 71 }
72 72
73 /* 73 /*
74 * DENX M28EVK: 74 * DENX M28EVK:
75 * setenv videomode 75 * setenv videomode
76 * video=ctfb:x:800,y:480,depth:18,mode:0,pclk:30066, 76 * video=ctfb:x:800,y:480,depth:18,mode:0,pclk:30066,
77 * le:0,ri:256,up:0,lo:45,hs:1,vs:1,sync:100663296,vmode:0 77 * le:0,ri:256,up:0,lo:45,hs:1,vs:1,sync:100663296,vmode:0
78 * 78 *
79 * Freescale mx23evk/mx28evk with a Seiko 4.3'' WVGA panel: 79 * Freescale mx23evk/mx28evk with a Seiko 4.3'' WVGA panel:
80 * setenv videomode 80 * setenv videomode
81 * video=ctfb:x:800,y:480,depth:24,mode:0,pclk:29851, 81 * video=ctfb:x:800,y:480,depth:24,mode:0,pclk:29851,
82 * le:89,ri:164,up:23,lo:10,hs:10,vs:10,sync:0,vmode:0 82 * le:89,ri:164,up:23,lo:10,hs:10,vs:10,sync:0,vmode:0
83 */ 83 */
84 84
85 static void mxs_lcd_init(GraphicDevice *panel, 85 static void mxs_lcd_init(GraphicDevice *panel,
86 struct ctfb_res_modes *mode, int bpp) 86 struct ctfb_res_modes *mode, int bpp)
87 { 87 {
88 struct mxs_lcdif_regs *regs = (struct mxs_lcdif_regs *)(panel->isaBase); 88 struct mxs_lcdif_regs *regs = (struct mxs_lcdif_regs *)(panel->isaBase);
89 uint32_t word_len = 0, bus_width = 0; 89 uint32_t word_len = 0, bus_width = 0;
90 uint8_t valid_data = 0; 90 uint8_t valid_data = 0;
91 91
92 /* Kick in the LCDIF clock */ 92 /* Kick in the LCDIF clock */
93 mxs_set_lcdclk(panel->isaBase, PS2KHZ(mode->pixclock)); 93 mxs_set_lcdclk(panel->isaBase, PS2KHZ(mode->pixclock));
94 94
95 /* Restart the LCDIF block */ 95 /* Restart the LCDIF block */
96 mxs_reset_block(&regs->hw_lcdif_ctrl_reg); 96 mxs_reset_block(&regs->hw_lcdif_ctrl_reg);
97 97
98 switch (bpp) { 98 switch (bpp) {
99 case 24: 99 case 24:
100 word_len = LCDIF_CTRL_WORD_LENGTH_24BIT; 100 word_len = LCDIF_CTRL_WORD_LENGTH_24BIT;
101 bus_width = LCDIF_CTRL_LCD_DATABUS_WIDTH_24BIT; 101 bus_width = LCDIF_CTRL_LCD_DATABUS_WIDTH_24BIT;
102 valid_data = 0x7; 102 valid_data = 0x7;
103 break; 103 break;
104 case 18: 104 case 18:
105 word_len = LCDIF_CTRL_WORD_LENGTH_24BIT; 105 word_len = LCDIF_CTRL_WORD_LENGTH_24BIT;
106 bus_width = LCDIF_CTRL_LCD_DATABUS_WIDTH_18BIT; 106 bus_width = LCDIF_CTRL_LCD_DATABUS_WIDTH_18BIT;
107 valid_data = 0x7; 107 valid_data = 0x7;
108 break; 108 break;
109 case 16: 109 case 16:
110 word_len = LCDIF_CTRL_WORD_LENGTH_16BIT; 110 word_len = LCDIF_CTRL_WORD_LENGTH_16BIT;
111 bus_width = LCDIF_CTRL_LCD_DATABUS_WIDTH_16BIT; 111 bus_width = LCDIF_CTRL_LCD_DATABUS_WIDTH_16BIT;
112 valid_data = 0xf; 112 valid_data = 0xf;
113 break; 113 break;
114 case 8: 114 case 8:
115 word_len = LCDIF_CTRL_WORD_LENGTH_8BIT; 115 word_len = LCDIF_CTRL_WORD_LENGTH_8BIT;
116 bus_width = LCDIF_CTRL_LCD_DATABUS_WIDTH_8BIT; 116 bus_width = LCDIF_CTRL_LCD_DATABUS_WIDTH_8BIT;
117 valid_data = 0xf; 117 valid_data = 0xf;
118 break; 118 break;
119 } 119 }
120 120
121 writel(bus_width | word_len | LCDIF_CTRL_DOTCLK_MODE | 121 writel(bus_width | word_len | LCDIF_CTRL_DOTCLK_MODE |
122 LCDIF_CTRL_BYPASS_COUNT | LCDIF_CTRL_LCDIF_MASTER, 122 LCDIF_CTRL_BYPASS_COUNT | LCDIF_CTRL_LCDIF_MASTER,
123 &regs->hw_lcdif_ctrl); 123 &regs->hw_lcdif_ctrl);
124 124
125 writel(valid_data << LCDIF_CTRL1_BYTE_PACKING_FORMAT_OFFSET, 125 writel(valid_data << LCDIF_CTRL1_BYTE_PACKING_FORMAT_OFFSET,
126 &regs->hw_lcdif_ctrl1); 126 &regs->hw_lcdif_ctrl1);
127 127
128 mxsfb_system_setup(); 128 mxsfb_system_setup();
129 129
130 writel((mode->yres << LCDIF_TRANSFER_COUNT_V_COUNT_OFFSET) | mode->xres, 130 writel((mode->yres << LCDIF_TRANSFER_COUNT_V_COUNT_OFFSET) | mode->xres,
131 &regs->hw_lcdif_transfer_count); 131 &regs->hw_lcdif_transfer_count);
132 132
133 writel(LCDIF_VDCTRL0_ENABLE_PRESENT | LCDIF_VDCTRL0_ENABLE_POL | 133 writel(LCDIF_VDCTRL0_ENABLE_PRESENT | LCDIF_VDCTRL0_ENABLE_POL |
134 LCDIF_VDCTRL0_VSYNC_PERIOD_UNIT | 134 LCDIF_VDCTRL0_VSYNC_PERIOD_UNIT |
135 LCDIF_VDCTRL0_VSYNC_PULSE_WIDTH_UNIT | 135 LCDIF_VDCTRL0_VSYNC_PULSE_WIDTH_UNIT |
136 mode->vsync_len, &regs->hw_lcdif_vdctrl0); 136 mode->vsync_len, &regs->hw_lcdif_vdctrl0);
137 writel(mode->upper_margin + mode->lower_margin + 137 writel(mode->upper_margin + mode->lower_margin +
138 mode->vsync_len + mode->yres, 138 mode->vsync_len + mode->yres,
139 &regs->hw_lcdif_vdctrl1); 139 &regs->hw_lcdif_vdctrl1);
140 writel((mode->hsync_len << LCDIF_VDCTRL2_HSYNC_PULSE_WIDTH_OFFSET) | 140 writel((mode->hsync_len << LCDIF_VDCTRL2_HSYNC_PULSE_WIDTH_OFFSET) |
141 (mode->left_margin + mode->right_margin + 141 (mode->left_margin + mode->right_margin +
142 mode->hsync_len + mode->xres), 142 mode->hsync_len + mode->xres),
143 &regs->hw_lcdif_vdctrl2); 143 &regs->hw_lcdif_vdctrl2);
144 writel(((mode->left_margin + mode->hsync_len) << 144 writel(((mode->left_margin + mode->hsync_len) <<
145 LCDIF_VDCTRL3_HORIZONTAL_WAIT_CNT_OFFSET) | 145 LCDIF_VDCTRL3_HORIZONTAL_WAIT_CNT_OFFSET) |
146 (mode->upper_margin + mode->vsync_len), 146 (mode->upper_margin + mode->vsync_len),
147 &regs->hw_lcdif_vdctrl3); 147 &regs->hw_lcdif_vdctrl3);
148 writel((0 << LCDIF_VDCTRL4_DOTCLK_DLY_SEL_OFFSET) | mode->xres, 148 writel((0 << LCDIF_VDCTRL4_DOTCLK_DLY_SEL_OFFSET) | mode->xres,
149 &regs->hw_lcdif_vdctrl4); 149 &regs->hw_lcdif_vdctrl4);
150 150
151 writel(panel->frameAdrs, &regs->hw_lcdif_cur_buf); 151 writel(panel->frameAdrs, &regs->hw_lcdif_cur_buf);
152 writel(panel->frameAdrs, &regs->hw_lcdif_next_buf); 152 writel(panel->frameAdrs, &regs->hw_lcdif_next_buf);
153 153
154 /* Flush FIFO first */ 154 /* Flush FIFO first */
155 writel(LCDIF_CTRL1_FIFO_CLEAR, &regs->hw_lcdif_ctrl1_set); 155 writel(LCDIF_CTRL1_FIFO_CLEAR, &regs->hw_lcdif_ctrl1_set);
156 156
157 #ifndef CONFIG_VIDEO_MXS_MODE_SYSTEM 157 #ifndef CONFIG_VIDEO_MXS_MODE_SYSTEM
158 /* Sync signals ON */ 158 /* Sync signals ON */
159 setbits_le32(&regs->hw_lcdif_vdctrl4, LCDIF_VDCTRL4_SYNC_SIGNALS_ON); 159 setbits_le32(&regs->hw_lcdif_vdctrl4, LCDIF_VDCTRL4_SYNC_SIGNALS_ON);
160 #endif 160 #endif
161 161
162 /* FIFO cleared */ 162 /* FIFO cleared */
163 writel(LCDIF_CTRL1_FIFO_CLEAR, &regs->hw_lcdif_ctrl1_clr); 163 writel(LCDIF_CTRL1_FIFO_CLEAR, &regs->hw_lcdif_ctrl1_clr);
164 164
165 /* RUN! */ 165 /* RUN! */
166 writel(LCDIF_CTRL_RUN, &regs->hw_lcdif_ctrl_set); 166 writel(LCDIF_CTRL_RUN, &regs->hw_lcdif_ctrl_set);
167 } 167 }
168 168
169 void lcdif_power_down(void) 169 void lcdif_power_down(void)
170 { 170 {
171 struct mxs_lcdif_regs *regs = (struct mxs_lcdif_regs *)(panel.isaBase); 171 struct mxs_lcdif_regs *regs = (struct mxs_lcdif_regs *)(panel.isaBase);
172 int timeout = 1000000; 172 int timeout = 1000000;
173 char *penv;
174
175 penv = getenv("videomode");
176 if (!penv)
177 return;
173 178
174 #ifdef CONFIG_MX6 179 #ifdef CONFIG_MX6
175 if (check_module_fused(MX6_MODULE_LCDIF)) 180 if (check_module_fused(MX6_MODULE_LCDIF))
176 return; 181 return;
177 #endif 182 #endif
178 writel(panel.frameAdrs, &regs->hw_lcdif_cur_buf_reg); 183 writel(panel.frameAdrs, &regs->hw_lcdif_cur_buf_reg);
179 writel(panel.frameAdrs, &regs->hw_lcdif_next_buf_reg); 184 writel(panel.frameAdrs, &regs->hw_lcdif_next_buf_reg);
180 writel(LCDIF_CTRL1_VSYNC_EDGE_IRQ, &regs->hw_lcdif_ctrl1_clr); 185 writel(LCDIF_CTRL1_VSYNC_EDGE_IRQ, &regs->hw_lcdif_ctrl1_clr);
181 while (--timeout) { 186 while (--timeout) {
182 if (readl(&regs->hw_lcdif_ctrl1_reg) & 187 if (readl(&regs->hw_lcdif_ctrl1_reg) &
183 LCDIF_CTRL1_VSYNC_EDGE_IRQ) 188 LCDIF_CTRL1_VSYNC_EDGE_IRQ)
184 break; 189 break;
185 udelay(1); 190 udelay(1);
186 } 191 }
187 mxs_reset_block((struct mxs_register_32 *)&regs->hw_lcdif_ctrl_reg); 192 mxs_reset_block((struct mxs_register_32 *)&regs->hw_lcdif_ctrl_reg);
188 } 193 }
189 194
190 void *video_hw_init(void) 195 void *video_hw_init(void)
191 { 196 {
192 int bpp = -1; 197 int bpp = -1;
193 char *penv; 198 char *penv;
194 void *fb; 199 void *fb;
195 struct ctfb_res_modes mode; 200 struct ctfb_res_modes mode;
196 201
197 puts("Video: "); 202 puts("Video: ");
198 203
199 if (!setup) { 204 if (!setup) {
200 205
201 /* Suck display configuration from "videomode" variable */ 206 /* Suck display configuration from "videomode" variable */
202 penv = getenv("videomode"); 207 penv = getenv("videomode");
203 if (!penv) { 208 if (!penv) {
204 printf("MXSFB: 'videomode' variable not set!\n"); 209 printf("MXSFB: 'videomode' variable not set!\n");
205 return NULL; 210 return NULL;
206 } 211 }
207 212
208 bpp = video_get_params(&mode, penv); 213 bpp = video_get_params(&mode, penv);
209 panel.isaBase = MXS_LCDIF_BASE; 214 panel.isaBase = MXS_LCDIF_BASE;
210 } else { 215 } else {
211 mode.xres = fbmode.xres; 216 mode.xres = fbmode.xres;
212 mode.yres = fbmode.yres; 217 mode.yres = fbmode.yres;
213 mode.pixclock = fbmode.pixclock; 218 mode.pixclock = fbmode.pixclock;
214 mode.left_margin = fbmode.left_margin; 219 mode.left_margin = fbmode.left_margin;
215 mode.right_margin = fbmode.right_margin; 220 mode.right_margin = fbmode.right_margin;
216 mode.upper_margin = fbmode.upper_margin; 221 mode.upper_margin = fbmode.upper_margin;
217 mode.lower_margin = fbmode.lower_margin; 222 mode.lower_margin = fbmode.lower_margin;
218 mode.hsync_len = fbmode.hsync_len; 223 mode.hsync_len = fbmode.hsync_len;
219 mode.vsync_len = fbmode.vsync_len; 224 mode.vsync_len = fbmode.vsync_len;
220 mode.sync = fbmode.sync; 225 mode.sync = fbmode.sync;
221 mode.vmode = fbmode.vmode; 226 mode.vmode = fbmode.vmode;
222 bpp = depth; 227 bpp = depth;
223 } 228 }
224 229
225 #ifdef CONFIG_MX6 230 #ifdef CONFIG_MX6
226 if (check_module_fused(MX6_MODULE_LCDIF)) { 231 if (check_module_fused(MX6_MODULE_LCDIF)) {
227 printf("LCDIF@0x%x is fused, disable it\n", MXS_LCDIF_BASE); 232 printf("LCDIF@0x%x is fused, disable it\n", MXS_LCDIF_BASE);
228 return NULL; 233 return NULL;
229 } 234 }
230 #endif 235 #endif
231 /* fill in Graphic device struct */ 236 /* fill in Graphic device struct */
232 sprintf(panel.modeIdent, "%dx%dx%d", 237 sprintf(panel.modeIdent, "%dx%dx%d",
233 mode.xres, mode.yres, bpp); 238 mode.xres, mode.yres, bpp);
234 239
235 240
236 panel.winSizeX = mode.xres; 241 panel.winSizeX = mode.xres;
237 panel.winSizeY = mode.yres; 242 panel.winSizeY = mode.yres;
238 panel.plnSizeX = mode.xres; 243 panel.plnSizeX = mode.xres;
239 panel.plnSizeY = mode.yres; 244 panel.plnSizeY = mode.yres;
240 245
241 switch (bpp) { 246 switch (bpp) {
242 case 24: 247 case 24:
243 case 18: 248 case 18:
244 panel.gdfBytesPP = 4; 249 panel.gdfBytesPP = 4;
245 panel.gdfIndex = GDF_32BIT_X888RGB; 250 panel.gdfIndex = GDF_32BIT_X888RGB;
246 break; 251 break;
247 case 16: 252 case 16:
248 panel.gdfBytesPP = 2; 253 panel.gdfBytesPP = 2;
249 panel.gdfIndex = GDF_16BIT_565RGB; 254 panel.gdfIndex = GDF_16BIT_565RGB;
250 break; 255 break;
251 case 8: 256 case 8:
252 panel.gdfBytesPP = 1; 257 panel.gdfBytesPP = 1;
253 panel.gdfIndex = GDF__8BIT_INDEX; 258 panel.gdfIndex = GDF__8BIT_INDEX;
254 break; 259 break;
255 default: 260 default:
256 printf("MXSFB: Invalid BPP specified! (bpp = %i)\n", bpp); 261 printf("MXSFB: Invalid BPP specified! (bpp = %i)\n", bpp);
257 return NULL; 262 return NULL;
258 } 263 }
259 264
260 panel.memSize = mode.xres * mode.yres * panel.gdfBytesPP; 265 panel.memSize = mode.xres * mode.yres * panel.gdfBytesPP;
261 266
262 267
263 /* Allocate framebuffer */ 268 /* Allocate framebuffer */
264 fb = memalign(ARCH_DMA_MINALIGN, 269 fb = memalign(ARCH_DMA_MINALIGN,
265 roundup(panel.memSize, ARCH_DMA_MINALIGN)); 270 roundup(panel.memSize, ARCH_DMA_MINALIGN));
266 if (!fb) { 271 if (!fb) {
267 printf("MXSFB: Error allocating framebuffer!\n"); 272 printf("MXSFB: Error allocating framebuffer!\n");
268 return NULL; 273 return NULL;
269 } 274 }
270 275
271 /* Wipe framebuffer */ 276 /* Wipe framebuffer */
272 memset(fb, 0, panel.memSize); 277 memset(fb, 0, panel.memSize);
273 278
274 panel.frameAdrs = (u32)fb; 279 panel.frameAdrs = (u32)fb;
275 280
276 printf("%s\n", panel.modeIdent); 281 printf("%s\n", panel.modeIdent);
277 282
278 /* Start framebuffer */ 283 /* Start framebuffer */
279 mxs_lcd_init(&panel, &mode, bpp); 284 mxs_lcd_init(&panel, &mode, bpp);
280 285
281 #ifdef CONFIG_VIDEO_MXS_MODE_SYSTEM 286 #ifdef CONFIG_VIDEO_MXS_MODE_SYSTEM
282 /* 287 /*
283 * If the LCD runs in system mode, the LCD refresh has to be triggered 288 * If the LCD runs in system mode, the LCD refresh has to be triggered
284 * manually by setting the RUN bit in HW_LCDIF_CTRL register. To avoid 289 * manually by setting the RUN bit in HW_LCDIF_CTRL register. To avoid
285 * having to set this bit manually after every single change in the 290 * having to set this bit manually after every single change in the
286 * framebuffer memory, we set up specially crafted circular DMA, which 291 * framebuffer memory, we set up specially crafted circular DMA, which
287 * sets the RUN bit, then waits until it gets cleared and repeats this 292 * sets the RUN bit, then waits until it gets cleared and repeats this
288 * infinitelly. This way, we get smooth continuous updates of the LCD. 293 * infinitelly. This way, we get smooth continuous updates of the LCD.
289 */ 294 */
290 struct mxs_lcdif_regs *regs = (struct mxs_lcdif_regs *)MXS_LCDIF_BASE; 295 struct mxs_lcdif_regs *regs = (struct mxs_lcdif_regs *)MXS_LCDIF_BASE;
291 296
292 memset(&desc, 0, sizeof(struct mxs_dma_desc)); 297 memset(&desc, 0, sizeof(struct mxs_dma_desc));
293 desc.address = (dma_addr_t)&desc; 298 desc.address = (dma_addr_t)&desc;
294 desc.cmd.data = MXS_DMA_DESC_COMMAND_NO_DMAXFER | MXS_DMA_DESC_CHAIN | 299 desc.cmd.data = MXS_DMA_DESC_COMMAND_NO_DMAXFER | MXS_DMA_DESC_CHAIN |
295 MXS_DMA_DESC_WAIT4END | 300 MXS_DMA_DESC_WAIT4END |
296 (1 << MXS_DMA_DESC_PIO_WORDS_OFFSET); 301 (1 << MXS_DMA_DESC_PIO_WORDS_OFFSET);
297 desc.cmd.pio_words[0] = readl(&regs->hw_lcdif_ctrl) | LCDIF_CTRL_RUN; 302 desc.cmd.pio_words[0] = readl(&regs->hw_lcdif_ctrl) | LCDIF_CTRL_RUN;
298 desc.cmd.next = (uint32_t)&desc.cmd; 303 desc.cmd.next = (uint32_t)&desc.cmd;
299 304
300 /* Execute the DMA chain. */ 305 /* Execute the DMA chain. */
301 mxs_dma_circ_start(MXS_DMA_CHANNEL_AHB_APBH_LCDIF, &desc); 306 mxs_dma_circ_start(MXS_DMA_CHANNEL_AHB_APBH_LCDIF, &desc);
302 #endif 307 #endif
303 308
304 #ifdef CONFIG_VIDEO_GIS 309 #ifdef CONFIG_VIDEO_GIS
305 /* Entry for GIS */ 310 /* Entry for GIS */
306 mxc_enable_gis(); 311 mxc_enable_gis();
307 #endif 312 #endif
308 313
309 return (void *)&panel; 314 return (void *)&panel;
310 } 315 }
311 316
include/configs/smarcfimx7.h
1 /* 1 /*
2 * Copyright (C) 2015-2016 Freescale Semiconductor, Inc. 2 * Copyright (C) 2015-2016 Freescale Semiconductor, Inc.
3 * 3 *
4 * Configuration settings for the Freescale i.MX7D SABRESD board. 4 * Configuration settings for the Freescale i.MX7D SABRESD board.
5 * 5 *
6 * SPDX-License-Identifier: GPL-2.0+ 6 * SPDX-License-Identifier: GPL-2.0+
7 */ 7 */
8 8
9 #ifndef __SMARCFIMX7_CONFIG_H 9 #ifndef __SMARCFIMX7_CONFIG_H
10 #define __SMARCFIMX7_CONFIG_H 10 #define __SMARCFIMX7_CONFIG_H
11 11
12 #include "mx7smarc_common.h" 12 #include "mx7smarc_common.h"
13 13
14 #define CONFIG_DBG_MONITOR 14 #define CONFIG_DBG_MONITOR
15 #if defined(CONFIG_MX7D) 15 #if defined(CONFIG_MX7D)
16 #define PHYS_SDRAM_SIZE SZ_1G 16 #define PHYS_SDRAM_SIZE SZ_1G
17 #else 17 #else
18 #define PHYS_SDRAM_SIZE SZ_512M 18 #define PHYS_SDRAM_SIZE SZ_512M
19 #endif 19 #endif
20 20
21 /* uncomment for PLUGIN mode support */ 21 /* uncomment for PLUGIN mode support */
22 /* #define CONFIG_USE_PLUGIN */ 22 /* #define CONFIG_USE_PLUGIN */
23 23
24 /* Uncomment to enable secure boot support */ 24 /* Uncomment to enable secure boot support */
25 /* #define CONFIG_SECURE_BOOT */ 25 /* #define CONFIG_SECURE_BOOT */
26 26
27 #ifdef CONFIG_SECURE_BOOT 27 #ifdef CONFIG_SECURE_BOOT
28 #ifndef CONFIG_CSF_SIZE 28 #ifndef CONFIG_CSF_SIZE
29 #define CONFIG_CSF_SIZE 0x4000 29 #define CONFIG_CSF_SIZE 0x4000
30 #endif 30 #endif
31 #endif 31 #endif
32 32
33 /* Network */ 33 /* Network */
34 #define CONFIG_CMD_MII 34 #define CONFIG_CMD_MII
35 #define CONFIG_FEC_MXC 35 #define CONFIG_FEC_MXC
36 #define CONFIG_MII 36 #define CONFIG_MII
37 #define CONFIG_FEC_XCV_TYPE RGMII 37 #define CONFIG_FEC_XCV_TYPE RGMII
38 #define CONFIG_ETHPRIME "FEC" 38 #define CONFIG_ETHPRIME "FEC"
39 39
40 #define CONFIG_PHYLIB 40 #define CONFIG_PHYLIB
41 #define CONFIG_PHY_ATHEROS 41 #define CONFIG_PHY_ATHEROS
42 42
43 #define CONFIG_FEC_ENET_DEV 0 43 #define CONFIG_FEC_ENET_DEV 0
44 44
45 #if (CONFIG_FEC_ENET_DEV == 0) 45 #if (CONFIG_FEC_ENET_DEV == 0)
46 #define IMX_FEC_BASE ENET_IPS_BASE_ADDR 46 #define IMX_FEC_BASE ENET_IPS_BASE_ADDR
47 #define CONFIG_FEC_MXC_PHYADDR 0x6 47 #define CONFIG_FEC_MXC_PHYADDR 0x6
48 #elif (CONFIG_FEC_ENET_DEV == 1) 48 #elif (CONFIG_FEC_ENET_DEV == 1)
49 #define IMX_FEC_BASE ENET2_IPS_BASE_ADDR 49 #define IMX_FEC_BASE ENET2_IPS_BASE_ADDR
50 #define CONFIG_FEC_MXC_PHYADDR 0x7 50 #define CONFIG_FEC_MXC_PHYADDR 0x7
51 #endif 51 #endif
52 52
53 #define CONFIG_FEC_MXC_MDIO_BASE ENET_IPS_BASE_ADDR 53 #define CONFIG_FEC_MXC_MDIO_BASE ENET_IPS_BASE_ADDR
54 54
55 /* PMIC */ 55 /* PMIC */
56 #define CONFIG_POWER 56 #define CONFIG_POWER
57 #define CONFIG_POWER_I2C 57 #define CONFIG_POWER_I2C
58 #define CONFIG_POWER_PFUZE3000 58 #define CONFIG_POWER_PFUZE3000
59 #define CONFIG_POWER_PFUZE3000_I2C_ADDR 0x08 59 #define CONFIG_POWER_PFUZE3000_I2C_ADDR 0x08
60 60
61 #undef CONFIG_BOOTM_NETBSD 61 #undef CONFIG_BOOTM_NETBSD
62 #undef CONFIG_BOOTM_PLAN9 62 #undef CONFIG_BOOTM_PLAN9
63 #undef CONFIG_BOOTM_RTEMS 63 #undef CONFIG_BOOTM_RTEMS
64 64
65 #undef CONFIG_CMD_EXPORTENV 65 #undef CONFIG_CMD_EXPORTENV
66 66
67 /* I2C configs */ 67 /* I2C configs */
68 #define CONFIG_CMD_I2C 68 #define CONFIG_CMD_I2C
69 #define CONFIG_SYS_I2C 69 #define CONFIG_SYS_I2C
70 #define CONFIG_SYS_I2C_MXC 70 #define CONFIG_SYS_I2C_MXC
71 #define CONFIG_SYS_I2C_MXC_I2C1 /* enable I2C bus 1 */ 71 #define CONFIG_SYS_I2C_MXC_I2C1 /* enable I2C bus 1 */
72 #define CONFIG_SYS_I2C_MXC_I2C2 /* enable I2C bus 2 */ 72 #define CONFIG_SYS_I2C_MXC_I2C2 /* enable I2C bus 2 */
73 #define CONFIG_SYS_I2C_SPEED 100000 73 #define CONFIG_SYS_I2C_SPEED 100000
74 74
75 /* 75 /*
76 * I2C EEPROM definitions EEPROM chip 76 * I2C EEPROM definitions EEPROM chip
77 */ 77 */
78 #define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 2 78 #define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 2
79 #define CONFIG_SYS_I2C_EEPROM_ADDR 0x50 79 #define CONFIG_SYS_I2C_EEPROM_ADDR 0x50
80 #define CONFIG_MAC_ADDR_IN_EEPROM 80 #define CONFIG_MAC_ADDR_IN_EEPROM
81 81
82 #ifdef CONFIG_SYS_BOOT_SPINOR 82 #ifdef CONFIG_SYS_BOOT_SPINOR
83 #define CONFIG_SYS_USE_SPINOR 83 #define CONFIG_SYS_USE_SPINOR
84 #define CONFIG_ENV_IS_IN_SPI_FLASH 84 #define CONFIG_ENV_IS_IN_SPI_FLASH
85 #elif defined CONFIG_SYS_BOOT_NAND 85 #elif defined CONFIG_SYS_BOOT_NAND
86 #define CONFIG_SYS_USE_NAND 86 #define CONFIG_SYS_USE_NAND
87 #define CONFIG_ENV_IS_IN_NAND 87 #define CONFIG_ENV_IS_IN_NAND
88 #else 88 #else
89 #define CONFIG_ENV_IS_IN_MMC 89 #define CONFIG_ENV_IS_IN_MMC
90 #endif 90 #endif
91 91
92 #ifdef CONFIG_SYS_USE_SPINOR 92 #ifdef CONFIG_SYS_USE_SPINOR
93 #define CONFIG_CMD_SF 93 #define CONFIG_CMD_SF
94 #define CONFIG_CMD_SPI 94 #define CONFIG_CMD_SPI
95 #define CONFIG_SPI_FLASH 95 #define CONFIG_SPI_FLASH
96 #define CONFIG_SPI_FLASH_MACRONIX 96 #define CONFIG_SPI_FLASH_MACRONIX
97 #define CONFIG_MXC_SPI 97 #define CONFIG_MXC_SPI
98 #define CONFIG_SF_DEFAULT_BUS 1 98 #define CONFIG_SF_DEFAULT_BUS 1
99 #define CONFIG_SF_DEFAULT_SPEED 20000000 99 #define CONFIG_SF_DEFAULT_SPEED 20000000
100 #define CONFIG_SF_DEFAULT_MODE (SPI_MODE_0) 100 #define CONFIG_SF_DEFAULT_MODE (SPI_MODE_0)
101 #endif 101 #endif
102 102
103 #define CONFIG_SUPPORT_EMMC_BOOT /* eMMC specific */ 103 #define CONFIG_SUPPORT_EMMC_BOOT /* eMMC specific */
104 #define CONFIG_SYS_MMC_IMG_LOAD_PART 1 104 #define CONFIG_SYS_MMC_IMG_LOAD_PART 1
105 105
106 #ifdef CONFIG_IMX_BOOTAUX 106 #ifdef CONFIG_IMX_BOOTAUX
107 /* Set to SPI2 flash at default */ 107 /* Set to SPI2 flash at default */
108 #define CONFIG_SYS_AUXCORE_BOOTDATA 0x7F8000 /* Set to TCML address */ 108 #define CONFIG_SYS_AUXCORE_BOOTDATA 0x7F8000 /* Set to TCML address */
109 109
110 #ifdef CONFIG_SYS_USE_QSPI 110 #ifdef CONFIG_SYS_USE_QSPI
111 #define UPDATE_M4_ENV \ 111 #define UPDATE_M4_ENV \
112 "m4image=m4_qspi.bin\0" \ 112 "m4image=m4_qspi.bin\0" \
113 "loadm4image=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${m4image}\0" \ 113 "loadm4image=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${m4image}\0" \
114 "update_m4_from_sd=" \ 114 "update_m4_from_sd=" \
115 "if sf probe 0:0; then " \ 115 "if sf probe 0:0; then " \
116 "if run loadm4image; then " \ 116 "if run loadm4image; then " \
117 "setexpr fw_sz ${filesize} + 0xffff; " \ 117 "setexpr fw_sz ${filesize} + 0xffff; " \
118 "setexpr fw_sz ${fw_sz} / 0x10000; " \ 118 "setexpr fw_sz ${fw_sz} / 0x10000; " \
119 "setexpr fw_sz ${fw_sz} * 0x10000; " \ 119 "setexpr fw_sz ${fw_sz} * 0x10000; " \
120 "sf erase 0x100000 ${fw_sz}; " \ 120 "sf erase 0x100000 ${fw_sz}; " \
121 "sf write ${loadaddr} 0x100000 ${filesize}; " \ 121 "sf write ${loadaddr} 0x100000 ${filesize}; " \
122 "fi; " \ 122 "fi; " \
123 "fi\0" \ 123 "fi\0" \
124 "m4boot=sf probe 0:0; bootaux "__stringify(CONFIG_SYS_AUXCORE_BOOTDATA)"\0" 124 "m4boot=sf probe 0:0; bootaux "__stringify(CONFIG_SYS_AUXCORE_BOOTDATA)"\0"
125 #else 125 #else
126 #define UPDATE_M4_ENV \ 126 #define UPDATE_M4_ENV \
127 "m4image=m4_qspi.bin\0" \ 127 "m4image=m4_qspi.bin\0" \
128 "loadm4image=fatload mmc ${mmcdev}:${mmcpart} "__stringify(CONFIG_SYS_AUXCORE_BOOTDATA)" ${m4image}\0" \ 128 "loadm4image=fatload mmc ${mmcdev}:${mmcpart} "__stringify(CONFIG_SYS_AUXCORE_BOOTDATA)" ${m4image}\0" \
129 "m4boot=run loadm4image; bootaux "__stringify(CONFIG_SYS_AUXCORE_BOOTDATA)"\0" 129 "m4boot=run loadm4image; bootaux "__stringify(CONFIG_SYS_AUXCORE_BOOTDATA)"\0"
130 #endif 130 #endif
131 #else 131 #else
132 #define UPDATE_M4_ENV "" 132 #define UPDATE_M4_ENV ""
133 #endif 133 #endif
134 134
135 #ifdef CONFIG_SYS_BOOT_NAND 135 #ifdef CONFIG_SYS_BOOT_NAND
136 #define CONFIG_MFG_NAND_PARTITION "mtdparts=gpmi-nand:64m(boot),16m(kernel),16m(dtb),-(rootfs) " 136 #define CONFIG_MFG_NAND_PARTITION "mtdparts=gpmi-nand:64m(boot),16m(kernel),16m(dtb),-(rootfs) "
137 #else 137 #else
138 #define CONFIG_MFG_NAND_PARTITION "" 138 #define CONFIG_MFG_NAND_PARTITION ""
139 #endif 139 #endif
140 140
141 #define CONFIG_MFG_ENV_SETTINGS \ 141 #define CONFIG_MFG_ENV_SETTINGS \
142 "mfgtool_args=setenv bootargs console=${console},${baudrate} " \ 142 "mfgtool_args=setenv bootargs console=${console},${baudrate} " \
143 "rdinit=/linuxrc " \ 143 "rdinit=/linuxrc " \
144 "g_mass_storage.stall=0 g_mass_storage.removable=1 " \ 144 "g_mass_storage.stall=0 g_mass_storage.removable=1 " \
145 "g_mass_storage.idVendor=0x066F g_mass_storage.idProduct=0x37FF "\ 145 "g_mass_storage.idVendor=0x066F g_mass_storage.idProduct=0x37FF "\
146 "g_mass_storage.iSerialNumber=\"\" "\ 146 "g_mass_storage.iSerialNumber=\"\" "\
147 CONFIG_MFG_NAND_PARTITION \ 147 CONFIG_MFG_NAND_PARTITION \
148 "clk_ignore_unused "\ 148 "clk_ignore_unused "\
149 "\0" \ 149 "\0" \
150 "initrd_addr=0x83800000\0" \ 150 "initrd_addr=0x83800000\0" \
151 "initrd_high=0xffffffff\0" \ 151 "initrd_high=0xffffffff\0" \
152 "bootcmd_mfg=run mfgtool_args;bootz ${loadaddr} ${initrd_addr} ${fdt_addr};\0" \ 152 "bootcmd_mfg=run mfgtool_args;bootz ${loadaddr} ${initrd_addr} ${fdt_addr};\0" \
153 153
154 #define CONFIG_DFU_ENV_SETTINGS \ 154 #define CONFIG_DFU_ENV_SETTINGS \
155 "dfu_alt_info=image raw 0 0x800000;"\ 155 "dfu_alt_info=image raw 0 0x800000;"\
156 "u-boot raw 0 0x4000;"\ 156 "u-boot raw 0 0x4000;"\
157 "bootimg part 0 1;"\ 157 "bootimg part 0 1;"\
158 "rootfs part 0 2\0" \ 158 "rootfs part 0 2\0" \
159 159
160 #if defined(CONFIG_SYS_BOOT_NAND) 160 #if defined(CONFIG_SYS_BOOT_NAND)
161 #define CONFIG_EXTRA_ENV_SETTINGS \ 161 #define CONFIG_EXTRA_ENV_SETTINGS \
162 CONFIG_MFG_ENV_SETTINGS \ 162 CONFIG_MFG_ENV_SETTINGS \
163 "panel=TFT43AB\0" \ 163 "panel=TFT43AB\0" \
164 "fdt_addr=0x83000000\0" \ 164 "fdt_addr=0x83000000\0" \
165 "fdt_high=0xffffffff\0" \ 165 "fdt_high=0xffffffff\0" \
166 "console=ttymxc0\0" \ 166 "console=ttymxc0\0" \
167 "bootargs=console=ttymxc0,115200 ubi.mtd=3 " \ 167 "bootargs=console=ttymxc0,115200 ubi.mtd=3 " \
168 "root=ubi0:rootfs rootfstype=ubifs " \ 168 "root=ubi0:rootfs rootfstype=ubifs " \
169 "mtdparts=gpmi-nand:64m(boot),16m(kernel),16m(dtb),-(rootfs)\0"\ 169 "mtdparts=gpmi-nand:64m(boot),16m(kernel),16m(dtb),-(rootfs)\0"\
170 "bootcmd=nand read ${loadaddr} 0x4000000 0x800000;"\ 170 "bootcmd=nand read ${loadaddr} 0x4000000 0x800000;"\
171 "nand read ${fdt_addr} 0x5000000 0x100000;"\ 171 "nand read ${fdt_addr} 0x5000000 0x100000;"\
172 "bootz ${loadaddr} - ${fdt_addr}\0" 172 "bootz ${loadaddr} - ${fdt_addr}\0"
173 173
174 #else 174 #else
175 #define CONFIG_EXTRA_ENV_SETTINGS \ 175 #define CONFIG_EXTRA_ENV_SETTINGS \
176 UPDATE_M4_ENV \ 176 UPDATE_M4_ENV \
177 CONFIG_MFG_ENV_SETTINGS \ 177 CONFIG_MFG_ENV_SETTINGS \
178 CONFIG_DFU_ENV_SETTINGS \ 178 CONFIG_DFU_ENV_SETTINGS \
179 "script=boot.scr\0" \ 179 "script=boot.scr\0" \
180 "image=zImage\0" \ 180 "image=zImage\0" \
181 "console=" CONFIG_CONSOLE_DEV "\0" \ 181 "console=" CONFIG_CONSOLE_DEV "\0" \
182 "fdt_high=0xffffffff\0" \ 182 "fdt_high=0xffffffff\0" \
183 "initrd_high=0xffffffff\0" \ 183 "initrd_high=0xffffffff\0" \
184 "fdt_file=" CONFIG_DEFAULT_FDT_FILE "\0" \ 184 "fdt_file=" CONFIG_DEFAULT_FDT_FILE "\0" \
185 "fdt_addr=0x83000000\0" \ 185 "fdt_addr=0x83000000\0" \
186 "ethprime=FEC0\0" \ 186 "ethprime=FEC0\0" \
187 "fec.macaddr=${ethaddr}\0" \
188 "fec1.macaddr=${eth1addr}\0" \
189 "ipaddr=192.168.1.60\0" \ 187 "ipaddr=192.168.1.60\0" \
190 "boot_fdt=try\0" \ 188 "boot_fdt=try\0" \
191 "ip_dyn=yes\0" \ 189 "ip_dyn=yes\0" \
192 "panel=G070VW01\0" \ 190 "panel=G070VW01\0" \
193 "optargs= fec.macaddr=${ethaddr} fec1.macaddr=${eth1addr}\0" \
194 "mmcdev="__stringify(CONFIG_SYS_MMC_ENV_DEV)"\0" \ 191 "mmcdev="__stringify(CONFIG_SYS_MMC_ENV_DEV)"\0" \
195 "mmcpart=" __stringify(CONFIG_SYS_MMC_IMG_LOAD_PART) "\0" \ 192 "mmcpart=" __stringify(CONFIG_SYS_MMC_IMG_LOAD_PART) "\0" \
196 "mmcroot=" CONFIG_MMCROOT " rootwait rw\0" \ 193 "mmcroot=" CONFIG_MMCROOT " rootwait rw\0" \
197 "mmcrootfstype=ext4 rootwait\0" \ 194 "mmcrootfstype=ext4 rootwait\0" \
198 "mmcautodetect=yes\0" \ 195 "mmcautodetect=yes\0" \
199 "mmcargs=setenv bootargs console=${console},${baudrate} " \ 196 "mmcargs=setenv bootargs console=${console},${baudrate} " \
200 "${optargs} " \ 197 "${optargs} " \
201 "rootfstype=${mmcrootfstype} " \ 198 "rootfstype=${mmcrootfstype} " \
202 "root=${mmcroot}\0" \ 199 "root=${mmcroot}\0" \
203 "loadbootenv=load mmc ${mmcdev}:${mmcpart} ${loadaddr} uEnv.txt\0" \ 200 "loadbootenv=load mmc ${mmcdev}:${mmcpart} ${loadaddr} uEnv.txt\0" \
204 "importbootenv=echo Importing environment from mmc (uEnv.txt)...; " \ 201 "importbootenv=echo Importing environment from mmc (uEnv.txt)...; " \
205 "env import -t $loadaddr $filesize\0" \ 202 "env import -t $loadaddr $filesize\0" \
206 "loadbootscript=" \ 203 "loadbootscript=" \
207 "fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${script};\0" \ 204 "fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${script};\0" \
208 "bootscript=echo Running bootscript from mmc ...; " \ 205 "bootscript=echo Running bootscript from mmc ...; " \
209 "source\0" \ 206 "source\0" \
210 "loadimage=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}\0" \ 207 "loadimage=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}\0" \
211 "loadzimage=load mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}\0" \ 208 "loadzimage=load mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}\0" \
212 "loadfdt=load mmc ${mmcdev}:${mmcpart} ${fdt_addr} /dtbs/${fdt_file}\0" \ 209 "loadfdt=load mmc ${mmcdev}:${mmcpart} ${fdt_addr} /dtbs/${fdt_file}\0" \
213 "mmcboot=echo Booting from mmc ...; " \ 210 "mmcboot=echo Booting from mmc ...; " \
214 "run mmcargs; " \ 211 "run mmcargs; " \
215 "if test ${boot_fdt} = yes || test ${boot_fdt} = try; then " \ 212 "if test ${boot_fdt} = yes || test ${boot_fdt} = try; then " \
216 "if run loadfdt; then " \ 213 "if run loadfdt; then " \
217 "bootz ${loadaddr} - ${fdt_addr}; " \ 214 "bootz ${loadaddr} - ${fdt_addr}; " \
218 "else " \ 215 "else " \
219 "if test ${boot_fdt} = try; then " \ 216 "if test ${boot_fdt} = try; then " \
220 "bootz; " \ 217 "bootz; " \
221 "else " \ 218 "else " \
222 "echo WARN: Cannot load the DT; " \ 219 "echo WARN: Cannot load the DT; " \
223 "fi; " \ 220 "fi; " \
224 "fi; " \ 221 "fi; " \
225 "else " \ 222 "else " \
226 "bootz; " \ 223 "bootz; " \
227 "fi;\0" \ 224 "fi;\0" \
228 "netargs=setenv bootargs console=${console},${baudrate} " \ 225 "netargs=setenv bootargs console=${console},${baudrate} " \
229 "root=/dev/nfs " \ 226 "root=/dev/nfs " \
230 "ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp\0" \ 227 "ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp\0" \
231 "netboot=echo Booting from net ...; " \ 228 "netboot=echo Booting from net ...; " \
232 "run netargs; " \ 229 "run netargs; " \
233 "if test ${ip_dyn} = yes; then " \ 230 "if test ${ip_dyn} = yes; then " \
234 "setenv get_cmd dhcp; " \ 231 "setenv get_cmd dhcp; " \
235 "else " \ 232 "else " \
236 "setenv get_cmd tftp; " \ 233 "setenv get_cmd tftp; " \
237 "fi; " \ 234 "fi; " \
238 "${get_cmd} ${image}; " \ 235 "${get_cmd} ${image}; " \
239 "if test ${boot_fdt} = yes || test ${boot_fdt} = try; then " \ 236 "if test ${boot_fdt} = yes || test ${boot_fdt} = try; then " \
240 "if ${get_cmd} ${fdt_addr} ${fdt_file}; then " \ 237 "if ${get_cmd} ${fdt_addr} ${fdt_file}; then " \
241 "bootz ${loadaddr} - ${fdt_addr}; " \ 238 "bootz ${loadaddr} - ${fdt_addr}; " \
242 "else " \ 239 "else " \
243 "if test ${boot_fdt} = try; then " \ 240 "if test ${boot_fdt} = try; then " \
244 "bootz; " \ 241 "bootz; " \
245 "else " \ 242 "else " \
246 "echo WARN: Cannot load the DT; " \ 243 "echo WARN: Cannot load the DT; " \
247 "fi; " \ 244 "fi; " \
248 "fi; " \ 245 "fi; " \
249 "else " \ 246 "else " \
250 "bootz; " \ 247 "bootz; " \
251 "fi;\0" 248 "fi;\0"
252 249
253 #define CONFIG_BOOTCOMMAND \ 250 #define CONFIG_BOOTCOMMAND \
254 "mmc dev ${mmcdev};" \ 251 "mmc dev ${mmcdev};" \
255 "if mmc rescan; then " \ 252 "if mmc rescan; then " \
256 "echo SD/MMC found on device ${mmcdev};" \ 253 "echo SD/MMC found on device ${mmcdev};" \
257 "if run loadbootenv; then " \ 254 "if run loadbootenv; then " \
258 "run importbootenv;" \ 255 "run importbootenv;" \
259 "fi;" \ 256 "fi;" \
260 "echo Checking if uenvcmd is set ...;" \ 257 "echo Checking if uenvcmd is set ...;" \
261 "if test -n $uenvcmd; then " \ 258 "if test -n $uenvcmd; then " \
262 "echo Running uenvcmd ...;" \ 259 "echo Running uenvcmd ...;" \
263 "run uenvcmd;" \ 260 "run uenvcmd;" \
264 "fi;" \ 261 "fi;" \
265 "echo Running default loadzimage ...;" \ 262 "echo Running default loadzimage ...;" \
266 "if run loadzimage; then " \ 263 "if run loadzimage; then " \
267 "run loadfdt;" \ 264 "run loadfdt;" \
268 "run mmcboot;" \ 265 "run mmcboot;" \
269 "fi;" \ 266 "fi;" \
270 "else run netboot; fi" 267 "else run netboot; fi"
271 #endif 268 #endif
272 269
273 #define CONFIG_CMD_MEMTEST 270 #define CONFIG_CMD_MEMTEST
274 #define CONFIG_SYS_MEMTEST_START 0x80000000 271 #define CONFIG_SYS_MEMTEST_START 0x80000000
275 #define CONFIG_SYS_MEMTEST_END (CONFIG_SYS_MEMTEST_START + 0x20000000) 272 #define CONFIG_SYS_MEMTEST_END (CONFIG_SYS_MEMTEST_START + 0x20000000)
276 273
277 #define CONFIG_SYS_LOAD_ADDR CONFIG_LOADADDR 274 #define CONFIG_SYS_LOAD_ADDR CONFIG_LOADADDR
278 #define CONFIG_SYS_HZ 1000 275 #define CONFIG_SYS_HZ 1000
279 276
280 #define CONFIG_STACKSIZE SZ_128K 277 #define CONFIG_STACKSIZE SZ_128K
281 278
282 /* Physical Memory Map */ 279 /* Physical Memory Map */
283 #define CONFIG_NR_DRAM_BANKS 1 280 #define CONFIG_NR_DRAM_BANKS 1
284 #define PHYS_SDRAM MMDC0_ARB_BASE_ADDR 281 #define PHYS_SDRAM MMDC0_ARB_BASE_ADDR
285 282
286 #define CONFIG_SYS_SDRAM_BASE PHYS_SDRAM 283 #define CONFIG_SYS_SDRAM_BASE PHYS_SDRAM
287 #define CONFIG_SYS_INIT_RAM_ADDR IRAM_BASE_ADDR 284 #define CONFIG_SYS_INIT_RAM_ADDR IRAM_BASE_ADDR
288 #define CONFIG_SYS_INIT_RAM_SIZE IRAM_SIZE 285 #define CONFIG_SYS_INIT_RAM_SIZE IRAM_SIZE
289 286
290 #define CONFIG_SYS_INIT_SP_OFFSET \ 287 #define CONFIG_SYS_INIT_SP_OFFSET \
291 (CONFIG_SYS_INIT_RAM_SIZE - GENERATED_GBL_DATA_SIZE) 288 (CONFIG_SYS_INIT_RAM_SIZE - GENERATED_GBL_DATA_SIZE)
292 #define CONFIG_SYS_INIT_SP_ADDR \ 289 #define CONFIG_SYS_INIT_SP_ADDR \
293 (CONFIG_SYS_INIT_RAM_ADDR + CONFIG_SYS_INIT_SP_OFFSET) 290 (CONFIG_SYS_INIT_RAM_ADDR + CONFIG_SYS_INIT_SP_OFFSET)
294 291
295 /* FLASH and environment organization */ 292 /* FLASH and environment organization */
296 #define CONFIG_SYS_NO_FLASH 293 #define CONFIG_SYS_NO_FLASH
297 #define CONFIG_ENV_SIZE SZ_8K 294 #define CONFIG_ENV_SIZE SZ_8K
298 295
299 /* 296 /*
300 * If want to use nand, define CONFIG_NAND_MXS and rework board 297 * If want to use nand, define CONFIG_NAND_MXS and rework board
301 * to support nand, since emmc has pin conflicts with nand 298 * to support nand, since emmc has pin conflicts with nand
302 */ 299 */
303 #ifdef CONFIG_SYS_USE_NAND 300 #ifdef CONFIG_SYS_USE_NAND
304 #define CONFIG_CMD_NAND 301 #define CONFIG_CMD_NAND
305 #define CONFIG_CMD_NAND_TRIMFFS 302 #define CONFIG_CMD_NAND_TRIMFFS
306 303
307 /* NAND stuff */ 304 /* NAND stuff */
308 #define CONFIG_NAND_MXS 305 #define CONFIG_NAND_MXS
309 #define CONFIG_SYS_MAX_NAND_DEVICE 1 306 #define CONFIG_SYS_MAX_NAND_DEVICE 1
310 #define CONFIG_SYS_NAND_BASE 0x40000000 307 #define CONFIG_SYS_NAND_BASE 0x40000000
311 #define CONFIG_SYS_NAND_5_ADDR_CYCLE 308 #define CONFIG_SYS_NAND_5_ADDR_CYCLE
312 #define CONFIG_SYS_NAND_ONFI_DETECTION 309 #define CONFIG_SYS_NAND_ONFI_DETECTION
313 310
314 /* DMA stuff, needed for GPMI/MXS NAND support */ 311 /* DMA stuff, needed for GPMI/MXS NAND support */
315 #define CONFIG_APBH_DMA 312 #define CONFIG_APBH_DMA
316 #define CONFIG_APBH_DMA_BURST 313 #define CONFIG_APBH_DMA_BURST
317 #define CONFIG_APBH_DMA_BURST8 314 #define CONFIG_APBH_DMA_BURST8
318 #endif 315 #endif
319 316
320 #ifdef CONFIG_SYS_USE_QSPI 317 #ifdef CONFIG_SYS_USE_QSPI
321 #define CONFIG_FSL_QSPI 318 #define CONFIG_FSL_QSPI
322 #define CONFIG_CMD_SF 319 #define CONFIG_CMD_SF
323 #define CONFIG_SPI_FLASH 320 #define CONFIG_SPI_FLASH
324 #define CONFIG_SPI_FLASH_MACRONIX 321 #define CONFIG_SPI_FLASH_MACRONIX
325 #define CONFIG_SPI_FLASH_BAR 322 #define CONFIG_SPI_FLASH_BAR
326 #define CONFIG_SF_DEFAULT_BUS 0 323 #define CONFIG_SF_DEFAULT_BUS 0
327 #define CONFIG_SF_DEFAULT_CS 0 324 #define CONFIG_SF_DEFAULT_CS 0
328 #define CONFIG_SF_DEFAULT_SPEED 40000000 325 #define CONFIG_SF_DEFAULT_SPEED 40000000
329 #define CONFIG_SF_DEFAULT_MODE SPI_MODE_0 326 #define CONFIG_SF_DEFAULT_MODE SPI_MODE_0
330 #define CONFIG_QSPI_BASE QSPI1_IPS_BASE_ADDR 327 #define CONFIG_QSPI_BASE QSPI1_IPS_BASE_ADDR
331 #define CONFIG_QSPI_MEMMAP_BASE QSPI0_ARB_BASE_ADDR 328 #define CONFIG_QSPI_MEMMAP_BASE QSPI0_ARB_BASE_ADDR
332 #endif 329 #endif
333 330
334 #if defined(CONFIG_ENV_IS_IN_MMC) 331 #if defined(CONFIG_ENV_IS_IN_MMC)
335 #define CONFIG_ENV_OFFSET (12 * SZ_64K) 332 #define CONFIG_ENV_OFFSET (12 * SZ_64K)
336 #elif defined(CONFIG_ENV_IS_IN_SPI_FLASH) 333 #elif defined(CONFIG_ENV_IS_IN_SPI_FLASH)
337 #define CONFIG_ENV_OFFSET (768 * 1024) 334 #define CONFIG_ENV_OFFSET (768 * 1024)
338 #define CONFIG_ENV_SECT_SIZE (64 * 1024) 335 #define CONFIG_ENV_SECT_SIZE (64 * 1024)
339 #define CONFIG_ENV_SPI_BUS CONFIG_SF_DEFAULT_BUS 336 #define CONFIG_ENV_SPI_BUS CONFIG_SF_DEFAULT_BUS
340 #define CONFIG_ENV_SPI_CS CONFIG_SF_DEFAULT_CS 337 #define CONFIG_ENV_SPI_CS CONFIG_SF_DEFAULT_CS
341 #define CONFIG_ENV_SPI_MODE CONFIG_SF_DEFAULT_MODE 338 #define CONFIG_ENV_SPI_MODE CONFIG_SF_DEFAULT_MODE
342 #define CONFIG_ENV_SPI_MAX_HZ CONFIG_SF_DEFAULT_SPEED 339 #define CONFIG_ENV_SPI_MAX_HZ CONFIG_SF_DEFAULT_SPEED
343 #elif defined(CONFIG_ENV_IS_IN_NAND) 340 #elif defined(CONFIG_ENV_IS_IN_NAND)
344 #undef CONFIG_ENV_SIZE 341 #undef CONFIG_ENV_SIZE
345 #define CONFIG_ENV_OFFSET (60 << 20) 342 #define CONFIG_ENV_OFFSET (60 << 20)
346 #define CONFIG_ENV_SECT_SIZE (128 << 10) 343 #define CONFIG_ENV_SECT_SIZE (128 << 10)
347 #define CONFIG_ENV_SIZE CONFIG_ENV_SECT_SIZE 344 #define CONFIG_ENV_SIZE CONFIG_ENV_SECT_SIZE
348 #endif 345 #endif
349 346
350 #ifdef CONFIG_SYS_USE_NAND 347 #ifdef CONFIG_SYS_USE_NAND
351 #define CONFIG_SYS_FSL_USDHC_NUM 1 348 #define CONFIG_SYS_FSL_USDHC_NUM 1
352 #else 349 #else
353 #define CONFIG_SYS_FSL_USDHC_NUM 2 350 #define CONFIG_SYS_FSL_USDHC_NUM 2
354 #endif 351 #endif
355 352
356 /* MMC Config*/ 353 /* MMC Config*/
357 #define CONFIG_SYS_FSL_ESDHC_ADDR 0 354 #define CONFIG_SYS_FSL_ESDHC_ADDR 0
358 #define CONFIG_SYS_MMC_ENV_DEV 1 /* USDHC3 */ 355 #define CONFIG_SYS_MMC_ENV_DEV 1 /* USDHC3 */
359 #define CONFIG_SYS_MMC_ENV_PART 0 /* user area */ 356 #define CONFIG_SYS_MMC_ENV_PART 0 /* user area */
360 #define CONFIG_MMCROOT "/dev/mmcblk1p2" /* USDHC3 */ 357 #define CONFIG_MMCROOT "/dev/mmcblk1p2" /* USDHC3 */
361 /*#if defined(CONFIG_MX7D) 358 /*#if defined(CONFIG_MX7D)
362 #define CONFIG_DEFAULT_FDT_FILE "imx7d-smarcfimx7.dtb" 359 #define CONFIG_DEFAULT_FDT_FILE "imx7d-smarcfimx7.dtb"
363 #endif*/ 360 #endif*/
364 361
365 /* USB Configs */ 362 /* USB Configs */
366 #define CONFIG_CMD_USB 363 #define CONFIG_CMD_USB
367 #define CONFIG_USB_EHCI 364 #define CONFIG_USB_EHCI
368 #define CONFIG_USB_EHCI_MX7 365 #define CONFIG_USB_EHCI_MX7
369 #define CONFIG_USB_STORAGE 366 #define CONFIG_USB_STORAGE
370 #define CONFIG_EHCI_HCD_INIT_AFTER_RESET 367 #define CONFIG_EHCI_HCD_INIT_AFTER_RESET
371 #define CONFIG_USB_HOST_ETHER 368 #define CONFIG_USB_HOST_ETHER
372 #define CONFIG_USB_ETHER_ASIX 369 #define CONFIG_USB_ETHER_ASIX
373 #define CONFIG_MXC_USB_PORTSC (PORT_PTS_UTMI | PORT_PTS_PTW) 370 #define CONFIG_MXC_USB_PORTSC (PORT_PTS_UTMI | PORT_PTS_PTW)
374 #define CONFIG_MXC_USB_FLAGS 0 371 #define CONFIG_MXC_USB_FLAGS 0
375 #define CONFIG_USB_MAX_CONTROLLER_COUNT 2 372 #define CONFIG_USB_MAX_CONTROLLER_COUNT 2
376 373
377 #define CONFIG_IMX_THERMAL 374 #define CONFIG_IMX_THERMAL
378 375
379 #define CONFIG_CMD_BMODE 376 #define CONFIG_CMD_BMODE
380 377
381 #define CONFIG_VIDEO 378 #define CONFIG_VIDEO
382 #ifdef CONFIG_VIDEO 379 #ifdef CONFIG_VIDEO
383 #define CONFIG_CFB_CONSOLE 380 #define CONFIG_CFB_CONSOLE
384 #define CONFIG_VIDEO_MXS 381 #define CONFIG_VIDEO_MXS
385 #define CONFIG_VIDEO_LOGO 382 #define CONFIG_VIDEO_LOGO
386 #define CONFIG_VIDEO_SW_CURSOR 383 #define CONFIG_VIDEO_SW_CURSOR
387 #define CONFIG_VGA_AS_SINGLE_DEVICE 384 #define CONFIG_VGA_AS_SINGLE_DEVICE
388 #define CONFIG_SYS_CONSOLE_IS_IN_ENV 385 #define CONFIG_SYS_CONSOLE_IS_IN_ENV
389 #define CONFIG_SPLASH_SCREEN 386 #define CONFIG_SPLASH_SCREEN
390 #define CONFIG_SPLASH_SCREEN_ALIGN 387 #define CONFIG_SPLASH_SCREEN_ALIGN
391 #define CONFIG_CMD_BMP 388 #define CONFIG_CMD_BMP
392 #define CONFIG_BMP_16BPP 389 #define CONFIG_BMP_16BPP
393 #define CONFIG_VIDEO_BMP_RLE8 390 #define CONFIG_VIDEO_BMP_RLE8
394 #define CONFIG_VIDEO_BMP_LOGO 391 #define CONFIG_VIDEO_BMP_LOGO
395 #define CONFIG_IMX_VIDEO_SKIP 392 #define CONFIG_IMX_VIDEO_SKIP
396 #endif 393 #endif
397 394
398 /* #define CONFIG_SPLASH_SCREEN*/ 395 /* #define CONFIG_SPLASH_SCREEN*/
399 /* #define CONFIG_MXC_EPDC*/ 396 /* #define CONFIG_MXC_EPDC*/
400 397
401 /* 398 /*
402 * SPLASH SCREEN Configs 399 * SPLASH SCREEN Configs
403 */ 400 */
404 #if defined(CONFIG_SPLASH_SCREEN) && defined(CONFIG_MXC_EPDC) 401 #if defined(CONFIG_SPLASH_SCREEN) && defined(CONFIG_MXC_EPDC)
405 /* 402 /*
406 * Framebuffer and LCD 403 * Framebuffer and LCD
407 */ 404 */
408 #define CONFIG_CFB_CONSOLE 405 #define CONFIG_CFB_CONSOLE
409 #define CONFIG_CMD_BMP 406 #define CONFIG_CMD_BMP
410 #define CONFIG_LCD 407 #define CONFIG_LCD
411 #define CONFIG_SYS_CONSOLE_IS_IN_ENV 408 #define CONFIG_SYS_CONSOLE_IS_IN_ENV
412 409
413 #undef LCD_TEST_PATTERN 410 #undef LCD_TEST_PATTERN
414 /* #define CONFIG_SPLASH_IS_IN_MMC 1 */ 411 /* #define CONFIG_SPLASH_IS_IN_MMC 1 */
415 #define LCD_BPP LCD_MONOCHROME 412 #define LCD_BPP LCD_MONOCHROME
416 /* #define CONFIG_SPLASH_SCREEN_ALIGN 1 */ 413 /* #define CONFIG_SPLASH_SCREEN_ALIGN 1 */
417 414
418 #define CONFIG_WAVEFORM_BUF_SIZE 0x400000 415 #define CONFIG_WAVEFORM_BUF_SIZE 0x400000
419 #endif 416 #endif
420 417
421 #if defined(CONFIG_MXC_EPDC) && defined(CONFIG_SYS_USE_QSPI) 418 #if defined(CONFIG_MXC_EPDC) && defined(CONFIG_SYS_USE_QSPI)
422 #error "EPDC Pins conflicts QSPI, Either EPDC or QSPI can be enabled!" 419 #error "EPDC Pins conflicts QSPI, Either EPDC or QSPI can be enabled!"
423 #endif 420 #endif
424 421
425 #if defined(CONFIG_ANDROID_SUPPORT) 422 #if defined(CONFIG_ANDROID_SUPPORT)
426 #include "mx7dsabresdandroid.h" 423 #include "mx7dsabresdandroid.h"
427 #else 424 #else
428 #define CONFIG_CI_UDC 425 #define CONFIG_CI_UDC
429 #define CONFIG_USBD_HS 426 #define CONFIG_USBD_HS
430 #define CONFIG_USB_GADGET_DUALSPEED 427 #define CONFIG_USB_GADGET_DUALSPEED
431 428
432 #define CONFIG_USB_GADGET 429 #define CONFIG_USB_GADGET
433 #define CONFIG_CMD_USB_MASS_STORAGE 430 #define CONFIG_CMD_USB_MASS_STORAGE
434 #define CONFIG_USB_FUNCTION_MASS_STORAGE 431 #define CONFIG_USB_FUNCTION_MASS_STORAGE
435 #define CONFIG_USB_GADGET_DOWNLOAD 432 #define CONFIG_USB_GADGET_DOWNLOAD
436 #define CONFIG_USB_GADGET_VBUS_DRAW 2 433 #define CONFIG_USB_GADGET_VBUS_DRAW 2
437 434
438 #define CONFIG_G_DNL_VENDOR_NUM 0x0525 435 #define CONFIG_G_DNL_VENDOR_NUM 0x0525
439 #define CONFIG_G_DNL_PRODUCT_NUM 0xa4a5 436 #define CONFIG_G_DNL_PRODUCT_NUM 0xa4a5
440 #define CONFIG_G_DNL_MANUFACTURER "FSL" 437 #define CONFIG_G_DNL_MANUFACTURER "FSL"
441 438
442 /* USB Device Firmware Update support */ 439 /* USB Device Firmware Update support */
443 #define CONFIG_CMD_DFU 440 #define CONFIG_CMD_DFU
444 #define CONFIG_USB_FUNCTION_DFU 441 #define CONFIG_USB_FUNCTION_DFU
445 #define CONFIG_DFU_MMC 442 #define CONFIG_DFU_MMC
446 #define CONFIG_DFU_RAM 443 #define CONFIG_DFU_RAM
447 #endif 444 #endif
448 445
449 #endif /* __CONFIG_H */ 446 #endif /* __CONFIG_H */
450 447