From 772cc6d9f70d9c77e4ea748caf707c070c6619a3 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Lothar=20Wa=C3=9Fmann?= Date: Mon, 24 Jun 2013 11:00:12 +0200 Subject: [PATCH] Use phy_id from slave_data rather than CONFIG_PHY_ADDR to enable use of multiple PHYs --- drivers/net/cpsw.c | 27 ++++++++++++++++++++++----- include/configs/tx48.h | 1 - 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/drivers/net/cpsw.c b/drivers/net/cpsw.c index c0fc420b58..30f1137c73 100644 --- a/drivers/net/cpsw.c +++ b/drivers/net/cpsw.c @@ -968,10 +968,27 @@ static int cpsw_phy_init(struct eth_device *dev, struct cpsw_slave *slave) SUPPORTED_100baseT_Full | SUPPORTED_1000baseT_Full); - phydev = phy_connect(priv->bus, - CONFIG_PHY_ADDR, - dev, - slave->data->phy_if); + if (slave->data->phy_id < 0) { + u32 phy_addr; + + for (phy_addr = 0; phy_addr < 32; phy_addr++) { + debug("Trying to connect to PHY @ addr %02x\n", + phy_addr); + phydev = phy_connect(priv->bus, phy_addr, + dev, slave->data->phy_if); + if (phydev) + break; + } + } else { + phydev = phy_connect(priv->bus, + slave->data->phy_id, + dev, + slave->data->phy_if); + } + if (!phydev) { + printf("Failed to connect to PHY\n"); + return -EINVAL; + } phydev->supported &= supported; phydev->advertising = phydev->supported; @@ -979,7 +996,7 @@ static int cpsw_phy_init(struct eth_device *dev, struct cpsw_slave *slave) priv->phydev = phydev; phy_config(phydev); - return 1; + return 0; } int cpsw_register(struct cpsw_platform_data *data) diff --git a/include/configs/tx48.h b/include/configs/tx48.h index 515cc503b0..a67d9cb1a3 100644 --- a/include/configs/tx48.h +++ b/include/configs/tx48.h @@ -214,7 +214,6 @@ #define CONFIG_PHY_GIGE #define CONFIG_PHY_SMSC #define CONFIG_PHYLIB -#define CONFIG_PHY_ADDR (-1) #define CONFIG_MII #define CONFIG_CMD_MII #define CONFIG_CMD_DHCP -- 2.39.2