summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichal Simek <michal.simek@xilinx.com>2015-12-08 16:10:05 +0100
committerMichal Simek <michal.simek@xilinx.com>2016-01-27 15:55:51 +0100
commit5d0449d4c74ad310373bb90691b9258e8ff12c2c (patch)
tree6b92eb92ad4843c01268a1c9b85f411a363891c7
parent75cc93fad73897896511f08c1529233484ff063c (diff)
downloadu-boot-imx-5d0449d4c74ad310373bb90691b9258e8ff12c2c.zip
u-boot-imx-5d0449d4c74ad310373bb90691b9258e8ff12c2c.tar.gz
u-boot-imx-5d0449d4c74ad310373bb90691b9258e8ff12c2c.tar.bz2
net: axi_emac: Enable access to MDIO in probe
Detect phy when driver probes. Signed-off-by: Michal Simek <michal.simek@xilinx.com> Acked-by: Joe Hershberger <joe.hershberger@ni.com>
-rw-r--r--drivers/net/xilinx_axi_emac.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/drivers/net/xilinx_axi_emac.c b/drivers/net/xilinx_axi_emac.c
index c03f8f7..172ccc5 100644
--- a/drivers/net/xilinx_axi_emac.c
+++ b/drivers/net/xilinx_axi_emac.c
@@ -221,11 +221,10 @@ static u32 phywrite(struct axidma_priv *priv, u32 phyaddress, u32 registernum,
return 0;
}
-/* Setting axi emac and phy to proper setting */
-static int setup_phy(struct udevice *dev)
+static int axiemac_phy_init(struct udevice *dev)
{
u16 phyreg;
- u32 i, speed, emmc_reg, ret;
+ u32 i, ret;
struct axidma_priv *priv = dev_get_priv(dev);
struct axi_regs *regs = priv->iobase;
struct phy_device *phydev;
@@ -237,6 +236,9 @@ static int setup_phy(struct udevice *dev)
SUPPORTED_1000baseT_Half |
SUPPORTED_1000baseT_Full;
+ /* Set default MDIO divisor */
+ out_be32(&regs->mdio_mc, XAE_MDIO_DIV_DFT | XAE_MDIO_MC_MDIOEN_MASK);
+
if (priv->phyaddr == -1) {
/* Detect the PHY address */
for (i = 31; i >= 0; i--) {
@@ -259,6 +261,18 @@ static int setup_phy(struct udevice *dev)
phydev->advertising = phydev->supported;
priv->phydev = phydev;
phy_config(phydev);
+
+ return 0;
+}
+
+/* Setting axi emac and phy to proper setting */
+static int setup_phy(struct udevice *dev)
+{
+ u32 speed, emmc_reg;
+ struct axidma_priv *priv = dev_get_priv(dev);
+ struct axi_regs *regs = priv->iobase;
+ struct phy_device *phydev = priv->phydev;
+
if (phy_startup(phydev)) {
printf("axiemac: could not initialize PHY %s\n",
phydev->dev->name);
@@ -621,6 +635,8 @@ static int axi_emac_probe(struct udevice *dev)
if (ret)
return ret;
+ axiemac_phy_init(dev);
+
return 0;
}