Currently ldpaa ethernet driver rely on DPL file to statically configure mac address for the DPNIs. It is not a correct approach.
Add support of reading MAC address for env variable and configure same in DPAA driver. Signed-off-by: Prabhakar Kushwaha <prabha...@freescale.com> --- drivers/net/ldpaa_eth/ldpaa_eth.c | 48 +++++++++++++++++++++++++++------------ 1 file changed, 34 insertions(+), 14 deletions(-) diff --git a/drivers/net/ldpaa_eth/ldpaa_eth.c b/drivers/net/ldpaa_eth/ldpaa_eth.c index 4ed1805..1b4094a 100644 --- a/drivers/net/ldpaa_eth/ldpaa_eth.c +++ b/drivers/net/ldpaa_eth/ldpaa_eth.c @@ -23,6 +23,38 @@ static int init_phy(struct eth_device *dev) return 0; } +static int ldpaa_set_mac_from_env(struct eth_device *net_dev) +{ + struct ldpaa_eth_priv *priv = (struct ldpaa_eth_priv *)net_dev->priv; + uint8_t mac_addr[6]; + char ethaddr[15] = "eth"; + int err; + + if (priv->dpni_id == 1) + strcat(ethaddr, "addr"); + else + sprintf(ethaddr, "eth%daddr", priv->dpni_id - 1); + + err = eth_getenv_enetaddr(ethaddr, mac_addr); + + if (err) { + err = dpni_add_mac_addr(dflt_mc_io, MC_CMD_NO_FLAGS, + priv->dpni_handle, mac_addr); + if (err) { + printf("dpni_add_mac_addr() failed\n"); + return err; + } + + memcpy(net_dev->enetaddr, mac_addr, 0x6); + err = 0; + } else { + printf("%s: MAC address is not set\n", ethaddr); + err = 1; + } + + return err; +} + static void ldpaa_eth_rx(struct ldpaa_eth_priv *priv, const struct dpaa_fd *fd) { @@ -216,7 +248,6 @@ static int ldpaa_eth_open(struct eth_device *net_dev, bd_t *bd) { struct ldpaa_eth_priv *priv = (struct ldpaa_eth_priv *)net_dev->priv; struct dpni_queue_attr rx_queue_attr; - uint8_t mac_addr[6]; int err; if (net_dev->state == ETH_STATE_ACTIVE) @@ -236,20 +267,9 @@ static int ldpaa_eth_open(struct eth_device *net_dev, bd_t *bd) if (err) goto err_bind; - err = dpni_get_primary_mac_addr(dflt_mc_io, MC_CMD_NO_FLAGS, - priv->dpni_handle, mac_addr); - if (err) { - printf("dpni_get_primary_mac_addr() failed\n"); + err = ldpaa_set_mac_from_env(net_dev); + if (err) return err; - } - - memcpy(net_dev->enetaddr, mac_addr, 0x6); - - /* setup the MAC address */ - if (net_dev->enetaddr[0] & 0x01) { - printf("%s: MacAddress is multcast address\n", __func__); - return 1; - } #ifdef CONFIG_PHYLIB /* TODO Check this path */ -- 1.9.1 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot