]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
qed: Add abstraction for different hsi values per chip
authorMichal Kalderon <michal.kalderon@marvell.com>
Mon, 27 Jan 2020 13:26:13 +0000 (15:26 +0200)
committerDavid S. Miller <davem@davemloft.net>
Mon, 27 Jan 2020 13:35:32 +0000 (14:35 +0100)
The number of BTB blocks was modified to be different between the two chip
flavors supported (BB/K2) as a result, this lead to a re-write of selecting
the default hsi value based on the chip.
This patch creates a lookup table for hsi values per chip rather than
ask again and again for every value.

Signed-off-by: Ariel Elior <ariel.elior@marvell.com>
Signed-off-by: Michal Kalderon <michal.kalderon@marvell.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/qlogic/qed/qed.h
drivers/net/ethernet/qlogic/qed/qed_dev.c
include/linux/qed/common_hsi.h

index cfa45fb9a5a426b400678cce688a81a0f84d64e3..cfbfe7441ecb2e8a33e9a3708fe756b5a31b5408 100644 (file)
@@ -532,6 +532,23 @@ struct qed_nvm_image_info {
        bool valid;
 };
 
+enum qed_hsi_def_type {
+       QED_HSI_DEF_MAX_NUM_VFS,
+       QED_HSI_DEF_MAX_NUM_L2_QUEUES,
+       QED_HSI_DEF_MAX_NUM_PORTS,
+       QED_HSI_DEF_MAX_SB_PER_PATH,
+       QED_HSI_DEF_MAX_NUM_PFS,
+       QED_HSI_DEF_MAX_NUM_VPORTS,
+       QED_HSI_DEF_NUM_ETH_RSS_ENGINE,
+       QED_HSI_DEF_MAX_QM_TX_QUEUES,
+       QED_HSI_DEF_NUM_PXP_ILT_RECORDS,
+       QED_HSI_DEF_NUM_RDMA_STATISTIC_COUNTERS,
+       QED_HSI_DEF_MAX_QM_GLOBAL_RLS,
+       QED_HSI_DEF_MAX_PBF_CMD_LINES,
+       QED_HSI_DEF_MAX_BTB_BLOCKS,
+       QED_NUM_HSI_DEFS
+};
+
 #define DRV_MODULE_VERSION                   \
        __stringify(QED_MAJOR_VERSION) "."    \
        __stringify(QED_MINOR_VERSION) "."    \
@@ -869,16 +886,35 @@ struct qed_dev {
        bool                            iwarp_cmt;
 };
 
-#define NUM_OF_VFS(dev)         (QED_IS_BB(dev) ? MAX_NUM_VFS_BB \
-                                               : MAX_NUM_VFS_K2)
-#define NUM_OF_L2_QUEUES(dev)   (QED_IS_BB(dev) ? MAX_NUM_L2_QUEUES_BB \
-                                               : MAX_NUM_L2_QUEUES_K2)
-#define NUM_OF_PORTS(dev)       (QED_IS_BB(dev) ? MAX_NUM_PORTS_BB \
-                                               : MAX_NUM_PORTS_K2)
-#define NUM_OF_SBS(dev)         (QED_IS_BB(dev) ? MAX_SB_PER_PATH_BB \
-                                               : MAX_SB_PER_PATH_K2)
-#define NUM_OF_ENG_PFS(dev)     (QED_IS_BB(dev) ? MAX_NUM_PFS_BB \
-                                               : MAX_NUM_PFS_K2)
+u32 qed_get_hsi_def_val(struct qed_dev *cdev, enum qed_hsi_def_type type);
+
+#define NUM_OF_VFS(dev)        \
+       qed_get_hsi_def_val(dev, QED_HSI_DEF_MAX_NUM_VFS)
+#define NUM_OF_L2_QUEUES(dev) \
+       qed_get_hsi_def_val(dev, QED_HSI_DEF_MAX_NUM_L2_QUEUES)
+#define NUM_OF_PORTS(dev) \
+       qed_get_hsi_def_val(dev, QED_HSI_DEF_MAX_NUM_PORTS)
+#define NUM_OF_SBS(dev)        \
+       qed_get_hsi_def_val(dev, QED_HSI_DEF_MAX_SB_PER_PATH)
+#define NUM_OF_ENG_PFS(dev) \
+       qed_get_hsi_def_val(dev, QED_HSI_DEF_MAX_NUM_PFS)
+#define NUM_OF_VPORTS(dev) \
+       qed_get_hsi_def_val(dev, QED_HSI_DEF_MAX_NUM_VPORTS)
+#define NUM_OF_RSS_ENGINES(dev)        \
+       qed_get_hsi_def_val(dev, QED_HSI_DEF_NUM_ETH_RSS_ENGINE)
+#define NUM_OF_QM_TX_QUEUES(dev) \
+       qed_get_hsi_def_val(dev, QED_HSI_DEF_MAX_QM_TX_QUEUES)
+#define NUM_OF_PXP_ILT_RECORDS(dev) \
+       qed_get_hsi_def_val(dev, QED_HSI_DEF_NUM_PXP_ILT_RECORDS)
+#define NUM_OF_RDMA_STATISTIC_COUNTERS(dev) \
+       qed_get_hsi_def_val(dev, QED_HSI_DEF_NUM_RDMA_STATISTIC_COUNTERS)
+#define NUM_OF_QM_GLOBAL_RLS(dev) \
+       qed_get_hsi_def_val(dev, QED_HSI_DEF_MAX_QM_GLOBAL_RLS)
+#define NUM_OF_PBF_CMD_LINES(dev) \
+       qed_get_hsi_def_val(dev, QED_HSI_DEF_MAX_PBF_CMD_LINES)
+#define NUM_OF_BTB_BLOCKS(dev) \
+       qed_get_hsi_def_val(dev, QED_HSI_DEF_MAX_BTB_BLOCKS)
+
 
 /**
  * @brief qed_concrete_to_sw_fid - get the sw function id from
index 898c1f8d1530547ee553340972d89f563daeae22..e3e0376c13d68b1a050366be4737b789d11bb9d4 100644 (file)
@@ -1579,6 +1579,7 @@ static void qed_init_qm_port_params(struct qed_hwfn *p_hwfn)
 {
        /* Initialize qm port parameters */
        u8 i, active_phys_tcs, num_ports = p_hwfn->cdev->num_ports_in_engine;
