mirror of
https://xff.cz/git/u-boot/
synced 2025-09-07 19:52:15 +02:00
net: dsa: refactor the code to set the port MAC address into a dedicated function
This snippet of code has a bothering "if (...) return 0" in it which assumes it is the last piece of code running in dsa_port_probe(). This makes it difficult to add further code at the end of dsa_port_probe() which does not depend on MAC address stuff. So move the code to a dedicated function which returns void and let the code flow through. Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com> Reviewed-by: Ramon Fried <rfried.dev@gmail.com> Tested-by: Michael Walle <michael@walle.cc>
This commit is contained in:
committed by
Ramon Fried
parent
f4b712b840
commit
5eee5ab916
@@ -240,11 +240,36 @@ static const struct eth_ops dsa_port_ops = {
|
|||||||
.free_pkt = dsa_port_free_pkt,
|
.free_pkt = dsa_port_free_pkt,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Inherit port's hwaddr from the DSA master, unless the port already has a
|
||||||
|
* unique MAC address specified in the environment.
|
||||||
|
*/
|
||||||
|
static void dsa_port_set_hwaddr(struct udevice *pdev, struct udevice *master)
|
||||||
|
{
|
||||||
|
struct eth_pdata *eth_pdata, *master_pdata;
|
||||||
|
unsigned char env_enetaddr[ARP_HLEN];
|
||||||
|
|
||||||
|
eth_env_get_enetaddr_by_index("eth", dev_seq(pdev), env_enetaddr);
|
||||||
|
if (!is_zero_ethaddr(env_enetaddr)) {
|
||||||
|
/* individual port mac addrs require master to be promisc */
|
||||||
|
struct eth_ops *eth_ops = eth_get_ops(master);
|
||||||
|
|
||||||
|
if (eth_ops->set_promisc)
|
||||||
|
eth_ops->set_promisc(master, 1);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
master_pdata = dev_get_plat(master);
|
||||||
|
eth_pdata = dev_get_plat(pdev);
|
||||||
|
memcpy(eth_pdata->enetaddr, master_pdata->enetaddr, ARP_HLEN);
|
||||||
|
eth_env_set_enetaddr_by_index("eth", dev_seq(pdev),
|
||||||
|
master_pdata->enetaddr);
|
||||||
|
}
|
||||||
|
|
||||||
static int dsa_port_probe(struct udevice *pdev)
|
static int dsa_port_probe(struct udevice *pdev)
|
||||||
{
|
{
|
||||||
struct udevice *dev = dev_get_parent(pdev);
|
struct udevice *dev = dev_get_parent(pdev);
|
||||||
struct eth_pdata *eth_pdata, *master_pdata;
|
|
||||||
unsigned char env_enetaddr[ARP_HLEN];
|
|
||||||
struct dsa_port_pdata *port_pdata;
|
struct dsa_port_pdata *port_pdata;
|
||||||
struct dsa_priv *dsa_priv;
|
struct dsa_priv *dsa_priv;
|
||||||
struct udevice *master;
|
struct udevice *master;
|
||||||
@@ -272,26 +297,7 @@ static int dsa_port_probe(struct udevice *pdev)
|
|||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
/*
|
dsa_port_set_hwaddr(pdev, master);
|
||||||
* Inherit port's hwaddr from the DSA master, unless the port already
|
|
||||||
* has a unique MAC address specified in the environment.
|
|
||||||
*/
|
|
||||||
eth_env_get_enetaddr_by_index("eth", dev_seq(pdev), env_enetaddr);
|
|
||||||
if (!is_zero_ethaddr(env_enetaddr)) {
|
|
||||||
/* individual port mac addrs require master to be promisc */
|
|
||||||
struct eth_ops *eth_ops = eth_get_ops(master);
|
|
||||||
|
|
||||||
if (eth_ops->set_promisc)
|
|
||||||
eth_ops->set_promisc(master, 1);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
master_pdata = dev_get_plat(master);
|
|
||||||
eth_pdata = dev_get_plat(pdev);
|
|
||||||
memcpy(eth_pdata->enetaddr, master_pdata->enetaddr, ARP_HLEN);
|
|
||||||
eth_env_set_enetaddr_by_index("eth", dev_seq(pdev),
|
|
||||||
master_pdata->enetaddr);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user