driver/net/fec: support fixed speed connection

If MAC is directly connected to another MAC (like a switch for example)
we don't need to probe for a phy, autoneogation and so on. We simply
have to setup speed.

Signed-off-by: Hannes Schmelzer <oe5hpm@oevsv.at>
Acked-by: Joe Hershberger <joe.hershberger@ni.com>
This commit is contained in:
Hannes Schmelzer 2016-06-22 12:07:14 +02:00 committed by Stefano Babic
parent a32b4a03c7
commit 0750701a3f
2 changed files with 9 additions and 0 deletions

View file

@ -27,6 +27,11 @@ CONFIG_FEC_MXC_PHYADDR
Optional, selects the exact phy address that should be connected Optional, selects the exact phy address that should be connected
and function fecmxc_initialize will try to initialize it. and function fecmxc_initialize will try to initialize it.
CONFIG_FEC_FIXED_SPEED
Optional, selects a fixed speed on the MAC interface without asking some
phy. This is usefull if there is a direct MAC <-> MAC connection, for
example if the CPU is connected directly via the RGMII interface to a
ethernet-switch.
Reading the ethaddr from the SoC eFuses: Reading the ethaddr from the SoC eFuses:
if CONFIG_FEC_MXC is defined and the U-Boot environment does not contain the if CONFIG_FEC_MXC is defined and the U-Boot environment does not contain the

View file

@ -233,6 +233,7 @@ static int miiphy_restart_aneg(struct eth_device *dev)
return ret; return ret;
} }
#ifndef CONFIG_FEC_FIXED_SPEED
static int miiphy_wait_aneg(struct eth_device *dev) static int miiphy_wait_aneg(struct eth_device *dev)
{ {
uint32_t start; uint32_t start;
@ -260,6 +261,7 @@ static int miiphy_wait_aneg(struct eth_device *dev)
return 0; return 0;
} }
#endif /* CONFIG_FEC_FIXED_SPEED */
#endif #endif
static int fec_rx_task_enable(struct fec_priv *fec) static int fec_rx_task_enable(struct fec_priv *fec)
@ -502,6 +504,8 @@ static int fec_open(struct eth_device *edev)
} }
speed = fec->phydev->speed; speed = fec->phydev->speed;
} }
#elif CONFIG_FEC_FIXED_SPEED
speed = CONFIG_FEC_FIXED_SPEED;
#else #else
miiphy_wait_aneg(edev); miiphy_wait_aneg(edev);
speed = miiphy_speed(edev->name, fec->phy_id); speed = miiphy_speed(edev->name, fec->phy_id);