Commit 9bd91eb64588d4eefd59bf3fc906a296d594111f
1 parent
b03fe79506
Exists in
smarc-rel_imx_4.1.15_2.0.0_ga
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, ®); | 1083 | pmic_reg_read(p, PFUZE3000_DEVICEID, ®); |
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, ®); | 1088 | pmic_reg_read(p, PFUZE3000_LDOGCTL, ®); |
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, ®); | 1103 | pmic_reg_read(p, PFUZE3000_SW1BVOLT, ®); |
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(®s->hw_lcdif_ctrl_reg); | 96 | mxs_reset_block(®s->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 | ®s->hw_lcdif_ctrl); | 123 | ®s->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 | ®s->hw_lcdif_ctrl1); | 126 | ®s->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 | ®s->hw_lcdif_transfer_count); | 131 | ®s->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, ®s->hw_lcdif_vdctrl0); | 136 | mode->vsync_len, ®s->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 | ®s->hw_lcdif_vdctrl1); | 139 | ®s->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 | ®s->hw_lcdif_vdctrl2); | 143 | ®s->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 | ®s->hw_lcdif_vdctrl3); | 147 | ®s->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 | ®s->hw_lcdif_vdctrl4); | 149 | ®s->hw_lcdif_vdctrl4); |
150 | 150 | ||
151 | writel(panel->frameAdrs, ®s->hw_lcdif_cur_buf); | 151 | writel(panel->frameAdrs, ®s->hw_lcdif_cur_buf); |
152 | writel(panel->frameAdrs, ®s->hw_lcdif_next_buf); | 152 | writel(panel->frameAdrs, ®s->hw_lcdif_next_buf); |
153 | 153 | ||
154 | /* Flush FIFO first */ | 154 | /* Flush FIFO first */ |
155 | writel(LCDIF_CTRL1_FIFO_CLEAR, ®s->hw_lcdif_ctrl1_set); | 155 | writel(LCDIF_CTRL1_FIFO_CLEAR, ®s->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(®s->hw_lcdif_vdctrl4, LCDIF_VDCTRL4_SYNC_SIGNALS_ON); | 159 | setbits_le32(®s->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, ®s->hw_lcdif_ctrl1_clr); | 163 | writel(LCDIF_CTRL1_FIFO_CLEAR, ®s->hw_lcdif_ctrl1_clr); |
164 | 164 | ||
165 | /* RUN! */ | 165 | /* RUN! */ |
166 | writel(LCDIF_CTRL_RUN, ®s->hw_lcdif_ctrl_set); | 166 | writel(LCDIF_CTRL_RUN, ®s->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, ®s->hw_lcdif_cur_buf_reg); | 183 | writel(panel.frameAdrs, ®s->hw_lcdif_cur_buf_reg); |
179 | writel(panel.frameAdrs, ®s->hw_lcdif_next_buf_reg); | 184 | writel(panel.frameAdrs, ®s->hw_lcdif_next_buf_reg); |
180 | writel(LCDIF_CTRL1_VSYNC_EDGE_IRQ, ®s->hw_lcdif_ctrl1_clr); | 185 | writel(LCDIF_CTRL1_VSYNC_EDGE_IRQ, ®s->hw_lcdif_ctrl1_clr); |
181 | while (--timeout) { | 186 | while (--timeout) { |
182 | if (readl(®s->hw_lcdif_ctrl1_reg) & | 187 | if (readl(®s->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 *)®s->hw_lcdif_ctrl_reg); | 192 | mxs_reset_block((struct mxs_register_32 *)®s->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(®s->hw_lcdif_ctrl) | LCDIF_CTRL_RUN; | 302 | desc.cmd.pio_words[0] = readl(®s->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 |