diff options
author | Jonas Gorski <jogo@openwrt.org> | 2013-03-21 10:03:17 -0400 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2013-05-07 19:19:03 -0400 |
commit | 2c8aaf71b0a4738ae8cb70d9367089bdb892aea3 (patch) | |
tree | 5ed40900de84142b9c4ed3812001154538f7cdde /arch | |
parent | 13be798c57ebe5df09254832330f48c936ac39fd (diff) |
MIPS: BCM63XX: add basic BCM6362 support
Add basic support for detecting and booting the BCM6362.
Signed-off-by: Jonas Gorski <jogo@openwrt.org>
Patchwork: http://patchwork.linux-mips.org/patch/5009/
Acked-by: John Crispin <blogic@openwrt.org>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/mips/bcm63xx/Kconfig | 4 | ||||
-rw-r--r-- | arch/mips/bcm63xx/boards/board_bcm963xx.c | 6 | ||||
-rw-r--r-- | arch/mips/bcm63xx/cpu.c | 51 | ||||
-rw-r--r-- | arch/mips/bcm63xx/irq.c | 22 | ||||
-rw-r--r-- | arch/mips/bcm63xx/prom.c | 2 | ||||
-rw-r--r-- | arch/mips/bcm63xx/reset.c | 28 | ||||
-rw-r--r-- | arch/mips/bcm63xx/setup.c | 3 | ||||
-rw-r--r-- | arch/mips/include/asm/mach-bcm63xx/bcm63xx_cpu.h | 139 | ||||
-rw-r--r-- | arch/mips/include/asm/mach-bcm63xx/bcm63xx_gpio.h | 2 | ||||
-rw-r--r-- | arch/mips/include/asm/mach-bcm63xx/bcm63xx_regs.h | 61 | ||||
-rw-r--r-- | arch/mips/include/asm/mach-bcm63xx/ioremap.h | 1 |
11 files changed, 314 insertions, 5 deletions
diff --git a/arch/mips/bcm63xx/Kconfig b/arch/mips/bcm63xx/Kconfig index d03e8799d1cf..5639662fd503 100644 --- a/arch/mips/bcm63xx/Kconfig +++ b/arch/mips/bcm63xx/Kconfig | |||
@@ -25,6 +25,10 @@ config BCM63XX_CPU_6358 | |||
25 | bool "support 6358 CPU" | 25 | bool "support 6358 CPU" |
26 | select HW_HAS_PCI | 26 | select HW_HAS_PCI |
27 | 27 | ||
28 | config BCM63XX_CPU_6362 | ||
29 | bool "support 6362 CPU" | ||
30 | select HW_HAS_PCI | ||
31 | |||
28 | config BCM63XX_CPU_6368 | 32 | config BCM63XX_CPU_6368 |
29 | bool "support 6368 CPU" | 33 | bool "support 6368 CPU" |
30 | select HW_HAS_PCI | 34 | select HW_HAS_PCI |
diff --git a/arch/mips/bcm63xx/boards/board_bcm963xx.c b/arch/mips/bcm63xx/boards/board_bcm963xx.c index 9aa7d44898ed..a9505c4867e8 100644 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c | |||
@@ -726,11 +726,11 @@ void __init board_prom_init(void) | |||
726 | u32 val; | 726 | u32 val; |
727 | 727 | ||
728 | /* read base address of boot chip select (0) | 728 | /* read base address of boot chip select (0) |
729 | * 6328 does not have MPI but boots from a fixed address | 729 | * 6328/6362 do not have MPI but boot from a fixed address |
730 | */ | 730 | */ |
731 | if (BCMCPU_IS_6328()) | 731 | if (BCMCPU_IS_6328() || BCMCPU_IS_6362()) { |
732 | val = 0x18000000; | 732 | val = 0x18000000; |
733 | else { | 733 | } else { |
734 | val = bcm_mpi_readl(MPI_CSBASE_REG(0)); | 734 | val = bcm_mpi_readl(MPI_CSBASE_REG(0)); |
735 | val &= MPI_CSBASE_BASE_MASK; | 735 | val &= MPI_CSBASE_BASE_MASK; |
736 | } | 736 | } |
diff --git a/arch/mips/bcm63xx/cpu.c b/arch/mips/bcm63xx/cpu.c index fef168d85884..79fe32df5e96 100644 --- a/arch/mips/bcm63xx/cpu.c +++ b/arch/mips/bcm63xx/cpu.c | |||
@@ -71,6 +71,15 @@ static const int bcm6358_irqs[] = { | |||
71 | 71 | ||
72 | }; | 72 | }; |
73 | 73 | ||
74 | static const unsigned long bcm6362_regs_base[] = { | ||
75 | __GEN_CPU_REGS_TABLE(6362) | ||
76 | }; | ||
77 | |||
78 | static const int bcm6362_irqs[] = { | ||
79 | __GEN_CPU_IRQ_TABLE(6362) | ||
80 | |||
81 | }; | ||
82 | |||
74 | static const unsigned long bcm6368_regs_base[] = { | 83 | static const unsigned long bcm6368_regs_base[] = { |
75 | __GEN_CPU_REGS_TABLE(6368) | 84 | __GEN_CPU_REGS_TABLE(6368) |
76 | }; | 85 | }; |
@@ -169,6 +178,42 @@ static unsigned int detect_cpu_clock(void) | |||
169 | return (16 * 1000000 * n1 * n2) / m1; | 178 | return (16 * 1000000 * n1 * n2) / m1; |
170 | } | 179 | } |
171 | 180 | ||
181 | case BCM6362_CPU_ID: | ||
182 | { | ||
183 | unsigned int tmp, mips_pll_fcvo; | ||
184 | |||
185 | tmp = bcm_misc_readl(MISC_STRAPBUS_6362_REG); | ||
186 | mips_pll_fcvo = (tmp & STRAPBUS_6362_FCVO_MASK) | ||
187 | >> STRAPBUS_6362_FCVO_SHIFT; | ||
188 | switch (mips_pll_fcvo) { | ||
189 | case 0x03: | ||
190 | case 0x0b: | ||
191 | case 0x13: | ||
192 | case 0x1b: | ||
193 | return 240000000; | ||
194 | case 0x04: | ||
195 | case 0x0c: | ||
196 | case 0x14: | ||
197 | case 0x1c: | ||
198 | return 160000000; | ||
199 | case 0x05: | ||
200 | case 0x0e: | ||
201 | case 0x16: | ||
202 | case 0x1e: | ||
203 | case 0x1f: | ||
204 | return 400000000; | ||
205 | case 0x06: | ||
206 | return 440000000; | ||
207 | case 0x07: | ||
208 | case 0x17: | ||
209 | return 384000000; | ||
210 | case 0x15: | ||
211 | case 0x1d: | ||
212 | return 200000000; | ||
213 | default: | ||
214 | return 320000000; | ||
215 | } | ||
216 | } | ||
172 | case BCM6368_CPU_ID: | 217 | case BCM6368_CPU_ID: |
173 | { | 218 | { |
174 | unsigned int tmp, p1, p2, ndiv, m1; | 219 | unsigned int tmp, p1, p2, ndiv, m1; |
@@ -205,7 +250,7 @@ static unsigned int detect_memory_size(void) | |||
205 | unsigned int cols = 0, rows = 0, is_32bits = 0, banks = 0; | 250 | unsigned int cols = 0, rows = 0, is_32bits = 0, banks = 0; |
206 | u32 val; | 251 | u32 val; |
207 | 252 | ||
208 | if (BCMCPU_IS_6328()) | 253 | if (BCMCPU_IS_6328() || BCMCPU_IS_6362()) |
209 | return bcm_ddr_readl(DDR_CSEND_REG) << 24; | 254 | return bcm_ddr_readl(DDR_CSEND_REG) << 24; |
210 | 255 | ||
211 | if (BCMCPU_IS_6345()) { | 256 | if (BCMCPU_IS_6345()) { |
@@ -297,6 +342,10 @@ void __init bcm63xx_cpu_init(void) | |||
297 | bcm63xx_regs_base = bcm6358_regs_base; | 342 | bcm63xx_regs_base = bcm6358_regs_base; |
298 | bcm63xx_irqs = bcm6358_irqs; | 343 | bcm63xx_irqs = bcm6358_irqs; |
299 | break; | 344 | break; |
345 | case BCM6362_CPU_ID: | ||
346 | bcm63xx_regs_base = bcm6362_regs_base; | ||
347 | bcm63xx_irqs = bcm6362_irqs; | ||
348 | break; | ||
300 | case BCM6368_CPU_ID: | 349 | case BCM6368_CPU_ID: |
301 | bcm63xx_regs_base = bcm6368_regs_base; | 350 | bcm63xx_regs_base = bcm6368_regs_base; |
302 | bcm63xx_irqs = bcm6368_irqs; | 351 | bcm63xx_irqs = bcm6368_irqs; |
diff --git a/arch/mips/bcm63xx/irq.c b/arch/mips/bcm63xx/irq.c index da24c2bd9b7c..c0ab3887f42e 100644 --- a/arch/mips/bcm63xx/irq.c +++ b/arch/mips/bcm63xx/irq.c | |||
@@ -82,6 +82,17 @@ static void __internal_irq_unmask_64(unsigned int irq) __maybe_unused; | |||
82 | #define ext_irq_cfg_reg1 PERF_EXTIRQ_CFG_REG_6358 | 82 | #define ext_irq_cfg_reg1 PERF_EXTIRQ_CFG_REG_6358 |
83 | #define ext_irq_cfg_reg2 0 | 83 | #define ext_irq_cfg_reg2 0 |
84 | #endif | 84 | #endif |
85 | #ifdef CONFIG_BCM63XX_CPU_6362 | ||
86 | #define irq_stat_reg PERF_IRQSTAT_6362_REG | ||
87 | #define irq_mask_reg PERF_IRQMASK_6362_REG | ||
88 | #define irq_bits 64 | ||
89 | #define is_ext_irq_cascaded 1 | ||
90 | #define ext_irq_start (BCM_6362_EXT_IRQ0 - IRQ_INTERNAL_BASE) | ||
91 | #define ext_irq_end (BCM_6362_EXT_IRQ3 - IRQ_INTERNAL_BASE) | ||
92 | #define ext_irq_count 4 | ||
93 | #define ext_irq_cfg_reg1 PERF_EXTIRQ_CFG_REG_6362 | ||
94 | #define ext_irq_cfg_reg2 0 | ||
95 | #endif | ||
85 | #ifdef CONFIG_BCM63XX_CPU_6368 | 96 | #ifdef CONFIG_BCM63XX_CPU_6368 |
86 | #define irq_stat_reg PERF_IRQSTAT_6368_REG | 97 | #define irq_stat_reg PERF_IRQSTAT_6368_REG |
87 | #define irq_mask_reg PERF_IRQMASK_6368_REG | 98 | #define irq_mask_reg PERF_IRQMASK_6368_REG |
@@ -170,6 +181,16 @@ static void bcm63xx_init_irq(void) | |||
170 | ext_irq_end = BCM_6358_EXT_IRQ3 - IRQ_INTERNAL_BASE; | 181 | ext_irq_end = BCM_6358_EXT_IRQ3 - IRQ_INTERNAL_BASE; |
171 | ext_irq_cfg_reg1 = PERF_EXTIRQ_CFG_REG_6358; | 182 | ext_irq_cfg_reg1 = PERF_EXTIRQ_CFG_REG_6358; |
172 | break; | 183 | break; |
184 | case BCM6362_CPU_ID: | ||
185 | irq_stat_addr += PERF_IRQSTAT_6362_REG; | ||
186 | irq_mask_addr += PERF_IRQMASK_6362_REG; | ||
187 | irq_bits = 64; | ||
188 | ext_irq_count = 4; | ||
189 | is_ext_irq_cascaded = 1; | ||
190 | ext_irq_start = BCM_6362_EXT_IRQ0 - IRQ_INTERNAL_BASE; | ||
191 | ext_irq_end = BCM_6362_EXT_IRQ3 - IRQ_INTERNAL_BASE; | ||
192 | ext_irq_cfg_reg1 = PERF_EXTIRQ_CFG_REG_6362; | ||
193 | break; | ||
173 | case BCM6368_CPU_ID: | 194 | case BCM6368_CPU_ID: |
174 | irq_stat_addr += PERF_IRQSTAT_6368_REG; | 195 | irq_stat_addr += PERF_IRQSTAT_6368_REG; |
175 | irq_mask_addr += PERF_IRQMASK_6368_REG; | 196 | irq_mask_addr += PERF_IRQMASK_6368_REG; |
@@ -458,6 +479,7 @@ static int bcm63xx_external_irq_set_type(struct irq_data *d, | |||
458 | case BCM6338_CPU_ID: | 479 | case BCM6338_CPU_ID: |
459 | case BCM6345_CPU_ID: | 480 | case BCM6345_CPU_ID: |
460 | case BCM6358_CPU_ID: | 481 | case BCM6358_CPU_ID: |
482 | case BCM6362_CPU_ID: | ||
461 | case BCM6368_CPU_ID: | 483 | case BCM6368_CPU_ID: |
462 | if (levelsense) | 484 | if (levelsense) |
463 | reg |= EXTIRQ_CFG_LEVELSENSE(irq); | 485 | reg |= EXTIRQ_CFG_LEVELSENSE(irq); |
diff --git a/arch/mips/bcm63xx/prom.c b/arch/mips/bcm63xx/prom.c index 10eaff458071..fd698087fbfd 100644 --- a/arch/mips/bcm63xx/prom.c +++ b/arch/mips/bcm63xx/prom.c | |||
@@ -36,6 +36,8 @@ void __init prom_init(void) | |||
36 | mask = CKCTL_6348_ALL_SAFE_EN; | 36 | mask = CKCTL_6348_ALL_SAFE_EN; |
37 | else if (BCMCPU_IS_6358()) | 37 | else if (BCMCPU_IS_6358()) |
38 | mask = CKCTL_6358_ALL_SAFE_EN; | 38 | mask = CKCTL_6358_ALL_SAFE_EN; |
39 | else if (BCMCPU_IS_6362()) | ||
40 | mask = CKCTL_6362_ALL_SAFE_EN; | ||
39 | else if (BCMCPU_IS_6368()) | 41 | else if (BCMCPU_IS_6368()) |
40 | mask = CKCTL_6368_ALL_SAFE_EN; | 42 | mask = CKCTL_6368_ALL_SAFE_EN; |
41 | else | 43 | else |
diff --git a/arch/mips/bcm63xx/reset.c b/arch/mips/bcm63xx/reset.c index 68a31bb90cbf..317931c6cf58 100644 --- a/arch/mips/bcm63xx/reset.c +++ b/arch/mips/bcm63xx/reset.c | |||
@@ -85,6 +85,20 @@ | |||
85 | #define BCM6358_RESET_PCIE 0 | 85 | #define BCM6358_RESET_PCIE 0 |
86 | #define BCM6358_RESET_PCIE_EXT 0 | 86 | #define BCM6358_RESET_PCIE_EXT 0 |
87 | 87 | ||
88 | #define BCM6362_RESET_SPI SOFTRESET_6362_SPI_MASK | ||
89 | #define BCM6362_RESET_ENET 0 | ||
90 | #define BCM6362_RESET_USBH SOFTRESET_6362_USBH_MASK | ||
91 | #define BCM6362_RESET_USBD SOFTRESET_6362_USBS_MASK | ||
92 | #define BCM6362_RESET_DSL 0 | ||
93 | #define BCM6362_RESET_SAR SOFTRESET_6362_SAR_MASK | ||
94 | #define BCM6362_RESET_EPHY SOFTRESET_6362_EPHY_MASK | ||
95 | #define BCM6362_RESET_ENETSW SOFTRESET_6362_ENETSW_MASK | ||
96 | #define BCM6362_RESET_PCM SOFTRESET_6362_PCM_MASK | ||
97 | #define BCM6362_RESET_MPI 0 | ||
98 | #define BCM6362_RESET_PCIE (SOFTRESET_6362_PCIE_MASK | \ | ||
99 | SOFTRESET_6362_PCIE_CORE_MASK) | ||
100 | #define BCM6362_RESET_PCIE_EXT SOFTRESET_6362_PCIE_EXT_MASK | ||
101 | |||
88 | #define BCM6368_RESET_SPI SOFTRESET_6368_SPI_MASK | 102 | #define BCM6368_RESET_SPI SOFTRESET_6368_SPI_MASK |
89 | #define BCM6368_RESET_ENET 0 | 103 | #define BCM6368_RESET_ENET 0 |
90 | #define BCM6368_RESET_USBH SOFTRESET_6368_USBH_MASK | 104 | #define BCM6368_RESET_USBH SOFTRESET_6368_USBH_MASK |
@@ -119,6 +133,10 @@ static const u32 bcm6358_reset_bits[] = { | |||
119 | __GEN_RESET_BITS_TABLE(6358) | 133 | __GEN_RESET_BITS_TABLE(6358) |
120 | }; | 134 | }; |
121 | 135 | ||
136 | static const u32 bcm6362_reset_bits[] = { | ||
137 | __GEN_RESET_BITS_TABLE(6362) | ||
138 | }; | ||
139 | |||
122 | static const u32 bcm6368_reset_bits[] = { | 140 | static const u32 bcm6368_reset_bits[] = { |
123 | __GEN_RESET_BITS_TABLE(6368) | 141 | __GEN_RESET_BITS_TABLE(6368) |
124 | }; | 142 | }; |
@@ -140,6 +158,9 @@ static int __init bcm63xx_reset_bits_init(void) | |||
140 | } else if (BCMCPU_IS_6358()) { | 158 | } else if (BCMCPU_IS_6358()) { |
141 | reset_reg = PERF_SOFTRESET_6358_REG; | 159 | reset_reg = PERF_SOFTRESET_6358_REG; |
142 | bcm63xx_reset_bits = bcm6358_reset_bits; | 160 | bcm63xx_reset_bits = bcm6358_reset_bits; |
161 | } else if (BCMCPU_IS_6362()) { | ||
162 | reset_reg = PERF_SOFTRESET_6362_REG; | ||
163 | bcm63xx_reset_bits = bcm6362_reset_bits; | ||
143 | } else if (BCMCPU_IS_6368()) { | 164 | } else if (BCMCPU_IS_6368()) { |
144 | reset_reg = PERF_SOFTRESET_6368_REG; | 165 | reset_reg = PERF_SOFTRESET_6368_REG; |
145 | bcm63xx_reset_bits = bcm6368_reset_bits; | 166 | bcm63xx_reset_bits = bcm6368_reset_bits; |
@@ -182,6 +203,13 @@ static const u32 bcm63xx_reset_bits[] = { | |||
182 | #define reset_reg PERF_SOFTRESET_6358_REG | 203 | #define reset_reg PERF_SOFTRESET_6358_REG |
183 | #endif | 204 | #endif |
184 | 205 | ||
206 | #ifdef CONFIG_BCM63XX_CPU_6362 | ||
207 | static const u32 bcm63xx_reset_bits[] = { | ||
208 | __GEN_RESET_BITS_TABLE(6362) | ||
209 | }; | ||
210 | #define reset_reg PERF_SOFTRESET_6362_REG | ||
211 | #endif | ||
212 | |||
185 | #ifdef CONFIG_BCM63XX_CPU_6368 | 213 | #ifdef CONFIG_BCM63XX_CPU_6368 |
186 | static const u32 bcm63xx_reset_bits[] = { | 214 | static const u32 bcm63xx_reset_bits[] = { |
187 | __GEN_RESET_BITS_TABLE(6368) | 215 | __GEN_RESET_BITS_TABLE(6368) |
diff --git a/arch/mips/bcm63xx/setup.c b/arch/mips/bcm63xx/setup.c index 911fd7df49e5..24a24445db64 100644 --- a/arch/mips/bcm63xx/setup.c +++ b/arch/mips/bcm63xx/setup.c | |||
@@ -83,6 +83,9 @@ void bcm63xx_machine_reboot(void) | |||
83 | case BCM6358_CPU_ID: | 83 | case BCM6358_CPU_ID: |
84 | perf_regs[0] = PERF_EXTIRQ_CFG_REG_6358; | 84 | perf_regs[0] = PERF_EXTIRQ_CFG_REG_6358; |
85 | break; | 85 | break; |
86 | case BCM6362_CPU_ID: | ||
87 | perf_regs[0] = PERF_EXTIRQ_CFG_REG_6362; | ||
88 | break; | ||
86 | } | 89 | } |
87 | 90 | ||
88 | for (i = 0; i < 2; i++) { | 91 | for (i = 0; i < 2; i++) { |
diff --git a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_cpu.h b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_cpu.h index 19a80ead5839..336228990808 100644 --- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_cpu.h +++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_cpu.h | |||
@@ -14,6 +14,7 @@ | |||
14 | #define BCM6345_CPU_ID 0x6345 | 14 | #define BCM6345_CPU_ID 0x6345 |
15 | #define BCM6348_CPU_ID 0x6348 | 15 | #define BCM6348_CPU_ID 0x6348 |
16 | #define BCM6358_CPU_ID 0x6358 | 16 | #define BCM6358_CPU_ID 0x6358 |
17 | #define BCM6362_CPU_ID 0x6362 | ||
17 | #define BCM6368_CPU_ID 0x6368 | 18 | #define BCM6368_CPU_ID 0x6368 |
18 | 19 | ||
19 | void __init bcm63xx_cpu_init(void); | 20 | void __init bcm63xx_cpu_init(void); |
@@ -86,6 +87,20 @@ unsigned int bcm63xx_get_cpu_freq(void); | |||
86 | # define BCMCPU_IS_6358() (0) | 87 | # define BCMCPU_IS_6358() (0) |
87 | #endif | 88 | #endif |
88 | 89 | ||
90 | #ifdef CONFIG_BCM63XX_CPU_6362 | ||
91 | # ifdef bcm63xx_get_cpu_id | ||
92 | # undef bcm63xx_get_cpu_id | ||
93 | # define bcm63xx_get_cpu_id() __bcm63xx_get_cpu_id() | ||
94 | # define BCMCPU_RUNTIME_DETECT | ||
95 | # else | ||
96 | # define bcm63xx_get_cpu_id() BCM6362_CPU_ID | ||
97 | # endif | ||
98 | # define BCMCPU_IS_6362() (bcm63xx_get_cpu_id() == BCM6362_CPU_ID) | ||
99 | #else | ||
100 | # define BCMCPU_IS_6362() (0) | ||
101 | #endif | ||
102 | |||
103 | |||
89 | #ifdef CONFIG_BCM63XX_CPU_6368 | 104 | #ifdef CONFIG_BCM63XX_CPU_6368 |
90 | # ifdef bcm63xx_get_cpu_id | 105 | # ifdef bcm63xx_get_cpu_id |
91 | # undef bcm63xx_get_cpu_id | 106 | # undef bcm63xx_get_cpu_id |
@@ -406,6 +421,62 @@ enum bcm63xx_regs_set { | |||
406 | 421 | ||
407 | 422 | ||
408 | /* | 423 | /* |
424 | * 6362 register sets base address | ||
425 | */ | ||
426 | #define BCM_6362_DSL_LMEM_BASE (0xdeadbeef) | ||
427 | #define BCM_6362_PERF_BASE (0xb0000000) | ||
428 | #define BCM_6362_TIMER_BASE (0xb0000040) | ||
429 | #define BCM_6362_WDT_BASE (0xb000005c) | ||
430 | #define BCM_6362_UART0_BASE (0xb0000100) | ||
431 | #define BCM_6362_UART1_BASE (0xb0000120) | ||
432 | #define BCM_6362_GPIO_BASE (0xb0000080) | ||
433 | #define BCM_6362_SPI_BASE (0xb0000800) | ||
434 | #define BCM_6362_HSSPI_BASE (0xb0001000) | ||
435 | #define BCM_6362_UDC0_BASE (0xdeadbeef) | ||
436 | #define BCM_6362_USBDMA_BASE (0xb000c000) | ||
437 | #define BCM_6362_OHCI0_BASE (0xb0002600) | ||
438 | #define BCM_6362_OHCI_PRIV_BASE (0xdeadbeef) | ||
439 | #define BCM_6362_USBH_PRIV_BASE (0xb0002700) | ||
440 | #define BCM_6362_USBD_BASE (0xb0002400) | ||
441 | #define BCM_6362_MPI_BASE (0xdeadbeef) | ||
442 | #define BCM_6362_PCMCIA_BASE (0xdeadbeef) | ||
443 | #define BCM_6362_PCIE_BASE (0xb0e40000) | ||
444 | #define BCM_6362_SDRAM_REGS_BASE (0xdeadbeef) | ||
445 | #define BCM_6362_DSL_BASE (0xdeadbeef) | ||
446 | #define BCM_6362_UBUS_BASE (0xdeadbeef) | ||
447 | #define BCM_6362_ENET0_BASE (0xdeadbeef) | ||
448 | #define BCM_6362_ENET1_BASE (0xdeadbeef) | ||
449 | #define BCM_6362_ENETDMA_BASE (0xb000d800) | ||
450 | #define BCM_6362_ENETDMAC_BASE (0xb000da00) | ||
451 | #define BCM_6362_ENETDMAS_BASE (0xb000dc00) | ||
452 | #define BCM_6362_ENETSW_BASE (0xb0e00000) | ||
453 | #define BCM_6362_EHCI0_BASE (0xb0002500) | ||
454 | #define BCM_6362_SDRAM_BASE (0xdeadbeef) | ||
455 | #define BCM_6362_MEMC_BASE (0xdeadbeef) | ||
456 | #define BCM_6362_DDR_BASE (0xb0003000) | ||
457 | #define BCM_6362_M2M_BASE (0xdeadbeef) | ||
458 | #define BCM_6362_ATM_BASE (0xdeadbeef) | ||
459 | #define BCM_6362_XTM_BASE (0xb0007800) | ||
460 | #define BCM_6362_XTMDMA_BASE (0xb000b800) | ||
461 | #define BCM_6362_XTMDMAC_BASE (0xdeadbeef) | ||
462 | #define BCM_6362_XTMDMAS_BASE (0xdeadbeef) | ||
463 | #define BCM_6362_PCM_BASE (0xb000a800) | ||
464 | #define BCM_6362_PCMDMA_BASE (0xdeadbeef) | ||
465 | #define BCM_6362_PCMDMAC_BASE (0xdeadbeef) | ||
466 | #define BCM_6362_PCMDMAS_BASE (0xdeadbeef) | ||
467 | #define BCM_6362_RNG_BASE (0xdeadbeef) | ||
468 | #define BCM_6362_MISC_BASE (0xb0001800) | ||
469 | |||
470 | #define BCM_6362_NAND_REG_BASE (0xb0000200) | ||
471 | #define BCM_6362_NAND_CACHE_BASE (0xb0000600) | ||
472 | #define BCM_6362_LED_BASE (0xb0001900) | ||
473 | #define BCM_6362_IPSEC_BASE (0xb0002800) | ||
474 | #define BCM_6362_IPSEC_DMA_BASE (0xb000d000) | ||
475 | #define BCM_6362_WLAN_CHIPCOMMON_BASE (0xb0004000) | ||
476 | #define BCM_6362_WLAN_D11_BASE (0xb0005000) | ||
477 | #define BCM_6362_WLAN_SHIM_BASE (0xb0007000) | ||
478 | |||
479 | /* | ||
409 | * 6368 register sets base address | 480 | * 6368 register sets base address |
410 | */ | 481 | */ |
411 | #define BCM_6368_DSL_LMEM_BASE (0xdeadbeef) | 482 | #define BCM_6368_DSL_LMEM_BASE (0xdeadbeef) |
@@ -564,6 +635,9 @@ static inline unsigned long bcm63xx_regset_address(enum bcm63xx_regs_set set) | |||
564 | #ifdef CONFIG_BCM63XX_CPU_6358 | 635 | #ifdef CONFIG_BCM63XX_CPU_6358 |
565 | __GEN_RSET(6358) | 636 | __GEN_RSET(6358) |
566 | #endif | 637 | #endif |
638 | #ifdef CONFIG_BCM63XX_CPU_6362 | ||
639 | __GEN_RSET(6362) | ||
640 | #endif | ||
567 | #ifdef CONFIG_BCM63XX_CPU_6368 | 641 | #ifdef CONFIG_BCM63XX_CPU_6368 |
568 | __GEN_RSET(6368) | 642 | __GEN_RSET(6368) |
569 | #endif | 643 | #endif |
@@ -820,6 +894,71 @@ enum bcm63xx_irq { | |||
820 | #define BCM_6358_EXT_IRQ3 (IRQ_INTERNAL_BASE + 28) | 894 | #define BCM_6358_EXT_IRQ3 (IRQ_INTERNAL_BASE + 28) |
821 | 895 | ||
822 | /* | 896 | /* |
897 | * 6362 irqs | ||
898 | */ | ||
899 | #define BCM_6362_HIGH_IRQ_BASE (IRQ_INTERNAL_BASE + 32) | ||
900 | |||
901 | #define BCM_6362_TIMER_IRQ (IRQ_INTERNAL_BASE + 0) | ||
902 | #define BCM_6362_SPI_IRQ (IRQ_INTERNAL_BASE + 2) | ||
903 | #define BCM_6362_UART0_IRQ (IRQ_INTERNAL_BASE + 3) | ||
904 | #define BCM_6362_UART1_IRQ (IRQ_INTERNAL_BASE + 4) | ||
905 | #define BCM_6362_DSL_IRQ (IRQ_INTERNAL_BASE + 28) | ||
906 | #define BCM_6362_UDC0_IRQ 0 | ||
907 | #define BCM_6362_ENET0_IRQ 0 | ||
908 | #define BCM_6362_ENET1_IRQ 0 | ||
909 | #define BCM_6362_ENET_PHY_IRQ (IRQ_INTERNAL_BASE + 14) | ||
910 | #define BCM_6362_HSSPI_IRQ (IRQ_INTERNAL_BASE + 5) | ||
911 | #define BCM_6362_OHCI0_IRQ (IRQ_INTERNAL_BASE + 9) | ||
912 | #define BCM_6362_EHCI0_IRQ (IRQ_INTERNAL_BASE + 10) | ||
913 | #define BCM_6362_USBD_IRQ (IRQ_INTERNAL_BASE + 11) | ||
914 | #define BCM_6362_USBD_RXDMA0_IRQ (IRQ_INTERNAL_BASE + 20) | ||
915 | #define BCM_6362_USBD_TXDMA0_IRQ (IRQ_INTERNAL_BASE + 21) | ||
916 | #define BCM_6362_USBD_RXDMA1_IRQ (IRQ_INTERNAL_BASE + 22) | ||
917 | #define BCM_6362_USBD_TXDMA1_IRQ (IRQ_INTERNAL_BASE + 23) | ||
918 | #define BCM_6362_USBD_RXDMA2_IRQ (IRQ_INTERNAL_BASE + 24) | ||
919 | #define BCM_6362_USBD_TXDMA2_IRQ (IRQ_INTERNAL_BASE + 25) | ||
920 | #define BCM_6362_PCMCIA_IRQ 0 | ||
921 | #define BCM_6362_ENET0_RXDMA_IRQ 0 | ||
922 | #define BCM_6362_ENET0_TXDMA_IRQ 0 | ||
923 | #define BCM_6362_ENET1_RXDMA_IRQ 0 | ||
924 | #define BCM_6362_ENET1_TXDMA_IRQ 0 | ||
925 | #define BCM_6362_PCI_IRQ (IRQ_INTERNAL_BASE + 30) | ||
926 | #define BCM_6362_ATM_IRQ 0 | ||
927 | #define BCM_6362_ENETSW_RXDMA0_IRQ (BCM_6362_HIGH_IRQ_BASE + 0) | ||
928 | #define BCM_6362_ENETSW_RXDMA1_IRQ (BCM_6362_HIGH_IRQ_BASE + 1) | ||
929 | #define BCM_6362_ENETSW_RXDMA2_IRQ (BCM_6362_HIGH_IRQ_BASE + 2) | ||
930 | #define BCM_6362_ENETSW_RXDMA3_IRQ (BCM_6362_HIGH_IRQ_BASE + 3) | ||
931 | #define BCM_6362_ENETSW_TXDMA0_IRQ 0 | ||
932 | #define BCM_6362_ENETSW_TXDMA1_IRQ 0 | ||
933 | #define BCM_6362_ENETSW_TXDMA2_IRQ 0 | ||
934 | #define BCM_6362_ENETSW_TXDMA3_IRQ 0 | ||
935 | #define BCM_6362_XTM_IRQ 0 | ||
936 | #define BCM_6362_XTM_DMA0_IRQ (BCM_6362_HIGH_IRQ_BASE + 12) | ||
937 | |||
938 | #define BCM_6362_RING_OSC_IRQ (IRQ_INTERNAL_BASE + 1) | ||
939 | #define BCM_6362_WLAN_GPIO_IRQ (IRQ_INTERNAL_BASE + 6) | ||
940 | #define BCM_6362_WLAN_IRQ (IRQ_INTERNAL_BASE + 7) | ||
941 | #define BCM_6362_IPSEC_IRQ (IRQ_INTERNAL_BASE + 8) | ||
942 | #define BCM_6362_NAND_IRQ (IRQ_INTERNAL_BASE + 12) | ||
943 | #define BCM_6362_PCM_IRQ (IRQ_INTERNAL_BASE + 13) | ||
944 | #define BCM_6362_DG_IRQ (IRQ_INTERNAL_BASE + 15) | ||
945 | #define BCM_6362_EPHY_ENERGY0_IRQ (IRQ_INTERNAL_BASE + 16) | ||
946 | #define BCM_6362_EPHY_ENERGY1_IRQ (IRQ_INTERNAL_BASE + 17) | ||
947 | #define BCM_6362_EPHY_ENERGY2_IRQ (IRQ_INTERNAL_BASE + 18) | ||
948 | #define BCM_6362_EPHY_ENERGY3_IRQ (IRQ_INTERNAL_BASE + 19) | ||
949 | #define BCM_6362_IPSEC_DMA0_IRQ (IRQ_INTERNAL_BASE + 26) | ||
950 | #define BCM_6362_IPSEC_DMA1_IRQ (IRQ_INTERNAL_BASE + 27) | ||
951 | #define BCM_6362_FAP0_IRQ (IRQ_INTERNAL_BASE + 29) | ||
952 | #define BCM_6362_PCM_DMA0_IRQ (BCM_6362_HIGH_IRQ_BASE + 4) | ||
953 | #define BCM_6362_PCM_DMA1_IRQ (BCM_6362_HIGH_IRQ_BASE + 5) | ||
954 | #define BCM_6362_DECT0_IRQ (BCM_6362_HIGH_IRQ_BASE + 6) | ||
955 | #define BCM_6362_DECT1_IRQ (BCM_6362_HIGH_IRQ_BASE + 7) | ||
956 | #define BCM_6362_EXT_IRQ0 (BCM_6362_HIGH_IRQ_BASE + 8) | ||
957 | #define BCM_6362_EXT_IRQ1 (BCM_6362_HIGH_IRQ_BASE + 9) | ||
958 | #define BCM_6362_EXT_IRQ2 (BCM_6362_HIGH_IRQ_BASE + 10) | ||
959 | #define BCM_6362_EXT_IRQ3 (BCM_6362_HIGH_IRQ_BASE + 11) | ||
960 | |||
961 | /* | ||
823 | * 6368 irqs | 962 | * 6368 irqs |
824 | */ | 963 | */ |
825 | #define BCM_6368_HIGH_IRQ_BASE (IRQ_INTERNAL_BASE + 32) | 964 | #define BCM_6368_HIGH_IRQ_BASE (IRQ_INTERNAL_BASE + 32) |
diff --git a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_gpio.h b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_gpio.h index 0a9891f7580d..35baa1a60a64 100644 --- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_gpio.h +++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_gpio.h | |||
@@ -17,6 +17,8 @@ static inline unsigned long bcm63xx_gpio_count(void) | |||
17 | return 8; | 17 | return 8; |
18 | case BCM6345_CPU_ID: | 18 | case BCM6345_CPU_ID: |
19 | return 16; | 19 | return 16; |
20 | case BCM6362_CPU_ID: | ||
21 | return 48; | ||
20 | case BCM6368_CPU_ID: | 22 | case BCM6368_CPU_ID: |
21 | return 38; | 23 | return 38; |
22 | case BCM6348_CPU_ID: | 24 | case BCM6348_CPU_ID: |
diff --git a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_regs.h b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_regs.h index fe3601afb78a..129b8a6b7684 100644 --- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_regs.h +++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_regs.h | |||
@@ -112,6 +112,39 @@ | |||
112 | CKCTL_6358_USBSU_EN | \ | 112 | CKCTL_6358_USBSU_EN | \ |
113 | CKCTL_6358_EPHY_EN) | 113 | CKCTL_6358_EPHY_EN) |
114 | 114 | ||
115 | #define CKCTL_6362_ADSL_QPROC_EN (1 << 1) | ||
116 | #define CKCTL_6362_ADSL_AFE_EN (1 << 2) | ||
117 | #define CKCTL_6362_ADSL_EN (1 << 3) | ||
118 | #define CKCTL_6362_MIPS_EN (1 << 4) | ||
119 | #define CKCTL_6362_WLAN_OCP_EN (1 << 5) | ||
120 | #define CKCTL_6362_SWPKT_USB_EN (1 << 7) | ||
121 | #define CKCTL_6362_SWPKT_SAR_EN (1 << 8) | ||
122 | #define CKCTL_6362_SAR_EN (1 << 9) | ||
123 | #define CKCTL_6362_ROBOSW_EN (1 << 10) | ||
124 | #define CKCTL_6362_PCM_EN (1 << 11) | ||
125 | #define CKCTL_6362_USBD_EN (1 << 12) | ||
126 | #define CKCTL_6362_USBH_EN (1 << 13) | ||
127 | #define CKCTL_6362_IPSEC_EN (1 << 14) | ||
128 | #define CKCTL_6362_SPI_EN (1 << 15) | ||
129 | #define CKCTL_6362_HSSPI_EN (1 << 16) | ||
130 | #define CKCTL_6362_PCIE_EN (1 << 17) | ||
131 | #define CKCTL_6362_FAP_EN (1 << 18) | ||
132 | #define CKCTL_6362_PHYMIPS_EN (1 << 19) | ||
133 | #define CKCTL_6362_NAND_EN (1 << 20) | ||
134 | |||
135 | #define CKCTL_6362_ALL_SAFE_EN (CKCTL_6362_PHYMIPS_EN | \ | ||
136 | CKCTL_6362_ADSL_QPROC_EN | \ | ||
137 | CKCTL_6362_ADSL_AFE_EN | \ | ||
138 | CKCTL_6362_ADSL_EN | \ | ||
139 | CKCTL_6362_SAR_EN | \ | ||
140 | CKCTL_6362_PCM_EN | \ | ||
141 | CKCTL_6362_IPSEC_EN | \ | ||
142 | CKCTL_6362_USBD_EN | \ | ||
143 | CKCTL_6362_USBH_EN | \ | ||
144 | CKCTL_6362_ROBOSW_EN | \ | ||
145 | CKCTL_6362_PCIE_EN) | ||
146 | |||
147 | |||
115 | #define CKCTL_6368_VDSL_QPROC_EN (1 << 2) | 148 | #define CKCTL_6368_VDSL_QPROC_EN (1 << 2) |
116 | #define CKCTL_6368_VDSL_AFE_EN (1 << 3) | 149 | #define CKCTL_6368_VDSL_AFE_EN (1 << 3) |
117 | #define CKCTL_6368_VDSL_BONDING_EN (1 << 4) | 150 | #define CKCTL_6368_VDSL_BONDING_EN (1 << 4) |
@@ -153,6 +186,7 @@ | |||
153 | #define PERF_IRQMASK_6345_REG 0xc | 186 | #define PERF_IRQMASK_6345_REG 0xc |
154 | #define PERF_IRQMASK_6348_REG 0xc | 187 | #define PERF_IRQMASK_6348_REG 0xc |
155 | #define PERF_IRQMASK_6358_REG 0xc | 188 | #define PERF_IRQMASK_6358_REG 0xc |
189 | #define PERF_IRQMASK_6362_REG 0x20 | ||
156 | #define PERF_IRQMASK_6368_REG 0x20 | 190 | #define PERF_IRQMASK_6368_REG 0x20 |
157 | 191 | ||
158 | /* Interrupt Status register */ | 192 | /* Interrupt Status register */ |
@@ -161,6 +195,7 @@ | |||
161 | #define PERF_IRQSTAT_6345_REG 0x10 | 195 | #define PERF_IRQSTAT_6345_REG 0x10 |
162 | #define PERF_IRQSTAT_6348_REG 0x10 | 196 | #define PERF_IRQSTAT_6348_REG 0x10 |
163 | #define PERF_IRQSTAT_6358_REG 0x10 | 197 | #define PERF_IRQSTAT_6358_REG 0x10 |
198 | #define PERF_IRQSTAT_6362_REG 0x28 | ||
164 | #define PERF_IRQSTAT_6368_REG 0x28 | 199 | #define PERF_IRQSTAT_6368_REG 0x28 |
165 | 200 | ||
166 | /* External Interrupt Configuration register */ | 201 | /* External Interrupt Configuration register */ |
@@ -169,6 +204,7 @@ | |||
169 | #define PERF_EXTIRQ_CFG_REG_6345 0x14 | 204 | #define PERF_EXTIRQ_CFG_REG_6345 0x14 |
170 | #define PERF_EXTIRQ_CFG_REG_6348 0x14 | 205 | #define PERF_EXTIRQ_CFG_REG_6348 0x14 |
171 | #define PERF_EXTIRQ_CFG_REG_6358 0x14 | 206 | #define PERF_EXTIRQ_CFG_REG_6358 0x14 |
207 | #define PERF_EXTIRQ_CFG_REG_6362 0x18 | ||
172 | #define PERF_EXTIRQ_CFG_REG_6368 0x18 | 208 | #define PERF_EXTIRQ_CFG_REG_6368 0x18 |
173 | 209 | ||
174 | #define PERF_EXTIRQ_CFG_REG2_6368 0x1c | 210 | #define PERF_EXTIRQ_CFG_REG2_6368 0x1c |
@@ -197,6 +233,7 @@ | |||
197 | #define PERF_SOFTRESET_REG 0x28 | 233 | #define PERF_SOFTRESET_REG 0x28 |
198 | #define PERF_SOFTRESET_6328_REG 0x10 | 234 | #define PERF_SOFTRESET_6328_REG 0x10 |
199 | #define PERF_SOFTRESET_6358_REG 0x34 | 235 | #define PERF_SOFTRESET_6358_REG 0x34 |
236 | #define PERF_SOFTRESET_6362_REG 0x10 | ||
200 | #define PERF_SOFTRESET_6368_REG 0x10 | 237 | #define PERF_SOFTRESET_6368_REG 0x10 |
201 | 238 | ||
202 | #define SOFTRESET_6328_SPI_MASK (1 << 0) | 239 | #define SOFTRESET_6328_SPI_MASK (1 << 0) |
@@ -259,6 +296,22 @@ | |||
259 | #define SOFTRESET_6358_PCM_MASK (1 << 13) | 296 | #define SOFTRESET_6358_PCM_MASK (1 << 13) |
260 | #define SOFTRESET_6358_ADSL_MASK (1 << 14) | 297 | #define SOFTRESET_6358_ADSL_MASK (1 << 14) |
261 | 298 | ||
299 | #define SOFTRESET_6362_SPI_MASK (1 << 0) | ||
300 | #define SOFTRESET_6362_IPSEC_MASK (1 << 1) | ||
301 | #define SOFTRESET_6362_EPHY_MASK (1 << 2) | ||
302 | #define SOFTRESET_6362_SAR_MASK (1 << 3) | ||
303 | #define SOFTRESET_6362_ENETSW_MASK (1 << 4) | ||
304 | #define SOFTRESET_6362_USBS_MASK (1 << 5) | ||
305 | #define SOFTRESET_6362_USBH_MASK (1 << 6) | ||
306 | #define SOFTRESET_6362_PCM_MASK (1 << 7) | ||
307 | #define SOFTRESET_6362_PCIE_CORE_MASK (1 << 8) | ||
308 | #define SOFTRESET_6362_PCIE_MASK (1 << 9) | ||
309 | #define SOFTRESET_6362_PCIE_EXT_MASK (1 << 10) | ||
310 | #define SOFTRESET_6362_WLAN_SHIM_MASK (1 << 11) | ||
311 | #define SOFTRESET_6362_DDR_PHY_MASK (1 << 12) | ||
312 | #define SOFTRESET_6362_FAP_MASK (1 << 13) | ||
313 | #define SOFTRESET_6362_WLAN_UBUS_MASK (1 << 14) | ||
314 | |||
262 | #define SOFTRESET_6368_SPI_MASK (1 << 0) | 315 | #define SOFTRESET_6368_SPI_MASK (1 << 0) |
263 | #define SOFTRESET_6368_MPI_MASK (1 << 3) | 316 | #define SOFTRESET_6368_MPI_MASK (1 << 3) |
264 | #define SOFTRESET_6368_EPHY_MASK (1 << 6) | 317 | #define SOFTRESET_6368_EPHY_MASK (1 << 6) |
@@ -1240,7 +1293,7 @@ | |||
1240 | #define SPI_6348_RX_DATA 0x80 | 1293 | #define SPI_6348_RX_DATA 0x80 |
1241 | #define SPI_6348_RX_DATA_SIZE 0x3f | 1294 | #define SPI_6348_RX_DATA_SIZE 0x3f |
1242 | 1295 | ||
1243 | /* BCM 6358/6368 SPI core */ | 1296 | /* BCM 6358/6262/6368 SPI core */ |
1244 | #define SPI_6358_MSG_CTL 0x00 /* 16-bits register */ | 1297 | #define SPI_6358_MSG_CTL 0x00 /* 16-bits register */ |
1245 | #define SPI_6358_MSG_CTL_WIDTH 16 | 1298 | #define SPI_6358_MSG_CTL_WIDTH 16 |
1246 | #define SPI_6358_MSG_DATA 0x02 | 1299 | #define SPI_6358_MSG_DATA 0x02 |
@@ -1316,6 +1369,12 @@ | |||
1316 | #define SERDES_PCIE_EN (1 << 0) | 1369 | #define SERDES_PCIE_EN (1 << 0) |
1317 | #define SERDES_PCIE_EXD_EN (1 << 15) | 1370 | #define SERDES_PCIE_EXD_EN (1 << 15) |
1318 | 1371 | ||
1372 | #define MISC_STRAPBUS_6362_REG 0x14 | ||
1373 | #define STRAPBUS_6362_FCVO_SHIFT 1 | ||
1374 | #define STRAPBUS_6362_FCVO_MASK (0x1f << STRAPBUS_6362_FCVO_SHIFT) | ||
1375 | #define STRAPBUS_6362_BOOT_SEL_SERIAL (1 << 15) | ||
1376 | #define STRAPBUS_6362_BOOT_SEL_NAND (0 << 15) | ||
1377 | |||
1319 | #define MISC_STRAPBUS_6328_REG 0x240 | 1378 | #define MISC_STRAPBUS_6328_REG 0x240 |
1320 | #define STRAPBUS_6328_FCVO_SHIFT 7 | 1379 | #define STRAPBUS_6328_FCVO_SHIFT 7 |
1321 | #define STRAPBUS_6328_FCVO_MASK (0x1f << STRAPBUS_6328_FCVO_SHIFT) | 1380 | #define STRAPBUS_6328_FCVO_MASK (0x1f << STRAPBUS_6328_FCVO_SHIFT) |
diff --git a/arch/mips/include/asm/mach-bcm63xx/ioremap.h b/arch/mips/include/asm/mach-bcm63xx/ioremap.h index 30931c42379d..94e3011ba7df 100644 --- a/arch/mips/include/asm/mach-bcm63xx/ioremap.h +++ b/arch/mips/include/asm/mach-bcm63xx/ioremap.h | |||
@@ -19,6 +19,7 @@ static inline int is_bcm63xx_internal_registers(phys_t offset) | |||
19 | return 1; | 19 | return 1; |
20 | break; | 20 | break; |
21 | case BCM6328_CPU_ID: | 21 | case BCM6328_CPU_ID: |
22 | case BCM6362_CPU_ID: | ||
22 | case BCM6368_CPU_ID: | 23 | case BCM6368_CPU_ID: |
23 | if (offset >= 0xb0000000 && offset < 0xb1000000) | 24 | if (offset >= 0xb0000000 && offset < 0xb1000000) |
24 | return 1; | 25 | return 1; |