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

Reply via email to