aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/broadcom
diff options
context:
space:
mode:
authorVasundhara Volam <vasundhara-v.volam@broadcom.com>2018-12-16 18:46:21 -0500
committerDavid S. Miller <davem@davemloft.net>2018-12-18 02:08:53 -0500
commitc027c6b4e91f21dfa4feab91e2155c8403f49f5c (patch)
tree7e9eb27bce322cbd6a40836ba6a0ff70cec489e4 /drivers/net/ethernet/broadcom
parente916b0815a11c6cbc82f2d8510982ea022628880 (diff)
bnxt_en: get rid of num_stat_ctxs variable
For bnxt_en driver, stat_ctxs created will always be same as cp_nr_rings. Remove extra variable that duplicates the value. Also introduce bnxt_get_avail_stat_ctxs_for_en() helper to get available stat_ctxs and bnxt_get_ulp_stat_ctxs() helper to return number of stat_ctxs used by RDMA. Signed-off-by: Vasundhara Volam <vasundhara-v.volam@broadcom.com> Signed-off-by: Michael Chan <michael.chan@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/broadcom')
-rw-r--r--drivers/net/ethernet/broadcom/bnxt/bnxt.c14
-rw-r--r--drivers/net/ethernet/broadcom/bnxt/bnxt.h3
-rw-r--r--drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c2
-rw-r--r--drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c10
-rw-r--r--drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c10
-rw-r--r--drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.h1
-rw-r--r--drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c1
7 files changed, 25 insertions, 16 deletions
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
index bf228cf10bb3..8d6c811b5428 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
@@ -7081,6 +7081,15 @@ unsigned int bnxt_get_avail_cp_rings_for_en(struct bnxt *bp)
7081 return cp - bp->cp_nr_rings; 7081 return cp - bp->cp_nr_rings;
7082} 7082}
7083 7083
7084unsigned int bnxt_get_avail_stat_ctxs_for_en(struct bnxt *bp)
7085{
7086 unsigned int stat;
7087
7088 stat = bnxt_get_max_func_stat_ctxs(bp) - bnxt_get_ulp_stat_ctxs(bp);
7089 stat -= bp->cp_nr_rings;
7090 return stat;
7091}
7092
7084int bnxt_get_avail_msix(struct bnxt *bp, int num) 7093int bnxt_get_avail_msix(struct bnxt *bp, int num)
7085{ 7094{
7086 int max_cp = bnxt_get_max_func_cp_rings(bp); 7095 int max_cp = bnxt_get_max_func_cp_rings(bp);
@@ -7242,7 +7251,6 @@ int bnxt_reserve_rings(struct bnxt *bp)
7242 bp->tx_nr_rings_per_tc = bp->tx_nr_rings; 7251 bp->tx_nr_rings_per_tc = bp->tx_nr_rings;
7243 return -ENOMEM; 7252 return -ENOMEM;
7244 } 7253 }
7245 bp->num_stat_ctxs = bp->cp_nr_rings;
7246 return 0; 7254 return 0;
7247} 7255}
7248 7256
@@ -9309,7 +9317,6 @@ int bnxt_setup_mq_tc(struct net_device *dev, u8 tc)
9309 bp->tx_nr_rings += bp->tx_nr_rings_xdp; 9317 bp->tx_nr_rings += bp->tx_nr_rings_xdp;
9310 bp->cp_nr_rings = sh ? max_t(int, bp->tx_nr_rings, bp->rx_nr_rings) : 9318 bp->cp_nr_rings = sh ? max_t(int, bp->tx_nr_rings, bp->rx_nr_rings) :
9311 bp->tx_nr_rings + bp->rx_nr_rings; 9319 bp->tx_nr_rings + bp->rx_nr_rings;
9312 bp->num_stat_ctxs = bp->cp_nr_rings;
9313 9320
9314 if (netif_running(bp->dev)) 9321 if (netif_running(bp->dev))
9315 return bnxt_open_nic(bp, true, false); 9322 return bnxt_open_nic(bp, true, false);
@@ -9849,7 +9856,7 @@ static void _bnxt_get_max_rings(struct bnxt *bp, int *max_rx, int *max_tx,
9849 *max_cp = bnxt_get_max_func_cp_rings_for_en(bp); 9856 *max_cp = bnxt_get_max_func_cp_rings_for_en(bp);
9850 max_irq = min_t(int, bnxt_get_max_func_irqs(bp) - 9857 max_irq = min_t(int, bnxt_get_max_func_irqs(bp) -
9851 bnxt_get_ulp_msix_num(bp), 9858 bnxt_get_ulp_msix_num(bp),
9852 bnxt_get_max_func_stat_ctxs(bp)); 9859 hw_resc->max_stat_ctxs - bnxt_get_ulp_stat_ctxs(bp));
9853 if (!(bp->flags & BNXT_FLAG_CHIP_P5)) 9860 if (!(bp->flags & BNXT_FLAG_CHIP_P5))
9854 *max_cp = min_t(int, *max_cp, max_irq); 9861 *max_cp = min_t(int, *max_cp, max_irq);
9855 max_ring_grps = hw_resc->max_hw_ring_grps; 9862 max_ring_grps = hw_resc->max_hw_ring_grps;
@@ -9980,7 +9987,6 @@ static int bnxt_set_dflt_rings(struct bnxt *bp, bool sh)
9980 netdev_warn(bp->dev, "2nd rings reservation failed.\n"); 9987 netdev_warn(bp->dev, "2nd rings reservation failed.\n");
9981 bp->tx_nr_rings_per_tc = bp->tx_nr_rings; 9988 bp->tx_nr_rings_per_tc = bp->tx_nr_rings;
9982 } 9989 }
9983 bp->num_stat_ctxs = bp->cp_nr_rings;
9984 if (BNXT_CHIP_TYPE_NITRO_A0(bp)) { 9990 if (BNXT_CHIP_TYPE_NITRO_A0(bp)) {
9985 bp->rx_nr_rings++; 9991 bp->rx_nr_rings++;
9986 bp->cp_nr_rings++; 9992 bp->cp_nr_rings++;
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.h b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
index adce7fb37148..df9a80973258 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.h
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
@@ -1417,8 +1417,6 @@ struct bnxt {
1417 int cp_nr_pages; 1417 int cp_nr_pages;
1418 int cp_nr_rings; 1418 int cp_nr_rings;
1419 1419
1420 int num_stat_ctxs;
1421
1422 /* grp_info indexed by completion ring index */ 1420 /* grp_info indexed by completion ring index */
1423 struct bnxt_ring_grp_info *grp_info; 1421 struct bnxt_ring_grp_info *grp_info;
1424 struct bnxt_vnic_info *vnic_info; 1422 struct bnxt_vnic_info *vnic_info;
@@ -1690,6 +1688,7 @@ int __bnxt_hwrm_get_tx_rings(struct bnxt *bp, u16 fid, int *tx_rings);
1690int bnxt_hwrm_set_coal(struct bnxt *); 1688int bnxt_hwrm_set_coal(struct bnxt *);
1691unsigned int bnxt_get_max_func_stat_ctxs(struct bnxt *bp); 1689unsigned int bnxt_get_max_func_stat_ctxs(struct bnxt *bp);
1692void bnxt_set_max_func_stat_ctxs(struct bnxt *bp, unsigned int max); 1690void bnxt_set_max_func_stat_ctxs(struct bnxt *bp, unsigned int max);
1691unsigned int bnxt_get_avail_stat_ctxs_for_en(struct bnxt *bp);
1693unsigned int bnxt_get_max_func_cp_rings(struct bnxt *bp); 1692unsigned int bnxt_get_max_func_cp_rings(struct bnxt *bp);
1694unsigned int bnxt_get_avail_cp_rings_for_en(struct bnxt *bp); 1693unsigned int bnxt_get_avail_cp_rings_for_en(struct bnxt *bp);
1695int bnxt_get_avail_msix(struct bnxt *bp, int num); 1694int bnxt_get_avail_msix(struct bnxt *bp, int num);
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
index 6cc69a58478a..5a746aed7f3c 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
@@ -663,8 +663,6 @@ static int bnxt_set_channels(struct net_device *dev,
663 bp->cp_nr_rings = sh ? max_t(int, bp->tx_nr_rings, bp->rx_nr_rings) : 663 bp->cp_nr_rings = sh ? max_t(int, bp->tx_nr_rings, bp->rx_nr_rings) :
664 bp->tx_nr_rings + bp->rx_nr_rings; 664 bp->tx_nr_rings + bp->rx_nr_rings;
665 665
666 bp->num_stat_ctxs = bp->cp_nr_rings;
667
668 /* After changing number of rx channels, update NTUPLE feature. */ 666 /* After changing number of rx channels, update NTUPLE feature. */
669 netdev_update_features(dev); 667 netdev_update_features(dev);
670 if (netif_running(dev)) { 668 if (netif_running(dev)) {
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c
index 5a09f03b23e1..e7fdcb289072 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c
@@ -452,7 +452,7 @@ static int bnxt_hwrm_func_vf_resc_cfg(struct bnxt *bp, int num_vfs)
452 bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_FUNC_VF_RESOURCE_CFG, -1, -1); 452 bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_FUNC_VF_RESOURCE_CFG, -1, -1);
453 453
454 vf_cp_rings = bnxt_get_avail_cp_rings_for_en(bp); 454 vf_cp_rings = bnxt_get_avail_cp_rings_for_en(bp);
455 vf_stat_ctx = hw_resc->max_stat_ctxs - bp->num_stat_ctxs; 455 vf_stat_ctx = bnxt_get_avail_stat_ctxs_for_en(bp);
456 if (bp->flags & BNXT_FLAG_AGG_RINGS) 456 if (bp->flags & BNXT_FLAG_AGG_RINGS)
457 vf_rx_rings = hw_resc->max_rx_rings - bp->rx_nr_rings * 2; 457 vf_rx_rings = hw_resc->max_rx_rings - bp->rx_nr_rings * 2;
458 else 458 else
@@ -539,18 +539,16 @@ static int bnxt_hwrm_func_cfg(struct bnxt *bp, int num_vfs)
539 u32 rc = 0, mtu, i; 539 u32 rc = 0, mtu, i;
540 u16 vf_tx_rings, vf_rx_rings, vf_cp_rings, vf_stat_ctx, vf_vnics; 540 u16 vf_tx_rings, vf_rx_rings, vf_cp_rings, vf_stat_ctx, vf_vnics;
541 struct bnxt_hw_resc *hw_resc = &bp->hw_resc; 541 struct bnxt_hw_resc *hw_resc = &bp->hw_resc;
542 u16 vf_ring_grps, max_stat_ctxs;
543 struct hwrm_func_cfg_input req = {0}; 542 struct hwrm_func_cfg_input req = {0};
544 struct bnxt_pf_info *pf = &bp->pf; 543 struct bnxt_pf_info *pf = &bp->pf;
545 int total_vf_tx_rings = 0; 544 int total_vf_tx_rings = 0;
545 u16 vf_ring_grps;
546 546
547 bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_FUNC_CFG, -1, -1); 547 bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_FUNC_CFG, -1, -1);
548 548
549 max_stat_ctxs = hw_resc->max_stat_ctxs;
550
551 /* Remaining rings are distributed equally amongs VF's for now */ 549 /* Remaining rings are distributed equally amongs VF's for now */
552 vf_cp_rings = bnxt_get_avail_cp_rings_for_en(bp) / num_vfs; 550 vf_cp_rings = bnxt_get_avail_cp_rings_for_en(bp) / num_vfs;
553 vf_stat_ctx = (max_stat_ctxs - bp->num_stat_ctxs) / num_vfs; 551 vf_stat_ctx = bnxt_get_avail_stat_ctxs_for_en(bp) / num_vfs;
554 if (bp->flags & BNXT_FLAG_AGG_RINGS) 552 if (bp->flags & BNXT_FLAG_AGG_RINGS)
555 vf_rx_rings = (hw_resc->max_rx_rings - bp->rx_nr_rings * 2) / 553 vf_rx_rings = (hw_resc->max_rx_rings - bp->rx_nr_rings * 2) /
556 num_vfs; 554 num_vfs;
@@ -644,7 +642,7 @@ static int bnxt_sriov_enable(struct bnxt *bp, int *num_vfs)
644 vfs_supported = *num_vfs; 642 vfs_supported = *num_vfs;
645 643
646 avail_cp = bnxt_get_avail_cp_rings_for_en(bp); 644 avail_cp = bnxt_get_avail_cp_rings_for_en(bp);
647 avail_stat = hw_resc->max_stat_ctxs - bp->num_stat_ctxs; 645 avail_stat = bnxt_get_avail_stat_ctxs_for_en(bp);
648 avail_cp = min_t(int, avail_cp, avail_stat); 646 avail_cp = min_t(int, avail_cp, avail_stat);
649 647
650 while (vfs_supported) { 648 while (vfs_supported) {
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c
index 0a3097baafde..8ef71a001ebc 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c
@@ -48,7 +48,7 @@ static int bnxt_register_dev(struct bnxt_en_dev *edev, int ulp_id,
48 48
49 max_stat_ctxs = bnxt_get_max_func_stat_ctxs(bp); 49 max_stat_ctxs = bnxt_get_max_func_stat_ctxs(bp);
50 if (max_stat_ctxs <= BNXT_MIN_ROCE_STAT_CTXS || 50 if (max_stat_ctxs <= BNXT_MIN_ROCE_STAT_CTXS ||
51 bp->num_stat_ctxs == max_stat_ctxs) 51 bp->cp_nr_rings == max_stat_ctxs)
52 return -ENOMEM; 52 return -ENOMEM;
53 bnxt_set_max_func_stat_ctxs(bp, max_stat_ctxs - 53 bnxt_set_max_func_stat_ctxs(bp, max_stat_ctxs -
54 BNXT_MIN_ROCE_STAT_CTXS); 54 BNXT_MIN_ROCE_STAT_CTXS);
@@ -218,6 +218,14 @@ int bnxt_get_ulp_msix_base(struct bnxt *bp)
218 return 0; 218 return 0;
219} 219}
220 220
221int bnxt_get_ulp_stat_ctxs(struct bnxt *bp)
222{
223 if (bnxt_ulp_registered(bp->edev, BNXT_ROCE_ULP))
224 return BNXT_MIN_ROCE_STAT_CTXS;
225
226 return 0;
227}
228
221static int bnxt_send_msg(struct bnxt_en_dev *edev, int ulp_id, 229static int bnxt_send_msg(struct bnxt_en_dev *edev, int ulp_id,
222 struct bnxt_fw_msg *fw_msg) 230 struct bnxt_fw_msg *fw_msg)
223{ 231{
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.h b/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.h
index d9bea37cd211..cd78453d0bf0 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.h
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.h
@@ -90,6 +90,7 @@ static inline bool bnxt_ulp_registered(struct bnxt_en_dev *edev, int ulp_id)
90 90
91int bnxt_get_ulp_msix_num(struct bnxt *bp); 91int bnxt_get_ulp_msix_num(struct bnxt *bp);
92int bnxt_get_ulp_msix_base(struct bnxt *bp); 92int bnxt_get_ulp_msix_base(struct bnxt *bp);
93int bnxt_get_ulp_stat_ctxs(struct bnxt *bp);
93void bnxt_ulp_stop(struct bnxt *bp); 94void bnxt_ulp_stop(struct bnxt *bp);
94void bnxt_ulp_start(struct bnxt *bp); 95void bnxt_ulp_start(struct bnxt *bp);
95void bnxt_ulp_sriov_cfg(struct bnxt *bp, int num_vfs); 96void bnxt_ulp_sriov_cfg(struct bnxt *bp, int num_vfs);
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c
index bf6de02be396..0184ef6f05a7 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c
@@ -199,7 +199,6 @@ static int bnxt_xdp_set(struct bnxt *bp, struct bpf_prog *prog)
199 bp->tx_nr_rings_xdp = tx_xdp; 199 bp->tx_nr_rings_xdp = tx_xdp;
200 bp->tx_nr_rings = bp->tx_nr_rings_per_tc * tc + tx_xdp; 200 bp->tx_nr_rings = bp->tx_nr_rings_per_tc * tc + tx_xdp;
201 bp->cp_nr_rings = max_t(int, bp->tx_nr_rings, bp->rx_nr_rings); 201 bp->cp_nr_rings = max_t(int, bp->tx_nr_rings, bp->rx_nr_rings);
202 bp->num_stat_ctxs = bp->cp_nr_rings;
203 bnxt_set_tpa_flags(bp); 202 bnxt_set_tpa_flags(bp);
204 bnxt_set_ring_params(bp); 203 bnxt_set_ring_params(bp);
205 204