diff options
author | John Crispin <blogic@openwrt.org> | 2014-10-08 17:30:24 -0400 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2014-11-24 01:45:24 -0500 |
commit | 53263a1c68524fd35e2f2ea7f03d0fef362b944d (patch) | |
tree | 298059dd691f81045636645621ffd9f7e1e709c1 | |
parent | 1dc5c2cfc17ec0522eab33913a73726413420410 (diff) |
MIPS: ralink: add mt7628an support
Signed-off-by: John Crispin <blogic@openwrt.org>
Patchwork: http://patchwork.linux-mips.org/patch/8031/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
-rw-r--r-- | arch/mips/include/asm/mach-ralink/mt7620.h | 11 | ||||
-rw-r--r-- | arch/mips/ralink/Kconfig | 2 | ||||
-rw-r--r-- | arch/mips/ralink/mt7620.c | 276 |
3 files changed, 243 insertions, 46 deletions
diff --git a/arch/mips/include/asm/mach-ralink/mt7620.h b/arch/mips/include/asm/mach-ralink/mt7620.h index 863aea5dcf0c..1976fb815fd1 100644 --- a/arch/mips/include/asm/mach-ralink/mt7620.h +++ b/arch/mips/include/asm/mach-ralink/mt7620.h | |||
@@ -13,6 +13,13 @@ | |||
13 | #ifndef _MT7620_REGS_H_ | 13 | #ifndef _MT7620_REGS_H_ |
14 | #define _MT7620_REGS_H_ | 14 | #define _MT7620_REGS_H_ |
15 | 15 | ||
16 | enum mt762x_soc_type { | ||
17 | MT762X_SOC_UNKNOWN = 0, | ||
18 | MT762X_SOC_MT7620A, | ||
19 | MT762X_SOC_MT7620N, | ||
20 | MT762X_SOC_MT7628AN, | ||
21 | }; | ||
22 | |||
16 | #define MT7620_SYSC_BASE 0x10000000 | 23 | #define MT7620_SYSC_BASE 0x10000000 |
17 | 24 | ||
18 | #define SYSC_REG_CHIP_NAME0 0x00 | 25 | #define SYSC_REG_CHIP_NAME0 0x00 |
@@ -27,6 +34,7 @@ | |||
27 | 34 | ||
28 | #define MT7620_CHIP_NAME0 0x3637544d | 35 | #define MT7620_CHIP_NAME0 0x3637544d |
29 | #define MT7620_CHIP_NAME1 0x20203032 | 36 | #define MT7620_CHIP_NAME1 0x20203032 |
37 | #define MT7628_CHIP_NAME1 0x20203832 | ||
30 | 38 | ||
31 | #define SYSCFG0_XTAL_FREQ_SEL BIT(6) | 39 | #define SYSCFG0_XTAL_FREQ_SEL BIT(6) |
32 | 40 | ||
@@ -71,6 +79,9 @@ | |||
71 | #define SYSCFG0_DRAM_TYPE_DDR1 1 | 79 | #define SYSCFG0_DRAM_TYPE_DDR1 1 |
72 | #define SYSCFG0_DRAM_TYPE_DDR2 2 | 80 | #define SYSCFG0_DRAM_TYPE_DDR2 2 |
73 | 81 | ||
82 | #define SYSCFG0_DRAM_TYPE_DDR2_MT7628 0 | ||
83 | #define SYSCFG0_DRAM_TYPE_DDR1_MT7628 1 | ||
84 | |||
74 | #define MT7620_DRAM_BASE 0x0 | 85 | #define MT7620_DRAM_BASE 0x0 |
75 | #define MT7620_SDRAM_SIZE_MIN 2 | 86 | #define MT7620_SDRAM_SIZE_MIN 2 |
76 | #define MT7620_SDRAM_SIZE_MAX 64 | 87 | #define MT7620_SDRAM_SIZE_MAX 64 |
diff --git a/arch/mips/ralink/Kconfig b/arch/mips/ralink/Kconfig index 77e8a9620e18..699b75dafd7a 100644 --- a/arch/mips/ralink/Kconfig +++ b/arch/mips/ralink/Kconfig | |||
@@ -26,7 +26,7 @@ choice | |||
26 | select HW_HAS_PCI | 26 | select HW_HAS_PCI |
27 | 27 | ||
28 | config SOC_MT7620 | 28 | config SOC_MT7620 |
29 | bool "MT7620" | 29 | bool "MT7620/8" |
30 | 30 | ||
31 | endchoice | 31 | endchoice |
32 | 32 | ||
diff --git a/arch/mips/ralink/mt7620.c b/arch/mips/ralink/mt7620.c index e4b1f8251de1..2ea5ff6dc22e 100644 --- a/arch/mips/ralink/mt7620.c +++ b/arch/mips/ralink/mt7620.c | |||
@@ -37,6 +37,9 @@ | |||
37 | #define PMU1_CFG 0x8C | 37 | #define PMU1_CFG 0x8C |
38 | #define DIG_SW_SEL BIT(25) | 38 | #define DIG_SW_SEL BIT(25) |
39 | 39 | ||
40 | /* is this a MT7620 or a MT7628 */ | ||
41 | enum mt762x_soc_type mt762x_soc; | ||
42 | |||
40 | /* does the board have sdram or ddram */ | 43 | /* does the board have sdram or ddram */ |
41 | static int dram_type; | 44 | static int dram_type; |
42 | 45 | ||
@@ -94,6 +97,136 @@ static struct rt2880_pmx_group mt7620a_pinmux_data[] = { | |||
94 | { 0 } | 97 | { 0 } |
95 | }; | 98 | }; |
96 | 99 | ||
100 | static struct rt2880_pmx_func pwm1_grp_mt7628[] = { | ||
101 | FUNC("sdcx", 3, 19, 1), | ||
102 | FUNC("utif", 2, 19, 1), | ||
103 | FUNC("gpio", 1, 19, 1), | ||
104 | FUNC("pwm", 0, 19, 1), | ||
105 | }; | ||
106 | |||
107 | static struct rt2880_pmx_func pwm0_grp_mt7628[] = { | ||
108 | FUNC("sdcx", 3, 18, 1), | ||
109 | FUNC("utif", 2, 18, 1), | ||
110 | FUNC("gpio", 1, 18, 1), | ||
111 | FUNC("pwm", 0, 18, 1), | ||
112 | }; | ||
113 | |||
114 | static struct rt2880_pmx_func uart2_grp_mt7628[] = { | ||
115 | FUNC("sdcx", 3, 20, 2), | ||
116 | FUNC("pwm", 2, 20, 2), | ||
117 | FUNC("gpio", 1, 20, 2), | ||
118 | FUNC("uart", 0, 20, 2), | ||
119 | }; | ||
120 | |||
121 | static struct rt2880_pmx_func uart1_grp_mt7628[] = { | ||
122 | FUNC("sdcx", 3, 45, 2), | ||
123 | FUNC("pwm", 2, 45, 2), | ||
124 | FUNC("gpio", 1, 45, 2), | ||
125 | FUNC("uart", 0, 45, 2), | ||
126 | }; | ||
127 | |||
128 | static struct rt2880_pmx_func i2c_grp_mt7628[] = { | ||
129 | FUNC("-", 3, 4, 2), | ||
130 | FUNC("debug", 2, 4, 2), | ||
131 | FUNC("gpio", 1, 4, 2), | ||
132 | FUNC("i2c", 0, 4, 2), | ||
133 | }; | ||
134 | |||
135 | static struct rt2880_pmx_func refclk_grp_mt7628[] = { FUNC("reclk", 0, 36, 1) }; | ||
136 | static struct rt2880_pmx_func perst_grp_mt7628[] = { FUNC("perst", 0, 37, 1) }; | ||
137 | static struct rt2880_pmx_func wdt_grp_mt7628[] = { FUNC("wdt", 0, 15, 38) }; | ||
138 | static struct rt2880_pmx_func spi_grp_mt7628[] = { FUNC("spi", 0, 7, 4) }; | ||
139 | |||
140 | static struct rt2880_pmx_func sd_mode_grp_mt7628[] = { | ||
141 | FUNC("jtag", 3, 22, 8), | ||
142 | FUNC("utif", 2, 22, 8), | ||
143 | FUNC("gpio", 1, 22, 8), | ||
144 | FUNC("sdcx", 0, 22, 8), | ||
145 | }; | ||
146 | |||
147 | static struct rt2880_pmx_func uart0_grp_mt7628[] = { | ||
148 | FUNC("-", 3, 12, 2), | ||
149 | FUNC("-", 2, 12, 2), | ||
150 | FUNC("gpio", 1, 12, 2), | ||
151 | FUNC("uart", 0, 12, 2), | ||
152 | }; | ||
153 | |||
154 | static struct rt2880_pmx_func i2s_grp_mt7628[] = { | ||
155 | FUNC("antenna", 3, 0, 4), | ||
156 | FUNC("pcm", 2, 0, 4), | ||
157 | FUNC("gpio", 1, 0, 4), | ||
158 | FUNC("i2s", 0, 0, 4), | ||
159 | }; | ||
160 | |||
161 | static struct rt2880_pmx_func spi_cs1_grp_mt7628[] = { | ||
162 | FUNC("-", 3, 6, 1), | ||
163 | FUNC("refclk", 2, 6, 1), | ||
164 | FUNC("gpio", 1, 6, 1), | ||
165 | FUNC("spi", 0, 6, 1), | ||
166 | }; | ||
167 | |||
168 | static struct rt2880_pmx_func spis_grp_mt7628[] = { | ||
169 | FUNC("pwm", 3, 14, 4), | ||
170 | FUNC("util", 2, 14, 4), | ||
171 | FUNC("gpio", 1, 14, 4), | ||
172 | FUNC("spis", 0, 14, 4), | ||
173 | }; | ||
174 | |||
175 | static struct rt2880_pmx_func gpio_grp_mt7628[] = { | ||
176 | FUNC("pcie", 3, 11, 1), | ||
177 | FUNC("refclk", 2, 11, 1), | ||
178 | FUNC("gpio", 1, 11, 1), | ||
179 | FUNC("gpio", 0, 11, 1), | ||
180 | }; | ||
181 | |||
182 | #define MT7628_GPIO_MODE_MASK 0x3 | ||
183 | |||
184 | #define MT7628_GPIO_MODE_PWM1 30 | ||
185 | #define MT7628_GPIO_MODE_PWM0 28 | ||
186 | #define MT7628_GPIO_MODE_UART2 26 | ||
187 | #define MT7628_GPIO_MODE_UART1 24 | ||
188 | #define MT7628_GPIO_MODE_I2C 20 | ||
189 | #define MT7628_GPIO_MODE_REFCLK 18 | ||
190 | #define MT7628_GPIO_MODE_PERST 16 | ||
191 | #define MT7628_GPIO_MODE_WDT 14 | ||
192 | #define MT7628_GPIO_MODE_SPI 12 | ||
193 | #define MT7628_GPIO_MODE_SDMODE 10 | ||
194 | #define MT7628_GPIO_MODE_UART0 8 | ||
195 | #define MT7628_GPIO_MODE_I2S 6 | ||
196 | #define MT7628_GPIO_MODE_CS1 4 | ||
197 | #define MT7628_GPIO_MODE_SPIS 2 | ||
198 | #define MT7628_GPIO_MODE_GPIO 0 | ||
199 | |||
200 | static struct rt2880_pmx_group mt7628an_pinmux_data[] = { | ||
201 | GRP_G("pmw1", pwm1_grp_mt7628, MT7628_GPIO_MODE_MASK, | ||
202 | 1, MT7628_GPIO_MODE_PWM1), | ||
203 | GRP_G("pmw1", pwm0_grp_mt7628, MT7628_GPIO_MODE_MASK, | ||
204 | 1, MT7628_GPIO_MODE_PWM0), | ||
205 | GRP_G("uart2", uart2_grp_mt7628, MT7628_GPIO_MODE_MASK, | ||
206 | 1, MT7628_GPIO_MODE_UART2), | ||
207 | GRP_G("uart1", uart1_grp_mt7628, MT7628_GPIO_MODE_MASK, | ||
208 | 1, MT7628_GPIO_MODE_UART1), | ||
209 | GRP_G("i2c", i2c_grp_mt7628, MT7628_GPIO_MODE_MASK, | ||
210 | 1, MT7628_GPIO_MODE_I2C), | ||
211 | GRP("refclk", refclk_grp_mt7628, 1, MT7628_GPIO_MODE_REFCLK), | ||
212 | GRP("perst", perst_grp_mt7628, 1, MT7628_GPIO_MODE_PERST), | ||
213 | GRP("wdt", wdt_grp_mt7628, 1, MT7628_GPIO_MODE_WDT), | ||
214 | GRP("spi", spi_grp_mt7628, 1, MT7628_GPIO_MODE_SPI), | ||
215 | GRP_G("sdmode", sd_mode_grp_mt7628, MT7628_GPIO_MODE_MASK, | ||
216 | 1, MT7628_GPIO_MODE_SDMODE), | ||
217 | GRP_G("uart0", uart0_grp_mt7628, MT7628_GPIO_MODE_MASK, | ||
218 | 1, MT7628_GPIO_MODE_UART0), | ||
219 | GRP_G("i2s", i2s_grp_mt7628, MT7628_GPIO_MODE_MASK, | ||
220 | 1, MT7628_GPIO_MODE_I2S), | ||
221 | GRP_G("spi cs1", spi_cs1_grp_mt7628, MT7628_GPIO_MODE_MASK, | ||
222 | 1, MT7628_GPIO_MODE_CS1), | ||
223 | GRP_G("spis", spis_grp_mt7628, MT7628_GPIO_MODE_MASK, | ||
224 | 1, MT7628_GPIO_MODE_SPIS), | ||
225 | GRP_G("gpio", gpio_grp_mt7628, MT7628_GPIO_MODE_MASK, | ||
226 | 1, MT7628_GPIO_MODE_GPIO), | ||
227 | { 0 } | ||
228 | }; | ||
229 | |||
97 | static __init u32 | 230 | static __init u32 |
98 | mt7620_calc_rate(u32 ref_rate, u32 mul, u32 div) | 231 | mt7620_calc_rate(u32 ref_rate, u32 mul, u32 div) |
99 | { | 232 | { |
@@ -244,29 +377,42 @@ void __init ralink_clk_init(void) | |||
244 | 377 | ||
245 | xtal_rate = mt7620_get_xtal_rate(); | 378 | xtal_rate = mt7620_get_xtal_rate(); |
246 | 379 | ||
247 | cpu_pll_rate = mt7620_get_cpu_pll_rate(xtal_rate); | ||
248 | pll_rate = mt7620_get_pll_rate(xtal_rate, cpu_pll_rate); | ||
249 | |||
250 | cpu_rate = mt7620_get_cpu_rate(pll_rate); | ||
251 | dram_rate = mt7620_get_dram_rate(pll_rate); | ||
252 | sys_rate = mt7620_get_sys_rate(cpu_rate); | ||
253 | periph_rate = mt7620_get_periph_rate(xtal_rate); | ||
254 | |||
255 | #define RFMT(label) label ":%lu.%03luMHz " | 380 | #define RFMT(label) label ":%lu.%03luMHz " |
256 | #define RINT(x) ((x) / 1000000) | 381 | #define RINT(x) ((x) / 1000000) |
257 | #define RFRAC(x) (((x) / 1000) % 1000) | 382 | #define RFRAC(x) (((x) / 1000) % 1000) |
258 | 383 | ||
259 | pr_debug(RFMT("XTAL") RFMT("CPU_PLL") RFMT("PLL"), | 384 | if (mt762x_soc == MT762X_SOC_MT7628AN) { |
260 | RINT(xtal_rate), RFRAC(xtal_rate), | 385 | if (xtal_rate == MHZ(40)) |
261 | RINT(cpu_pll_rate), RFRAC(cpu_pll_rate), | 386 | cpu_rate = MHZ(580); |
262 | RINT(pll_rate), RFRAC(pll_rate)); | 387 | else |
388 | cpu_rate = MHZ(575); | ||
389 | dram_rate = sys_rate = cpu_rate / 3; | ||
390 | periph_rate = MHZ(40); | ||
391 | |||
392 | ralink_clk_add("10000d00.uartlite", periph_rate); | ||
393 | ralink_clk_add("10000e00.uartlite", periph_rate); | ||
394 | } else { | ||
395 | cpu_pll_rate = mt7620_get_cpu_pll_rate(xtal_rate); | ||
396 | pll_rate = mt7620_get_pll_rate(xtal_rate, cpu_pll_rate); | ||
397 | |||
398 | cpu_rate = mt7620_get_cpu_rate(pll_rate); | ||
399 | dram_rate = mt7620_get_dram_rate(pll_rate); | ||
400 | sys_rate = mt7620_get_sys_rate(cpu_rate); | ||
401 | periph_rate = mt7620_get_periph_rate(xtal_rate); | ||
402 | |||
403 | pr_debug(RFMT("XTAL") RFMT("CPU_PLL") RFMT("PLL"), | ||
404 | RINT(xtal_rate), RFRAC(xtal_rate), | ||
405 | RINT(cpu_pll_rate), RFRAC(cpu_pll_rate), | ||
406 | RINT(pll_rate), RFRAC(pll_rate)); | ||
407 | |||
408 | ralink_clk_add("10000500.uart", periph_rate); | ||
409 | } | ||
263 | 410 | ||
264 | pr_debug(RFMT("CPU") RFMT("DRAM") RFMT("SYS") RFMT("PERIPH"), | 411 | pr_debug(RFMT("CPU") RFMT("DRAM") RFMT("SYS") RFMT("PERIPH"), |
265 | RINT(cpu_rate), RFRAC(cpu_rate), | 412 | RINT(cpu_rate), RFRAC(cpu_rate), |
266 | RINT(dram_rate), RFRAC(dram_rate), | 413 | RINT(dram_rate), RFRAC(dram_rate), |
267 | RINT(sys_rate), RFRAC(sys_rate), | 414 | RINT(sys_rate), RFRAC(sys_rate), |
268 | RINT(periph_rate), RFRAC(periph_rate)); | 415 | RINT(periph_rate), RFRAC(periph_rate)); |
269 | |||
270 | #undef RFRAC | 416 | #undef RFRAC |
271 | #undef RINT | 417 | #undef RINT |
272 | #undef RFMT | 418 | #undef RFMT |
@@ -274,7 +420,6 @@ void __init ralink_clk_init(void) | |||
274 | ralink_clk_add("cpu", cpu_rate); | 420 | ralink_clk_add("cpu", cpu_rate); |
275 | ralink_clk_add("10000100.timer", periph_rate); | 421 | ralink_clk_add("10000100.timer", periph_rate); |
276 | ralink_clk_add("10000120.watchdog", periph_rate); | 422 | ralink_clk_add("10000120.watchdog", periph_rate); |
277 | ralink_clk_add("10000500.uart", periph_rate); | ||
278 | ralink_clk_add("10000b00.spi", sys_rate); | 423 | ralink_clk_add("10000b00.spi", sys_rate); |
279 | ralink_clk_add("10000c00.uartlite", periph_rate); | 424 | ralink_clk_add("10000c00.uartlite", periph_rate); |
280 | ralink_clk_add("10180000.wmac", xtal_rate); | 425 | ralink_clk_add("10180000.wmac", xtal_rate); |
@@ -289,6 +434,52 @@ void __init ralink_of_remap(void) | |||
289 | panic("Failed to remap core resources"); | 434 | panic("Failed to remap core resources"); |
290 | } | 435 | } |
291 | 436 | ||
437 | static __init void | ||
438 | mt7620_dram_init(struct ralink_soc_info *soc_info) | ||
439 | { | ||
440 | switch (dram_type) { | ||
441 | case SYSCFG0_DRAM_TYPE_SDRAM: | ||
442 | pr_info("Board has SDRAM\n"); | ||
443 | soc_info->mem_size_min = MT7620_SDRAM_SIZE_MIN; | ||
444 | soc_info->mem_size_max = MT7620_SDRAM_SIZE_MAX; | ||
445 | break; | ||
446 | |||
447 | case SYSCFG0_DRAM_TYPE_DDR1: | ||
448 | pr_info("Board has DDR1\n"); | ||
449 | soc_info->mem_size_min = MT7620_DDR1_SIZE_MIN; | ||
450 | soc_info->mem_size_max = MT7620_DDR1_SIZE_MAX; | ||
451 | break; | ||
452 | |||
453 | case SYSCFG0_DRAM_TYPE_DDR2: | ||
454 | pr_info("Board has DDR2\n"); | ||
455 | soc_info->mem_size_min = MT7620_DDR2_SIZE_MIN; | ||
456 | soc_info->mem_size_max = MT7620_DDR2_SIZE_MAX; | ||
457 | break; | ||
458 | default: | ||
459 | BUG(); | ||
460 | } | ||
461 | } | ||
462 | |||
463 | static __init void | ||
464 | mt7628_dram_init(struct ralink_soc_info *soc_info) | ||
465 | { | ||
466 | switch (dram_type) { | ||
467 | case SYSCFG0_DRAM_TYPE_DDR1_MT7628: | ||
468 | pr_info("Board has DDR1\n"); | ||
469 | soc_info->mem_size_min = MT7620_DDR1_SIZE_MIN; | ||
470 | soc_info->mem_size_max = MT7620_DDR1_SIZE_MAX; | ||
471 | break; | ||
472 | |||
473 | case SYSCFG0_DRAM_TYPE_DDR2_MT7628: | ||
474 | pr_info("Board has DDR2\n"); | ||
475 | soc_info->mem_size_min = MT7620_DDR2_SIZE_MIN; | ||
476 | soc_info->mem_size_max = MT7620_DDR2_SIZE_MAX; | ||
477 | break; | ||
478 | default: | ||
479 | BUG(); | ||
480 | } | ||
481 | } | ||
482 | |||
292 | void prom_soc_init(struct ralink_soc_info *soc_info) | 483 | void prom_soc_init(struct ralink_soc_info *soc_info) |
293 | { | 484 | { |
294 | void __iomem *sysc = (void __iomem *) KSEG1ADDR(MT7620_SYSC_BASE); | 485 | void __iomem *sysc = (void __iomem *) KSEG1ADDR(MT7620_SYSC_BASE); |
@@ -306,18 +497,25 @@ void prom_soc_init(struct ralink_soc_info *soc_info) | |||
306 | rev = __raw_readl(sysc + SYSC_REG_CHIP_REV); | 497 | rev = __raw_readl(sysc + SYSC_REG_CHIP_REV); |
307 | bga = (rev >> CHIP_REV_PKG_SHIFT) & CHIP_REV_PKG_MASK; | 498 | bga = (rev >> CHIP_REV_PKG_SHIFT) & CHIP_REV_PKG_MASK; |
308 | 499 | ||
309 | if (n0 != MT7620_CHIP_NAME0 || n1 != MT7620_CHIP_NAME1) | 500 | if (n0 == MT7620_CHIP_NAME0 && n1 == MT7620_CHIP_NAME1) { |
310 | panic("mt7620: unknown SoC, n0:%08x n1:%08x\n", n0, n1); | 501 | if (bga) { |
311 | 502 | mt762x_soc = MT762X_SOC_MT7620A; | |
312 | if (bga) { | 503 | name = "MT7620A"; |
313 | name = "MT7620A"; | 504 | soc_info->compatible = "ralink,mt7620a-soc"; |
314 | soc_info->compatible = "ralink,mt7620a-soc"; | 505 | } else { |
315 | } else { | 506 | mt762x_soc = MT762X_SOC_MT7620N; |
316 | name = "MT7620N"; | 507 | name = "MT7620N"; |
317 | soc_info->compatible = "ralink,mt7620n-soc"; | 508 | soc_info->compatible = "ralink,mt7620n-soc"; |
318 | #ifdef CONFIG_PCI | 509 | #ifdef CONFIG_PCI |
319 | panic("mt7620n is only supported for non pci kernels"); | 510 | panic("mt7620n is only supported for non pci kernels"); |
320 | #endif | 511 | #endif |
512 | } | ||
513 | } else if (n0 == MT7620_CHIP_NAME0 && n1 == MT7628_CHIP_NAME1) { | ||
514 | mt762x_soc = MT762X_SOC_MT7628AN; | ||
515 | name = "MT7628AN"; | ||
516 | soc_info->compatible = "ralink,mt7628an-soc"; | ||
517 | } else { | ||
518 | panic("mt762x: unknown SoC, n0:%08x n1:%08x\n", n0, n1); | ||
321 | } | 519 | } |
322 | 520 | ||
323 | snprintf(soc_info->sys_type, RAMIPS_SYS_TYPE_LEN, | 521 | snprintf(soc_info->sys_type, RAMIPS_SYS_TYPE_LEN, |
@@ -329,28 +527,11 @@ void prom_soc_init(struct ralink_soc_info *soc_info) | |||
329 | cfg0 = __raw_readl(sysc + SYSC_REG_SYSTEM_CONFIG0); | 527 | cfg0 = __raw_readl(sysc + SYSC_REG_SYSTEM_CONFIG0); |
330 | dram_type = (cfg0 >> SYSCFG0_DRAM_TYPE_SHIFT) & SYSCFG0_DRAM_TYPE_MASK; | 528 | dram_type = (cfg0 >> SYSCFG0_DRAM_TYPE_SHIFT) & SYSCFG0_DRAM_TYPE_MASK; |
331 | 529 | ||
332 | switch (dram_type) { | ||
333 | case SYSCFG0_DRAM_TYPE_SDRAM: | ||
334 | pr_info("Board has SDRAM\n"); | ||
335 | soc_info->mem_size_min = MT7620_SDRAM_SIZE_MIN; | ||
336 | soc_info->mem_size_max = MT7620_SDRAM_SIZE_MAX; | ||
337 | break; | ||
338 | |||
339 | case SYSCFG0_DRAM_TYPE_DDR1: | ||
340 | pr_info("Board has DDR1\n"); | ||
341 | soc_info->mem_size_min = MT7620_DDR1_SIZE_MIN; | ||
342 | soc_info->mem_size_max = MT7620_DDR1_SIZE_MAX; | ||
343 | break; | ||
344 | |||
345 | case SYSCFG0_DRAM_TYPE_DDR2: | ||
346 | pr_info("Board has DDR2\n"); | ||
347 | soc_info->mem_size_min = MT7620_DDR2_SIZE_MIN; | ||
348 | soc_info->mem_size_max = MT7620_DDR2_SIZE_MAX; | ||
349 | break; | ||
350 | default: | ||
351 | BUG(); | ||
352 | } | ||
353 | soc_info->mem_base = MT7620_DRAM_BASE; | 530 | soc_info->mem_base = MT7620_DRAM_BASE; |
531 | if (mt762x_soc == MT762X_SOC_MT7628AN) | ||
532 | mt7628_dram_init(soc_info); | ||
533 | else | ||
534 | mt7620_dram_init(soc_info); | ||
354 | 535 | ||
355 | pmu0 = __raw_readl(sysc + PMU0_CFG); | 536 | pmu0 = __raw_readl(sysc + PMU0_CFG); |
356 | pmu1 = __raw_readl(sysc + PMU1_CFG); | 537 | pmu1 = __raw_readl(sysc + PMU1_CFG); |
@@ -359,4 +540,9 @@ void prom_soc_init(struct ralink_soc_info *soc_info) | |||
359 | (pmu0 & PMU_SW_SET) ? ("sw") : ("hw")); | 540 | (pmu0 & PMU_SW_SET) ? ("sw") : ("hw")); |
360 | pr_info("Digital PMU set to %s control\n", | 541 | pr_info("Digital PMU set to %s control\n", |
361 | (pmu1 & DIG_SW_SEL) ? ("sw") : ("hw")); | 542 | (pmu1 & DIG_SW_SEL) ? ("sw") : ("hw")); |
543 | |||
544 | if (mt762x_soc == MT762X_SOC_MT7628AN) | ||
545 | rt2880_pinmux_data = mt7628an_pinmux_data; | ||
546 | else | ||
547 | rt2880_pinmux_data = mt7620a_pinmux_data; | ||
362 | } | 548 | } |