net/qede/base: add DPC sync after PF stop
[dpdk.git] / drivers / net / qede / base / ecore_dcbx.c
index 201b7d5..9667874 100644 (file)
@@ -1,9 +1,7 @@
-/*
- * Copyright (c) 2016 QLogic Corporation.
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright (c) 2016 - 2018 Cavium Inc.
  * All rights reserved.
- * www.qlogic.com
- *
- * See LICENSE.qede_pmd for copyright and licensing details.
+ * www.cavium.com
  */
 
 #include "bcm_osal.h"
@@ -149,6 +147,10 @@ ecore_dcbx_set_params(struct ecore_dcbx_results *p_data,
        }
        p_data->arr[type].update = UPDATE_DCB_DSCP;
 
+       /* Do not add valn tag 0 when DCB is enabled and port is in UFP mode */
+       if (OSAL_TEST_BIT(ECORE_MF_UFP_SPECIFIC, &p_hwfn->p_dev->mf_bits))
+               p_data->arr[type].dont_add_vlan0 = true;
+
        /* QM reconf data */
        if (p_hwfn->hw_info.personality == personality)
                p_hwfn->hw_info.offload_tc = tc;
@@ -163,7 +165,6 @@ ecore_dcbx_update_app_info(struct ecore_dcbx_results *p_data,
 {
        enum ecore_pci_personality personality;
        enum dcbx_protocol_type id;
-       const char *name;       /* @DPDK */
        int i;
 
        for (i = 0; i < OSAL_ARRAY_SIZE(ecore_dcbx_app_update); i++) {
@@ -173,7 +174,6 @@ ecore_dcbx_update_app_info(struct ecore_dcbx_results *p_data,
                        continue;
 
                personality = ecore_dcbx_app_update[i].personality;
-               name = ecore_dcbx_app_update[i].name;
 
                ecore_dcbx_set_params(p_data, p_hwfn, enable,
                                      prio, tc, type, personality);
@@ -218,17 +218,16 @@ ecore_dcbx_get_app_protocol_type(struct ecore_hwfn *p_hwfn,
                *type = DCBX_PROTOCOL_ETH;
        } else {
                *type = DCBX_MAX_PROTOCOL_TYPE;
-               DP_ERR(p_hwfn,
-                      "No action required, App TLV id = 0x%x"
-                      " app_prio_bitmap = 0x%x\n",
-                      id, app_prio_bitmap);
+               DP_VERBOSE(p_hwfn, ECORE_MSG_DCB,
+                           "No action required, App TLV entry = 0x%x\n",
+                          app_prio_bitmap);
                return false;
        }
 
        return true;
 }
 
-/*  Parse app TLV's to update TC information in hw_info structure for
+/* Parse app TLV's to update TC information in hw_info structure for
  * reconfiguring QM. Get protocol specific data for PF update ramrod command.
  */
 static enum _ecore_status_t
@@ -318,14 +317,14 @@ static enum _ecore_status_t
 ecore_dcbx_process_mib_info(struct ecore_hwfn *p_hwfn)
 {
        struct dcbx_app_priority_feature *p_app;
-       enum _ecore_status_t rc = ECORE_SUCCESS;
-       struct ecore_dcbx_results data = { 0 };
        struct dcbx_app_priority_entry *p_tbl;
+       struct ecore_dcbx_results data = { 0 };
        struct dcbx_ets_feature *p_ets;
        struct ecore_hw_info *p_info;
        u32 pri_tc_tbl, flags;
        u8 dcbx_version;
        int num_entries;
+       enum _ecore_status_t rc = ECORE_SUCCESS;
 
        flags = p_hwfn->p_dcbx_info->operational.flags;
        dcbx_version = GET_MFW_FIELD(flags, DCBX_CONFIG_VERSION);
@@ -363,9 +362,9 @@ ecore_dcbx_copy_mib(struct ecore_hwfn *p_hwfn,
                    struct ecore_dcbx_mib_meta_data *p_data,
                    enum ecore_mib_read_type type)
 {
-       enum _ecore_status_t rc = ECORE_SUCCESS;
        u32 prefix_seq_num, suffix_seq_num;
        int read_count = 0;
+       enum _ecore_status_t rc = ECORE_SUCCESS;
 
        /* The data is considered to be valid only if both sequence numbers are
         * the same.
@@ -859,7 +858,7 @@ static enum _ecore_status_t ecore_dcbx_read_mib(struct ecore_hwfn *p_hwfn,
                DP_ERR(p_hwfn, "MIB read err, unknown mib type %d\n", type);
        }
 
-       return rc;
+       return ECORE_SUCCESS;
 }
 
 /*
@@ -882,8 +881,6 @@ ecore_dcbx_mib_update_event(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt,
 
                rc = ecore_dcbx_process_mib_info(p_hwfn);
                if (!rc) {
-                       bool enabled;
-
                        /* reconfigure tcs of QM queues according
                         * to negotiation results
                         */
@@ -891,11 +888,6 @@ ecore_dcbx_mib_update_event(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt,
 
                        /* update storm FW with negotiation results */
                        ecore_sp_pf_update_dcbx(p_hwfn);
-
-                       /* set eagle enigne 1 flow control workaround
-                        * according to negotiation results
-                        */
-                       enabled = p_hwfn->p_dcbx_info->results.dcbx_enabled;
                }
        }
 
@@ -920,7 +912,7 @@ enum _ecore_status_t ecore_dcbx_info_alloc(struct ecore_hwfn *p_hwfn)
        p_hwfn->p_dcbx_info = OSAL_ZALLOC(p_hwfn->p_dev, GFP_KERNEL,
                                          sizeof(*p_hwfn->p_dcbx_info));
        if (!p_hwfn->p_dcbx_info) {
-               DP_NOTICE(p_hwfn, true,
+               DP_NOTICE(p_hwfn, false,
                          "Failed to allocate `struct ecore_dcbx_info'");
                return ECORE_NOMEM;
        }
@@ -945,6 +937,7 @@ static void ecore_dcbx_update_protocol_data(struct protocol_dcb_data *p_data,
        p_data->dcb_tc = p_src->arr[type].tc;
        p_data->dscp_enable_flag = p_src->arr[type].dscp_enable;
        p_data->dscp_val = p_src->arr[type].dscp_val;
+       p_data->dcb_dont_add_vlan0 = p_src->arr[type].dont_add_vlan0;
 }
 
 /* Set pf update ramrod command params */
@@ -1164,6 +1157,9 @@ ecore_dcbx_set_local_params(struct ecore_hwfn *p_hwfn,
                local_admin->config = DCBX_CONFIG_VERSION_DISABLED;
        }
 
+       DP_VERBOSE(p_hwfn, ECORE_MSG_DCB, "Dcbx version = %d\n",
+                  local_admin->config);
+
        if (params->override_flags & ECORE_DCBX_OVERRIDE_PFC_CFG)
                ecore_dcbx_set_pfc_data(p_hwfn, &local_admin->features.pfc,
                                        &params->config.params);