net: xilinx_axi: Clear Isolate bit if found during phy setup
In SGMII cases the isolate bit might set after DMA and ethernet resets and hence check and clear during setup_phy if it was set. Signed-off-by: Siva Durga Prasad Paladugu <sivadur@xilinx.com> Acked-by: Joe Hershberger <joe.hershberger@ni.com> Signed-off-by: Michal Simek <michal.simek@xilinx.com>
This commit is contained in:
parent
9c0da76220
commit
8964f24179
@ -264,11 +264,29 @@ static int axiemac_phy_init(struct udevice *dev)
|
|||||||
/* Setting axi emac and phy to proper setting */
|
/* Setting axi emac and phy to proper setting */
|
||||||
static int setup_phy(struct udevice *dev)
|
static int setup_phy(struct udevice *dev)
|
||||||
{
|
{
|
||||||
u32 speed, emmc_reg;
|
u16 temp;
|
||||||
|
u32 speed, emmc_reg, ret;
|
||||||
struct axidma_priv *priv = dev_get_priv(dev);
|
struct axidma_priv *priv = dev_get_priv(dev);
|
||||||
struct axi_regs *regs = priv->iobase;
|
struct axi_regs *regs = priv->iobase;
|
||||||
struct phy_device *phydev = priv->phydev;
|
struct phy_device *phydev = priv->phydev;
|
||||||
|
|
||||||
|
if (priv->interface == PHY_INTERFACE_MODE_SGMII) {
|
||||||
|
/*
|
||||||
|
* In SGMII cases the isolate bit might set
|
||||||
|
* after DMA and ethernet resets and hence
|
||||||
|
* check and clear if set.
|
||||||
|
*/
|
||||||
|
ret = phyread(priv, priv->phyaddr, MII_BMCR, &temp);
|
||||||
|
if (ret)
|
||||||
|
return 0;
|
||||||
|
if (temp & BMCR_ISOLATE) {
|
||||||
|
temp &= ~BMCR_ISOLATE;
|
||||||
|
ret = phywrite(priv, priv->phyaddr, MII_BMCR, temp);
|
||||||
|
if (ret)
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (phy_startup(phydev)) {
|
if (phy_startup(phydev)) {
|
||||||
printf("axiemac: could not initialize PHY %s\n",
|
printf("axiemac: could not initialize PHY %s\n",
|
||||||
phydev->dev->name);
|
phydev->dev->name);
|
||||||
|
Loading…
Reference in New Issue
Block a user