UPSTREAM: net: Update eQos driver and FEC driver to use eth phy interfaces
Update eQoS and fec ethernet drivers to support shared MDIO framework Signed-off-by: Ye Li <ye.li@nxp.com> Signed-off-by: Peng Fan <peng.fan@nxp.com> Signed-off-by: David Wu <david.wu@rock-chips.com> Change-Id: Iaf5f3ca585190c6469b68195aaea2499242a0096
This commit is contained in:
parent
70664e19a3
commit
8e3eceb053
|
|
@ -40,6 +40,7 @@
|
|||
#include <wait_bit.h>
|
||||
#include <asm/gpio.h>
|
||||
#include <asm/io.h>
|
||||
#include <eth_phy.h>
|
||||
|
||||
/* Core registers */
|
||||
|
||||
|
|
@ -1082,7 +1083,14 @@ static int eqos_start(struct udevice *dev)
|
|||
* don't need to reconnect/reconfigure again
|
||||
*/
|
||||
if (!eqos->phy) {
|
||||
eqos->phy = phy_connect(eqos->mii, eqos->phyaddr, dev,
|
||||
int addr = -1;
|
||||
#ifdef CONFIG_DM_ETH_PHY
|
||||
addr = eth_phy_get_addr(dev);
|
||||
#endif
|
||||
#ifdef DWC_NET_PHYADDR
|
||||
addr = DWC_NET_PHYADDR;
|
||||
#endif
|
||||
eqos->phy = phy_connect(eqos->mii, addr, dev,
|
||||
eqos->config->interface(dev));
|
||||
if (!eqos->phy) {
|
||||
pr_err("phy_connect() failed");
|
||||
|
|
@ -1819,23 +1827,32 @@ static int eqos_probe(struct udevice *dev)
|
|||
goto err_remove_resources_core;
|
||||
}
|
||||
|
||||
eqos->mii = mdio_alloc();
|
||||
#ifdef CONFIG_DM_ETH_PHY
|
||||
eqos->mii = eth_phy_get_mdio_bus(dev);
|
||||
#endif
|
||||
if (!eqos->mii) {
|
||||
pr_err("mdio_alloc() failed");
|
||||
ret = -ENOMEM;
|
||||
goto err_remove_resources_tegra;
|
||||
}
|
||||
eqos->mii->read = eqos_mdio_read;
|
||||
eqos->mii->write = eqos_mdio_write;
|
||||
eqos->mii->priv = eqos;
|
||||
strcpy(eqos->mii->name, dev->name);
|
||||
eqos->mii = mdio_alloc();
|
||||
if (!eqos->mii) {
|
||||
pr_err("mdio_alloc() failed");
|
||||
ret = -ENOMEM;
|
||||
goto err_remove_resources_tegra;
|
||||
}
|
||||
eqos->mii->read = eqos_mdio_read;
|
||||
eqos->mii->write = eqos_mdio_write;
|
||||
eqos->mii->priv = eqos;
|
||||
strcpy(eqos->mii->name, dev->name);
|
||||
|
||||
ret = mdio_register(eqos->mii);
|
||||
if (ret < 0) {
|
||||
pr_err("mdio_register() failed: %d", ret);
|
||||
goto err_free_mdio;
|
||||
ret = mdio_register(eqos->mii);
|
||||
if (ret < 0) {
|
||||
pr_err("mdio_register() failed: %d", ret);
|
||||
goto err_free_mdio;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef CONFIG_DM_ETH_PHY
|
||||
eth_phy_set_mdio_bus(dev, eqos->mii);
|
||||
#endif
|
||||
|
||||
debug("%s: OK\n", __func__);
|
||||
return 0;
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,10 @@
|
|||
#include <asm/arch/clock.h>
|
||||
#include <asm/arch/imx-regs.h>
|
||||
#include <asm/mach-imx/sys_proto.h>
|
||||
#include <asm-generic/gpio.h>
|
||||
|
||||
#include "fec_mxc.h"
|
||||
#include <eth_phy.h>
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
|
|
@ -1245,14 +1249,29 @@ static int fecmxc_probe(struct udevice *dev)
|
|||
}
|
||||
|
||||
fec_reg_setup(priv);
|
||||
priv->dev_id = (dev_id == -1) ? 0 : dev_id;
|
||||
|
||||
bus = fec_get_miibus(dev, dev_id);
|
||||
priv->dev_id = dev->seq;
|
||||
|
||||
#ifdef CONFIG_DM_ETH_PHY
|
||||
bus = eth_phy_get_mdio_bus(dev);
|
||||
#endif
|
||||
|
||||
if (!bus) {
|
||||
#ifdef CONFIG_FEC_MXC_MDIO_BASE
|
||||
bus = fec_get_miibus((ulong)CONFIG_FEC_MXC_MDIO_BASE, dev->seq);
|
||||
#else
|
||||
bus = fec_get_miibus((ulong)priv->eth, dev->seq);
|
||||
#endif
|
||||
}
|
||||
if (!bus) {
|
||||
ret = -ENOMEM;
|
||||
goto err_mii;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_DM_ETH_PHY
|
||||
eth_phy_set_mdio_bus(dev, bus);
|
||||
#endif
|
||||
|
||||
priv->bus = bus;
|
||||
priv->xcv_type = CONFIG_FEC_XCV_TYPE;
|
||||
priv->interface = pdata->phy_interface;
|
||||
|
|
|
|||
Loading…
Reference in New Issue