+       struct qed_dev *cdev = p_hwfn->cdev;
 
        /* indicate how ooo and high pri traffic is dealt with */
        active_phys_tcs = num_ports == MAX_NUM_PORTS_K2 ?
@@ -1588,11 +1589,13 @@ static void qed_init_qm_port_params(struct qed_hwfn *p_hwfn)
        for (i = 0; i < num_ports; i++) {
                struct init_qm_port_params *p_qm_port =
                    &p_hwfn->qm_info.qm_port_params[i];
+               u16 pbf_max_cmd_lines;
 
                p_qm_port->active = 1;
                p_qm_port->active_phys_tcs = active_phys_tcs;
-               p_qm_port->num_pbf_cmd_lines = PBF_MAX_CMD_LINES / num_ports;
-               p_qm_port->num_btb_blocks = BTB_MAX_BLOCKS / num_ports;
+               pbf_max_cmd_lines = (u16)NUM_OF_PBF_CMD_LINES(cdev);
+               p_qm_port->num_pbf_cmd_lines = pbf_max_cmd_lines / num_ports;
+               p_qm_port->num_btb_blocks = NUM_OF_BTB_BLOCKS(cdev) / num_ports;
        }
 }
 
@@ -3607,14 +3610,39 @@ __qed_hw_set_soft_resc_size(struct qed_hwfn *p_hwfn,
        return 0;
 }
 
