Use rte_eth_random_addr() instead of manual rte_rand() based MAC generation. Also handle VF path by writing to ENETC_SIPMAR0/1 instead of ENETC_PSIPMAR0/1 when running as a VF.
Signed-off-by: Gagandeep Singh <[email protected]> --- drivers/net/enetc/enetc_ethdev.c | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/drivers/net/enetc/enetc_ethdev.c b/drivers/net/enetc/enetc_ethdev.c index 407179f..427da87 100644 --- a/drivers/net/enetc/enetc_ethdev.c +++ b/drivers/net/enetc/enetc_ethdev.c @@ -196,20 +196,18 @@ enetc_hardware_init(struct enetc_eth_hw *hw) } if ((high_mac | low_mac) == 0) { - char *first_byte; - ENETC_PMD_NOTICE("MAC is not available for this SI, " "set random MAC"); - mac = (uint32_t *)hw->mac.addr; - *mac = (uint32_t)rte_rand(); - first_byte = (char *)mac; - *first_byte &= 0xfe; /* clear multicast bit */ - *first_byte |= 0x02; /* set local assignment bit (IEEE802) */ - - enetc_port_wr(enetc_hw, ENETC_PSIPMAR0(0), *mac); - mac++; - *mac = (uint16_t)rte_rand(); - enetc_port_wr(enetc_hw, ENETC_PSIPMAR1(0), *mac); + rte_eth_random_addr(hw->mac.addr); + high_mac = *(uint32_t *)hw->mac.addr; + low_mac = *(uint16_t *)(hw->mac.addr + 4); + if (hw->device_id == ENETC_DEV_ID_VF) { + enetc_wr(enetc_hw, ENETC_SIPMAR0, high_mac); + enetc_wr(enetc_hw, ENETC_SIPMAR1, low_mac); + } else { + enetc_port_wr(enetc_hw, ENETC_PSIPMAR0(0), high_mac); + enetc_port_wr(enetc_hw, ENETC_PSIPMAR1(0), low_mac); + } enetc_print_ethaddr("New address: ", (const struct rte_ether_addr *)hw->mac.addr); } -- 2.25.1

