Skip to content

Commit

Permalink
ibm_newemac: Cleanup/Fix RGMII MDIO support detection
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Benjamin Herrenschmidt authored and Jeff Garzik committed Dec 7, 2007
1 parent 911b237 commit 1f57877
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 11 deletions.
1 change: 1 addition & 0 deletions arch/powerpc/boot/dts/sequoia.dts
Original file line number Diff line number Diff line change
Expand Up @@ -245,6 +245,7 @@
device_type = "rgmii-interface";
compatible = "ibm,rgmii-440epx", "ibm,rgmii";
reg = <ef601000 8>;
has-mdio;
};

EMAC0: ethernet@ef600e00 {
Expand Down
20 changes: 11 additions & 9 deletions drivers/net/ibm_newemac/rgmii.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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);
Expand Down Expand Up @@ -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));
Expand All @@ -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);
Expand Down
5 changes: 3 additions & 2 deletions drivers/net/ibm_newemac/rgmii.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down

0 comments on commit 1f57877

Please sign in to comment.