Commit 1f57877a authored by Benjamin Herrenschmidt's avatar Benjamin Herrenschmidt Committed by Jeff Garzik
Browse files

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: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
Acked-by: default avatarStefan Roese <sr@denx.de>
Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
parent 911b237d
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -245,6 +245,7 @@
				device_type = "rgmii-interface";
				compatible = "ibm,rgmii-440epx", "ibm,rgmii";
				reg = <ef601000 8>;
				has-mdio;
			};

			EMAC0: ethernet@ef600e00 {
+11 −9
Original line number Diff line number Diff line
@@ -140,7 +140,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 +161,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);
@@ -250,11 +250,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 +265,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);
+3 −2
Original line number Diff line number Diff line
@@ -35,8 +35,9 @@ struct rgmii_regs {
struct rgmii_instance {
	struct rgmii_regs __iomem	*base;

	/* Type of RGMII bridge */
	int				type;
	/* RGMII bridge flags */
	int				flags;
#define EMAC_RGMII_FLAG_HAS_MDIO	0x00000001

	/* Only one EMAC whacks us at a time */
	struct mutex			lock;