ibm_newemac: Cleanup/Fix RGMII MDIO support detection

More than just "AXON" version of EMAC RGMII supports MDIO, so replace
the current test with a generic property in the device-tree that
indicates such support.

Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Acked-by: Stefan Roese <sr@denx.de>
Signed-off-by: Jeff Garzik <jeff@garzik.org>

authored by Benjamin Herrenschmidt and committed by Jeff Garzik 1f57877a 911b237d

+15 -11
+1
arch/powerpc/boot/dts/sequoia.dts
··· 245 device_type = "rgmii-interface"; 246 compatible = "ibm,rgmii-440epx", "ibm,rgmii"; 247 reg = <ef601000 8>; 248 }; 249 250 EMAC0: ethernet@ef600e00 {
··· 245 device_type = "rgmii-interface"; 246 compatible = "ibm,rgmii-440epx", "ibm,rgmii"; 247 reg = <ef601000 8>; 248 + has-mdio; 249 }; 250 251 EMAC0: ethernet@ef600e00 {
+11 -9
drivers/net/ibm_newemac/rgmii.c
··· 140 141 RGMII_DBG2(dev, "get_mdio(%d)" NL, input); 142 143 - if (dev->type != RGMII_AXON) 144 return; 145 146 mutex_lock(&dev->lock); ··· 161 162 RGMII_DBG2(dev, "put_mdio(%d)" NL, input); 163 164 - if (dev->type != RGMII_AXON) 165 return; 166 167 fer = in_be32(&p->fer); ··· 250 goto err_free; 251 } 252 253 - /* Check for RGMII type */ 254 if (of_device_is_compatible(ofdev->node, "ibm,rgmii-axon")) 255 - dev->type = RGMII_AXON; 256 - else 257 - dev->type = RGMII_STANDARD; 258 259 DBG2(dev, " Boot FER = 0x%08x, SSR = 0x%08x\n", 260 in_be32(&dev->base->fer), in_be32(&dev->base->ssr)); ··· 265 out_be32(&dev->base->fer, 0); 266 267 printk(KERN_INFO 268 - "RGMII %s %s initialized\n", 269 - dev->type == RGMII_STANDARD ? "standard" : "axon", 270 - ofdev->node->full_name); 271 272 wmb(); 273 dev_set_drvdata(&ofdev->dev, dev);
··· 140 141 RGMII_DBG2(dev, "get_mdio(%d)" NL, input); 142 143 + if (!(dev->flags & EMAC_RGMII_FLAG_HAS_MDIO)) 144 return; 145 146 mutex_lock(&dev->lock); ··· 161 162 RGMII_DBG2(dev, "put_mdio(%d)" NL, input); 163 164 + if (!(dev->flags & EMAC_RGMII_FLAG_HAS_MDIO)) 165 return; 166 167 fer = in_be32(&p->fer); ··· 250 goto err_free; 251 } 252 253 + /* Check for RGMII flags */ 254 + if (of_get_property(ofdev->node, "has-mdio", NULL)) 255 + dev->flags |= EMAC_RGMII_FLAG_HAS_MDIO; 256 + 257 + /* CAB lacks the right properties, fix this up */ 258 if (of_device_is_compatible(ofdev->node, "ibm,rgmii-axon")) 259 + dev->flags |= EMAC_RGMII_FLAG_HAS_MDIO; 260 261 DBG2(dev, " Boot FER = 0x%08x, SSR = 0x%08x\n", 262 in_be32(&dev->base->fer), in_be32(&dev->base->ssr)); ··· 263 out_be32(&dev->base->fer, 0); 264 265 printk(KERN_INFO 266 + "RGMII %s initialized with%s MDIO support\n", 267 + ofdev->node->full_name, 268 + (dev->flags & EMAC_RGMII_FLAG_HAS_MDIO) ? "" : "out"); 269 270 wmb(); 271 dev_set_drvdata(&ofdev->dev, dev);
+3 -2
drivers/net/ibm_newemac/rgmii.h
··· 35 struct rgmii_instance { 36 struct rgmii_regs __iomem *base; 37 38 - /* Type of RGMII bridge */ 39 - int type; 40 41 /* Only one EMAC whacks us at a time */ 42 struct mutex lock;
··· 35 struct rgmii_instance { 36 struct rgmii_regs __iomem *base; 37 38 + /* RGMII bridge flags */ 39 + int flags; 40 + #define EMAC_RGMII_FLAG_HAS_MDIO 0x00000001 41 42 /* Only one EMAC whacks us at a time */ 43 struct mutex lock;