]> err.no Git - linux-2.6/blobdiff - arch/powerpc/platforms/85xx/mpc85xx_mds.c
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/linville/wireles...
[linux-2.6] / arch / powerpc / platforms / 85xx / mpc85xx_mds.c
index 00f4c3aef78bbaef52bd3a838a5cdfc5a9b08eff..25f8bc75e838400de36fbb2f8345513e69afa232 100644 (file)
 #include <linux/initrd.h>
 #include <linux/module.h>
 #include <linux/fsl_devices.h>
+#include <linux/of_platform.h>
+#include <linux/of_device.h>
 
-#include <asm/of_device.h>
-#include <asm/of_platform.h>
 #include <asm/system.h>
 #include <asm/atomic.h>
 #include <asm/time.h>
 #include <asm/io.h>
 #include <asm/machdep.h>
 #include <asm/pci-bridge.h>
-#include <asm/mpc85xx.h>
 #include <asm/irq.h>
 #include <mm/mmu_decl.h>
 #include <asm/prom.h>
@@ -95,40 +94,47 @@ static void __init mpc85xx_mds_setup_arch(void)
 #endif
 
 #ifdef CONFIG_QUICC_ENGINE
-       if ((np = of_find_node_by_name(NULL, "qe")) != NULL) {
-               qe_reset();
-               of_node_put(np);
+       np = of_find_compatible_node(NULL, NULL, "fsl,qe");
+       if (!np) {
+               np = of_find_node_by_name(NULL, "qe");
+               if (!np)
+                       return;
        }
 
-       if ((np = of_find_node_by_name(NULL, "par_io")) != NULL) {
-               struct device_node *ucc = NULL;
+       qe_reset();
+       of_node_put(np);
+
+       np = of_find_node_by_name(NULL, "par_io");
+       if (np) {
+               struct device_node *ucc;
 
                par_io_init(np);
                of_node_put(np);
 
-               for ( ;(ucc = of_find_node_by_name(ucc, "ucc")) != NULL;)
+               for_each_node_by_name(ucc, "ucc")
                        par_io_of_config(ucc);
-
-               of_node_put(ucc);
        }
 
        if (bcsr_regs) {
-               u8 bcsr_phy;
+#define BCSR_UCC1_GETH_EN      (0x1 << 7)
+#define BCSR_UCC2_GETH_EN      (0x1 << 7)
+#define BCSR_UCC1_MODE_MSK     (0x3 << 4)
+#define BCSR_UCC2_MODE_MSK     (0x3 << 0)
 
-               /* Reset the Ethernet PHY */
-               bcsr_phy = in_be8(&bcsr_regs[9]);
-               bcsr_phy &= ~0x20;
-               out_be8(&bcsr_regs[9], bcsr_phy);
+               /* Turn off UCC1 & UCC2 */
+               clrbits8(&bcsr_regs[8], BCSR_UCC1_GETH_EN);
+               clrbits8(&bcsr_regs[9], BCSR_UCC2_GETH_EN);
 
-               udelay(1000);
+               /* Mode is RGMII, all bits clear */
+               clrbits8(&bcsr_regs[11], BCSR_UCC1_MODE_MSK |
+                                        BCSR_UCC2_MODE_MSK);
 
-               bcsr_phy = in_be8(&bcsr_regs[9]);
-               bcsr_phy |= 0x20;
-               out_be8(&bcsr_regs[9], bcsr_phy);
+               /* Turn UCC1 & UCC2 on */
+               setbits8(&bcsr_regs[8], BCSR_UCC1_GETH_EN);
+               setbits8(&bcsr_regs[9], BCSR_UCC2_GETH_EN);
 
                iounmap(bcsr_regs);
        }
-
 #endif /* CONFIG_QUICC_ENGINE */
 }
 
@@ -136,20 +142,18 @@ static struct of_device_id mpc85xx_ids[] = {
        { .type = "soc", },
        { .compatible = "soc", },
        { .type = "qe", },
+       { .compatible = "fsl,qe", },
        {},
 };
 
 static int __init mpc85xx_publish_devices(void)
 {
-       if (!machine_is(mpc85xx_mds))
-               return 0;
-
        /* Publish the QE devices */
-       of_platform_bus_probe(NULL,mpc85xx_ids,NULL);
+       of_platform_bus_probe(NULL, mpc85xx_ids, NULL);
 
        return 0;
 }
-device_initcall(mpc85xx_publish_devices);
+machine_device_initcall(mpc85xx_mds, mpc85xx_publish_devices);
 
 static void __init mpc85xx_mds_pic_init(void)
 {
@@ -176,11 +180,13 @@ static void __init mpc85xx_mds_pic_init(void)
        mpic_init(mpic);
 
 #ifdef CONFIG_QUICC_ENGINE
-       np = of_find_node_by_type(NULL, "qeic");
-       if (!np)
-               return;
-
-       qe_ic_init(np, 0);
+       np = of_find_compatible_node(NULL, NULL, "fsl,qe-ic");
+       if (!np) {
+               np = of_find_node_by_type(NULL, "qeic");
+               if (!np)
+                       return;
+       }
+       qe_ic_init(np, 0, qe_ic_cascade_muxed_mpic, NULL);
        of_node_put(np);
 #endif                         /* CONFIG_QUICC_ENGINE */
 }