aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Chan <michael.chan@broadcom.com>2018-01-17 03:21:07 -0500
committerDavid S. Miller <davem@davemloft.net>2018-01-17 14:48:26 -0500
commitbe0dd9c4100c9549fe50258e3d928072e6c31590 (patch)
tree648300eb97054251e7d61055761b5d5fc724d939
parent6a4f29470569c5a158c1871a2f752ca22e433420 (diff)
bnxt_en: Add the new firmware API to query hardware resources.
The new API HWRM_FUNC_RESOURCE_QCAPS provides min and max hardware resources. Use the new API when it is supported by firmware. Signed-off-by: Michael Chan <michael.chan@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/ethernet/broadcom/bnxt/bnxt.c56
-rw-r--r--drivers/net/ethernet/broadcom/bnxt/bnxt.h1
2 files changed, 56 insertions, 1 deletions
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
index dce4af94146b..f87e0bd14632 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
@@ -4791,7 +4791,46 @@ func_qcfg_exit:
4791 return rc; 4791 return rc;
4792} 4792}
4793 4793
4794static int bnxt_hwrm_func_qcaps(struct bnxt *bp) 4794static int bnxt_hwrm_func_resc_qcaps(struct bnxt *bp)
4795{
4796 struct hwrm_func_resource_qcaps_output *resp = bp->hwrm_cmd_resp_addr;
4797 struct hwrm_func_resource_qcaps_input req = {0};
4798 struct bnxt_hw_resc *hw_resc = &bp->hw_resc;
4799 int rc;
4800
4801 bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_FUNC_RESOURCE_QCAPS, -1, -1);
4802 req.fid = cpu_to_le16(0xffff);
4803
4804 mutex_lock(&bp->hwrm_cmd_lock);
4805 rc = _hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
4806 if (rc) {
4807 rc = -EIO;
4808 goto hwrm_func_resc_qcaps_exit;
4809 }
4810
4811 hw_resc->min_rsscos_ctxs = le16_to_cpu(resp->min_rsscos_ctx);
4812 hw_resc->max_rsscos_ctxs = le16_to_cpu(resp->max_rsscos_ctx);
4813 hw_resc->min_cp_rings = le16_to_cpu(resp->min_cmpl_rings);
4814 hw_resc->max_cp_rings = le16_to_cpu(resp->max_cmpl_rings);
4815 hw_resc->min_tx_rings = le16_to_cpu(resp->min_tx_rings);
4816 hw_resc->max_tx_rings = le16_to_cpu(resp->max_tx_rings);
4817 hw_resc->min_rx_rings = le16_to_cpu(resp->min_rx_rings);
4818 hw_resc->max_rx_rings = le16_to_cpu(resp->max_rx_rings);
4819 hw_resc->min_hw_ring_grps = le16_to_cpu(resp->min_hw_ring_grps);
4820 hw_resc->max_hw_ring_grps = le16_to_cpu(resp->max_hw_ring_grps);
4821 hw_resc->min_l2_ctxs = le16_to_cpu(resp->min_l2_ctxs);
4822 hw_resc->max_l2_ctxs = le16_to_cpu(resp->max_l2_ctxs);
4823 hw_resc->min_vnics = le16_to_cpu(resp->min_vnics);
4824 hw_resc->max_vnics = le16_to_cpu(resp->max_vnics);
4825 hw_resc->min_stat_ctxs = le16_to_cpu(resp->min_stat_ctx);
4826 hw_resc->max_stat_ctxs = le16_to_cpu(resp->max_stat_ctx);
4827
4828hwrm_func_resc_qcaps_exit:
4829 mutex_unlock(&bp->hwrm_cmd_lock);
4830 return rc;
4831}
4832
4833static int __bnxt_hwrm_func_qcaps(struct bnxt *bp)
4795{ 4834{
4796 int rc = 0; 4835 int rc = 0;
4797 struct hwrm_func_qcaps_input req = {0}; 4836 struct hwrm_func_qcaps_input req = {0};
@@ -4859,6 +4898,21 @@ hwrm_func_qcaps_exit:
4859 return rc; 4898 return rc;
4860} 4899}
4861 4900
4901static int bnxt_hwrm_func_qcaps(struct bnxt *bp)
4902{
4903 int rc;
4904
4905 rc = __bnxt_hwrm_func_qcaps(bp);
4906 if (rc)
4907 return rc;
4908 if (bp->hwrm_spec_code >= 0x10803) {
4909 rc = bnxt_hwrm_func_resc_qcaps(bp);
4910 if (!rc)
4911 bp->flags |= BNXT_FLAG_NEW_RM;
4912 }
4913 return 0;
4914}
4915
4862static int bnxt_hwrm_func_reset(struct bnxt *bp) 4916static int bnxt_hwrm_func_reset(struct bnxt *bp)
4863{ 4917{
4864 struct hwrm_func_reset_input req = {0}; 4918 struct hwrm_func_reset_input req = {0};
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.h b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
index b8446159a745..9d1298505e43 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.h
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
@@ -1144,6 +1144,7 @@ struct bnxt {
1144 #define BNXT_FLAG_FW_DCBX_AGENT 0x800000 1144 #define BNXT_FLAG_FW_DCBX_AGENT 0x800000
1145 #define BNXT_FLAG_CHIP_NITRO_A0 0x1000000 1145 #define BNXT_FLAG_CHIP_NITRO_A0 0x1000000
1146 #define BNXT_FLAG_DIM 0x2000000 1146 #define BNXT_FLAG_DIM 0x2000000
1147 #define BNXT_FLAG_NEW_RM 0x8000000
1147 1148
1148 #define BNXT_FLAG_ALL_CONFIG_FEATS (BNXT_FLAG_TPA | \ 1149 #define BNXT_FLAG_ALL_CONFIG_FEATS (BNXT_FLAG_TPA | \
1149 BNXT_FLAG_RFS | \ 1150 BNXT_FLAG_RFS | \