diff options
author | Scott Wood <scottwood@freescale.com> | 2007-10-08 17:08:51 -0400 |
---|---|---|
committer | Kumar Gala <galak@kernel.crashing.org> | 2007-10-11 10:14:31 -0400 |
commit | 8abc8f5f1eda7a34394c8006fe1cb4c13ffca682 (patch) | |
tree | 2fc088a89679cde38bcf7b78c70699c1e1f4cf2d /arch/powerpc/platforms/85xx | |
parent | 52aff9f93e452b3a55be74018dc90eb0ddde0a9c (diff) |
[POWERPC] 85xx: Convert mpc8560ads to the new CPM binding.
Signed-off-by: Scott Wood <scottwood@freescale.com>
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
Diffstat (limited to 'arch/powerpc/platforms/85xx')
-rw-r--r-- | arch/powerpc/platforms/85xx/Kconfig | 1 | ||||
-rw-r--r-- | arch/powerpc/platforms/85xx/mpc85xx_ads.c | 167 |
2 files changed, 90 insertions, 78 deletions
diff --git a/arch/powerpc/platforms/85xx/Kconfig b/arch/powerpc/platforms/85xx/Kconfig index cf815b22b9fb..7748a3a426db 100644 --- a/arch/powerpc/platforms/85xx/Kconfig +++ b/arch/powerpc/platforms/85xx/Kconfig | |||
@@ -12,6 +12,7 @@ config MPC8540_ADS | |||
12 | config MPC8560_ADS | 12 | config MPC8560_ADS |
13 | bool "Freescale MPC8560 ADS" | 13 | bool "Freescale MPC8560 ADS" |
14 | select DEFAULT_UIMAGE | 14 | select DEFAULT_UIMAGE |
15 | select PPC_CPM_NEW_BINDING | ||
15 | help | 16 | help |
16 | This option enables support for the MPC 8560 ADS board | 17 | This option enables support for the MPC 8560 ADS board |
17 | 18 | ||
diff --git a/arch/powerpc/platforms/85xx/mpc85xx_ads.c b/arch/powerpc/platforms/85xx/mpc85xx_ads.c index 378a244b3bac..509d46beee11 100644 --- a/arch/powerpc/platforms/85xx/mpc85xx_ads.c +++ b/arch/powerpc/platforms/85xx/mpc85xx_ads.c | |||
@@ -17,13 +17,13 @@ | |||
17 | #include <linux/kdev_t.h> | 17 | #include <linux/kdev_t.h> |
18 | #include <linux/delay.h> | 18 | #include <linux/delay.h> |
19 | #include <linux/seq_file.h> | 19 | #include <linux/seq_file.h> |
20 | #include <linux/of_platform.h> | ||
20 | 21 | ||
21 | #include <asm/system.h> | 22 | #include <asm/system.h> |
22 | #include <asm/time.h> | 23 | #include <asm/time.h> |
23 | #include <asm/machdep.h> | 24 | #include <asm/machdep.h> |
24 | #include <asm/pci-bridge.h> | 25 | #include <asm/pci-bridge.h> |
25 | #include <asm/mpc85xx.h> | 26 | #include <asm/mpc85xx.h> |
26 | #include <asm/prom.h> | ||
27 | #include <asm/mpic.h> | 27 | #include <asm/mpic.h> |
28 | #include <mm/mmu_decl.h> | 28 | #include <mm/mmu_decl.h> |
29 | #include <asm/udbg.h> | 29 | #include <asm/udbg.h> |
@@ -32,10 +32,8 @@ | |||
32 | #include <sysdev/fsl_pci.h> | 32 | #include <sysdev/fsl_pci.h> |
33 | 33 | ||
34 | #ifdef CONFIG_CPM2 | 34 | #ifdef CONFIG_CPM2 |
35 | #include <linux/fs_enet_pd.h> | ||
36 | #include <asm/cpm2.h> | 35 | #include <asm/cpm2.h> |
37 | #include <sysdev/cpm2_pic.h> | 36 | #include <sysdev/cpm2_pic.h> |
38 | #include <asm/fs_pd.h> | ||
39 | #endif | 37 | #endif |
40 | 38 | ||
41 | #ifdef CONFIG_PCI | 39 | #ifdef CONFIG_PCI |
@@ -95,10 +93,10 @@ static void __init mpc85xx_ads_pic_init(void) | |||
95 | 93 | ||
96 | #ifdef CONFIG_CPM2 | 94 | #ifdef CONFIG_CPM2 |
97 | /* Setup CPM2 PIC */ | 95 | /* Setup CPM2 PIC */ |
98 | np = of_find_node_by_type(NULL, "cpm-pic"); | 96 | np = of_find_compatible_node(NULL, NULL, "fsl,cpm2-pic"); |
99 | if (np == NULL) { | 97 | if (np == NULL) { |
100 | printk(KERN_ERR "PIC init: can not find cpm-pic node\n"); | 98 | printk(KERN_ERR "PIC init: can not find fsl,cpm2-pic node\n"); |
101 | return; | 99 | return; |
102 | } | 100 | } |
103 | irq = irq_of_parse_and_map(np, 0); | 101 | irq = irq_of_parse_and_map(np, 0); |
104 | 102 | ||
@@ -111,81 +109,75 @@ static void __init mpc85xx_ads_pic_init(void) | |||
111 | * Setup the architecture | 109 | * Setup the architecture |
112 | */ | 110 | */ |
113 | #ifdef CONFIG_CPM2 | 111 | #ifdef CONFIG_CPM2 |
114 | void init_fcc_ioports(struct fs_platform_info *fpi) | 112 | struct cpm_pin { |
113 | int port, pin, flags; | ||
114 | }; | ||
115 | |||
116 | static struct cpm_pin mpc8560_ads_pins[] = { | ||
117 | /* SCC1 */ | ||
118 | {3, 29, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY}, | ||
119 | {3, 30, CPM_PIN_OUTPUT | CPM_PIN_SECONDARY}, | ||
120 | {3, 31, CPM_PIN_INPUT | CPM_PIN_PRIMARY}, | ||
121 | |||
122 | /* SCC2 */ | ||
123 | {3, 26, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY}, | ||
124 | {3, 27, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY}, | ||
125 | {3, 28, CPM_PIN_INPUT | CPM_PIN_PRIMARY}, | ||
126 | |||
127 | /* FCC2 */ | ||
128 | {1, 18, CPM_PIN_INPUT | CPM_PIN_PRIMARY}, | ||
129 | {1, 19, CPM_PIN_INPUT | CPM_PIN_PRIMARY}, | ||
130 | {1, 20, CPM_PIN_INPUT | CPM_PIN_PRIMARY}, | ||
131 | {1, 21, CPM_PIN_INPUT | CPM_PIN_PRIMARY}, | ||
132 | {1, 22, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY}, | ||
133 | {1, 23, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY}, | ||
134 | {1, 24, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY}, | ||
135 | {1, 25, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY}, | ||
136 | {1, 26, CPM_PIN_INPUT | CPM_PIN_PRIMARY}, | ||
137 | {1, 27, CPM_PIN_INPUT | CPM_PIN_PRIMARY}, | ||
138 | {1, 28, CPM_PIN_INPUT | CPM_PIN_PRIMARY}, | ||
139 | {1, 29, CPM_PIN_OUTPUT | CPM_PIN_SECONDARY}, | ||
140 | {1, 30, CPM_PIN_INPUT | CPM_PIN_PRIMARY}, | ||
141 | {1, 31, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY}, | ||
142 | {2, 18, CPM_PIN_INPUT | CPM_PIN_PRIMARY}, /* CLK14 */ | ||
143 | {2, 19, CPM_PIN_INPUT | CPM_PIN_PRIMARY}, /* CLK13 */ | ||
144 | |||
145 | /* FCC3 */ | ||
146 | {1, 4, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY}, | ||
147 | {1, 5, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY}, | ||
148 | {1, 6, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY}, | ||
149 | {1, 7, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY}, | ||
150 | {1, 8, CPM_PIN_INPUT | CPM_PIN_PRIMARY}, | ||
151 | {1, 9, CPM_PIN_INPUT | CPM_PIN_PRIMARY}, | ||
152 | {1, 10, CPM_PIN_INPUT | CPM_PIN_PRIMARY}, | ||
153 | {1, 11, CPM_PIN_INPUT | CPM_PIN_PRIMARY}, | ||
154 | {1, 12, CPM_PIN_INPUT | CPM_PIN_PRIMARY}, | ||
155 | {1, 13, CPM_PIN_INPUT | CPM_PIN_PRIMARY}, | ||
156 | {1, 14, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY}, | ||
157 | {1, 15, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY}, | ||
158 | {1, 16, CPM_PIN_INPUT | CPM_PIN_PRIMARY}, | ||
159 | {1, 17, CPM_PIN_INPUT | CPM_PIN_PRIMARY}, | ||
160 | {2, 16, CPM_PIN_INPUT | CPM_PIN_SECONDARY}, /* CLK16 */ | ||
161 | {2, 17, CPM_PIN_INPUT | CPM_PIN_SECONDARY}, /* CLK15 */ | ||
162 | }; | ||
163 | |||
164 | static void __init init_ioports(void) | ||
115 | { | 165 | { |
116 | struct io_port *io = cpm2_map(im_ioport); | 166 | int i; |
117 | int fcc_no = fs_get_fcc_index(fpi->fs_no); | 167 | |
118 | int target; | 168 | for (i = 0; i < ARRAY_SIZE(mpc8560_ads_pins); i++) { |
119 | u32 tempval; | 169 | struct cpm_pin *pin = &mpc8560_ads_pins[i]; |
120 | 170 | cpm2_set_pin(pin->port, pin->pin, pin->flags); | |
121 | switch(fcc_no) { | ||
122 | case 1: | ||
123 | tempval = in_be32(&io->iop_pdirb); | ||
124 | tempval &= ~PB2_DIRB0; | ||
125 | tempval |= PB2_DIRB1; | ||
126 | out_be32(&io->iop_pdirb, tempval); | ||
127 | |||
128 | tempval = in_be32(&io->iop_psorb); | ||
129 | tempval &= ~PB2_PSORB0; | ||
130 | tempval |= PB2_PSORB1; | ||
131 | out_be32(&io->iop_psorb, tempval); | ||
132 | |||
133 | tempval = in_be32(&io->iop_pparb); | ||
134 | tempval |= (PB2_DIRB0 | PB2_DIRB1); | ||
135 | out_be32(&io->iop_pparb, tempval); | ||
136 | |||
137 | target = CPM_CLK_FCC2; | ||
138 | break; | ||
139 | case 2: | ||
140 | tempval = in_be32(&io->iop_pdirb); | ||
141 | tempval &= ~PB3_DIRB0; | ||
142 | tempval |= PB3_DIRB1; | ||
143 | out_be32(&io->iop_pdirb, tempval); | ||
144 | |||
145 | tempval = in_be32(&io->iop_psorb); | ||
146 | tempval &= ~PB3_PSORB0; | ||
147 | tempval |= PB3_PSORB1; | ||
148 | out_be32(&io->iop_psorb, tempval); | ||
149 | |||
150 | tempval = in_be32(&io->iop_pparb); | ||
151 | tempval |= (PB3_DIRB0 | PB3_DIRB1); | ||
152 | out_be32(&io->iop_pparb, tempval); | ||
153 | |||
154 | tempval = in_be32(&io->iop_pdirc); | ||
155 | tempval |= PC3_DIRC1; | ||
156 | out_be32(&io->iop_pdirc, tempval); | ||
157 | |||
158 | tempval = in_be32(&io->iop_pparc); | ||
159 | tempval |= PC3_DIRC1; | ||
160 | out_be32(&io->iop_pparc, tempval); | ||
161 | |||
162 | target = CPM_CLK_FCC3; | ||
163 | break; | ||
164 | default: | ||
165 | printk(KERN_ERR "init_fcc_ioports: invalid FCC number\n"); | ||
166 | return; | ||
167 | } | 171 | } |
168 | 172 | ||
169 | /* Port C has clocks...... */ | 173 | cpm2_clk_setup(CPM_CLK_SCC1, CPM_BRG1, CPM_CLK_RX); |
170 | tempval = in_be32(&io->iop_psorc); | 174 | cpm2_clk_setup(CPM_CLK_SCC1, CPM_BRG1, CPM_CLK_TX); |
171 | tempval &= ~(PC_CLK(fpi->clk_rx - 8) | PC_CLK(fpi->clk_tx - 8)); | 175 | cpm2_clk_setup(CPM_CLK_SCC2, CPM_BRG2, CPM_CLK_RX); |
172 | out_be32(&io->iop_psorc, tempval); | 176 | cpm2_clk_setup(CPM_CLK_SCC2, CPM_BRG2, CPM_CLK_TX); |
173 | 177 | cpm2_clk_setup(CPM_CLK_FCC2, CPM_CLK13, CPM_CLK_RX); | |
174 | tempval = in_be32(&io->iop_pdirc); | 178 | cpm2_clk_setup(CPM_CLK_FCC2, CPM_CLK14, CPM_CLK_TX); |
175 | tempval &= ~(PC_CLK(fpi->clk_rx - 8) | PC_CLK(fpi->clk_tx - 8)); | 179 | cpm2_clk_setup(CPM_CLK_FCC3, CPM_CLK15, CPM_CLK_RX); |
176 | out_be32(&io->iop_pdirc, tempval); | 180 | cpm2_clk_setup(CPM_CLK_FCC3, CPM_CLK16, CPM_CLK_TX); |
177 | tempval = in_be32(&io->iop_pparc); | ||
178 | tempval |= (PC_CLK(fpi->clk_rx - 8) | PC_CLK(fpi->clk_tx - 8)); | ||
179 | out_be32(&io->iop_pparc, tempval); | ||
180 | |||
181 | cpm2_unmap(io); | ||
182 | |||
183 | /* Configure Serial Interface clock routing. | ||
184 | * First, clear FCC bits to zero, | ||
185 | * then set the ones we want. | ||
186 | */ | ||
187 | cpm2_clk_setup(target, fpi->clk_rx, CPM_CLK_RX); | ||
188 | cpm2_clk_setup(target, fpi->clk_tx, CPM_CLK_TX); | ||
189 | } | 181 | } |
190 | #endif | 182 | #endif |
191 | 183 | ||
@@ -200,6 +192,7 @@ static void __init mpc85xx_ads_setup_arch(void) | |||
200 | 192 | ||
201 | #ifdef CONFIG_CPM2 | 193 | #ifdef CONFIG_CPM2 |
202 | cpm2_reset(); | 194 | cpm2_reset(); |
195 | init_ioports(); | ||
203 | #endif | 196 | #endif |
204 | 197 | ||
205 | #ifdef CONFIG_PCI | 198 | #ifdef CONFIG_PCI |
@@ -231,6 +224,24 @@ static void mpc85xx_ads_show_cpuinfo(struct seq_file *m) | |||
231 | seq_printf(m, "Memory\t\t: %d MB\n", memsize / (1024 * 1024)); | 224 | seq_printf(m, "Memory\t\t: %d MB\n", memsize / (1024 * 1024)); |
232 | } | 225 | } |
233 | 226 | ||
227 | static struct of_device_id __initdata of_bus_ids[] = { | ||
228 | { .name = "soc", }, | ||
229 | { .type = "soc", }, | ||
230 | { .name = "cpm", }, | ||
231 | { .name = "localbus", }, | ||
232 | {}, | ||
233 | }; | ||
234 | |||
235 | static int __init declare_of_platform_devices(void) | ||
236 | { | ||
237 | if (!machine_is(mpc85xx_ads)) | ||
238 | return 0; | ||
239 | |||
240 | of_platform_bus_probe(NULL, of_bus_ids, NULL); | ||
241 | return 0; | ||
242 | } | ||
243 | device_initcall(declare_of_platform_devices); | ||
244 | |||
234 | /* | 245 | /* |
235 | * Called very early, device-tree isn't unflattened | 246 | * Called very early, device-tree isn't unflattened |
236 | */ | 247 | */ |