diff options
Diffstat (limited to 'arch/mips/bcm63xx/cpu.c')
-rw-r--r-- | arch/mips/bcm63xx/cpu.c | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/arch/mips/bcm63xx/cpu.c b/arch/mips/bcm63xx/cpu.c index e3c1da59ea13..a7afb289b15a 100644 --- a/arch/mips/bcm63xx/cpu.c +++ b/arch/mips/bcm63xx/cpu.c | |||
@@ -29,6 +29,14 @@ static u16 bcm63xx_cpu_rev; | |||
29 | static unsigned int bcm63xx_cpu_freq; | 29 | static unsigned int bcm63xx_cpu_freq; |
30 | static unsigned int bcm63xx_memory_size; | 30 | static unsigned int bcm63xx_memory_size; |
31 | 31 | ||
32 | static const unsigned long bcm6328_regs_base[] = { | ||
33 | __GEN_CPU_REGS_TABLE(6328) | ||
34 | }; | ||
35 | |||
36 | static const int bcm6328_irqs[] = { | ||
37 | __GEN_CPU_IRQ_TABLE(6328) | ||
38 | }; | ||
39 | |||
32 | static const unsigned long bcm6338_regs_base[] = { | 40 | static const unsigned long bcm6338_regs_base[] = { |
33 | __GEN_CPU_REGS_TABLE(6338) | 41 | __GEN_CPU_REGS_TABLE(6338) |
34 | }; | 42 | }; |
@@ -99,6 +107,33 @@ unsigned int bcm63xx_get_memory_size(void) | |||
99 | static unsigned int detect_cpu_clock(void) | 107 | static unsigned int detect_cpu_clock(void) |
100 | { | 108 | { |
101 | switch (bcm63xx_get_cpu_id()) { | 109 | switch (bcm63xx_get_cpu_id()) { |
110 | case BCM6328_CPU_ID: | ||
111 | { | ||
112 | unsigned int tmp, mips_pll_fcvo; | ||
113 | |||
114 | tmp = bcm_misc_readl(MISC_STRAPBUS_6328_REG); | ||
115 | mips_pll_fcvo = (tmp & STRAPBUS_6328_FCVO_MASK) | ||
116 | >> STRAPBUS_6328_FCVO_SHIFT; | ||
117 | |||
118 | switch (mips_pll_fcvo) { | ||
119 | case 0x12: | ||
120 | case 0x14: | ||
121 | case 0x19: | ||
122 | return 160000000; | ||
123 | case 0x1c: | ||
124 | return 192000000; | ||
125 | case 0x13: | ||
126 | case 0x15: | ||
127 | return 200000000; | ||
128 | case 0x1a: | ||
129 | return 384000000; | ||
130 | case 0x16: | ||
131 | return 400000000; | ||
132 | default: | ||
133 | return 320000000; | ||
134 | } | ||
135 | |||
136 | } | ||
102 | case BCM6338_CPU_ID: | 137 | case BCM6338_CPU_ID: |
103 | /* BCM6338 has a fixed 240 Mhz frequency */ | 138 | /* BCM6338 has a fixed 240 Mhz frequency */ |
104 | return 240000000; | 139 | return 240000000; |
@@ -170,6 +205,9 @@ static unsigned int detect_memory_size(void) | |||
170 | unsigned int cols = 0, rows = 0, is_32bits = 0, banks = 0; | 205 | unsigned int cols = 0, rows = 0, is_32bits = 0, banks = 0; |
171 | u32 val; | 206 | u32 val; |
172 | 207 | ||
208 | if (BCMCPU_IS_6328()) | ||
209 | return bcm_ddr_readl(DDR_CSEND_REG) << 24; | ||
210 | |||
173 | if (BCMCPU_IS_6345()) { | 211 | if (BCMCPU_IS_6345()) { |
174 | val = bcm_sdram_readl(SDRAM_MBASE_REG); | 212 | val = bcm_sdram_readl(SDRAM_MBASE_REG); |
175 | return (val * 8 * 1024 * 1024); | 213 | return (val * 8 * 1024 * 1024); |
@@ -237,6 +275,11 @@ void __init bcm63xx_cpu_init(void) | |||
237 | u16 chip_id = bcm_readw(BCM_6368_PERF_BASE); | 275 | u16 chip_id = bcm_readw(BCM_6368_PERF_BASE); |
238 | 276 | ||
239 | switch (chip_id) { | 277 | switch (chip_id) { |
278 | case BCM6328_CPU_ID: | ||
279 | expected_cpu_id = BCM6328_CPU_ID; | ||
280 | bcm63xx_regs_base = bcm6328_regs_base; | ||
281 | bcm63xx_irqs = bcm6328_irqs; | ||
282 | break; | ||
240 | case BCM6368_CPU_ID: | 283 | case BCM6368_CPU_ID: |
241 | expected_cpu_id = BCM6368_CPU_ID; | 284 | expected_cpu_id = BCM6368_CPU_ID; |
242 | bcm63xx_regs_base = bcm6368_regs_base; | 285 | bcm63xx_regs_base = bcm6368_regs_base; |