summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Liu <r64343@freescale.com>2010-05-18 13:05:44 +0800
committerJason Liu <r64343@freescale.com>2010-05-19 10:51:50 +0800
commita95b05f8e36d966fb972082e2eaa8a0d2051a6e7 (patch)
treebb5670482027b125b88920cb59428c34b6c1a470
parentb59d453bd7307db80673613b14f9d2f5fdb1cdd5 (diff)
ENGR00123446 Can not get ip address after ifconfig eth0 down
-Fix the fec_enet_mdio_write function with correct FEC_MMFR_OP_WRITE -Correct comments "start a read op" inside the fec_enet_mdio_write function -Need do fec_restart in fec open since we do fec_stop in fec close -Need do phy_stop in fec close to set the correct phy state machine Signed-off-by:Jason Liu <r64343@freescale.com>
-rw-r--r--drivers/net/fec.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/drivers/net/fec.c b/drivers/net/fec.c
index 47a432668491..46799e092bc1 100644
--- a/drivers/net/fec.c
+++ b/drivers/net/fec.c
@@ -716,7 +716,6 @@ static int fec_enet_mdio_read(struct mii_bus *bus, int mii_id, int regnum)
{
struct fec_enet_private *fep = bus->priv;
-
/* clear MII end of transfer bit*/
writel(FEC_ENET_MII, fep->hwp + FEC_IEVENT);
@@ -739,8 +738,8 @@ static int fec_enet_mdio_write(struct mii_bus *bus, int mii_id, int regnum,
/* clear MII end of transfer bit*/
writel(FEC_ENET_MII, fep->hwp + FEC_IEVENT);
- /* start a read op */
- writel(FEC_MMFR_ST | FEC_MMFR_OP_READ |
+ /* start a write op */
+ writel(FEC_MMFR_ST | FEC_MMFR_OP_WRITE |
FEC_MMFR_PA(mii_id) | FEC_MMFR_RA(regnum) |
FEC_MMFR_TA | FEC_MMFR_DATA(value),
fep->hwp + FEC_MII_DATA);
@@ -1019,6 +1018,7 @@ fec_enet_open(struct net_device *dev)
return ret;
}
phy_start(fep->phy_dev);
+ fec_restart(dev, fep->phy_dev->duplex);
netif_start_queue(dev);
fep->opened = 1;
return 0;
@@ -1034,9 +1034,10 @@ fec_enet_close(struct net_device *dev)
netif_stop_queue(dev);
fec_stop(dev);
- if (fep->phy_dev)
+ if (fep->phy_dev) {
+ phy_stop(fep->phy_dev);
phy_disconnect(fep->phy_dev);
-
+ }
fec_enet_free_buffers(dev);
clk_disable(fep->clk);