diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/fm/p3060.c | 17 | ||||
-rw-r--r-- | drivers/net/phy/teranetics.c | 33 |
2 files changed, 33 insertions, 17 deletions
diff --git a/drivers/net/fm/p3060.c b/drivers/net/fm/p3060.c index b25bca7cc3..176e1d292c 100644 --- a/drivers/net/fm/p3060.c +++ b/drivers/net/fm/p3060.c @@ -52,7 +52,6 @@ phy_interface_t fman_port_enet_if(enum fm_port port) { ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR); u32 rcwsr11 = in_be32(&gur->rcwsr[11]); - u32 rcwsr13 = in_be32(&gur->rcwsr[13]); if (is_device_disabled(port)) return PHY_INTERFACE_MODE_NONE; @@ -70,22 +69,6 @@ phy_interface_t fman_port_enet_if(enum fm_port port) FSL_CORENET_RCWSR11_EC2_FM2_DTSEC1)) return PHY_INTERFACE_MODE_RGMII; - if ((port == FM1_DTSEC4) && ((rcwsr13 & FSL_CORENET_RCWSR13_EC1_EXT) == - FSL_CORENET_RCWSR13_EC1_EXT_FM1_DTSEC4_RGMII)) - return PHY_INTERFACE_MODE_RGMII; - - if ((port == FM1_DTSEC4) && ((rcwsr13 & FSL_CORENET_RCWSR13_EC1_EXT) == - FSL_CORENET_RCWSR13_EC1_EXT_FM1_DTSEC4_MII)) - return PHY_INTERFACE_MODE_MII; - - if ((port == FM2_DTSEC4) && ((rcwsr13 & FSL_CORENET_RCWSR13_EC2_EXT) == - FSL_CORENET_RCWSR13_EC2_EXT_FM2_DTSEC4_RGMII)) - return PHY_INTERFACE_MODE_RGMII; - - if ((port == FM2_DTSEC4) && ((rcwsr13 & FSL_CORENET_RCWSR13_EC2_EXT) == - FSL_CORENET_RCWSR13_EC2_EXT_FM2_DTSEC4_MII)) - return PHY_INTERFACE_MODE_MII; - switch (port) { case FM1_DTSEC1: case FM1_DTSEC2: diff --git a/drivers/net/phy/teranetics.c b/drivers/net/phy/teranetics.c index a13b48cee6..9d9397aadd 100644 --- a/drivers/net/phy/teranetics.c +++ b/drivers/net/phy/teranetics.c @@ -21,6 +21,7 @@ * */ #include <config.h> +#include <common.h> #include <phy.h> #ifndef CONFIG_PHYLIB_10G @@ -43,6 +44,38 @@ int tn2020_config(struct phy_device *phydev) int tn2020_startup(struct phy_device *phydev) { + unsigned int timeout = 5 * 1000; /* 5 second timeout */ + +#define MDIO_PHYXS_LANE_READY (MDIO_PHYXS_LNSTAT_SYNC0 | \ + MDIO_PHYXS_LNSTAT_SYNC1 | \ + MDIO_PHYXS_LNSTAT_SYNC2 | \ + MDIO_PHYXS_LNSTAT_SYNC3 | \ + MDIO_PHYXS_LNSTAT_ALIGN) + + /* + * Wait for the XAUI-SERDES lanes to align first. Under normal + * circumstances, this can take up to three seconds. + */ + while (--timeout) { + int reg = phy_read(phydev, MDIO_MMD_PHYXS, MDIO_PHYXS_LNSTAT); + if (reg < 0) { + printf("TN2020: Error reading from PHY at " + "address %u\n", phydev->addr); + break; + } + if ((reg & MDIO_PHYXS_LANE_READY) == MDIO_PHYXS_LANE_READY) + break; + udelay(1000); + } + if (!timeout) { + /* + * A timeout is bad, but it may not be fatal, so don't + * return an error. Display a warning instead. + */ + printf("TN2020: Timeout waiting for PHY at address %u to " + "align.\n", phydev->addr); + } + if (phydev->port != PORT_FIBRE) return gen10g_startup(phydev); |