[U-Boot] [u-boot] [PATCH] [1/2] mxc_fec: fix some erroneous PHY accesses.

This patch fixes erroneous access to the ethernet PHY which broke the driver. 1. Selector field in the auto-negotiation register must be 0x00001 for using 802.3, not 0x00000 which is reseved. 2. Access to the PHY address specified by CONFIG_FEC_MXC_PHYADDR, not 0x0 fixed address.
This has been tested in i.MX27 Litekit board and eldk-2.0 toolchains.
Signed-off-by: Javier Martin javier.martin@vista-silicon.com --
diff --git a/drivers/net/fec_mxc.c b/drivers/net/fec_mxc.c index bd83a24..18f0bba 100644 --- a/drivers/net/fec_mxc.c +++ b/drivers/net/fec_mxc.c @@ -157,7 +157,7 @@ static int miiphy_restart_aneg(struct eth_device *dev) /* * Set the auto-negotiation advertisement register bits */ - miiphy_write(dev->name, CONFIG_FEC_MXC_PHYADDR, PHY_ANAR, 0x1e0); + miiphy_write(dev->name, CONFIG_FEC_MXC_PHYADDR, PHY_ANAR, 0x1e1); miiphy_write(dev->name, CONFIG_FEC_MXC_PHYADDR, PHY_BMCR, PHY_BMCR_AUTON | PHY_BMCR_RST_NEG);
@@ -341,8 +341,8 @@ static int fec_open(struct eth_device *edev) writel(FEC_ECNTRL_ETHER_EN, &fec->eth->ecntrl);
miiphy_wait_aneg(edev); - miiphy_speed(edev->name, 0); - miiphy_duplex(edev->name, 0); + miiphy_speed(edev->name, CONFIG_FEC_MXC_PHYADDR); + miiphy_duplex(edev->name, CONFIG_FEC_MXC_PHYADDR);
/* * Enable SmartDMA receive task

Who can ack this patch? Is Fred Fan or Tom Rix?
Thank you.

On Sat, Oct 24, 2009 at 11:35 AM, Tom Tom.Rix@windriver.com wrote:
javier Martin wrote:
Who can ack this patch? Is Fred Fan or Tom Rix?
This looked like a network patch, so it would go to Ben.
Tom
Yeah, this is in my jurisdiction. I'll take care of it this weekend.
regards, Ben

Javier,
On Mon, Oct 19, 2009 at 5:16 AM, javier Martin < javier.martin@vista-silicon.com> wrote:
This patch fixes erroneous access to the ethernet PHY which broke the driver.
- Selector field in the auto-negotiation register must be 0x00001 for
using 802.3, not 0x00000 which is reseved. 2. Access to the PHY address specified by CONFIG_FEC_MXC_PHYADDR, not 0x0 fixed address.
This has been tested in i.MX27 Litekit board and eldk-2.0 toolchains.
Signed-off-by: Javier Martin javier.martin@vista-silicon.com
diff --git a/drivers/net/fec_mxc.c b/drivers/net/fec_mxc.c index bd83a24..18f0bba 100644 --- a/drivers/net/fec_mxc.c +++ b/drivers/net/fec_mxc.c @@ -157,7 +157,7 @@ static int miiphy_restart_aneg(struct eth_device *dev) /* * Set the auto-negotiation advertisement register bits */
miiphy_write(dev->name, CONFIG_FEC_MXC_PHYADDR, PHY_ANAR, 0x1e0);
miiphy_write(dev->name, CONFIG_FEC_MXC_PHYADDR, PHY_ANAR, 0x1e1);
There are perfectly good #defines for each of these bits (miiphy.h or, even better, linux/mii.h). Please use them to avoid this confusion.
miiphy_write(dev->name, CONFIG_FEC_MXC_PHYADDR, PHY_BMCR, PHY_BMCR_AUTON | PHY_BMCR_RST_NEG);
@@ -341,8 +341,8 @@ static int fec_open(struct eth_device *edev) writel(FEC_ECNTRL_ETHER_EN, &fec->eth->ecntrl);
miiphy_wait_aneg(edev);
miiphy_speed(edev->name, 0);
miiphy_duplex(edev->name, 0);
miiphy_speed(edev->name, CONFIG_FEC_MXC_PHYADDR);
miiphy_duplex(edev->name, CONFIG_FEC_MXC_PHYADDR); /* * Enable SmartDMA receive task
regards,
Ben
participants (3)
-
Ben Warren
-
javier Martin
-
Tom