1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31#include <common.h>
32#include <asm/gpio.h>
33#include <asm/io.h>
34#include <asm/arch/imx-regs.h>
35#include <asm/arch/imx25-pinmux.h>
36
37DECLARE_GLOBAL_DATA_PTR;
38
39int board_init()
40{
41 struct iomuxc_mux_ctl *muxctl;
42 struct iomuxc_pad_ctl *padctl;
43 struct iomuxc_pad_input_select *inputselect;
44 u32 gpio_mux_mode0_sion = MX25_PIN_MUX_MODE(0) | MX25_PIN_MUX_SION;
45 u32 gpio_mux_mode1 = MX25_PIN_MUX_MODE(1);
46 u32 gpio_mux_mode5 = MX25_PIN_MUX_MODE(5);
47 u32 gpio_mux_mode6 = MX25_PIN_MUX_MODE(6);
48 u32 input_select1 = MX25_PAD_INPUT_SELECT_DAISY(1);
49 u32 input_select2 = MX25_PAD_INPUT_SELECT_DAISY(2);
50
51 icache_enable();
52
53 muxctl = (struct iomuxc_mux_ctl *)IMX_IOPADMUX_BASE;
54 padctl = (struct iomuxc_pad_ctl *)IMX_IOPADCTL_BASE;
55 inputselect = (struct iomuxc_pad_input_select *)IMX_IOPADINPUTSEL_BASE;
56
57
58 writel(gpio_mux_mode5, &muxctl->pad_ext_armclk);
59 gpio_direction_output(IMX_GPIO_NR(3, 15), 1);
60
61
62 writel(gpio_mux_mode0_sion, &muxctl->pad_sd1_cmd);
63 writel(gpio_mux_mode0_sion, &muxctl->pad_sd1_clk);
64 writel(gpio_mux_mode0_sion, &muxctl->pad_sd1_data0);
65 writel(gpio_mux_mode0_sion, &muxctl->pad_sd1_data1);
66 writel(gpio_mux_mode0_sion, &muxctl->pad_sd1_data2);
67 writel(gpio_mux_mode0_sion, &muxctl->pad_sd1_data3);
68
69
70 writel(gpio_mux_mode5, &muxctl->pad_csi_d3);
71 gpio_direction_output(IMX_GPIO_NR(1, 28), 1);
72
73 writel(gpio_mux_mode5, &muxctl->pad_csi_d2);
74 gpio_direction_input(IMX_GPIO_NR(1, 18));
75
76
77 writel(gpio_mux_mode5, &muxctl->pad_csi_d8);
78 writel(gpio_mux_mode5, &muxctl->pad_csi_d7);
79 writel(gpio_mux_mode5, &muxctl->pad_csi_d6);
80 writel(gpio_mux_mode5, &muxctl->pad_csi_d5);
81
82 writel(0, &padctl->pad_csi_d6);
83 writel(0, &padctl->pad_csi_d5);
84
85
86 gpio_direction_output(IMX_GPIO_NR(1, 7), 0);
87 gpio_direction_output(IMX_GPIO_NR(1, 6), 0);
88
89
90 writel(gpio_mux_mode5 | MX25_PIN_MUX_SION, &muxctl->pad_kpp_row0);
91 writel(0, &padctl->pad_kpp_row0);
92 gpio_direction_input(IMX_GPIO_NR(2, 29));
93
94
95 writel(gpio_mux_mode5, &muxctl->pad_csi_d9);
96 writel(gpio_mux_mode5, &muxctl->pad_csi_d4);
97
98
99 gpio_direction_output(IMX_GPIO_NR(4, 21), 0);
100 gpio_direction_output(IMX_GPIO_NR(1, 29), 0);
101
102
103 writel(gpio_mux_mode6, &muxctl->pad_gpio_a);
104 writel(gpio_mux_mode6, &muxctl->pad_gpio_b);
105 writel(gpio_mux_mode6, &muxctl->pad_gpio_c);
106 writel(gpio_mux_mode6, &muxctl->pad_gpio_d);
107
108
109 writel(input_select1, &inputselect->can1_ipp_ind_canrx);
110 writel(input_select1, &inputselect->can2_ipp_ind_canrx);
111
112
113 writel(gpio_mux_mode1, &muxctl->pad_cspi1_ss1);
114 writel(gpio_mux_mode1, &muxctl->pad_gpio_e);
115
116
117 writel(input_select1, &inputselect->i2c3_ipp_sda_in);
118 writel(input_select2, &inputselect->i2c3_ipp_scl_in);
119
120 gd->bd->bi_boot_params = PHYS_SDRAM + 0x100;
121
122 return 0;
123}
124
125int board_late_init(void)
126{
127 const char *e;
128
129#ifdef CONFIG_FEC_MXC
130 struct iomuxc_mux_ctl *muxctl;
131 u32 gpio_mux_mode2 = MX25_PIN_MUX_MODE(2);
132 u32 gpio_mux_mode5 = MX25_PIN_MUX_MODE(5);
133
134
135
136
137 mx25_fec_init_pins();
138
139
140
141
142
143
144
145 muxctl = (struct iomuxc_mux_ctl *)IMX_IOPADMUX_BASE;
146
147 writel(gpio_mux_mode5, &muxctl->pad_upll_bypclk);
148 writel(gpio_mux_mode2, &muxctl->pad_uart2_cts);
149
150
151 gpio_direction_output(IMX_GPIO_NR(3, 16), 0);
152
153 udelay(5000);
154
155
156 gpio_set_value(IMX_GPIO_NR(3, 16), 1);
157
158 udelay(5000);
159#endif
160
161 e = getenv("gs_base_board");
162 if (e != NULL) {
163 if (strcmp(e, "G283") == 0) {
164 int key = gpio_get_value(IMX_GPIO_NR(2, 29));
165
166 if (key) {
167
168 gpio_set_value(IMX_GPIO_NR(1, 29), 0);
169 gpio_set_value(IMX_GPIO_NR(4, 21), 0);
170
171 setenv("preboot", "run gs_slow_boot");
172 } else
173 setenv("preboot", "run gs_fast_boot");
174 }
175 }
176
177 return 0;
178}
179
180int dram_init(void)
181{
182
183 gd->ram_size = get_ram_size((void *)PHYS_SDRAM,
184 PHYS_SDRAM_SIZE);
185 return 0;
186}
187