[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>
This commit is contained in:
Scott Wood 2007-10-08 16:08:51 -05:00 committed by Kumar Gala
parent 52aff9f93e
commit 8abc8f5f1e
3 changed files with 133 additions and 115 deletions

View file

@ -138,15 +138,31 @@
device_type = "open-pic"; device_type = "open-pic";
}; };
cpm@e0000000 { cpm@919c0 {
#address-cells = <1>; #address-cells = <1>;
#size-cells = <1>; #size-cells = <1>;
device_type = "cpm"; compatible = "fsl,mpc8560-cpm", "fsl,cpm2";
model = "CPM2"; reg = <919c0 30>;
ranges = <0 0 c0000>; ranges;
reg = <80000 40000>;
command-proc = <919c0>; muram@80000 {
brg-frequency = <9d5b340>; #address-cells = <1>;
#size-cells = <1>;
ranges = <0 80000 10000>;
data@0 {
compatible = "fsl,cpm-muram-data";
reg = <0 4000 9000 2000>;
};
};
brg@919f0 {
compatible = "fsl,mpc8560-brg",
"fsl,cpm2-brg",
"fsl,cpm-brg";
reg = <919f0 10 915f0 10>;
clock-frequency = <d#165000000>;
};
cpmpic: pic@90c00 { cpmpic: pic@90c00 {
interrupt-controller; interrupt-controller;
@ -155,43 +171,38 @@
interrupts = <2e 2>; interrupts = <2e 2>;
interrupt-parent = <&mpic>; interrupt-parent = <&mpic>;
reg = <90c00 80>; reg = <90c00 80>;
device_type = "cpm-pic"; compatible = "fsl,mpc8560-cpm-pic", "fsl,cpm2-pic";
}; };
scc@91a00 { serial@91a00 {
device_type = "serial"; device_type = "serial";
compatible = "cpm_uart"; compatible = "fsl,mpc8560-scc-uart",
model = "SCC"; "fsl,cpm2-scc-uart";
device-id = <1>;
reg = <91a00 20 88000 100>; reg = <91a00 20 88000 100>;
clock-setup = <00ffffff 0>; fsl,cpm-brg = <1>;
rx-clock = <1>; fsl,cpm-command = <00800000>;
tx-clock = <1>;
current-speed = <1c200>; current-speed = <1c200>;
interrupts = <28 8>; interrupts = <28 8>;
interrupt-parent = <&cpmpic>; interrupt-parent = <&cpmpic>;
}; };
scc@91a20 { serial@91a20 {
device_type = "serial"; device_type = "serial";
compatible = "cpm_uart"; compatible = "fsl,mpc8560-scc-uart",
model = "SCC"; "fsl,cpm2-scc-uart";
device-id = <2>;
reg = <91a20 20 88100 100>; reg = <91a20 20 88100 100>;
clock-setup = <ff00ffff 90000>; fsl,cpm-brg = <2>;
rx-clock = <2>; fsl,cpm-command = <04a00000>;
tx-clock = <2>;
current-speed = <1c200>; current-speed = <1c200>;
interrupts = <29 8>; interrupts = <29 8>;
interrupt-parent = <&cpmpic>; interrupt-parent = <&cpmpic>;
}; };
fcc@91320 { ethernet@91320 {
device_type = "network"; device_type = "network";
compatible = "fs_enet"; compatible = "fsl,mpc8560-fcc-enet",
model = "FCC"; "fsl,cpm2-fcc-enet";
device-id = <2>; reg = <91320 20 88500 100 913b0 1>;
reg = <91320 20 88500 100 913a0 30>;
/* /*
* mac-address is deprecated and will be removed * mac-address is deprecated and will be removed
* in 2.6.25. Only recent versions of * in 2.6.25. Only recent versions of
@ -199,20 +210,17 @@
*/ */
mac-address = [ 00 00 00 00 00 00 ]; mac-address = [ 00 00 00 00 00 00 ];
local-mac-address = [ 00 00 00 00 00 00 ]; local-mac-address = [ 00 00 00 00 00 00 ];
clock-setup = <ff00ffff 250000>; fsl,cpm-command = <16200300>;
rx-clock = <15>;
tx-clock = <16>;
interrupts = <21 8>; interrupts = <21 8>;
interrupt-parent = <&cpmpic>; interrupt-parent = <&cpmpic>;
phy-handle = <&phy2>; phy-handle = <&phy2>;
}; };
fcc@91340 { ethernet@91340 {
device_type = "network"; device_type = "network";
compatible = "fs_enet"; compatible = "fsl,mpc8560-fcc-enet",
model = "FCC"; "fsl,cpm2-fcc-enet";
device-id = <3>; reg = <91340 20 88600 100 913d0 1>;
reg = <91340 20 88600 100 913d0 30>;
/* /*
* mac-address is deprecated and will be removed * mac-address is deprecated and will be removed
* in 2.6.25. Only recent versions of * in 2.6.25. Only recent versions of
@ -220,9 +228,7 @@
*/ */
mac-address = [ 00 00 00 00 00 00 ]; mac-address = [ 00 00 00 00 00 00 ];
local-mac-address = [ 00 00 00 00 00 00 ]; local-mac-address = [ 00 00 00 00 00 00 ];
clock-setup = <ffff00ff 3700>; fsl,cpm-command = <1a400300>;
rx-clock = <17>;
tx-clock = <18>;
interrupts = <22 8>; interrupts = <22 8>;
interrupt-parent = <&cpmpic>; interrupt-parent = <&cpmpic>;
phy-handle = <&phy3>; phy-handle = <&phy3>;

View file

@ -12,6 +12,7 @@ config MPC8540_ADS
config MPC8560_ADS config MPC8560_ADS
bool "Freescale MPC8560 ADS" bool "Freescale MPC8560 ADS"
select DEFAULT_UIMAGE select DEFAULT_UIMAGE
select PPC_CPM_NEW_BINDING
help help
This option enables support for the MPC 8560 ADS board This option enables support for the MPC 8560 ADS board

View file

@ -17,13 +17,13 @@
#include <linux/kdev_t.h> #include <linux/kdev_t.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/seq_file.h> #include <linux/seq_file.h>
#include <linux/of_platform.h>
#include <asm/system.h> #include <asm/system.h>
#include <asm/time.h> #include <asm/time.h>
#include <asm/machdep.h> #include <asm/machdep.h>
#include <asm/pci-bridge.h> #include <asm/pci-bridge.h>
#include <asm/mpc85xx.h> #include <asm/mpc85xx.h>
#include <asm/prom.h>
#include <asm/mpic.h> #include <asm/mpic.h>
#include <mm/mmu_decl.h> #include <mm/mmu_decl.h>
#include <asm/udbg.h> #include <asm/udbg.h>
@ -32,10 +32,8 @@
#include <sysdev/fsl_pci.h> #include <sysdev/fsl_pci.h>
#ifdef CONFIG_CPM2 #ifdef CONFIG_CPM2
#include <linux/fs_enet_pd.h>
#include <asm/cpm2.h> #include <asm/cpm2.h>
#include <sysdev/cpm2_pic.h> #include <sysdev/cpm2_pic.h>
#include <asm/fs_pd.h>
#endif #endif
#ifdef CONFIG_PCI #ifdef CONFIG_PCI
@ -95,10 +93,10 @@ static void __init mpc85xx_ads_pic_init(void)
#ifdef CONFIG_CPM2 #ifdef CONFIG_CPM2
/* Setup CPM2 PIC */ /* Setup CPM2 PIC */
np = of_find_node_by_type(NULL, "cpm-pic"); np = of_find_compatible_node(NULL, NULL, "fsl,cpm2-pic");
if (np == NULL) { if (np == NULL) {
printk(KERN_ERR "PIC init: can not find cpm-pic node\n"); printk(KERN_ERR "PIC init: can not find fsl,cpm2-pic node\n");
return; return;
} }
irq = irq_of_parse_and_map(np, 0); irq = irq_of_parse_and_map(np, 0);
@ -111,81 +109,75 @@ static void __init mpc85xx_ads_pic_init(void)
* Setup the architecture * Setup the architecture
*/ */
#ifdef CONFIG_CPM2 #ifdef CONFIG_CPM2
void init_fcc_ioports(struct fs_platform_info *fpi) struct cpm_pin {
int port, pin, flags;
};
static struct cpm_pin mpc8560_ads_pins[] = {
/* SCC1 */
{3, 29, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY},
{3, 30, CPM_PIN_OUTPUT | CPM_PIN_SECONDARY},
{3, 31, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
/* SCC2 */
{3, 26, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY},
{3, 27, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY},
{3, 28, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
/* FCC2 */
{1, 18, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
{1, 19, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
{1, 20, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
{1, 21, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
{1, 22, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY},
{1, 23, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY},
{1, 24, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY},
{1, 25, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY},
{1, 26, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
{1, 27, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
{1, 28, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
{1, 29, CPM_PIN_OUTPUT | CPM_PIN_SECONDARY},
{1, 30, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
{1, 31, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY},
{2, 18, CPM_PIN_INPUT | CPM_PIN_PRIMARY}, /* CLK14 */
{2, 19, CPM_PIN_INPUT | CPM_PIN_PRIMARY}, /* CLK13 */
/* FCC3 */
{1, 4, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY},
{1, 5, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY},
{1, 6, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY},
{1, 7, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY},
{1, 8, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
{1, 9, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
{1, 10, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
{1, 11, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
{1, 12, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
{1, 13, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
{1, 14, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY},
{1, 15, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY},
{1, 16, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
{1, 17, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
{2, 16, CPM_PIN_INPUT | CPM_PIN_SECONDARY}, /* CLK16 */
{2, 17, CPM_PIN_INPUT | CPM_PIN_SECONDARY}, /* CLK15 */
};
static void __init init_ioports(void)
{ {
struct io_port *io = cpm2_map(im_ioport); int i;
int fcc_no = fs_get_fcc_index(fpi->fs_no);
int target;
u32 tempval;
switch(fcc_no) { for (i = 0; i < ARRAY_SIZE(mpc8560_ads_pins); i++) {
case 1: struct cpm_pin *pin = &mpc8560_ads_pins[i];
tempval = in_be32(&io->iop_pdirb); cpm2_set_pin(pin->port, pin->pin, pin->flags);
tempval &= ~PB2_DIRB0;
tempval |= PB2_DIRB1;
out_be32(&io->iop_pdirb, tempval);
tempval = in_be32(&io->iop_psorb);
tempval &= ~PB2_PSORB0;
tempval |= PB2_PSORB1;
out_be32(&io->iop_psorb, tempval);
tempval = in_be32(&io->iop_pparb);
tempval |= (PB2_DIRB0 | PB2_DIRB1);
out_be32(&io->iop_pparb, tempval);
target = CPM_CLK_FCC2;
break;
case 2:
tempval = in_be32(&io->iop_pdirb);
tempval &= ~PB3_DIRB0;
tempval |= PB3_DIRB1;
out_be32(&io->iop_pdirb, tempval);
tempval = in_be32(&io->iop_psorb);
tempval &= ~PB3_PSORB0;
tempval |= PB3_PSORB1;
out_be32(&io->iop_psorb, tempval);
tempval = in_be32(&io->iop_pparb);
tempval |= (PB3_DIRB0 | PB3_DIRB1);
out_be32(&io->iop_pparb, tempval);
tempval = in_be32(&io->iop_pdirc);
tempval |= PC3_DIRC1;
out_be32(&io->iop_pdirc, tempval);
tempval = in_be32(&io->iop_pparc);
tempval |= PC3_DIRC1;
out_be32(&io->iop_pparc, tempval);
target = CPM_CLK_FCC3;
break;
default:
printk(KERN_ERR "init_fcc_ioports: invalid FCC number\n");
return;
} }
/* Port C has clocks...... */ cpm2_clk_setup(CPM_CLK_SCC1, CPM_BRG1, CPM_CLK_RX);
tempval = in_be32(&io->iop_psorc); cpm2_clk_setup(CPM_CLK_SCC1, CPM_BRG1, CPM_CLK_TX);
tempval &= ~(PC_CLK(fpi->clk_rx - 8) | PC_CLK(fpi->clk_tx - 8)); cpm2_clk_setup(CPM_CLK_SCC2, CPM_BRG2, CPM_CLK_RX);
out_be32(&io->iop_psorc, tempval); cpm2_clk_setup(CPM_CLK_SCC2, CPM_BRG2, CPM_CLK_TX);
cpm2_clk_setup(CPM_CLK_FCC2, CPM_CLK13, CPM_CLK_RX);
tempval = in_be32(&io->iop_pdirc); cpm2_clk_setup(CPM_CLK_FCC2, CPM_CLK14, CPM_CLK_TX);
tempval &= ~(PC_CLK(fpi->clk_rx - 8) | PC_CLK(fpi->clk_tx - 8)); cpm2_clk_setup(CPM_CLK_FCC3, CPM_CLK15, CPM_CLK_RX);
out_be32(&io->iop_pdirc, tempval); cpm2_clk_setup(CPM_CLK_FCC3, CPM_CLK16, CPM_CLK_TX);
tempval = in_be32(&io->iop_pparc);
tempval |= (PC_CLK(fpi->clk_rx - 8) | PC_CLK(fpi->clk_tx - 8));
out_be32(&io->iop_pparc, tempval);
cpm2_unmap(io);
/* Configure Serial Interface clock routing.
* First, clear FCC bits to zero,
* then set the ones we want.
*/
cpm2_clk_setup(target, fpi->clk_rx, CPM_CLK_RX);
cpm2_clk_setup(target, fpi->clk_tx, CPM_CLK_TX);
} }
#endif #endif
@ -200,6 +192,7 @@ static void __init mpc85xx_ads_setup_arch(void)
#ifdef CONFIG_CPM2 #ifdef CONFIG_CPM2
cpm2_reset(); cpm2_reset();
init_ioports();
#endif #endif
#ifdef CONFIG_PCI #ifdef CONFIG_PCI
@ -231,6 +224,24 @@ static void mpc85xx_ads_show_cpuinfo(struct seq_file *m)
seq_printf(m, "Memory\t\t: %d MB\n", memsize / (1024 * 1024)); seq_printf(m, "Memory\t\t: %d MB\n", memsize / (1024 * 1024));
} }
static struct of_device_id __initdata of_bus_ids[] = {
{ .name = "soc", },
{ .type = "soc", },
{ .name = "cpm", },
{ .name = "localbus", },
{},
};
static int __init declare_of_platform_devices(void)
{
if (!machine_is(mpc85xx_ads))
return 0;
of_platform_bus_probe(NULL, of_bus_ids, NULL);
return 0;
}
device_initcall(declare_of_platform_devices);
/* /*
* Called very early, device-tree isn't unflattened * Called very early, device-tree isn't unflattened
*/ */