mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-25 22:20:45 +00:00
net: netcp: add support for phy with rgmii ids
Enhance the netcp driver to support phys that can be configured for internal delay (rgmii-id, rgmii-rxid, rgmii-txid) Signed-off-by: Murali Karicheri <m-karicheri2@ti.com> Acked-by: Joe Hershberger <joe.hershberger@ni.com>
This commit is contained in:
parent
b15311c90b
commit
55d5cb1728
1 changed files with 21 additions and 1 deletions
|
@ -88,6 +88,7 @@ struct ks2_eth_priv {
|
|||
struct mii_dev *mdio_bus;
|
||||
int phy_addr;
|
||||
phy_interface_t phy_if;
|
||||
int phy_of_handle;
|
||||
int sgmii_link_type;
|
||||
void *mdio_base;
|
||||
struct rx_buff_desc net_rx_buffs;
|
||||
|
@ -588,6 +589,10 @@ static int ks2_eth_probe(struct udevice *dev)
|
|||
if (priv->has_mdio) {
|
||||
priv->phydev = phy_connect(priv->mdio_bus, priv->phy_addr,
|
||||
dev, priv->phy_if);
|
||||
#ifdef CONFIG_DM_ETH
|
||||
if (priv->phy_of_handle)
|
||||
priv->phydev->node = offset_to_ofnode(priv->phy_of_handle);
|
||||
#endif
|
||||
phy_config(priv->phydev);
|
||||
}
|
||||
|
||||
|
@ -679,6 +684,7 @@ static int ks2_eth_parse_slave_interface(int netcp, int slave,
|
|||
int phy;
|
||||
int dma_count;
|
||||
u32 dma_channel[8];
|
||||
const char *phy_mode;
|
||||
|
||||
priv->slave_port = fdtdec_get_int(fdt, slave, "slave-port", -1);
|
||||
priv->net_rx_buffs.rx_flow = priv->slave_port * 8;
|
||||
|
@ -700,7 +706,9 @@ static int ks2_eth_parse_slave_interface(int netcp, int slave,
|
|||
priv->link_type = fdtdec_get_int(fdt, slave, "link-interface", -1);
|
||||
|
||||
phy = fdtdec_lookup_phandle(fdt, slave, "phy-handle");
|
||||
|
||||
if (phy >= 0) {
|
||||
priv->phy_of_handle = phy;
|
||||
priv->phy_addr = fdtdec_get_int(fdt, phy, "reg", -1);
|
||||
|
||||
mdio = fdt_parent_offset(fdt, phy);
|
||||
|
@ -717,7 +725,19 @@ static int ks2_eth_parse_slave_interface(int netcp, int slave,
|
|||
priv->sgmii_link_type = SGMII_LINK_MAC_PHY;
|
||||
priv->has_mdio = true;
|
||||
} else if (priv->link_type == LINK_TYPE_RGMII_LINK_MAC_PHY) {
|
||||
priv->phy_if = PHY_INTERFACE_MODE_RGMII;
|
||||
phy_mode = fdt_getprop(fdt, slave, "phy-mode", NULL);
|
||||
if (phy_mode) {
|
||||
priv->phy_if = phy_get_interface_by_name(phy_mode);
|
||||
if (priv->phy_if != PHY_INTERFACE_MODE_RGMII &&
|
||||
priv->phy_if != PHY_INTERFACE_MODE_RGMII_ID &&
|
||||
priv->phy_if != PHY_INTERFACE_MODE_RGMII_RXID &&
|
||||
priv->phy_if != PHY_INTERFACE_MODE_RGMII_TXID) {
|
||||
pr_err("invalid phy-mode\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
} else {
|
||||
priv->phy_if = PHY_INTERFACE_MODE_RGMII;
|
||||
}
|
||||
pdata->phy_interface = priv->phy_if;
|
||||
priv->has_mdio = true;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue