ACPI: delete CPU_IDLE=n code
[safe/jmp/linux-2.6] / drivers / net / ibm_newemac / rgmii.c
index de41695..1d5379d 100644 (file)
@@ -3,6 +3,11 @@
  *
  * Driver for PowerPC 4xx on-chip ethernet controller, RGMII bridge support.
  *
+ * Copyright 2007 Benjamin Herrenschmidt, IBM Corp.
+ *                <benh@kernel.crashing.org>
+ *
+ * Based on the arch/ppc version of the driver:
+ *
  * Copyright (c) 2004, 2005 Zultys Technologies.
  * Eugene Surovegin <eugene.surovegin@zultys.com> or <ebs@ebshome.net>
  *
@@ -34,6 +39,7 @@
 #define RGMII_FER_RGMII(idx)   (0x5 << ((idx) * 4))
 #define RGMII_FER_TBI(idx)     (0x6 << ((idx) * 4))
 #define RGMII_FER_GMII(idx)    (0x7 << ((idx) * 4))
+#define RGMII_FER_MII(idx)     RGMII_FER_GMII(idx)
 
 /* RGMIIx_SSR */
 #define RGMII_SSR_MASK(idx)    (0x7 << ((idx) * 8))
@@ -44,6 +50,7 @@
 static inline int rgmii_valid_mode(int phy_mode)
 {
        return  phy_mode == PHY_MODE_GMII ||
+               phy_mode == PHY_MODE_MII ||
                phy_mode == PHY_MODE_RGMII ||
                phy_mode == PHY_MODE_TBI ||
                phy_mode == PHY_MODE_RTBI;
@@ -58,6 +65,8 @@ static inline const char *rgmii_mode_name(int mode)
                return "TBI";
        case PHY_MODE_GMII:
                return "GMII";
+       case PHY_MODE_MII:
+               return "MII";
        case PHY_MODE_RTBI:
                return "RTBI";
        default:
@@ -74,6 +83,8 @@ static inline u32 rgmii_mode_mask(int mode, int input)
                return RGMII_FER_TBI(input);
        case PHY_MODE_GMII:
                return RGMII_FER_GMII(input);
+       case PHY_MODE_MII:
+               return RGMII_FER_MII(input);
        case PHY_MODE_RTBI:
                return RGMII_FER_RTBI(input);
        default:
@@ -140,7 +151,7 @@ void rgmii_get_mdio(struct of_device *ofdev, int input)
 
        RGMII_DBG2(dev, "get_mdio(%d)" NL, input);
 
-       if (dev->type != RGMII_AXON)
+       if (!(dev->flags & EMAC_RGMII_FLAG_HAS_MDIO))
                return;
 
        mutex_lock(&dev->lock);
@@ -161,7 +172,7 @@ void rgmii_put_mdio(struct of_device *ofdev, int input)
 
        RGMII_DBG2(dev, "put_mdio(%d)" NL, input);
 
-       if (dev->type != RGMII_AXON)
+       if (!(dev->flags & EMAC_RGMII_FLAG_HAS_MDIO))
                return;
 
        fer = in_be32(&p->fer);
@@ -174,7 +185,7 @@ void rgmii_put_mdio(struct of_device *ofdev, int input)
        mutex_unlock(&dev->lock);
 }
 
-void __devexit rgmii_detach(struct of_device *ofdev, int input)
+void rgmii_detach(struct of_device *ofdev, int input)
 {
        struct rgmii_instance *dev = dev_get_drvdata(&ofdev->dev);
        struct rgmii_regs __iomem *p = dev->base;
@@ -250,11 +261,13 @@ static int __devinit rgmii_probe(struct of_device *ofdev,
                goto err_free;
        }
 
-       /* Check for RGMII type */
+       /* Check for RGMII flags */
+       if (of_get_property(ofdev->node, "has-mdio", NULL))
+               dev->flags |= EMAC_RGMII_FLAG_HAS_MDIO;
+
+       /* CAB lacks the right properties, fix this up */
        if (of_device_is_compatible(ofdev->node, "ibm,rgmii-axon"))
-               dev->type = RGMII_AXON;
-       else
-               dev->type = RGMII_STANDARD;
+               dev->flags |= EMAC_RGMII_FLAG_HAS_MDIO;
 
        DBG2(dev, " Boot FER = 0x%08x, SSR = 0x%08x\n",
             in_be32(&dev->base->fer), in_be32(&dev->base->ssr));
@@ -263,9 +276,9 @@ static int __devinit rgmii_probe(struct of_device *ofdev,
        out_be32(&dev->base->fer, 0);
 
        printk(KERN_INFO
-              "RGMII %s %s initialized\n",
-              dev->type == RGMII_STANDARD ? "standard" : "axon",
-              ofdev->node->full_name);
+              "RGMII %s initialized with%s MDIO support\n",
+              ofdev->node->full_name,
+              (dev->flags & EMAC_RGMII_FLAG_HAS_MDIO) ? "" : "out");
 
        wmb();
        dev_set_drvdata(&ofdev->dev, dev);
@@ -295,7 +308,6 @@ static int __devexit rgmii_remove(struct of_device *ofdev)
 static struct of_device_id rgmii_match[] =
 {
        {
-               .type           = "rgmii-interface",
                .compatible     = "ibm,rgmii",
        },
        {