Commit 59ca4318ab4e1cfd39e6c1343e87eda481226552

Authored by Ye.Li
1 parent 3f66148f3d

MLK-9706 imx: mx6sx19x19arm2: Fix ENET card MAX7322 reset issue

The MAX7322 will fail to work on 19x19 arm2 revB board. This failure
is caused by the MAX7322 reset pin is not released when calling the
setup_fec function.

The MAX7322 reset pin is same as PHY reset pin. This patch fixes the issue
by moving the PHY reset from setup_iomux_fec1 to setup_fec.

Signed-off-by: Ye.Li <B37916@freescale.com>

Showing 1 changed file with 5 additions and 5 deletions Inline Diff

board/freescale/mx6sx_19x19_arm2/mx6sx_19x19_arm2.c
1 /* 1 /*
2 * Copyright (C) 2014 Freescale Semiconductor, Inc. 2 * Copyright (C) 2014 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/iomux.h> 8 #include <asm/arch/iomux.h>
9 #include <asm/arch/imx-regs.h> 9 #include <asm/arch/imx-regs.h>
10 #include <asm/arch/mx6-pins.h> 10 #include <asm/arch/mx6-pins.h>
11 #include <asm/arch/sys_proto.h> 11 #include <asm/arch/sys_proto.h>
12 #include <asm/gpio.h> 12 #include <asm/gpio.h>
13 #include <asm/imx-common/iomux-v3.h> 13 #include <asm/imx-common/iomux-v3.h>
14 #include <asm/imx-common/boot_mode.h> 14 #include <asm/imx-common/boot_mode.h>
15 #include <asm/io.h> 15 #include <asm/io.h>
16 #include <linux/sizes.h> 16 #include <linux/sizes.h>
17 #include <common.h> 17 #include <common.h>
18 #include <fsl_esdhc.h> 18 #include <fsl_esdhc.h>
19 #include <mmc.h> 19 #include <mmc.h>
20 #include <miiphy.h> 20 #include <miiphy.h>
21 #include <netdev.h> 21 #include <netdev.h>
22 #ifdef CONFIG_SYS_I2C_MXC 22 #ifdef CONFIG_SYS_I2C_MXC
23 #include <i2c.h> 23 #include <i2c.h>
24 #include <asm/imx-common/mxc_i2c.h> 24 #include <asm/imx-common/mxc_i2c.h>
25 #endif 25 #endif
26 #include <asm/arch/crm_regs.h> 26 #include <asm/arch/crm_regs.h>
27 27
28 #ifdef CONFIG_VIDEO_MXS 28 #ifdef CONFIG_VIDEO_MXS
29 #include <linux/fb.h> 29 #include <linux/fb.h>
30 #include <mxsfb.h> 30 #include <mxsfb.h>
31 #endif 31 #endif
32 32
33 DECLARE_GLOBAL_DATA_PTR; 33 DECLARE_GLOBAL_DATA_PTR;
34 34
35 #define UART_PAD_CTRL (PAD_CTL_PKE | PAD_CTL_PUE | \ 35 #define UART_PAD_CTRL (PAD_CTL_PKE | PAD_CTL_PUE | \
36 PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED | \ 36 PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED | \
37 PAD_CTL_DSE_40ohm | PAD_CTL_SRE_FAST | PAD_CTL_HYS) 37 PAD_CTL_DSE_40ohm | PAD_CTL_SRE_FAST | PAD_CTL_HYS)
38 38
39 #define USDHC_PAD_CTRL (PAD_CTL_PKE | PAD_CTL_PUE | \ 39 #define USDHC_PAD_CTRL (PAD_CTL_PKE | PAD_CTL_PUE | \
40 PAD_CTL_PUS_22K_UP | PAD_CTL_SPEED_LOW | \ 40 PAD_CTL_PUS_22K_UP | PAD_CTL_SPEED_LOW | \
41 PAD_CTL_DSE_80ohm | PAD_CTL_SRE_FAST | PAD_CTL_HYS) 41 PAD_CTL_DSE_80ohm | PAD_CTL_SRE_FAST | PAD_CTL_HYS)
42 42
43 #define ENET_PAD_CTRL (PAD_CTL_PUS_100K_UP | PAD_CTL_PUE | \ 43 #define ENET_PAD_CTRL (PAD_CTL_PUS_100K_UP | PAD_CTL_PUE | \
44 PAD_CTL_SPEED_MED | \ 44 PAD_CTL_SPEED_MED | \
45 PAD_CTL_DSE_40ohm | PAD_CTL_SRE_FAST) 45 PAD_CTL_DSE_40ohm | PAD_CTL_SRE_FAST)
46 46
47 #define ENET_RX_PAD_CTRL (PAD_CTL_PKE | PAD_CTL_PUE | \ 47 #define ENET_RX_PAD_CTRL (PAD_CTL_PKE | PAD_CTL_PUE | \
48 PAD_CTL_SPEED_MED | PAD_CTL_SRE_FAST) 48 PAD_CTL_SPEED_MED | PAD_CTL_SRE_FAST)
49 49
50 #define I2C_PAD_CTRL (PAD_CTL_PKE | PAD_CTL_PUE | \ 50 #define I2C_PAD_CTRL (PAD_CTL_PKE | PAD_CTL_PUE | \
51 PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED | \ 51 PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED | \
52 PAD_CTL_DSE_40ohm | PAD_CTL_HYS | \ 52 PAD_CTL_DSE_40ohm | PAD_CTL_HYS | \
53 PAD_CTL_ODE) 53 PAD_CTL_ODE)
54 54
55 #define LCD_PAD_CTRL (PAD_CTL_HYS | PAD_CTL_PUS_100K_UP | PAD_CTL_PUE | \ 55 #define LCD_PAD_CTRL (PAD_CTL_HYS | PAD_CTL_PUS_100K_UP | PAD_CTL_PUE | \
56 PAD_CTL_PKE | PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm) 56 PAD_CTL_PKE | PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm)
57 57
58 #define GPMI_PAD_CTRL0 (PAD_CTL_PKE | PAD_CTL_PUE | PAD_CTL_PUS_100K_UP) 58 #define GPMI_PAD_CTRL0 (PAD_CTL_PKE | PAD_CTL_PUE | PAD_CTL_PUS_100K_UP)
59 #define GPMI_PAD_CTRL1 (PAD_CTL_DSE_40ohm | PAD_CTL_SPEED_MED | \ 59 #define GPMI_PAD_CTRL1 (PAD_CTL_DSE_40ohm | PAD_CTL_SPEED_MED | \
60 PAD_CTL_SRE_FAST) 60 PAD_CTL_SRE_FAST)
61 #define GPMI_PAD_CTRL2 (GPMI_PAD_CTRL0 | GPMI_PAD_CTRL1) 61 #define GPMI_PAD_CTRL2 (GPMI_PAD_CTRL0 | GPMI_PAD_CTRL1)
62 62
63 #define SPI_PAD_CTRL (PAD_CTL_HYS | \ 63 #define SPI_PAD_CTRL (PAD_CTL_HYS | \
64 PAD_CTL_SPEED_MED | \ 64 PAD_CTL_SPEED_MED | \
65 PAD_CTL_DSE_40ohm | PAD_CTL_SRE_FAST) 65 PAD_CTL_DSE_40ohm | PAD_CTL_SRE_FAST)
66 66
67 #define WEIM_NOR_PAD_CTRL (PAD_CTL_PKE | PAD_CTL_PUE | \ 67 #define WEIM_NOR_PAD_CTRL (PAD_CTL_PKE | PAD_CTL_PUE | \
68 PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED | \ 68 PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED | \
69 PAD_CTL_DSE_40ohm | PAD_CTL_SRE_FAST) 69 PAD_CTL_DSE_40ohm | PAD_CTL_SRE_FAST)
70 70
71 #define WEIM_NOR_PAD_CTRL2 (PAD_CTL_HYS | PAD_CTL_PKE | PAD_CTL_PUE | \ 71 #define WEIM_NOR_PAD_CTRL2 (PAD_CTL_HYS | PAD_CTL_PKE | PAD_CTL_PUE | \
72 PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED | \ 72 PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED | \
73 PAD_CTL_DSE_40ohm) 73 PAD_CTL_DSE_40ohm)
74 74
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 /* I2C1 for PMIC */ 78 /* I2C1 for PMIC */
79 struct i2c_pads_info i2c_pad_info1 = { 79 struct i2c_pads_info i2c_pad_info1 = {
80 .scl = { 80 .scl = {
81 .i2c_mode = MX6SX_PAD_GPIO1_IO00__I2C1_SCL | PC, 81 .i2c_mode = MX6SX_PAD_GPIO1_IO00__I2C1_SCL | PC,
82 .gpio_mode = MX6SX_PAD_GPIO1_IO00__GPIO1_IO_0 | PC, 82 .gpio_mode = MX6SX_PAD_GPIO1_IO00__GPIO1_IO_0 | PC,
83 .gp = IMX_GPIO_NR(1, 0), 83 .gp = IMX_GPIO_NR(1, 0),
84 }, 84 },
85 .sda = { 85 .sda = {
86 .i2c_mode = MX6SX_PAD_GPIO1_IO01__I2C1_SDA | PC, 86 .i2c_mode = MX6SX_PAD_GPIO1_IO01__I2C1_SDA | PC,
87 .gpio_mode = MX6SX_PAD_GPIO1_IO01__GPIO1_IO_1 | PC, 87 .gpio_mode = MX6SX_PAD_GPIO1_IO01__GPIO1_IO_1 | PC,
88 .gp = IMX_GPIO_NR(1, 1), 88 .gp = IMX_GPIO_NR(1, 1),
89 }, 89 },
90 }; 90 };
91 91
92 /* I2C2 */ 92 /* I2C2 */
93 struct i2c_pads_info i2c_pad_info2 = { 93 struct i2c_pads_info i2c_pad_info2 = {
94 .scl = { 94 .scl = {
95 .i2c_mode = MX6SX_PAD_GPIO1_IO02__I2C2_SCL | PC, 95 .i2c_mode = MX6SX_PAD_GPIO1_IO02__I2C2_SCL | PC,
96 .gpio_mode = MX6SX_PAD_GPIO1_IO02__GPIO1_IO_2 | PC, 96 .gpio_mode = MX6SX_PAD_GPIO1_IO02__GPIO1_IO_2 | PC,
97 .gp = IMX_GPIO_NR(1, 2), 97 .gp = IMX_GPIO_NR(1, 2),
98 }, 98 },
99 .sda = { 99 .sda = {
100 .i2c_mode = MX6SX_PAD_GPIO1_IO03__I2C2_SDA | PC, 100 .i2c_mode = MX6SX_PAD_GPIO1_IO03__I2C2_SDA | PC,
101 .gpio_mode = MX6SX_PAD_GPIO1_IO03__GPIO1_IO_3 | PC, 101 .gpio_mode = MX6SX_PAD_GPIO1_IO03__GPIO1_IO_3 | PC,
102 .gp = IMX_GPIO_NR(1, 3), 102 .gp = IMX_GPIO_NR(1, 3),
103 }, 103 },
104 }; 104 };
105 #endif 105 #endif
106 106
107 int dram_init(void) 107 int dram_init(void)
108 { 108 {
109 gd->ram_size = PHYS_SDRAM_SIZE; 109 gd->ram_size = PHYS_SDRAM_SIZE;
110 110
111 return 0; 111 return 0;
112 } 112 }
113 113
114 static iomux_v3_cfg_t const uart1_pads[] = { 114 static iomux_v3_cfg_t const uart1_pads[] = {
115 MX6SX_PAD_GPIO1_IO04__UART1_TX | MUX_PAD_CTRL(UART_PAD_CTRL), 115 MX6SX_PAD_GPIO1_IO04__UART1_TX | MUX_PAD_CTRL(UART_PAD_CTRL),
116 MX6SX_PAD_GPIO1_IO05__UART1_RX | MUX_PAD_CTRL(UART_PAD_CTRL), 116 MX6SX_PAD_GPIO1_IO05__UART1_RX | MUX_PAD_CTRL(UART_PAD_CTRL),
117 }; 117 };
118 118
119 static iomux_v3_cfg_t const usdhc1_pads[] = { 119 static iomux_v3_cfg_t const usdhc1_pads[] = {
120 MX6SX_PAD_SD1_CLK__USDHC1_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL), 120 MX6SX_PAD_SD1_CLK__USDHC1_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL),
121 MX6SX_PAD_SD1_CMD__USDHC1_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL), 121 MX6SX_PAD_SD1_CMD__USDHC1_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL),
122 MX6SX_PAD_SD1_DATA0__USDHC1_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL), 122 MX6SX_PAD_SD1_DATA0__USDHC1_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
123 MX6SX_PAD_SD1_DATA1__USDHC1_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL), 123 MX6SX_PAD_SD1_DATA1__USDHC1_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
124 MX6SX_PAD_SD1_DATA2__USDHC1_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL), 124 MX6SX_PAD_SD1_DATA2__USDHC1_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
125 MX6SX_PAD_SD1_DATA3__USDHC1_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL), 125 MX6SX_PAD_SD1_DATA3__USDHC1_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
126 }; 126 };
127 127
128 #ifdef CONFIG_VIDEO_MXS 128 #ifdef CONFIG_VIDEO_MXS
129 static iomux_v3_cfg_t const lvds_ctrl_pads[] = { 129 static iomux_v3_cfg_t const lvds_ctrl_pads[] = {
130 /* CABC enable */ 130 /* CABC enable */
131 MX6SX_PAD_KEY_ROW1__GPIO2_IO_16 | MUX_PAD_CTRL(NO_PAD_CTRL), 131 MX6SX_PAD_KEY_ROW1__GPIO2_IO_16 | MUX_PAD_CTRL(NO_PAD_CTRL),
132 132
133 /* Use GPIO for Brightness adjustment, duty cycle = period */ 133 /* Use GPIO for Brightness adjustment, duty cycle = period */
134 MX6SX_PAD_GPIO1_IO12__GPIO1_IO_12 | MUX_PAD_CTRL(NO_PAD_CTRL), 134 MX6SX_PAD_GPIO1_IO12__GPIO1_IO_12 | MUX_PAD_CTRL(NO_PAD_CTRL),
135 }; 135 };
136 136
137 static iomux_v3_cfg_t const lcd_pads[] = { 137 static iomux_v3_cfg_t const lcd_pads[] = {
138 MX6SX_PAD_LCD1_CLK__LCDIF1_CLK | MUX_PAD_CTRL(LCD_PAD_CTRL), 138 MX6SX_PAD_LCD1_CLK__LCDIF1_CLK | MUX_PAD_CTRL(LCD_PAD_CTRL),
139 MX6SX_PAD_LCD1_ENABLE__LCDIF1_ENABLE | MUX_PAD_CTRL(LCD_PAD_CTRL), 139 MX6SX_PAD_LCD1_ENABLE__LCDIF1_ENABLE | MUX_PAD_CTRL(LCD_PAD_CTRL),
140 MX6SX_PAD_LCD1_HSYNC__LCDIF1_HSYNC | MUX_PAD_CTRL(LCD_PAD_CTRL), 140 MX6SX_PAD_LCD1_HSYNC__LCDIF1_HSYNC | MUX_PAD_CTRL(LCD_PAD_CTRL),
141 MX6SX_PAD_LCD1_VSYNC__LCDIF1_VSYNC | MUX_PAD_CTRL(LCD_PAD_CTRL), 141 MX6SX_PAD_LCD1_VSYNC__LCDIF1_VSYNC | MUX_PAD_CTRL(LCD_PAD_CTRL),
142 MX6SX_PAD_LCD1_DATA00__LCDIF1_DATA_0 | MUX_PAD_CTRL(LCD_PAD_CTRL), 142 MX6SX_PAD_LCD1_DATA00__LCDIF1_DATA_0 | MUX_PAD_CTRL(LCD_PAD_CTRL),
143 MX6SX_PAD_LCD1_DATA01__LCDIF1_DATA_1 | MUX_PAD_CTRL(LCD_PAD_CTRL), 143 MX6SX_PAD_LCD1_DATA01__LCDIF1_DATA_1 | MUX_PAD_CTRL(LCD_PAD_CTRL),
144 MX6SX_PAD_LCD1_DATA02__LCDIF1_DATA_2 | MUX_PAD_CTRL(LCD_PAD_CTRL), 144 MX6SX_PAD_LCD1_DATA02__LCDIF1_DATA_2 | MUX_PAD_CTRL(LCD_PAD_CTRL),
145 MX6SX_PAD_LCD1_DATA03__LCDIF1_DATA_3 | MUX_PAD_CTRL(LCD_PAD_CTRL), 145 MX6SX_PAD_LCD1_DATA03__LCDIF1_DATA_3 | MUX_PAD_CTRL(LCD_PAD_CTRL),
146 MX6SX_PAD_LCD1_DATA04__LCDIF1_DATA_4 | MUX_PAD_CTRL(LCD_PAD_CTRL), 146 MX6SX_PAD_LCD1_DATA04__LCDIF1_DATA_4 | MUX_PAD_CTRL(LCD_PAD_CTRL),
147 MX6SX_PAD_LCD1_DATA05__LCDIF1_DATA_5 | MUX_PAD_CTRL(LCD_PAD_CTRL), 147 MX6SX_PAD_LCD1_DATA05__LCDIF1_DATA_5 | MUX_PAD_CTRL(LCD_PAD_CTRL),
148 MX6SX_PAD_LCD1_DATA06__LCDIF1_DATA_6 | MUX_PAD_CTRL(LCD_PAD_CTRL), 148 MX6SX_PAD_LCD1_DATA06__LCDIF1_DATA_6 | MUX_PAD_CTRL(LCD_PAD_CTRL),
149 MX6SX_PAD_LCD1_DATA07__LCDIF1_DATA_7 | MUX_PAD_CTRL(LCD_PAD_CTRL), 149 MX6SX_PAD_LCD1_DATA07__LCDIF1_DATA_7 | MUX_PAD_CTRL(LCD_PAD_CTRL),
150 MX6SX_PAD_LCD1_DATA08__LCDIF1_DATA_8 | MUX_PAD_CTRL(LCD_PAD_CTRL), 150 MX6SX_PAD_LCD1_DATA08__LCDIF1_DATA_8 | MUX_PAD_CTRL(LCD_PAD_CTRL),
151 MX6SX_PAD_LCD1_DATA09__LCDIF1_DATA_9 | MUX_PAD_CTRL(LCD_PAD_CTRL), 151 MX6SX_PAD_LCD1_DATA09__LCDIF1_DATA_9 | MUX_PAD_CTRL(LCD_PAD_CTRL),
152 MX6SX_PAD_LCD1_DATA10__LCDIF1_DATA_10 | MUX_PAD_CTRL(LCD_PAD_CTRL), 152 MX6SX_PAD_LCD1_DATA10__LCDIF1_DATA_10 | MUX_PAD_CTRL(LCD_PAD_CTRL),
153 MX6SX_PAD_LCD1_DATA11__LCDIF1_DATA_11 | MUX_PAD_CTRL(LCD_PAD_CTRL), 153 MX6SX_PAD_LCD1_DATA11__LCDIF1_DATA_11 | MUX_PAD_CTRL(LCD_PAD_CTRL),
154 MX6SX_PAD_LCD1_DATA12__LCDIF1_DATA_12 | MUX_PAD_CTRL(LCD_PAD_CTRL), 154 MX6SX_PAD_LCD1_DATA12__LCDIF1_DATA_12 | MUX_PAD_CTRL(LCD_PAD_CTRL),
155 MX6SX_PAD_LCD1_DATA13__LCDIF1_DATA_13 | MUX_PAD_CTRL(LCD_PAD_CTRL), 155 MX6SX_PAD_LCD1_DATA13__LCDIF1_DATA_13 | MUX_PAD_CTRL(LCD_PAD_CTRL),
156 MX6SX_PAD_LCD1_DATA14__LCDIF1_DATA_14 | MUX_PAD_CTRL(LCD_PAD_CTRL), 156 MX6SX_PAD_LCD1_DATA14__LCDIF1_DATA_14 | MUX_PAD_CTRL(LCD_PAD_CTRL),
157 MX6SX_PAD_LCD1_DATA15__LCDIF1_DATA_15 | MUX_PAD_CTRL(LCD_PAD_CTRL), 157 MX6SX_PAD_LCD1_DATA15__LCDIF1_DATA_15 | MUX_PAD_CTRL(LCD_PAD_CTRL),
158 MX6SX_PAD_LCD1_DATA16__LCDIF1_DATA_16 | MUX_PAD_CTRL(LCD_PAD_CTRL), 158 MX6SX_PAD_LCD1_DATA16__LCDIF1_DATA_16 | MUX_PAD_CTRL(LCD_PAD_CTRL),
159 MX6SX_PAD_LCD1_DATA17__LCDIF1_DATA_17 | MUX_PAD_CTRL(LCD_PAD_CTRL), 159 MX6SX_PAD_LCD1_DATA17__LCDIF1_DATA_17 | MUX_PAD_CTRL(LCD_PAD_CTRL),
160 MX6SX_PAD_LCD1_DATA18__LCDIF1_DATA_18 | MUX_PAD_CTRL(LCD_PAD_CTRL), 160 MX6SX_PAD_LCD1_DATA18__LCDIF1_DATA_18 | MUX_PAD_CTRL(LCD_PAD_CTRL),
161 MX6SX_PAD_LCD1_DATA19__LCDIF1_DATA_19 | MUX_PAD_CTRL(LCD_PAD_CTRL), 161 MX6SX_PAD_LCD1_DATA19__LCDIF1_DATA_19 | MUX_PAD_CTRL(LCD_PAD_CTRL),
162 MX6SX_PAD_LCD1_DATA20__LCDIF1_DATA_20 | MUX_PAD_CTRL(LCD_PAD_CTRL), 162 MX6SX_PAD_LCD1_DATA20__LCDIF1_DATA_20 | MUX_PAD_CTRL(LCD_PAD_CTRL),
163 MX6SX_PAD_LCD1_DATA21__LCDIF1_DATA_21 | MUX_PAD_CTRL(LCD_PAD_CTRL), 163 MX6SX_PAD_LCD1_DATA21__LCDIF1_DATA_21 | MUX_PAD_CTRL(LCD_PAD_CTRL),
164 MX6SX_PAD_LCD1_DATA22__LCDIF1_DATA_22 | MUX_PAD_CTRL(LCD_PAD_CTRL), 164 MX6SX_PAD_LCD1_DATA22__LCDIF1_DATA_22 | MUX_PAD_CTRL(LCD_PAD_CTRL),
165 MX6SX_PAD_LCD1_DATA23__LCDIF1_DATA_23 | MUX_PAD_CTRL(LCD_PAD_CTRL), 165 MX6SX_PAD_LCD1_DATA23__LCDIF1_DATA_23 | MUX_PAD_CTRL(LCD_PAD_CTRL),
166 MX6SX_PAD_LCD1_RESET__GPIO3_IO_27 | MUX_PAD_CTRL(NO_PAD_CTRL), 166 MX6SX_PAD_LCD1_RESET__GPIO3_IO_27 | MUX_PAD_CTRL(NO_PAD_CTRL),
167 167
168 /* Use GPIO for Brightness adjustment, duty cycle = period */ 168 /* Use GPIO for Brightness adjustment, duty cycle = period */
169 MX6SX_PAD_GPIO1_IO12__GPIO1_IO_12 | MUX_PAD_CTRL(NO_PAD_CTRL), 169 MX6SX_PAD_GPIO1_IO12__GPIO1_IO_12 | MUX_PAD_CTRL(NO_PAD_CTRL),
170 }; 170 };
171 171
172 172
173 struct lcd_panel_info_t { 173 struct lcd_panel_info_t {
174 unsigned int lcdif_base_addr; 174 unsigned int lcdif_base_addr;
175 int depth; 175 int depth;
176 void (*enable)(struct lcd_panel_info_t const *dev); 176 void (*enable)(struct lcd_panel_info_t const *dev);
177 struct fb_videomode mode; 177 struct fb_videomode mode;
178 }; 178 };
179 179
180 void do_enable_lvds(struct lcd_panel_info_t const *dev) 180 void do_enable_lvds(struct lcd_panel_info_t const *dev)
181 { 181 {
182 enable_lcdif_clock(dev->lcdif_base_addr); 182 enable_lcdif_clock(dev->lcdif_base_addr);
183 enable_lvds(dev->lcdif_base_addr); 183 enable_lvds(dev->lcdif_base_addr);
184 184
185 imx_iomux_v3_setup_multiple_pads(lvds_ctrl_pads, 185 imx_iomux_v3_setup_multiple_pads(lvds_ctrl_pads,
186 ARRAY_SIZE(lvds_ctrl_pads)); 186 ARRAY_SIZE(lvds_ctrl_pads));
187 187
188 /* Enable CABC */ 188 /* Enable CABC */
189 gpio_direction_output(IMX_GPIO_NR(2, 16) , 1); 189 gpio_direction_output(IMX_GPIO_NR(2, 16) , 1);
190 190
191 /* Set Brightness to high */ 191 /* Set Brightness to high */
192 gpio_direction_output(IMX_GPIO_NR(1, 12) , 1); 192 gpio_direction_output(IMX_GPIO_NR(1, 12) , 1);
193 } 193 }
194 194
195 void do_enable_parallel_lcd(struct lcd_panel_info_t const *dev) 195 void do_enable_parallel_lcd(struct lcd_panel_info_t const *dev)
196 { 196 {
197 enable_lcdif_clock(dev->lcdif_base_addr); 197 enable_lcdif_clock(dev->lcdif_base_addr);
198 198
199 imx_iomux_v3_setup_multiple_pads(lcd_pads, ARRAY_SIZE(lcd_pads)); 199 imx_iomux_v3_setup_multiple_pads(lcd_pads, ARRAY_SIZE(lcd_pads));
200 200
201 /* Power up the LCD */ 201 /* Power up the LCD */
202 gpio_direction_output(IMX_GPIO_NR(3, 27) , 1); 202 gpio_direction_output(IMX_GPIO_NR(3, 27) , 1);
203 203
204 /* Set Brightness to high */ 204 /* Set Brightness to high */
205 gpio_direction_output(IMX_GPIO_NR(1, 12) , 1); 205 gpio_direction_output(IMX_GPIO_NR(1, 12) , 1);
206 } 206 }
207 207
208 static struct lcd_panel_info_t const displays[] = {{ 208 static struct lcd_panel_info_t const displays[] = {{
209 .lcdif_base_addr = LCDIF2_BASE_ADDR, 209 .lcdif_base_addr = LCDIF2_BASE_ADDR,
210 .depth = 18, 210 .depth = 18,
211 .enable = do_enable_lvds, 211 .enable = do_enable_lvds,
212 .mode = { 212 .mode = {
213 .name = "Hannstar-XGA", 213 .name = "Hannstar-XGA",
214 .xres = 1024, 214 .xres = 1024,
215 .yres = 768, 215 .yres = 768,
216 .pixclock = 15385, 216 .pixclock = 15385,
217 .left_margin = 220, 217 .left_margin = 220,
218 .right_margin = 40, 218 .right_margin = 40,
219 .upper_margin = 21, 219 .upper_margin = 21,
220 .lower_margin = 7, 220 .lower_margin = 7,
221 .hsync_len = 60, 221 .hsync_len = 60,
222 .vsync_len = 10, 222 .vsync_len = 10,
223 .sync = 0, 223 .sync = 0,
224 .vmode = FB_VMODE_NONINTERLACED 224 .vmode = FB_VMODE_NONINTERLACED
225 } }, { 225 } }, {
226 .lcdif_base_addr = LCDIF1_BASE_ADDR, 226 .lcdif_base_addr = LCDIF1_BASE_ADDR,
227 .depth = 24, 227 .depth = 24,
228 .enable = do_enable_parallel_lcd, 228 .enable = do_enable_parallel_lcd,
229 .mode = { 229 .mode = {
230 .name = "MCIMX28LCD", 230 .name = "MCIMX28LCD",
231 .xres = 800, 231 .xres = 800,
232 .yres = 480, 232 .yres = 480,
233 .pixclock = 29850, 233 .pixclock = 29850,
234 .left_margin = 89, 234 .left_margin = 89,
235 .right_margin = 164, 235 .right_margin = 164,
236 .upper_margin = 23, 236 .upper_margin = 23,
237 .lower_margin = 10, 237 .lower_margin = 10,
238 .hsync_len = 10, 238 .hsync_len = 10,
239 .vsync_len = 10, 239 .vsync_len = 10,
240 .sync = 0, 240 .sync = 0,
241 .vmode = FB_VMODE_NONINTERLACED 241 .vmode = FB_VMODE_NONINTERLACED
242 } } }; 242 } } };
243 243
244 int board_video_skip(void) 244 int board_video_skip(void)
245 { 245 {
246 int i; 246 int i;
247 int ret; 247 int ret;
248 char const *panel = getenv("panel"); 248 char const *panel = getenv("panel");
249 if (!panel) { 249 if (!panel) {
250 panel = displays[0].mode.name; 250 panel = displays[0].mode.name;
251 printf("No panel detected: default to %s\n", panel); 251 printf("No panel detected: default to %s\n", panel);
252 i = 0; 252 i = 0;
253 } else { 253 } else {
254 for (i = 0; i < ARRAY_SIZE(displays); i++) { 254 for (i = 0; i < ARRAY_SIZE(displays); i++) {
255 if (!strcmp(panel, displays[i].mode.name)) 255 if (!strcmp(panel, displays[i].mode.name))
256 break; 256 break;
257 } 257 }
258 } 258 }
259 if (i < ARRAY_SIZE(displays)) { 259 if (i < ARRAY_SIZE(displays)) {
260 ret = mxs_lcd_panel_setup(displays[i].mode, displays[i].depth, 260 ret = mxs_lcd_panel_setup(displays[i].mode, displays[i].depth,
261 displays[i].lcdif_base_addr); 261 displays[i].lcdif_base_addr);
262 if (!ret) { 262 if (!ret) {
263 if (displays[i].enable) 263 if (displays[i].enable)
264 displays[i].enable(displays+i); 264 displays[i].enable(displays+i);
265 printf("Display: %s (%ux%u)\n", 265 printf("Display: %s (%ux%u)\n",
266 displays[i].mode.name, 266 displays[i].mode.name,
267 displays[i].mode.xres, 267 displays[i].mode.xres,
268 displays[i].mode.yres); 268 displays[i].mode.yres);
269 } else 269 } else
270 printf("LCD %s cannot be configured: %d\n", 270 printf("LCD %s cannot be configured: %d\n",
271 displays[i].mode.name, ret); 271 displays[i].mode.name, ret);
272 } else { 272 } else {
273 printf("unsupported panel %s\n", panel); 273 printf("unsupported panel %s\n", panel);
274 return -EINVAL; 274 return -EINVAL;
275 } 275 }
276 276
277 return 0; 277 return 0;
278 } 278 }
279 #endif 279 #endif
280 280
281 #ifdef CONFIG_FEC_MXC 281 #ifdef CONFIG_FEC_MXC
282 static iomux_v3_cfg_t const fec1_pads[] = { 282 static iomux_v3_cfg_t const fec1_pads[] = {
283 MX6SX_PAD_ENET1_MDC__ENET1_MDC | MUX_PAD_CTRL(ENET_PAD_CTRL), 283 MX6SX_PAD_ENET1_MDC__ENET1_MDC | MUX_PAD_CTRL(ENET_PAD_CTRL),
284 MX6SX_PAD_ENET1_MDIO__ENET1_MDIO | MUX_PAD_CTRL(ENET_PAD_CTRL), 284 MX6SX_PAD_ENET1_MDIO__ENET1_MDIO | MUX_PAD_CTRL(ENET_PAD_CTRL),
285 MX6SX_PAD_RGMII1_RX_CTL__ENET1_RX_EN | MUX_PAD_CTRL(ENET_RX_PAD_CTRL), 285 MX6SX_PAD_RGMII1_RX_CTL__ENET1_RX_EN | MUX_PAD_CTRL(ENET_RX_PAD_CTRL),
286 MX6SX_PAD_RGMII1_RD0__ENET1_RX_DATA_0 | MUX_PAD_CTRL(ENET_RX_PAD_CTRL), 286 MX6SX_PAD_RGMII1_RD0__ENET1_RX_DATA_0 | MUX_PAD_CTRL(ENET_RX_PAD_CTRL),
287 MX6SX_PAD_RGMII1_RD1__ENET1_RX_DATA_1 | MUX_PAD_CTRL(ENET_RX_PAD_CTRL), 287 MX6SX_PAD_RGMII1_RD1__ENET1_RX_DATA_1 | MUX_PAD_CTRL(ENET_RX_PAD_CTRL),
288 MX6SX_PAD_RGMII1_RD2__ENET1_RX_DATA_2 | MUX_PAD_CTRL(ENET_RX_PAD_CTRL), 288 MX6SX_PAD_RGMII1_RD2__ENET1_RX_DATA_2 | MUX_PAD_CTRL(ENET_RX_PAD_CTRL),
289 MX6SX_PAD_RGMII1_RD3__ENET1_RX_DATA_3 | MUX_PAD_CTRL(ENET_RX_PAD_CTRL), 289 MX6SX_PAD_RGMII1_RD3__ENET1_RX_DATA_3 | MUX_PAD_CTRL(ENET_RX_PAD_CTRL),
290 MX6SX_PAD_RGMII1_RXC__ENET1_RX_CLK | MUX_PAD_CTRL(ENET_RX_PAD_CTRL), 290 MX6SX_PAD_RGMII1_RXC__ENET1_RX_CLK | MUX_PAD_CTRL(ENET_RX_PAD_CTRL),
291 MX6SX_PAD_RGMII1_TX_CTL__ENET1_TX_EN | MUX_PAD_CTRL(ENET_PAD_CTRL), 291 MX6SX_PAD_RGMII1_TX_CTL__ENET1_TX_EN | MUX_PAD_CTRL(ENET_PAD_CTRL),
292 MX6SX_PAD_RGMII1_TD0__ENET1_TX_DATA_0 | MUX_PAD_CTRL(ENET_PAD_CTRL), 292 MX6SX_PAD_RGMII1_TD0__ENET1_TX_DATA_0 | MUX_PAD_CTRL(ENET_PAD_CTRL),
293 MX6SX_PAD_RGMII1_TD1__ENET1_TX_DATA_1 | MUX_PAD_CTRL(ENET_PAD_CTRL), 293 MX6SX_PAD_RGMII1_TD1__ENET1_TX_DATA_1 | MUX_PAD_CTRL(ENET_PAD_CTRL),
294 MX6SX_PAD_RGMII1_TD2__ENET1_TX_DATA_2 | MUX_PAD_CTRL(ENET_PAD_CTRL), 294 MX6SX_PAD_RGMII1_TD2__ENET1_TX_DATA_2 | MUX_PAD_CTRL(ENET_PAD_CTRL),
295 MX6SX_PAD_RGMII1_TD3__ENET1_TX_DATA_3 | MUX_PAD_CTRL(ENET_PAD_CTRL), 295 MX6SX_PAD_RGMII1_TD3__ENET1_TX_DATA_3 | MUX_PAD_CTRL(ENET_PAD_CTRL),
296 MX6SX_PAD_RGMII1_TXC__ENET1_RGMII_TXC | MUX_PAD_CTRL(ENET_PAD_CTRL), 296 MX6SX_PAD_RGMII1_TXC__ENET1_RGMII_TXC | MUX_PAD_CTRL(ENET_PAD_CTRL),
297 MX6SX_PAD_ENET1_TX_CLK__ENET1_TX_CLK | MUX_PAD_CTRL(ENET_PAD_CTRL), 297 MX6SX_PAD_ENET1_TX_CLK__ENET1_TX_CLK | MUX_PAD_CTRL(ENET_PAD_CTRL),
298 298
299 /* AR8031 PHY Reset. For arm2 board, silder the resistance */ 299 /* AR8031 PHY Reset. For arm2 board, silder the resistance */
300 MX6SX_PAD_SD4_DATA4__GPIO6_IO_18 | MUX_PAD_CTRL(NO_PAD_CTRL), 300 MX6SX_PAD_SD4_DATA4__GPIO6_IO_18 | MUX_PAD_CTRL(NO_PAD_CTRL),
301 }; 301 };
302 302
303 static void setup_iomux_fec1(void) 303 static void setup_iomux_fec1(void)
304 { 304 {
305 imx_iomux_v3_setup_multiple_pads(fec1_pads, ARRAY_SIZE(fec1_pads)); 305 imx_iomux_v3_setup_multiple_pads(fec1_pads, ARRAY_SIZE(fec1_pads));
306
307 /* Reset AR8031 PHY */
308 gpio_direction_output(IMX_GPIO_NR(6, 18) , 0);
309 udelay(500);
310 gpio_set_value(IMX_GPIO_NR(6, 18), 1);
311 } 306 }
312 #endif 307 #endif
313 308
314 static void setup_iomux_uart(void) 309 static void setup_iomux_uart(void)
315 { 310 {
316 imx_iomux_v3_setup_multiple_pads(uart1_pads, ARRAY_SIZE(uart1_pads)); 311 imx_iomux_v3_setup_multiple_pads(uart1_pads, ARRAY_SIZE(uart1_pads));
317 } 312 }
318 313
319 #ifdef CONFIG_QSPI 314 #ifdef CONFIG_QSPI
320 315
321 #define QSPI_PAD_CTRL1 \ 316 #define QSPI_PAD_CTRL1 \
322 (PAD_CTL_SRE_FAST | PAD_CTL_SPEED_HIGH | \ 317 (PAD_CTL_SRE_FAST | PAD_CTL_SPEED_HIGH | \
323 PAD_CTL_PKE | PAD_CTL_PUE | PAD_CTL_PUS_47K_UP | PAD_CTL_DSE_34ohm) 318 PAD_CTL_PKE | PAD_CTL_PUE | PAD_CTL_PUS_47K_UP | PAD_CTL_DSE_34ohm)
324 319
325 #define QSPI_PAD_CTRL2 (QSPI_PAD_CTRL1 | PAD_CTL_DSE_34ohm) 320 #define QSPI_PAD_CTRL2 (QSPI_PAD_CTRL1 | PAD_CTL_DSE_34ohm)
326 321
327 static iomux_v3_cfg_t const quadspi_pads[] = { 322 static iomux_v3_cfg_t const quadspi_pads[] = {
328 MX6SX_PAD_NAND_WP_B__QSPI2_A_DATA_0 | MUX_PAD_CTRL(QSPI_PAD_CTRL1), 323 MX6SX_PAD_NAND_WP_B__QSPI2_A_DATA_0 | MUX_PAD_CTRL(QSPI_PAD_CTRL1),
329 MX6SX_PAD_NAND_READY_B__QSPI2_A_DATA_1 | MUX_PAD_CTRL(QSPI_PAD_CTRL1), 324 MX6SX_PAD_NAND_READY_B__QSPI2_A_DATA_1 | MUX_PAD_CTRL(QSPI_PAD_CTRL1),
330 MX6SX_PAD_NAND_CE0_B__QSPI2_A_DATA_2 | MUX_PAD_CTRL(QSPI_PAD_CTRL1), 325 MX6SX_PAD_NAND_CE0_B__QSPI2_A_DATA_2 | MUX_PAD_CTRL(QSPI_PAD_CTRL1),
331 MX6SX_PAD_NAND_CE1_B__QSPI2_A_DATA_3 | MUX_PAD_CTRL(QSPI_PAD_CTRL1), 326 MX6SX_PAD_NAND_CE1_B__QSPI2_A_DATA_3 | MUX_PAD_CTRL(QSPI_PAD_CTRL1),
332 MX6SX_PAD_NAND_CLE__QSPI2_A_SCLK | MUX_PAD_CTRL(QSPI_PAD_CTRL1), 327 MX6SX_PAD_NAND_CLE__QSPI2_A_SCLK | MUX_PAD_CTRL(QSPI_PAD_CTRL1),
333 MX6SX_PAD_NAND_ALE__QSPI2_A_SS0_B | MUX_PAD_CTRL(QSPI_PAD_CTRL1), 328 MX6SX_PAD_NAND_ALE__QSPI2_A_SS0_B | MUX_PAD_CTRL(QSPI_PAD_CTRL1),
334 MX6SX_PAD_NAND_DATA01__QSPI2_B_DATA_0 | MUX_PAD_CTRL(QSPI_PAD_CTRL1), 329 MX6SX_PAD_NAND_DATA01__QSPI2_B_DATA_0 | MUX_PAD_CTRL(QSPI_PAD_CTRL1),
335 MX6SX_PAD_NAND_DATA00__QSPI2_B_DATA_1 | MUX_PAD_CTRL(QSPI_PAD_CTRL1), 330 MX6SX_PAD_NAND_DATA00__QSPI2_B_DATA_1 | MUX_PAD_CTRL(QSPI_PAD_CTRL1),
336 MX6SX_PAD_NAND_WE_B__QSPI2_B_DATA_2 | MUX_PAD_CTRL(QSPI_PAD_CTRL1), 331 MX6SX_PAD_NAND_WE_B__QSPI2_B_DATA_2 | MUX_PAD_CTRL(QSPI_PAD_CTRL1),
337 MX6SX_PAD_NAND_RE_B__QSPI2_B_DATA_3 | MUX_PAD_CTRL(QSPI_PAD_CTRL1), 332 MX6SX_PAD_NAND_RE_B__QSPI2_B_DATA_3 | MUX_PAD_CTRL(QSPI_PAD_CTRL1),
338 MX6SX_PAD_NAND_DATA03__QSPI2_B_SS0_B | MUX_PAD_CTRL(QSPI_PAD_CTRL1), 333 MX6SX_PAD_NAND_DATA03__QSPI2_B_SS0_B | MUX_PAD_CTRL(QSPI_PAD_CTRL1),
339 MX6SX_PAD_NAND_DATA02__QSPI2_B_SCLK | MUX_PAD_CTRL(QSPI_PAD_CTRL1), 334 MX6SX_PAD_NAND_DATA02__QSPI2_B_SCLK | MUX_PAD_CTRL(QSPI_PAD_CTRL1),
340 335
341 }; 336 };
342 337
343 int board_qspi_init(void) 338 int board_qspi_init(void)
344 { 339 {
345 /* Set the iomux */ 340 /* Set the iomux */
346 imx_iomux_v3_setup_multiple_pads(quadspi_pads, ARRAY_SIZE(quadspi_pads)); 341 imx_iomux_v3_setup_multiple_pads(quadspi_pads, ARRAY_SIZE(quadspi_pads));
347 342
348 /* Set the clock */ 343 /* Set the clock */
349 enable_qspi_clk(1); 344 enable_qspi_clk(1);
350 345
351 return 0; 346 return 0;
352 } 347 }
353 #endif 348 #endif
354 349
355 #ifdef CONFIG_FSL_ESDHC 350 #ifdef CONFIG_FSL_ESDHC
356 static struct fsl_esdhc_cfg usdhc_cfg[1] = { 351 static struct fsl_esdhc_cfg usdhc_cfg[1] = {
357 {USDHC1_BASE_ADDR, 0, 4}, 352 {USDHC1_BASE_ADDR, 0, 4},
358 }; 353 };
359 354
360 int mmc_get_env_devno(void) 355 int mmc_get_env_devno(void)
361 { 356 {
362 u32 soc_sbmr = readl(SRC_BASE_ADDR + 0x4); 357 u32 soc_sbmr = readl(SRC_BASE_ADDR + 0x4);
363 u32 dev_no; 358 u32 dev_no;
364 u32 bootsel; 359 u32 bootsel;
365 360
366 bootsel = (soc_sbmr & 0x000000FF) >> 6 ; 361 bootsel = (soc_sbmr & 0x000000FF) >> 6 ;
367 362
368 /* If not boot from sd/mmc, use default value */ 363 /* If not boot from sd/mmc, use default value */
369 if (bootsel != 1) 364 if (bootsel != 1)
370 return CONFIG_SYS_MMC_ENV_DEV; 365 return CONFIG_SYS_MMC_ENV_DEV;
371 366
372 /* BOOT_CFG2[3] and BOOT_CFG2[4] */ 367 /* BOOT_CFG2[3] and BOOT_CFG2[4] */
373 dev_no = (soc_sbmr & 0x00001800) >> 11; 368 dev_no = (soc_sbmr & 0x00001800) >> 11;
374 369
375 return dev_no; 370 return dev_no;
376 } 371 }
377 372
378 int mmc_map_to_kernel_blk(int dev_no) 373 int mmc_map_to_kernel_blk(int dev_no)
379 { 374 {
380 return dev_no; 375 return dev_no;
381 } 376 }
382 377
383 int board_mmc_getcd(struct mmc *mmc) 378 int board_mmc_getcd(struct mmc *mmc)
384 { 379 {
385 return 1; /* Assume boot SD always present */ 380 return 1; /* Assume boot SD always present */
386 } 381 }
387 int board_mmc_init(bd_t *bis) 382 int board_mmc_init(bd_t *bis)
388 { 383 {
389 /* 384 /*
390 * According to the board_mmc_init() the following map is done: 385 * According to the board_mmc_init() the following map is done:
391 * (U-boot device node) (Physical Port) 386 * (U-boot device node) (Physical Port)
392 * mmc0 USDHC1 (SDA) 387 * mmc0 USDHC1 (SDA)
393 */ 388 */
394 imx_iomux_v3_setup_multiple_pads(usdhc1_pads, ARRAY_SIZE(usdhc1_pads)); 389 imx_iomux_v3_setup_multiple_pads(usdhc1_pads, ARRAY_SIZE(usdhc1_pads));
395 390
396 usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC_CLK); 391 usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC_CLK);
397 return fsl_esdhc_initialize(bis, &usdhc_cfg[0]); 392 return fsl_esdhc_initialize(bis, &usdhc_cfg[0]);
398 } 393 }
399 394
400 int check_mmc_autodetect(void) 395 int check_mmc_autodetect(void)
401 { 396 {
402 char *autodetect_str = getenv("mmcautodetect"); 397 char *autodetect_str = getenv("mmcautodetect");
403 398
404 if ((autodetect_str != NULL) && 399 if ((autodetect_str != NULL) &&
405 (strcmp(autodetect_str, "yes") == 0)) { 400 (strcmp(autodetect_str, "yes") == 0)) {
406 return 1; 401 return 1;
407 } 402 }
408 403
409 return 0; 404 return 0;
410 } 405 }
411 406
412 void board_late_mmc_init(void) 407 void board_late_mmc_init(void)
413 { 408 {
414 char cmd[32]; 409 char cmd[32];
415 char mmcblk[32]; 410 char mmcblk[32];
416 u32 dev_no = mmc_get_env_devno(); 411 u32 dev_no = mmc_get_env_devno();
417 412
418 if (!check_mmc_autodetect()) 413 if (!check_mmc_autodetect())
419 return; 414 return;
420 415
421 setenv_ulong("mmcdev", dev_no); 416 setenv_ulong("mmcdev", dev_no);
422 417
423 /* Set mmcblk env */ 418 /* Set mmcblk env */
424 sprintf(mmcblk, "/dev/mmcblk%dp2 rootwait rw", 419 sprintf(mmcblk, "/dev/mmcblk%dp2 rootwait rw",
425 mmc_map_to_kernel_blk(dev_no)); 420 mmc_map_to_kernel_blk(dev_no));
426 setenv("mmcroot", mmcblk); 421 setenv("mmcroot", mmcblk);
427 422
428 sprintf(cmd, "mmc dev %d", dev_no); 423 sprintf(cmd, "mmc dev %d", dev_no);
429 run_command(cmd, 0); 424 run_command(cmd, 0);
430 } 425 }
431 426
432 #endif 427 #endif
433 428
434 #ifdef CONFIG_SYS_USE_SPINOR 429 #ifdef CONFIG_SYS_USE_SPINOR
435 iomux_v3_cfg_t const ecspi4_pads[] = { 430 iomux_v3_cfg_t const ecspi4_pads[] = {
436 MX6SX_PAD_SD2_CLK__ECSPI4_SCLK | MUX_PAD_CTRL(SPI_PAD_CTRL), 431 MX6SX_PAD_SD2_CLK__ECSPI4_SCLK | MUX_PAD_CTRL(SPI_PAD_CTRL),
437 MX6SX_PAD_SD2_DATA3__ECSPI4_MISO | MUX_PAD_CTRL(SPI_PAD_CTRL), 432 MX6SX_PAD_SD2_DATA3__ECSPI4_MISO | MUX_PAD_CTRL(SPI_PAD_CTRL),
438 MX6SX_PAD_SD2_CMD__ECSPI4_MOSI | MUX_PAD_CTRL(SPI_PAD_CTRL), 433 MX6SX_PAD_SD2_CMD__ECSPI4_MOSI | MUX_PAD_CTRL(SPI_PAD_CTRL),
439 MX6SX_PAD_SD2_DATA2__GPIO6_IO_10 | MUX_PAD_CTRL(NO_PAD_CTRL), 434 MX6SX_PAD_SD2_DATA2__GPIO6_IO_10 | MUX_PAD_CTRL(NO_PAD_CTRL),
440 }; 435 };
441 436
442 void setup_spinor(void) 437 void setup_spinor(void)
443 { 438 {
444 imx_iomux_v3_setup_multiple_pads(ecspi4_pads, 439 imx_iomux_v3_setup_multiple_pads(ecspi4_pads,
445 ARRAY_SIZE(ecspi4_pads)); 440 ARRAY_SIZE(ecspi4_pads));
446 gpio_direction_output(IMX_GPIO_NR(6, 10), 0); 441 gpio_direction_output(IMX_GPIO_NR(6, 10), 0);
447 } 442 }
448 #endif 443 #endif
449 444
450 #ifdef CONFIG_SYS_USE_EIMNOR 445 #ifdef CONFIG_SYS_USE_EIMNOR
451 iomux_v3_cfg_t eimnor_pads[] = { 446 iomux_v3_cfg_t eimnor_pads[] = {
452 MX6SX_PAD_QSPI1A_SCLK__WEIM_DATA_0 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL2), 447 MX6SX_PAD_QSPI1A_SCLK__WEIM_DATA_0 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL2),
453 MX6SX_PAD_QSPI1A_SS0_B__WEIM_DATA_1 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL2), 448 MX6SX_PAD_QSPI1A_SS0_B__WEIM_DATA_1 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL2),
454 MX6SX_PAD_QSPI1A_SS1_B__WEIM_DATA_2 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL2), 449 MX6SX_PAD_QSPI1A_SS1_B__WEIM_DATA_2 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL2),
455 MX6SX_PAD_QSPI1A_DATA3__WEIM_DATA_3 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL2), 450 MX6SX_PAD_QSPI1A_DATA3__WEIM_DATA_3 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL2),
456 MX6SX_PAD_QSPI1A_DATA2__WEIM_DATA_4 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL2), 451 MX6SX_PAD_QSPI1A_DATA2__WEIM_DATA_4 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL2),
457 MX6SX_PAD_QSPI1A_DATA1__WEIM_DATA_5 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL2), 452 MX6SX_PAD_QSPI1A_DATA1__WEIM_DATA_5 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL2),
458 MX6SX_PAD_QSPI1A_DATA0__WEIM_DATA_6 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL2), 453 MX6SX_PAD_QSPI1A_DATA0__WEIM_DATA_6 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL2),
459 MX6SX_PAD_QSPI1A_DQS__WEIM_DATA_7 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL2), 454 MX6SX_PAD_QSPI1A_DQS__WEIM_DATA_7 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL2),
460 MX6SX_PAD_QSPI1B_SCLK__WEIM_DATA_8 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL2), 455 MX6SX_PAD_QSPI1B_SCLK__WEIM_DATA_8 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL2),
461 MX6SX_PAD_QSPI1B_SS0_B__WEIM_DATA_9 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL2), 456 MX6SX_PAD_QSPI1B_SS0_B__WEIM_DATA_9 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL2),
462 MX6SX_PAD_QSPI1B_SS1_B__WEIM_DATA_10 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL2), 457 MX6SX_PAD_QSPI1B_SS1_B__WEIM_DATA_10 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL2),
463 MX6SX_PAD_QSPI1B_DATA3__WEIM_DATA_11 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL2), 458 MX6SX_PAD_QSPI1B_DATA3__WEIM_DATA_11 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL2),
464 MX6SX_PAD_QSPI1B_DATA2__WEIM_DATA_12 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL2), 459 MX6SX_PAD_QSPI1B_DATA2__WEIM_DATA_12 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL2),
465 MX6SX_PAD_QSPI1B_DATA1__WEIM_DATA_13 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL2), 460 MX6SX_PAD_QSPI1B_DATA1__WEIM_DATA_13 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL2),
466 MX6SX_PAD_QSPI1B_DATA0__WEIM_DATA_14 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL2), 461 MX6SX_PAD_QSPI1B_DATA0__WEIM_DATA_14 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL2),
467 MX6SX_PAD_QSPI1B_DQS__WEIM_DATA_15 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL2), 462 MX6SX_PAD_QSPI1B_DQS__WEIM_DATA_15 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL2),
468 463
469 MX6SX_PAD_NAND_DATA00__WEIM_AD_0 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL), 464 MX6SX_PAD_NAND_DATA00__WEIM_AD_0 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL),
470 MX6SX_PAD_NAND_DATA01__WEIM_AD_1 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL), 465 MX6SX_PAD_NAND_DATA01__WEIM_AD_1 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL),
471 MX6SX_PAD_NAND_DATA02__WEIM_AD_2 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL), 466 MX6SX_PAD_NAND_DATA02__WEIM_AD_2 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL),
472 MX6SX_PAD_NAND_DATA03__WEIM_AD_3 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL), 467 MX6SX_PAD_NAND_DATA03__WEIM_AD_3 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL),
473 MX6SX_PAD_NAND_DATA04__WEIM_AD_4 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL), 468 MX6SX_PAD_NAND_DATA04__WEIM_AD_4 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL),
474 MX6SX_PAD_NAND_DATA05__WEIM_AD_5 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL), 469 MX6SX_PAD_NAND_DATA05__WEIM_AD_5 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL),
475 MX6SX_PAD_NAND_DATA06__WEIM_AD_6 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL), 470 MX6SX_PAD_NAND_DATA06__WEIM_AD_6 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL),
476 MX6SX_PAD_NAND_DATA07__WEIM_AD_7 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL), 471 MX6SX_PAD_NAND_DATA07__WEIM_AD_7 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL),
477 MX6SX_PAD_LCD1_DATA08__WEIM_AD_8 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL), 472 MX6SX_PAD_LCD1_DATA08__WEIM_AD_8 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL),
478 MX6SX_PAD_LCD1_DATA09__WEIM_AD_9 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL), 473 MX6SX_PAD_LCD1_DATA09__WEIM_AD_9 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL),
479 MX6SX_PAD_LCD1_DATA10__WEIM_AD_10 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL), 474 MX6SX_PAD_LCD1_DATA10__WEIM_AD_10 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL),
480 MX6SX_PAD_LCD1_DATA11__WEIM_AD_11 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL) , 475 MX6SX_PAD_LCD1_DATA11__WEIM_AD_11 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL) ,
481 MX6SX_PAD_LCD1_DATA12__WEIM_AD_12 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL), 476 MX6SX_PAD_LCD1_DATA12__WEIM_AD_12 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL),
482 MX6SX_PAD_LCD1_DATA13__WEIM_AD_13 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL), 477 MX6SX_PAD_LCD1_DATA13__WEIM_AD_13 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL),
483 MX6SX_PAD_LCD1_DATA14__WEIM_AD_14 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL), 478 MX6SX_PAD_LCD1_DATA14__WEIM_AD_14 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL),
484 MX6SX_PAD_LCD1_DATA15__WEIM_AD_15 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL), 479 MX6SX_PAD_LCD1_DATA15__WEIM_AD_15 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL),
485 MX6SX_PAD_LCD1_DATA16__WEIM_ADDR_16 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL), 480 MX6SX_PAD_LCD1_DATA16__WEIM_ADDR_16 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL),
486 MX6SX_PAD_LCD1_DATA17__WEIM_ADDR_17 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL), 481 MX6SX_PAD_LCD1_DATA17__WEIM_ADDR_17 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL),
487 MX6SX_PAD_LCD1_DATA18__WEIM_ADDR_18 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL), 482 MX6SX_PAD_LCD1_DATA18__WEIM_ADDR_18 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL),
488 MX6SX_PAD_LCD1_DATA19__WEIM_ADDR_19 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL), 483 MX6SX_PAD_LCD1_DATA19__WEIM_ADDR_19 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL),
489 MX6SX_PAD_LCD1_DATA20__WEIM_ADDR_20 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL), 484 MX6SX_PAD_LCD1_DATA20__WEIM_ADDR_20 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL),
490 MX6SX_PAD_LCD1_DATA21__WEIM_ADDR_21 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL), 485 MX6SX_PAD_LCD1_DATA21__WEIM_ADDR_21 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL),
491 MX6SX_PAD_LCD1_DATA22__WEIM_ADDR_22 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL), 486 MX6SX_PAD_LCD1_DATA22__WEIM_ADDR_22 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL),
492 MX6SX_PAD_LCD1_DATA23__WEIM_ADDR_23 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL), 487 MX6SX_PAD_LCD1_DATA23__WEIM_ADDR_23 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL),
493 MX6SX_PAD_LCD1_DATA03__WEIM_ADDR_24 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL), 488 MX6SX_PAD_LCD1_DATA03__WEIM_ADDR_24 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL),
494 MX6SX_PAD_LCD1_DATA04__WEIM_ADDR_25 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL), 489 MX6SX_PAD_LCD1_DATA04__WEIM_ADDR_25 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL),
495 MX6SX_PAD_LCD1_DATA05__WEIM_ADDR_26 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL), 490 MX6SX_PAD_LCD1_DATA05__WEIM_ADDR_26 | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL),
496 491
497 MX6SX_PAD_NAND_CE1_B__WEIM_OE | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL), 492 MX6SX_PAD_NAND_CE1_B__WEIM_OE | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL),
498 MX6SX_PAD_NAND_RE_B__WEIM_RW | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL), 493 MX6SX_PAD_NAND_RE_B__WEIM_RW | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL),
499 MX6SX_PAD_NAND_WE_B__WEIM_WAIT | MUX_PAD_CTRL(NO_PAD_CTRL), 494 MX6SX_PAD_NAND_WE_B__WEIM_WAIT | MUX_PAD_CTRL(NO_PAD_CTRL),
500 495
501 MX6SX_PAD_NAND_ALE__WEIM_CS0_B | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL), 496 MX6SX_PAD_NAND_ALE__WEIM_CS0_B | MUX_PAD_CTRL(WEIM_NOR_PAD_CTRL),
502 }; 497 };
503 static void eimnor_cs_setup(void) 498 static void eimnor_cs_setup(void)
504 { 499 {
505 writel(0x00000120, WEIM_BASE_ADDR + 0x090); 500 writel(0x00000120, WEIM_BASE_ADDR + 0x090);
506 writel(0x00010181, WEIM_BASE_ADDR + 0x000); 501 writel(0x00010181, WEIM_BASE_ADDR + 0x000);
507 writel(0x00000001, WEIM_BASE_ADDR + 0x004); 502 writel(0x00000001, WEIM_BASE_ADDR + 0x004);
508 writel(0x0a020000, WEIM_BASE_ADDR + 0x008); 503 writel(0x0a020000, WEIM_BASE_ADDR + 0x008);
509 writel(0x0000c000, WEIM_BASE_ADDR + 0x00c); 504 writel(0x0000c000, WEIM_BASE_ADDR + 0x00c);
510 writel(0x0804a240, WEIM_BASE_ADDR + 0x010); 505 writel(0x0804a240, WEIM_BASE_ADDR + 0x010);
511 } 506 }
512 507
513 static void setup_eimnor(void) 508 static void setup_eimnor(void)
514 { 509 {
515 imx_iomux_v3_setup_multiple_pads(eimnor_pads, 510 imx_iomux_v3_setup_multiple_pads(eimnor_pads,
516 ARRAY_SIZE(eimnor_pads)); 511 ARRAY_SIZE(eimnor_pads));
517 512
518 eimnor_cs_setup(); 513 eimnor_cs_setup();
519 } 514 }
520 #endif 515 #endif
521 516
522 517
523 #ifdef CONFIG_SYS_USE_NAND 518 #ifdef CONFIG_SYS_USE_NAND
524 iomux_v3_cfg_t gpmi_pads[] = { 519 iomux_v3_cfg_t gpmi_pads[] = {
525 MX6SX_PAD_NAND_CLE__RAWNAND_CLE | MUX_PAD_CTRL(GPMI_PAD_CTRL2), 520 MX6SX_PAD_NAND_CLE__RAWNAND_CLE | MUX_PAD_CTRL(GPMI_PAD_CTRL2),
526 MX6SX_PAD_NAND_ALE__RAWNAND_ALE | MUX_PAD_CTRL(GPMI_PAD_CTRL2), 521 MX6SX_PAD_NAND_ALE__RAWNAND_ALE | MUX_PAD_CTRL(GPMI_PAD_CTRL2),
527 MX6SX_PAD_NAND_WP_B__RAWNAND_WP_B | MUX_PAD_CTRL(GPMI_PAD_CTRL2), 522 MX6SX_PAD_NAND_WP_B__RAWNAND_WP_B | MUX_PAD_CTRL(GPMI_PAD_CTRL2),
528 MX6SX_PAD_NAND_READY_B__RAWNAND_READY_B | MUX_PAD_CTRL(GPMI_PAD_CTRL0), 523 MX6SX_PAD_NAND_READY_B__RAWNAND_READY_B | MUX_PAD_CTRL(GPMI_PAD_CTRL0),
529 MX6SX_PAD_NAND_CE0_B__RAWNAND_CE0_B | MUX_PAD_CTRL(GPMI_PAD_CTRL2), 524 MX6SX_PAD_NAND_CE0_B__RAWNAND_CE0_B | MUX_PAD_CTRL(GPMI_PAD_CTRL2),
530 MX6SX_PAD_NAND_RE_B__RAWNAND_RE_B | MUX_PAD_CTRL(GPMI_PAD_CTRL2), 525 MX6SX_PAD_NAND_RE_B__RAWNAND_RE_B | MUX_PAD_CTRL(GPMI_PAD_CTRL2),
531 MX6SX_PAD_NAND_WE_B__RAWNAND_WE_B | MUX_PAD_CTRL(GPMI_PAD_CTRL2), 526 MX6SX_PAD_NAND_WE_B__RAWNAND_WE_B | MUX_PAD_CTRL(GPMI_PAD_CTRL2),
532 MX6SX_PAD_NAND_DATA00__RAWNAND_DATA00 | MUX_PAD_CTRL(GPMI_PAD_CTRL2), 527 MX6SX_PAD_NAND_DATA00__RAWNAND_DATA00 | MUX_PAD_CTRL(GPMI_PAD_CTRL2),
533 MX6SX_PAD_NAND_DATA01__RAWNAND_DATA01 | MUX_PAD_CTRL(GPMI_PAD_CTRL2), 528 MX6SX_PAD_NAND_DATA01__RAWNAND_DATA01 | MUX_PAD_CTRL(GPMI_PAD_CTRL2),
534 MX6SX_PAD_NAND_DATA02__RAWNAND_DATA02 | MUX_PAD_CTRL(GPMI_PAD_CTRL2), 529 MX6SX_PAD_NAND_DATA02__RAWNAND_DATA02 | MUX_PAD_CTRL(GPMI_PAD_CTRL2),
535 MX6SX_PAD_NAND_DATA03__RAWNAND_DATA03 | MUX_PAD_CTRL(GPMI_PAD_CTRL2), 530 MX6SX_PAD_NAND_DATA03__RAWNAND_DATA03 | MUX_PAD_CTRL(GPMI_PAD_CTRL2),
536 MX6SX_PAD_NAND_DATA04__RAWNAND_DATA04 | MUX_PAD_CTRL(GPMI_PAD_CTRL2), 531 MX6SX_PAD_NAND_DATA04__RAWNAND_DATA04 | MUX_PAD_CTRL(GPMI_PAD_CTRL2),
537 MX6SX_PAD_NAND_DATA05__RAWNAND_DATA05 | MUX_PAD_CTRL(GPMI_PAD_CTRL2), 532 MX6SX_PAD_NAND_DATA05__RAWNAND_DATA05 | MUX_PAD_CTRL(GPMI_PAD_CTRL2),
538 MX6SX_PAD_NAND_DATA06__RAWNAND_DATA06 | MUX_PAD_CTRL(GPMI_PAD_CTRL2), 533 MX6SX_PAD_NAND_DATA06__RAWNAND_DATA06 | MUX_PAD_CTRL(GPMI_PAD_CTRL2),
539 MX6SX_PAD_NAND_DATA07__RAWNAND_DATA07 | MUX_PAD_CTRL(GPMI_PAD_CTRL2), 534 MX6SX_PAD_NAND_DATA07__RAWNAND_DATA07 | MUX_PAD_CTRL(GPMI_PAD_CTRL2),
540 }; 535 };
541 536
542 static void setup_gpmi_nand(void) 537 static void setup_gpmi_nand(void)
543 { 538 {
544 struct mxc_ccm_reg *mxc_ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR; 539 struct mxc_ccm_reg *mxc_ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR;
545 540
546 /* config gpmi nand iomux */ 541 /* config gpmi nand iomux */
547 imx_iomux_v3_setup_multiple_pads(gpmi_pads, ARRAY_SIZE(gpmi_pads)); 542 imx_iomux_v3_setup_multiple_pads(gpmi_pads, ARRAY_SIZE(gpmi_pads));
548 543
549 /* config gpmi and bch clock to 100 MHz */ 544 /* config gpmi and bch clock to 100 MHz */
550 clrsetbits_le32(&mxc_ccm->cs2cdr, 545 clrsetbits_le32(&mxc_ccm->cs2cdr,
551 MXC_CCM_CS2CDR_QSPI2_CLK_PODF_MASK | 546 MXC_CCM_CS2CDR_QSPI2_CLK_PODF_MASK |
552 MXC_CCM_CS2CDR_QSPI2_CLK_PRED_MASK | 547 MXC_CCM_CS2CDR_QSPI2_CLK_PRED_MASK |
553 MXC_CCM_CS2CDR_QSPI2_CLK_SEL_MASK, 548 MXC_CCM_CS2CDR_QSPI2_CLK_SEL_MASK,
554 MXC_CCM_CS2CDR_QSPI2_CLK_PODF(0) | 549 MXC_CCM_CS2CDR_QSPI2_CLK_PODF(0) |
555 MXC_CCM_CS2CDR_QSPI2_CLK_PRED(3) | 550 MXC_CCM_CS2CDR_QSPI2_CLK_PRED(3) |
556 MXC_CCM_CS2CDR_QSPI2_CLK_SEL(3)); 551 MXC_CCM_CS2CDR_QSPI2_CLK_SEL(3));
557 552
558 /* enable gpmi and bch clock gating */ 553 /* enable gpmi and bch clock gating */
559 setbits_le32(&mxc_ccm->CCGR4, 554 setbits_le32(&mxc_ccm->CCGR4,
560 MXC_CCM_CCGR4_RAWNAND_U_BCH_INPUT_APB_MASK | 555 MXC_CCM_CCGR4_RAWNAND_U_BCH_INPUT_APB_MASK |
561 MXC_CCM_CCGR4_RAWNAND_U_GPMI_BCH_INPUT_BCH_MASK | 556 MXC_CCM_CCGR4_RAWNAND_U_GPMI_BCH_INPUT_BCH_MASK |
562 MXC_CCM_CCGR4_RAWNAND_U_GPMI_BCH_INPUT_GPMI_IO_MASK | 557 MXC_CCM_CCGR4_RAWNAND_U_GPMI_BCH_INPUT_GPMI_IO_MASK |
563 MXC_CCM_CCGR4_RAWNAND_U_GPMI_INPUT_APB_MASK | 558 MXC_CCM_CCGR4_RAWNAND_U_GPMI_INPUT_APB_MASK |
564 MXC_CCM_CCGR4_PL301_MX6QPER1_BCH_MASK); 559 MXC_CCM_CCGR4_PL301_MX6QPER1_BCH_MASK);
565 560
566 /* enable apbh clock gating */ 561 /* enable apbh clock gating */
567 setbits_le32(&mxc_ccm->CCGR0, MXC_CCM_CCGR0_APBHDMA_MASK); 562 setbits_le32(&mxc_ccm->CCGR0, MXC_CCM_CCGR0_APBHDMA_MASK);
568 } 563 }
569 #endif 564 #endif
570 565
571 #ifdef CONFIG_FEC_MXC 566 #ifdef CONFIG_FEC_MXC
572 int board_eth_init(bd_t *bis) 567 int board_eth_init(bd_t *bis)
573 { 568 {
574 int ret; 569 int ret;
575 570
576 setup_iomux_fec1(); 571 setup_iomux_fec1();
577 572
578 ret = fecmxc_initialize_multi(bis, 0, 573 ret = fecmxc_initialize_multi(bis, 0,
579 CONFIG_FEC_MXC_PHYADDR, IMX_FEC_BASE); 574 CONFIG_FEC_MXC_PHYADDR, IMX_FEC_BASE);
580 if (ret) 575 if (ret)
581 printf("FEC1 MXC: %s:failed\n", __func__); 576 printf("FEC1 MXC: %s:failed\n", __func__);
582 577
583 return 0; 578 return 0;
584 } 579 }
585 580
586 static int setup_fec(void) 581 static int setup_fec(void)
587 { 582 {
588 struct iomuxc_gpr_base_regs *const iomuxc_gpr_regs 583 struct iomuxc_gpr_base_regs *const iomuxc_gpr_regs
589 = (struct iomuxc_gpr_base_regs *) IOMUXC_GPR_BASE_ADDR; 584 = (struct iomuxc_gpr_base_regs *) IOMUXC_GPR_BASE_ADDR;
590 int ret; 585 int ret;
591 unsigned char value = 1; 586 unsigned char value = 1;
592 587
593 /* clear gpr1[13], gpr1[17] to select anatop clock */ 588 /* clear gpr1[13], gpr1[17] to select anatop clock */
594 clrsetbits_le32(&iomuxc_gpr_regs->gpr[1], IOMUX_GPR1_FEC1_MASK, 0); 589 clrsetbits_le32(&iomuxc_gpr_regs->gpr[1], IOMUX_GPR1_FEC1_MASK, 0);
595 590
596 ret = enable_fec_anatop_clock(0, ENET_125MHz); 591 ret = enable_fec_anatop_clock(0, ENET_125MHz);
597 if (ret) 592 if (ret)
598 return ret; 593 return ret;
599 594
600 enable_enet_clock(); 595 enable_enet_clock();
596
597 /* Reset AR8031 PHY */
598 gpio_direction_output(IMX_GPIO_NR(6, 18) , 0);
599 udelay(500);
600 gpio_set_value(IMX_GPIO_NR(6, 18), 1);
601 601
602 #ifdef CONFIG_FEC_ENABLE_MAX7322 602 #ifdef CONFIG_FEC_ENABLE_MAX7322
603 /* This is needed to drive the pads to 1.8V instead of 1.5V */ 603 /* This is needed to drive the pads to 1.8V instead of 1.5V */
604 i2c_set_bus_num(CONFIG_MAX7322_I2C_BUS); 604 i2c_set_bus_num(CONFIG_MAX7322_I2C_BUS);
605 605
606 if (!i2c_probe(CONFIG_MAX7322_I2C_ADDR)) { 606 if (!i2c_probe(CONFIG_MAX7322_I2C_ADDR)) {
607 /* Write 0x1 to enable O0 output, this device has no addr */ 607 /* Write 0x1 to enable O0 output, this device has no addr */
608 /* hence addr length is 0 */ 608 /* hence addr length is 0 */
609 value = 0x1; 609 value = 0x1;
610 if (i2c_write(CONFIG_MAX7322_I2C_ADDR, 0, 0, &value, 1)) 610 if (i2c_write(CONFIG_MAX7322_I2C_ADDR, 0, 0, &value, 1))
611 printf("MAX7322 write failed\n"); 611 printf("MAX7322 write failed\n");
612 } else { 612 } else {
613 printf("MAX7322 Not found\n"); 613 printf("MAX7322 Not found\n");
614 } 614 }
615 #endif 615 #endif
616 616
617 return 0; 617 return 0;
618 } 618 }
619 619
620 int board_phy_config(struct phy_device *phydev) 620 int board_phy_config(struct phy_device *phydev)
621 { 621 {
622 #ifdef CONFIG_FEC_ENABLE_MAX7322 622 #ifdef CONFIG_FEC_ENABLE_MAX7322
623 /* Enable 1.8V(SEL_1P5_1P8_POS_REG) on 623 /* Enable 1.8V(SEL_1P5_1P8_POS_REG) on
624 Phy control debug reg 0 */ 624 Phy control debug reg 0 */
625 phy_write(phydev, MDIO_DEVAD_NONE, 0x1d, 0x1f); 625 phy_write(phydev, MDIO_DEVAD_NONE, 0x1d, 0x1f);
626 phy_write(phydev, MDIO_DEVAD_NONE, 0x1e, 0x8); 626 phy_write(phydev, MDIO_DEVAD_NONE, 0x1e, 0x8);
627 #endif 627 #endif
628 628
629 /* rgmii tx clock delay enable */ 629 /* rgmii tx clock delay enable */
630 phy_write(phydev, MDIO_DEVAD_NONE, 0x1d, 0x05); 630 phy_write(phydev, MDIO_DEVAD_NONE, 0x1d, 0x05);
631 phy_write(phydev, MDIO_DEVAD_NONE, 0x1e, 0x100); 631 phy_write(phydev, MDIO_DEVAD_NONE, 0x1e, 0x100);
632 632
633 if (phydev->drv->config) 633 if (phydev->drv->config)
634 phydev->drv->config(phydev); 634 phydev->drv->config(phydev);
635 635
636 return 0; 636 return 0;
637 } 637 }
638 #endif 638 #endif
639 639
640 #ifdef CONFIG_PFUZE100_PMIC_I2C 640 #ifdef CONFIG_PFUZE100_PMIC_I2C
641 #define PFUZE100_DEVICEID 0x0 641 #define PFUZE100_DEVICEID 0x0
642 #define PFUZE100_REVID 0x3 642 #define PFUZE100_REVID 0x3
643 #define PFUZE100_FABID 0x4 643 #define PFUZE100_FABID 0x4
644 644
645 #define PFUZE100_SW1ABVOL 0x20 645 #define PFUZE100_SW1ABVOL 0x20
646 #define PFUZE100_SW1ABSTBY 0x21 646 #define PFUZE100_SW1ABSTBY 0x21
647 #define PFUZE100_SW1ABCONF 0x24 647 #define PFUZE100_SW1ABCONF 0x24
648 #define PFUZE100_SW1CVOL 0x2e 648 #define PFUZE100_SW1CVOL 0x2e
649 #define PFUZE100_SW1CSTBY 0x2f 649 #define PFUZE100_SW1CSTBY 0x2f
650 #define PFUZE100_SW1CCONF 0x32 650 #define PFUZE100_SW1CCONF 0x32
651 #define PFUZE100_SW1ABC_SETP(x) ((x-3000)/250) 651 #define PFUZE100_SW1ABC_SETP(x) ((x-3000)/250)
652 652
653 /* set all switches APS in normal and PFM mode in standby */ 653 /* set all switches APS in normal and PFM mode in standby */
654 static int setup_pmic_mode(int chip) 654 static int setup_pmic_mode(int chip)
655 { 655 {
656 unsigned char offset, i, switch_num, value; 656 unsigned char offset, i, switch_num, value;
657 657
658 if (!chip) { 658 if (!chip) {
659 /* pfuze100 */ 659 /* pfuze100 */
660 switch_num = 6; 660 switch_num = 6;
661 offset = 0x31; 661 offset = 0x31;
662 } else { 662 } else {
663 /* pfuze200 */ 663 /* pfuze200 */
664 switch_num = 4; 664 switch_num = 4;
665 offset = 0x38; 665 offset = 0x38;
666 } 666 }
667 667
668 value = 0xc; 668 value = 0xc;
669 if (i2c_write(0x8, 0x23, 1, &value, 1)) { 669 if (i2c_write(0x8, 0x23, 1, &value, 1)) {
670 printf("Set SW1AB mode error!\n"); 670 printf("Set SW1AB mode error!\n");
671 return -1; 671 return -1;
672 } 672 }
673 673
674 for (i = 0; i < switch_num - 1; i++) { 674 for (i = 0; i < switch_num - 1; i++) {
675 if (i2c_write(0x8, offset + i * 7, 1, &value, 1)) { 675 if (i2c_write(0x8, offset + i * 7, 1, &value, 1)) {
676 printf("Set switch%x mode error!\n", offset); 676 printf("Set switch%x mode error!\n", offset);
677 return -1; 677 return -1;
678 } 678 }
679 } 679 }
680 680
681 return 0; 681 return 0;
682 } 682 }
683 683
684 static int setup_pmic_voltages(void) 684 static int setup_pmic_voltages(void)
685 { 685 {
686 unsigned char value, rev_id = 0; 686 unsigned char value, rev_id = 0;
687 687
688 i2c_set_bus_num(CONFIG_PMIC_I2C_BUS); 688 i2c_set_bus_num(CONFIG_PMIC_I2C_BUS);
689 689
690 if (!i2c_probe(CONFIG_PMIC_I2C_SLAVE)) { 690 if (!i2c_probe(CONFIG_PMIC_I2C_SLAVE)) {
691 if (i2c_read(CONFIG_PMIC_I2C_SLAVE, PFUZE100_DEVICEID, 1, &value, 1)) { 691 if (i2c_read(CONFIG_PMIC_I2C_SLAVE, PFUZE100_DEVICEID, 1, &value, 1)) {
692 printf("Read device ID error!\n"); 692 printf("Read device ID error!\n");
693 return -1; 693 return -1;
694 } 694 }
695 if (i2c_read(CONFIG_PMIC_I2C_SLAVE, PFUZE100_REVID, 1, &rev_id, 1)) { 695 if (i2c_read(CONFIG_PMIC_I2C_SLAVE, PFUZE100_REVID, 1, &rev_id, 1)) {
696 printf("Read Rev ID error!\n"); 696 printf("Read Rev ID error!\n");
697 return -1; 697 return -1;
698 } 698 }
699 printf("Found PFUZE%s deviceid=%x,revid=%x\n", 699 printf("Found PFUZE%s deviceid=%x,revid=%x\n",
700 ((value & 0xf) == 0) ? "100" : "200", value, rev_id); 700 ((value & 0xf) == 0) ? "100" : "200", value, rev_id);
701 701
702 if (setup_pmic_mode(value & 0xf)) { 702 if (setup_pmic_mode(value & 0xf)) {
703 printf("setup pmic mode error!\n"); 703 printf("setup pmic mode error!\n");
704 return -1; 704 return -1;
705 } 705 }
706 /* set SW1AB staby volatage 0.975V */ 706 /* set SW1AB staby volatage 0.975V */
707 if (i2c_read(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1ABSTBY, 1, &value, 1)) { 707 if (i2c_read(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1ABSTBY, 1, &value, 1)) {
708 printf("Read SW1ABSTBY error!\n"); 708 printf("Read SW1ABSTBY error!\n");
709 return -1; 709 return -1;
710 } 710 }
711 value &= ~0x3f; 711 value &= ~0x3f;
712 value |= PFUZE100_SW1ABC_SETP(9750); 712 value |= PFUZE100_SW1ABC_SETP(9750);
713 if (i2c_write(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1ABSTBY, 1, &value, 1)) { 713 if (i2c_write(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1ABSTBY, 1, &value, 1)) {
714 printf("Set SW1ABSTBY error!\n"); 714 printf("Set SW1ABSTBY error!\n");
715 return -1; 715 return -1;
716 } 716 }
717 717
718 /* set SW1AB/VDDARM step ramp up time from 16us to 4us/25mV */ 718 /* set SW1AB/VDDARM step ramp up time from 16us to 4us/25mV */
719 if (i2c_read(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1ABCONF, 1, &value, 1)) { 719 if (i2c_read(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1ABCONF, 1, &value, 1)) {
720 printf("Read SW1ABCONFIG error!\n"); 720 printf("Read SW1ABCONFIG error!\n");
721 return -1; 721 return -1;
722 } 722 }
723 value &= ~0xc0; 723 value &= ~0xc0;
724 value |= 0x40; 724 value |= 0x40;
725 if (i2c_write(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1ABCONF, 1, &value, 1)) { 725 if (i2c_write(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1ABCONF, 1, &value, 1)) {
726 printf("Set SW1ABCONFIG error!\n"); 726 printf("Set SW1ABCONFIG error!\n");
727 return -1; 727 return -1;
728 } 728 }
729 729
730 /* set SW1C staby volatage 0.975V */ 730 /* set SW1C staby volatage 0.975V */
731 if (i2c_read(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1CSTBY, 1, &value, 1)) { 731 if (i2c_read(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1CSTBY, 1, &value, 1)) {
732 printf("Read SW1CSTBY error!\n"); 732 printf("Read SW1CSTBY error!\n");
733 return -1; 733 return -1;
734 } 734 }
735 value &= ~0x3f; 735 value &= ~0x3f;
736 value |= PFUZE100_SW1ABC_SETP(9750); 736 value |= PFUZE100_SW1ABC_SETP(9750);
737 if (i2c_write(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1CSTBY, 1, &value, 1)) { 737 if (i2c_write(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1CSTBY, 1, &value, 1)) {
738 printf("Set SW1CSTBY error!\n"); 738 printf("Set SW1CSTBY error!\n");
739 return -1; 739 return -1;
740 } 740 }
741 741
742 /* set SW1C/VDDSOC step ramp up time to from 16us to 4us/25mV */ 742 /* set SW1C/VDDSOC step ramp up time to from 16us to 4us/25mV */
743 if (i2c_read(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1CCONF, 1, &value, 1)) { 743 if (i2c_read(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1CCONF, 1, &value, 1)) {
744 printf("Read SW1CCONFIG error!\n"); 744 printf("Read SW1CCONFIG error!\n");
745 return -1; 745 return -1;
746 } 746 }
747 value &= ~0xc0; 747 value &= ~0xc0;
748 value |= 0x40; 748 value |= 0x40;
749 if (i2c_write(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1CCONF, 1, &value, 1)) { 749 if (i2c_write(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1CCONF, 1, &value, 1)) {
750 printf("Set SW1CCONFIG error!\n"); 750 printf("Set SW1CCONFIG error!\n");
751 return -1; 751 return -1;
752 } 752 }
753 } 753 }
754 754
755 return 0; 755 return 0;
756 } 756 }
757 757
758 #ifdef CONFIG_LDO_BYPASS_CHECK 758 #ifdef CONFIG_LDO_BYPASS_CHECK
759 void ldo_mode_set(int ldo_bypass) 759 void ldo_mode_set(int ldo_bypass)
760 { 760 {
761 unsigned char value; 761 unsigned char value;
762 int is_400M; 762 int is_400M;
763 u32 vddarm; 763 u32 vddarm;
764 /* swith to ldo_bypass mode */ 764 /* swith to ldo_bypass mode */
765 if (ldo_bypass) { 765 if (ldo_bypass) {
766 prep_anatop_bypass(); 766 prep_anatop_bypass();
767 /* decrease VDDARM to 1.275V */ 767 /* decrease VDDARM to 1.275V */
768 if (i2c_read(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1ABVOL, 1, &value, 1)) { 768 if (i2c_read(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1ABVOL, 1, &value, 1)) {
769 printf("Read SW1AB error!\n"); 769 printf("Read SW1AB error!\n");
770 return; 770 return;
771 } 771 }
772 value &= ~0x3f; 772 value &= ~0x3f;
773 value |= PFUZE100_SW1ABC_SETP(12750); 773 value |= PFUZE100_SW1ABC_SETP(12750);
774 if (i2c_write(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1ABVOL, 1, &value, 1)) { 774 if (i2c_write(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1ABVOL, 1, &value, 1)) {
775 printf("Set SW1AB error!\n"); 775 printf("Set SW1AB error!\n");
776 return; 776 return;
777 } 777 }
778 /* decrease VDDSOC to 1.3V */ 778 /* decrease VDDSOC to 1.3V */
779 if (i2c_read(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1CVOL, 1, &value, 1)) { 779 if (i2c_read(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1CVOL, 1, &value, 1)) {
780 printf("Read SW1C error!\n"); 780 printf("Read SW1C error!\n");
781 return; 781 return;
782 } 782 }
783 value &= ~0x3f; 783 value &= ~0x3f;
784 value |= PFUZE100_SW1ABC_SETP(13000); 784 value |= PFUZE100_SW1ABC_SETP(13000);
785 if (i2c_write(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1CVOL, 1, &value, 1)) { 785 if (i2c_write(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1CVOL, 1, &value, 1)) {
786 printf("Set SW1C error!\n"); 786 printf("Set SW1C error!\n");
787 return; 787 return;
788 } 788 }
789 789
790 is_400M = set_anatop_bypass(1); 790 is_400M = set_anatop_bypass(1);
791 if (is_400M) 791 if (is_400M)
792 vddarm = PFUZE100_SW1ABC_SETP(10750); 792 vddarm = PFUZE100_SW1ABC_SETP(10750);
793 else 793 else
794 vddarm = PFUZE100_SW1ABC_SETP(11750); 794 vddarm = PFUZE100_SW1ABC_SETP(11750);
795 795
796 if (i2c_read(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1ABVOL, 1, &value, 1)) { 796 if (i2c_read(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1ABVOL, 1, &value, 1)) {
797 printf("Read SW1AB error!\n"); 797 printf("Read SW1AB error!\n");
798 return; 798 return;
799 } 799 }
800 value &= ~0x3f; 800 value &= ~0x3f;
801 value |= vddarm; 801 value |= vddarm;
802 if (i2c_write(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1ABVOL, 1, &value, 1)) { 802 if (i2c_write(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1ABVOL, 1, &value, 1)) {
803 printf("Set SW1AB error!\n"); 803 printf("Set SW1AB error!\n");
804 return; 804 return;
805 } 805 }
806 806
807 if (i2c_read(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1CVOL, 1, &value, 1)) { 807 if (i2c_read(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1CVOL, 1, &value, 1)) {
808 printf("Read SW1C error!\n"); 808 printf("Read SW1C error!\n");
809 return; 809 return;
810 } 810 }
811 value &= ~0x3f; 811 value &= ~0x3f;
812 value |= PFUZE100_SW1ABC_SETP(11750); 812 value |= PFUZE100_SW1ABC_SETP(11750);
813 if (i2c_write(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1CVOL, 1, &value, 1)) { 813 if (i2c_write(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1CVOL, 1, &value, 1)) {
814 printf("Set SW1C error!\n"); 814 printf("Set SW1C error!\n");
815 return; 815 return;
816 } 816 }
817 817
818 finish_anatop_bypass(); 818 finish_anatop_bypass();
819 printf("switch to ldo_bypass mode!\n"); 819 printf("switch to ldo_bypass mode!\n");
820 } 820 }
821 821
822 } 822 }
823 #endif 823 #endif
824 #endif 824 #endif
825 825
826 int board_early_init_f(void) 826 int board_early_init_f(void)
827 { 827 {
828 setup_iomux_uart(); 828 setup_iomux_uart();
829 return 0; 829 return 0;
830 } 830 }
831 831
832 int board_init(void) 832 int board_init(void)
833 { 833 {
834 /* address of boot parameters */ 834 /* address of boot parameters */
835 gd->bd->bi_boot_params = PHYS_SDRAM + 0x100; 835 gd->bd->bi_boot_params = PHYS_SDRAM + 0x100;
836 836
837 #ifdef CONFIG_SYS_I2C_MXC 837 #ifdef CONFIG_SYS_I2C_MXC
838 setup_i2c(0, CONFIG_SYS_I2C_SPEED, 0x7f, &i2c_pad_info1); 838 setup_i2c(0, CONFIG_SYS_I2C_SPEED, 0x7f, &i2c_pad_info1);
839 setup_i2c(1, CONFIG_SYS_I2C_SPEED, 0x7f, &i2c_pad_info2); 839 setup_i2c(1, CONFIG_SYS_I2C_SPEED, 0x7f, &i2c_pad_info2);
840 #endif 840 #endif
841 841
842 #ifdef CONFIG_FEC_MXC 842 #ifdef CONFIG_FEC_MXC
843 setup_fec(); 843 setup_fec();
844 #endif 844 #endif
845 845
846 #ifdef CONFIG_SYS_USE_SPINOR 846 #ifdef CONFIG_SYS_USE_SPINOR
847 setup_spinor(); 847 setup_spinor();
848 #endif 848 #endif
849 849
850 #ifdef CONFIG_SYS_USE_EIMNOR 850 #ifdef CONFIG_SYS_USE_EIMNOR
851 setup_eimnor(); 851 setup_eimnor();
852 #endif 852 #endif
853 853
854 #ifdef CONFIG_SYS_USE_NAND 854 #ifdef CONFIG_SYS_USE_NAND
855 setup_gpmi_nand(); 855 setup_gpmi_nand();
856 #endif 856 #endif
857 857
858 #ifdef CONFIG_QSPI 858 #ifdef CONFIG_QSPI
859 board_qspi_init(); 859 board_qspi_init();
860 #endif 860 #endif
861 861
862 return 0; 862 return 0;
863 } 863 }
864 864
865 #ifdef CONFIG_CMD_BMODE 865 #ifdef CONFIG_CMD_BMODE
866 static const struct boot_mode board_boot_modes[] = { 866 static const struct boot_mode board_boot_modes[] = {
867 /* 4 bit bus width */ 867 /* 4 bit bus width */
868 {"sd1", MAKE_CFGVAL(0x40, 0x20, 0x00, 0x00)}, 868 {"sd1", MAKE_CFGVAL(0x40, 0x20, 0x00, 0x00)},
869 {"qspi2", MAKE_CFGVAL(0x18, 0x00, 0x00, 0x00)}, 869 {"qspi2", MAKE_CFGVAL(0x18, 0x00, 0x00, 0x00)},
870 {"spinor", MAKE_CFGVAL(0x30, 0x00, 0x00, 0x0B)}, 870 {"spinor", MAKE_CFGVAL(0x30, 0x00, 0x00, 0x0B)},
871 {"eimnor", MAKE_CFGVAL(0x00, 0x80, 0x00, 0x00)}, 871 {"eimnor", MAKE_CFGVAL(0x00, 0x80, 0x00, 0x00)},
872 {NULL, 0}, 872 {NULL, 0},
873 }; 873 };
874 #endif 874 #endif
875 875
876 int board_late_init(void) 876 int board_late_init(void)
877 { 877 {
878 #ifdef CONFIG_CMD_BMODE 878 #ifdef CONFIG_CMD_BMODE
879 add_board_boot_modes(board_boot_modes); 879 add_board_boot_modes(board_boot_modes);
880 #endif 880 #endif
881 881
882 #ifdef CONFIG_PFUZE100_PMIC_I2C 882 #ifdef CONFIG_PFUZE100_PMIC_I2C
883 int ret = 0; 883 int ret = 0;
884 884
885 ret = setup_pmic_voltages(); 885 ret = setup_pmic_voltages();
886 if (ret) 886 if (ret)
887 return -1; 887 return -1;
888 #endif 888 #endif
889 889
890 #ifdef CONFIG_ENV_IS_IN_MMC 890 #ifdef CONFIG_ENV_IS_IN_MMC
891 board_late_mmc_init(); 891 board_late_mmc_init();
892 #endif 892 #endif
893 893
894 return 0; 894 return 0;
895 } 895 }
896 896
897 u32 get_board_rev(void) 897 u32 get_board_rev(void)
898 { 898 {
899 return get_cpu_rev(); 899 return get_cpu_rev();
900 } 900 }
901 901
902 int checkboard(void) 902 int checkboard(void)
903 { 903 {
904 puts("Board: MX6SX 19x19 ARM2\n"); 904 puts("Board: MX6SX 19x19 ARM2\n");
905 905
906 return 0; 906 return 0;
907 } 907 }
908 908
909 #ifdef CONFIG_USB_EHCI_MX6 909 #ifdef CONFIG_USB_EHCI_MX6
910 iomux_v3_cfg_t const usb_otg1_pads[] = { 910 iomux_v3_cfg_t const usb_otg1_pads[] = {
911 MX6SX_PAD_GPIO1_IO09__USB_OTG1_PWR | MUX_PAD_CTRL(NO_PAD_CTRL), 911 MX6SX_PAD_GPIO1_IO09__USB_OTG1_PWR | MUX_PAD_CTRL(NO_PAD_CTRL),
912 MX6SX_PAD_GPIO1_IO10__ANATOP_OTG1_ID | MUX_PAD_CTRL(NO_PAD_CTRL) 912 MX6SX_PAD_GPIO1_IO10__ANATOP_OTG1_ID | MUX_PAD_CTRL(NO_PAD_CTRL)
913 }; 913 };
914 914
915 iomux_v3_cfg_t const usb_otg2_pads[] = { 915 iomux_v3_cfg_t const usb_otg2_pads[] = {
916 MX6SX_PAD_GPIO1_IO12__USB_OTG2_PWR | MUX_PAD_CTRL(NO_PAD_CTRL), 916 MX6SX_PAD_GPIO1_IO12__USB_OTG2_PWR | MUX_PAD_CTRL(NO_PAD_CTRL),
917 }; 917 };
918 918
919 int board_ehci_hcd_init(int port) 919 int board_ehci_hcd_init(int port)
920 { 920 {
921 switch (port) { 921 switch (port) {
922 case 0: 922 case 0:
923 imx_iomux_v3_setup_multiple_pads(usb_otg1_pads, 923 imx_iomux_v3_setup_multiple_pads(usb_otg1_pads,
924 ARRAY_SIZE(usb_otg1_pads)); 924 ARRAY_SIZE(usb_otg1_pads));
925 break; 925 break;
926 case 1: 926 case 1:
927 imx_iomux_v3_setup_multiple_pads(usb_otg2_pads, 927 imx_iomux_v3_setup_multiple_pads(usb_otg2_pads,
928 ARRAY_SIZE(usb_otg2_pads)); 928 ARRAY_SIZE(usb_otg2_pads));
929 break; 929 break;
930 default: 930 default:
931 printf("MXC USB port %d not yet supported\n", port); 931 printf("MXC USB port %d not yet supported\n", port);
932 return 1; 932 return 1;