net/qede: fix default MAC address handling
authorHarish Patil <harish.patil@cavium.com>
Tue, 25 Apr 2017 07:28:36 +0000 (00:28 -0700)
committerFerruh Yigit <ferruh.yigit@intel.com>
Fri, 28 Apr 2017 12:46:17 +0000 (14:46 +0200)
- In qede_mac_addr_set(), in order to configure default MAC address we
first delete the existing MAC address before trying to add new one. During
init time, there is no MAC filter to begin with, so trying to remove a
non-existing MAC address causes a firmware exception. This can be prevented
by internally calling qede_mac_addr_add() which has the checks in place to
delete a MAC address only if it was added before.

- Remove setting of the default MAC address from within
qede_dev_configure() since rte_eth_dev_start() calls mac_addr_set() anyway.

Fixes: 2ea6f76aff40 ("qede: add core driver")
Cc: stable@dpdk.org
Signed-off-by: Harish Patil <harish.patil@cavium.com>
drivers/net/qede/qede_ethdev.c

index fbad2a6..b31a7df 100644 (file)
@@ -551,8 +551,6 @@ qede_mac_addr_set(struct rte_eth_dev *eth_dev, struct ether_addr *mac_addr)
 {
        struct qede_dev *qdev = QEDE_INIT_QDEV(eth_dev);
        struct ecore_dev *edev = QEDE_INIT_EDEV(qdev);
-       struct ecore_filter_ucast ucast;
-       int rc;
 
        if (IS_VF(edev) && !ecore_vf_check_mac(ECORE_LEADING_HWFN(edev),
                                               mac_addr->addr_bytes)) {
@@ -562,29 +560,7 @@ qede_mac_addr_set(struct rte_eth_dev *eth_dev, struct ether_addr *mac_addr)
                return;
        }
 
-       /* First remove the primary mac */
-       qede_set_ucast_cmn_params(&ucast);
-       ucast.opcode = ECORE_FILTER_REMOVE;
-       ucast.type = ECORE_FILTER_MAC;
-       ether_addr_copy(&qdev->primary_mac,
-                       (struct ether_addr *)&ucast.mac);
-       rc = ecore_filter_ucast_cmd(edev, &ucast, ECORE_SPQ_MODE_CB, NULL);
-       if (rc != 0) {
-               DP_ERR(edev, "Unable to remove current macaddr"
-                            " Reverting to previous default mac\n");
-               ether_addr_copy(&qdev->primary_mac,
-                               &eth_dev->data->mac_addrs[0]);
-               return;
-       }
-
-       /* Add new MAC */
-       ucast.opcode = ECORE_FILTER_ADD;
-       ether_addr_copy(mac_addr, (struct ether_addr *)&ucast.mac);
-       rc = ecore_filter_ucast_cmd(edev, &ucast, ECORE_SPQ_MODE_CB, NULL);
-       if (rc != 0)
-               DP_ERR(edev, "Unable to add new default mac\n");
-       else
-               ether_addr_copy(mac_addr, &qdev->primary_mac);
+       qede_mac_addr_add(eth_dev, mac_addr, 0, 0);
 }
 
 static void qede_config_accept_any_vlan(struct qede_dev *qdev, bool action)
@@ -925,10 +901,6 @@ static int qede_dev_configure(struct rte_eth_dev *eth_dev)
 
        SLIST_INIT(&qdev->vlan_list_head);
 
-       /* Add primary mac for PF */
-       if (IS_PF(edev))
-               qede_mac_addr_set(eth_dev, &qdev->primary_mac);
-
        /* Enable VLAN offloads by default */
        qede_vlan_offload_set(eth_dev, ETH_VLAN_STRIP_MASK  |
                                       ETH_VLAN_FILTER_MASK |