From: Jeffrey Huang <huan...@broadcom.com>

Allow the VF to setup its own MAC address if the PF has not administratively
set it for the VF.  If the perm_mac_address returned by firmware is all
zeros, that means the PF has not set up the MAC address for the VF and
we should store it.  This will allow the VF to change the MAC address using
ndo_set_mac_address() when it sees that the stored permanent MAC address
is all zeros.

Signed-off-by: Jeffrey Huang <huan...@broadcom.com>
Signed-off-by: Michael Chan <michael.c...@broadcom.com>
---
 drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c 
b/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c
index c1cc83d..bb2b376 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c
@@ -809,13 +809,12 @@ void bnxt_update_vf_mac(struct bnxt *bp)
        if (_hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT))
                goto update_vf_mac_exit;
 
-       if (!is_valid_ether_addr(resp->perm_mac_address))
-               goto update_vf_mac_exit;
-
        if (!ether_addr_equal(resp->perm_mac_address, bp->vf.mac_addr))
                memcpy(bp->vf.mac_addr, resp->perm_mac_address, ETH_ALEN);
-       /* overwrite netdev dev_adr with admin VF MAC */
-       memcpy(bp->dev->dev_addr, bp->vf.mac_addr, ETH_ALEN);
+
+       /* overwrite netdev dev_addr with admin VF MAC */
+       if (is_valid_ether_addr(bp->vf.mac_addr))
+               memcpy(bp->dev->dev_addr, bp->vf.mac_addr, ETH_ALEN);
 update_vf_mac_exit:
        mutex_unlock(&bp->hwrm_cmd_lock);
 }
-- 
1.8.3.1

Reply via email to