diff options
author | John Crispin <blogic@openwrt.org> | 2013-04-13 09:13:40 -0400 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2013-05-07 19:19:11 -0400 |
commit | dafecee8bb4e56af4d3a5f47b5982e6eff5d60b0 (patch) | |
tree | 741d452edf7118dea5d57d7f50f3f3c8d7ed52d6 | |
parent | 629e39eec88a6da187674816bf9d8fe960b07db5 (diff) |
MIPS: ralink: add memory definition for RT305x
Populate struct soc_info with the data that describes our RAM window.
As memory detection fails on RT5350 we read the amount of available memory
from the system controller.
Signed-off-by: John Crispin <blogic@openwrt.org>
Patchwork: http://patchwork.linux-mips.org/patch/5180/
-rw-r--r-- | arch/mips/include/asm/mach-ralink/rt305x.h | 6 | ||||
-rw-r--r-- | arch/mips/ralink/rt305x.c | 45 |
2 files changed, 51 insertions, 0 deletions
diff --git a/arch/mips/include/asm/mach-ralink/rt305x.h b/arch/mips/include/asm/mach-ralink/rt305x.h index 80cda8af7ac9..069bf37a6010 100644 --- a/arch/mips/include/asm/mach-ralink/rt305x.h +++ b/arch/mips/include/asm/mach-ralink/rt305x.h | |||
@@ -157,4 +157,10 @@ static inline int soc_is_rt5350(void) | |||
157 | #define RT3352_RSTCTRL_UDEV BIT(25) | 157 | #define RT3352_RSTCTRL_UDEV BIT(25) |
158 | #define RT3352_SYSCFG1_USB0_HOST_MODE BIT(10) | 158 | #define RT3352_SYSCFG1_USB0_HOST_MODE BIT(10) |
159 | 159 | ||
160 | #define RT305X_SDRAM_BASE 0x00000000 | ||
161 | #define RT305X_MEM_SIZE_MIN 2 | ||
162 | #define RT305X_MEM_SIZE_MAX 64 | ||
163 | #define RT3352_MEM_SIZE_MIN 2 | ||
164 | #define RT3352_MEM_SIZE_MAX 256 | ||
165 | |||
160 | #endif | 166 | #endif |
diff --git a/arch/mips/ralink/rt305x.c b/arch/mips/ralink/rt305x.c index 6aa3cb1a8fc5..ca7ee3a33790 100644 --- a/arch/mips/ralink/rt305x.c +++ b/arch/mips/ralink/rt305x.c | |||
@@ -122,6 +122,40 @@ struct ralink_pinmux rt_gpio_pinmux = { | |||
122 | .wdt_reset = rt305x_wdt_reset, | 122 | .wdt_reset = rt305x_wdt_reset, |
123 | }; | 123 | }; |
124 | 124 | ||
125 | static unsigned long rt5350_get_mem_size(void) | ||
126 | { | ||
127 | void __iomem *sysc = (void __iomem *) KSEG1ADDR(RT305X_SYSC_BASE); | ||
128 | unsigned long ret; | ||
129 | u32 t; | ||
130 | |||
131 | t = __raw_readl(sysc + SYSC_REG_SYSTEM_CONFIG); | ||
132 | t = (t >> RT5350_SYSCFG0_DRAM_SIZE_SHIFT) & | ||
133 | RT5350_SYSCFG0_DRAM_SIZE_MASK; | ||
134 | |||
135 | switch (t) { | ||
136 | case RT5350_SYSCFG0_DRAM_SIZE_2M: | ||
137 | ret = 2; | ||
138 | break; | ||
139 | case RT5350_SYSCFG0_DRAM_SIZE_8M: | ||
140 | ret = 8; | ||
141 | break; | ||
142 | case RT5350_SYSCFG0_DRAM_SIZE_16M: | ||
143 | ret = 16; | ||
144 | break; | ||
145 | case RT5350_SYSCFG0_DRAM_SIZE_32M: | ||
146 | ret = 32; | ||
147 | break; | ||
148 | case RT5350_SYSCFG0_DRAM_SIZE_64M: | ||
149 | ret = 64; | ||
150 | break; | ||
151 | default: | ||
152 | panic("rt5350: invalid DRAM size: %u", t); | ||
153 | break; | ||
154 | } | ||
155 | |||
156 | return ret; | ||
157 | } | ||
158 | |||
125 | void __init ralink_clk_init(void) | 159 | void __init ralink_clk_init(void) |
126 | { | 160 | { |
127 | unsigned long cpu_rate, sys_rate, wdt_rate, uart_rate; | 161 | unsigned long cpu_rate, sys_rate, wdt_rate, uart_rate; |
@@ -252,4 +286,15 @@ void prom_soc_init(struct ralink_soc_info *soc_info) | |||
252 | name, | 286 | name, |
253 | (id >> CHIP_ID_ID_SHIFT) & CHIP_ID_ID_MASK, | 287 | (id >> CHIP_ID_ID_SHIFT) & CHIP_ID_ID_MASK, |
254 | (id & CHIP_ID_REV_MASK)); | 288 | (id & CHIP_ID_REV_MASK)); |
289 | |||
290 | soc_info->mem_base = RT305X_SDRAM_BASE; | ||
291 | if (soc_is_rt5350()) { | ||
292 | soc_info->mem_size = rt5350_get_mem_size(); | ||
293 | } else if (soc_is_rt305x() || soc_is_rt3350()) { | ||
294 | soc_info->mem_size_min = RT305X_MEM_SIZE_MIN; | ||
295 | soc_info->mem_size_max = RT305X_MEM_SIZE_MAX; | ||
296 | } else if (soc_is_rt3352()) { | ||
297 | soc_info->mem_size_min = RT3352_MEM_SIZE_MIN; | ||
298 | soc_info->mem_size_max = RT3352_MEM_SIZE_MAX; | ||
299 | } | ||
255 | } | 300 | } |