diff options
author | Michael Chan <michael.chan@broadcom.com> | 2018-01-17 03:21:07 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2018-01-17 14:48:26 -0500 |
commit | be0dd9c4100c9549fe50258e3d928072e6c31590 (patch) | |
tree | 648300eb97054251e7d61055761b5d5fc724d939 | |
parent | 6a4f29470569c5a158c1871a2f752ca22e433420 (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.c | 56 | ||||
-rw-r--r-- | drivers/net/ethernet/broadcom/bnxt/bnxt.h | 1 |
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 | ||
4794 | static int bnxt_hwrm_func_qcaps(struct bnxt *bp) | 4794 | static 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 | |||
4828 | hwrm_func_resc_qcaps_exit: | ||
4829 | mutex_unlock(&bp->hwrm_cmd_lock); | ||
4830 | return rc; | ||
4831 | } | ||
4832 | |||
4833 | static 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 | ||
4901 | static 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 | |||
4862 | static int bnxt_hwrm_func_reset(struct bnxt *bp) | 4916 | static 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 | \ |