+static u32 qed_hsi_def_val[][MAX_CHIP_IDS] = {
+       {MAX_NUM_VFS_BB, MAX_NUM_VFS_K2},
+       {MAX_NUM_L2_QUEUES_BB, MAX_NUM_L2_QUEUES_K2},
+       {MAX_NUM_PORTS_BB, MAX_NUM_PORTS_K2},
+       {MAX_SB_PER_PATH_BB, MAX_SB_PER_PATH_K2,},
+       {MAX_NUM_PFS_BB, MAX_NUM_PFS_K2},
+       {MAX_NUM_VPORTS_BB, MAX_NUM_VPORTS_K2},
+       {ETH_RSS_ENGINE_NUM_BB, ETH_RSS_ENGINE_NUM_K2},
+       {MAX_QM_TX_QUEUES_BB, MAX_QM_TX_QUEUES_K2},
+       {PXP_NUM_ILT_RECORDS_BB, PXP_NUM_ILT_RECORDS_K2},
+       {RDMA_NUM_STATISTIC_COUNTERS_BB, RDMA_NUM_STATISTIC_COUNTERS_K2},
+       {MAX_QM_GLOBAL_RLS, MAX_QM_GLOBAL_RLS},
+       {PBF_MAX_CMD_LINES, PBF_MAX_CMD_LINES},
+       {BTB_MAX_BLOCKS_BB, BTB_MAX_BLOCKS_K2},
+};
+
+u32 qed_get_hsi_def_val(struct qed_dev *cdev, enum qed_hsi_def_type type)
+{
+       enum chip_ids chip_id = QED_IS_BB(cdev) ? CHIP_BB : CHIP_K2;
+
+       if (type >= QED_NUM_HSI_DEFS) {
+               DP_ERR(cdev, "Unexpected HSI definition type [%d]\n", type);
+               return 0;
+       }
+
+       return qed_hsi_def_val[type][chip_id];
+}
 static int
 qed_hw_set_soft_resc_size(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt)
 {
-       bool b_ah = QED_IS_AH(p_hwfn->cdev);
        u32 resc_max_val, mcp_resp;
        u8 res_id;
        int rc;
-
        for (res_id = 0; res_id < QED_MAX_RESC; res_id++) {
                switch (res_id) {
                case QED_LL2_RAM_QUEUE:
@@ -3630,8 +3658,8 @@ qed_hw_set_soft_resc_size(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt)
                        resc_max_val = NUM_OF_GLOBAL_QUEUES;
                        break;
                case QED_RDMA_STATS_QUEUE:
-                       resc_max_val = b_ah ? RDMA_NUM_STATISTIC_COUNTERS_K2
-                           : RDMA_NUM_STATISTIC_COUNTERS_BB;
+                       resc_max_val =
+                           NUM_OF_RDMA_STATISTIC_COUNTERS(p_hwfn->cdev);
                        break;
                case QED_BDQ:
                        resc_max_val = BDQ_NUM_RESOURCES;
@@ -3664,28 +3692,24 @@ int qed_hw_get_dflt_resc(struct qed_hwfn *p_hwfn,
                         u32 *p_resc_num, u32 *p_resc_start)
 {
        u8 num_funcs = p_hwfn->num_funcs_on_engine;
-       bool b_ah = QED_IS_AH(p_hwfn->cdev);
+       struct qed_dev *cdev = p_hwfn->cdev;
 
        switch (res_id) {
        case QED_L2_QUEUE:
-               *p_resc_num = (b_ah ? MAX_NUM_L2_QUEUES_K2 :
-                              MAX_NUM_L2_QUEUES_BB) / num_funcs;
+               *p_resc_num = NUM_OF_L2_QUEUES(cdev) / num_funcs;
                break;
        case QED_VPORT:
-               *p_resc_num = (b_ah ? MAX_NUM_VPORTS_K2 :
-                              MAX_NUM_VPORTS_BB) / num_funcs;
+               *p_resc_num = NUM_OF_VPORTS(cdev) / num_funcs;
                break;
        case QED_RSS_ENG:
-               *p_resc_num = (b_ah ? ETH_RSS_ENGINE_NUM_K2 :
-                              ETH_RSS_ENGINE_NUM_BB) / num_funcs;
+               *p_resc_num = NUM_OF_RSS_ENGINES(cdev) / num_funcs;
                break;
        case QED_PQ:
-               *p_resc_num = (b_ah ? MAX_QM_TX_QUEUES_K2 :
-                              MAX_QM_TX_QUEUES_BB) / num_funcs;
+               *p_resc_num = NUM_OF_QM_TX_QUEUES(cdev) / num_funcs;
                *p_resc_num &= ~0x7;    /* The granularity of the PQs is 8 */
                break;
        case QED_RL:
-               *p_resc_num = MAX_QM_GLOBAL_RLS / num_funcs;
+               *p_resc_num = NUM_OF_QM_GLOBAL_RLS(cdev) / num_funcs;
                break;
        case QED_MAC:
        case QED_VLAN:
@@ -3693,8 +3717,7 @@ int qed_hw_get_dflt_resc(struct qed_hwfn *p_hwfn,
                *p_resc_num = ETH_NUM_MAC_FILTERS / num_funcs;
                break;
        case QED_ILT:
-               *p_resc_num = (b_ah ? PXP_NUM_ILT_RECORDS_K2 :
-                              PXP_NUM_ILT_RECORDS_BB) / num_funcs;
+               *p_resc_num = NUM_OF_PXP_ILT_RECORDS(cdev) / num_funcs;
                break;
        case QED_LL2_RAM_QUEUE:
                *p_resc_num = MAX_NUM_LL2_RX_RAM_QUEUES / num_funcs;
@@ -3708,8 +3731,7 @@ int qed_hw_get_dflt_resc(struct qed_hwfn *p_hwfn,
                *p_resc_num = NUM_OF_GLOBAL_QUEUES / num_funcs;
                break;
        case QED_RDMA_STATS_QUEUE:
-               *p_resc_num = (b_ah ? RDMA_NUM_STATISTIC_COUNTERS_K2 :
-                              RDMA_NUM_STATISTIC_COUNTERS_BB) / num_funcs;
+               *p_resc_num = NUM_OF_RDMA_STATISTIC_COUNTERS(cdev) / num_funcs;
                break;
        case QED_BDQ:
                if (p_hwfn->hw_info.personality != QED_PCI_ISCSI &&
index a2b7826b36f0259a51f2837c59b1875fe26789ff..718ce72e596577c52034d698a7ef69d1d776f205 100644 (file)
 #define PBF_MAX_CMD_LINES      3328
 
 /* Number of BTB blocks. Each block is 256B. */
-#define BTB_MAX_BLOCKS         1440
-
+#define BTB_MAX_BLOCKS_BB 1440
+#define BTB_MAX_BLOCKS_K2 1840
 /*****************/
 /* PRS CONSTANTS */
 /*****************/