Commit 896328fe authored by David S. Miller's avatar David S. Miller

Merge branch 'bnxt_en-Updates'

Michael Chan says:

====================
bnxt_en: Updates.

This series includes simplification and improvement of NAPI polling
logic in bnxt_poll_p5().  The improvements will prevent starving the
async events from firmware if we are in continuous NAPI polling.
The rest of the patches include cleanups, a better return code for
firmware busy, and to clear devlink port type more properly.
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 138470a9 0fcfc7a1
...@@ -2162,6 +2162,7 @@ static int __bnxt_poll_work(struct bnxt *bp, struct bnxt_cp_ring_info *cpr, ...@@ -2162,6 +2162,7 @@ static int __bnxt_poll_work(struct bnxt *bp, struct bnxt_cp_ring_info *cpr,
struct tx_cmp *txcmp; struct tx_cmp *txcmp;
cpr->has_more_work = 0; cpr->has_more_work = 0;
cpr->had_work_done = 1;
while (1) { while (1) {
int rc; int rc;
...@@ -2175,7 +2176,6 @@ static int __bnxt_poll_work(struct bnxt *bp, struct bnxt_cp_ring_info *cpr, ...@@ -2175,7 +2176,6 @@ static int __bnxt_poll_work(struct bnxt *bp, struct bnxt_cp_ring_info *cpr,
* reading any further. * reading any further.
*/ */
dma_rmb(); dma_rmb();
cpr->had_work_done = 1;
if (TX_CMP_TYPE(txcmp) == CMP_TYPE_TX_L2_CMP) { if (TX_CMP_TYPE(txcmp) == CMP_TYPE_TX_L2_CMP) {
tx_pkts++; tx_pkts++;
/* return full budget so NAPI will complete. */ /* return full budget so NAPI will complete. */
...@@ -2392,7 +2392,7 @@ static int __bnxt_poll_cqs(struct bnxt *bp, struct bnxt_napi *bnapi, int budget) ...@@ -2392,7 +2392,7 @@ static int __bnxt_poll_cqs(struct bnxt *bp, struct bnxt_napi *bnapi, int budget)
} }
static void __bnxt_poll_cqs_done(struct bnxt *bp, struct bnxt_napi *bnapi, static void __bnxt_poll_cqs_done(struct bnxt *bp, struct bnxt_napi *bnapi,
u64 dbr_type, bool all) u64 dbr_type)
{ {
struct bnxt_cp_ring_info *cpr = &bnapi->cp_ring; struct bnxt_cp_ring_info *cpr = &bnapi->cp_ring;
int i; int i;
...@@ -2401,7 +2401,7 @@ static void __bnxt_poll_cqs_done(struct bnxt *bp, struct bnxt_napi *bnapi, ...@@ -2401,7 +2401,7 @@ static void __bnxt_poll_cqs_done(struct bnxt *bp, struct bnxt_napi *bnapi,
struct bnxt_cp_ring_info *cpr2 = cpr->cp_ring_arr[i]; struct bnxt_cp_ring_info *cpr2 = cpr->cp_ring_arr[i];
struct bnxt_db_info *db; struct bnxt_db_info *db;
if (cpr2 && (all || cpr2->had_work_done)) { if (cpr2 && cpr2->had_work_done) {
db = &cpr2->cp_db; db = &cpr2->cp_db;
writeq(db->db_key64 | dbr_type | writeq(db->db_key64 | dbr_type |
RING_CMP(cpr2->cp_raw_cons), db->doorbell); RING_CMP(cpr2->cp_raw_cons), db->doorbell);
...@@ -2424,22 +2424,16 @@ static int bnxt_poll_p5(struct napi_struct *napi, int budget) ...@@ -2424,22 +2424,16 @@ static int bnxt_poll_p5(struct napi_struct *napi, int budget)
if (cpr->has_more_work) { if (cpr->has_more_work) {
cpr->has_more_work = 0; cpr->has_more_work = 0;
work_done = __bnxt_poll_cqs(bp, bnapi, budget); work_done = __bnxt_poll_cqs(bp, bnapi, budget);
if (cpr->has_more_work) {
__bnxt_poll_cqs_done(bp, bnapi, DBR_TYPE_CQ, false);
return work_done;
}
__bnxt_poll_cqs_done(bp, bnapi, DBR_TYPE_CQ_ARMALL, true);
if (napi_complete_done(napi, work_done))
BNXT_DB_NQ_ARM_P5(&cpr->cp_db, cpr->cp_raw_cons);
return work_done;
} }
while (1) { while (1) {
cons = RING_CMP(raw_cons); cons = RING_CMP(raw_cons);
nqcmp = &cpr->nq_desc_ring[CP_RING(cons)][CP_IDX(cons)]; nqcmp = &cpr->nq_desc_ring[CP_RING(cons)][CP_IDX(cons)];
if (!NQ_CMP_VALID(nqcmp, raw_cons)) { if (!NQ_CMP_VALID(nqcmp, raw_cons)) {
__bnxt_poll_cqs_done(bp, bnapi, DBR_TYPE_CQ_ARMALL, if (cpr->has_more_work)
false); break;
__bnxt_poll_cqs_done(bp, bnapi, DBR_TYPE_CQ_ARMALL);
cpr->cp_raw_cons = raw_cons; cpr->cp_raw_cons = raw_cons;
if (napi_complete_done(napi, work_done)) if (napi_complete_done(napi, work_done))
BNXT_DB_NQ_ARM_P5(&cpr->cp_db, BNXT_DB_NQ_ARM_P5(&cpr->cp_db,
...@@ -2459,16 +2453,17 @@ static int bnxt_poll_p5(struct napi_struct *napi, int budget) ...@@ -2459,16 +2453,17 @@ static int bnxt_poll_p5(struct napi_struct *napi, int budget)
cpr2 = cpr->cp_ring_arr[idx]; cpr2 = cpr->cp_ring_arr[idx];
work_done += __bnxt_poll_work(bp, cpr2, work_done += __bnxt_poll_work(bp, cpr2,
budget - work_done); budget - work_done);
cpr->has_more_work = cpr2->has_more_work; cpr->has_more_work |= cpr2->has_more_work;
} else { } else {
bnxt_hwrm_handler(bp, (struct tx_cmp *)nqcmp); bnxt_hwrm_handler(bp, (struct tx_cmp *)nqcmp);
} }
raw_cons = NEXT_RAW_CMP(raw_cons); raw_cons = NEXT_RAW_CMP(raw_cons);
if (cpr->has_more_work)
break;
} }
__bnxt_poll_cqs_done(bp, bnapi, DBR_TYPE_CQ, true); __bnxt_poll_cqs_done(bp, bnapi, DBR_TYPE_CQ);
cpr->cp_raw_cons = raw_cons; if (raw_cons != cpr->cp_raw_cons) {
cpr->cp_raw_cons = raw_cons;
BNXT_DB_NQ_P5(&cpr->cp_db, raw_cons);
}
return work_done; return work_done;
} }
...@@ -4166,6 +4161,7 @@ static int bnxt_hwrm_to_stderr(u32 hwrm_err) ...@@ -4166,6 +4161,7 @@ static int bnxt_hwrm_to_stderr(u32 hwrm_err)
case HWRM_ERR_CODE_NO_BUFFER: case HWRM_ERR_CODE_NO_BUFFER:
return -ENOMEM; return -ENOMEM;
case HWRM_ERR_CODE_HOT_RESET_PROGRESS: case HWRM_ERR_CODE_HOT_RESET_PROGRESS:
case HWRM_ERR_CODE_BUSY:
return -EAGAIN; return -EAGAIN;
case HWRM_ERR_CODE_CMD_NOT_SUPPORTED: case HWRM_ERR_CODE_CMD_NOT_SUPPORTED:
return -EOPNOTSUPP; return -EOPNOTSUPP;
...@@ -5065,10 +5061,8 @@ int bnxt_hwrm_vnic_cfg(struct bnxt *bp, u16 vnic_id) ...@@ -5065,10 +5061,8 @@ int bnxt_hwrm_vnic_cfg(struct bnxt *bp, u16 vnic_id)
return hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT); return hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
} }
static int bnxt_hwrm_vnic_free_one(struct bnxt *bp, u16 vnic_id) static void bnxt_hwrm_vnic_free_one(struct bnxt *bp, u16 vnic_id)
{ {
u32 rc = 0;
if (bp->vnic_info[vnic_id].fw_vnic_id != INVALID_HW_RING_ID) { if (bp->vnic_info[vnic_id].fw_vnic_id != INVALID_HW_RING_ID) {
struct hwrm_vnic_free_input req = {0}; struct hwrm_vnic_free_input req = {0};
...@@ -5076,10 +5070,9 @@ static int bnxt_hwrm_vnic_free_one(struct bnxt *bp, u16 vnic_id) ...@@ -5076,10 +5070,9 @@ static int bnxt_hwrm_vnic_free_one(struct bnxt *bp, u16 vnic_id)
req.vnic_id = req.vnic_id =
cpu_to_le32(bp->vnic_info[vnic_id].fw_vnic_id); cpu_to_le32(bp->vnic_info[vnic_id].fw_vnic_id);
rc = hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT); hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
bp->vnic_info[vnic_id].fw_vnic_id = INVALID_HW_RING_ID; bp->vnic_info[vnic_id].fw_vnic_id = INVALID_HW_RING_ID;
} }
return rc;
} }
static void bnxt_hwrm_vnic_free(struct bnxt *bp) static void bnxt_hwrm_vnic_free(struct bnxt *bp)
...@@ -5196,14 +5189,13 @@ static int bnxt_hwrm_ring_grp_alloc(struct bnxt *bp) ...@@ -5196,14 +5189,13 @@ static int bnxt_hwrm_ring_grp_alloc(struct bnxt *bp)
return rc; return rc;
} }
static int bnxt_hwrm_ring_grp_free(struct bnxt *bp) static void bnxt_hwrm_ring_grp_free(struct bnxt *bp)
{ {
u16 i; u16 i;
u32 rc = 0;
struct hwrm_ring_grp_free_input req = {0}; struct hwrm_ring_grp_free_input req = {0};
if (!bp->grp_info || (bp->flags & BNXT_FLAG_CHIP_P5)) if (!bp->grp_info || (bp->flags & BNXT_FLAG_CHIP_P5))
return 0; return;
bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_RING_GRP_FREE, -1, -1); bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_RING_GRP_FREE, -1, -1);
...@@ -5214,12 +5206,10 @@ static int bnxt_hwrm_ring_grp_free(struct bnxt *bp) ...@@ -5214,12 +5206,10 @@ static int bnxt_hwrm_ring_grp_free(struct bnxt *bp)
req.ring_group_id = req.ring_group_id =
cpu_to_le32(bp->grp_info[i].fw_grp_id); cpu_to_le32(bp->grp_info[i].fw_grp_id);
rc = _hwrm_send_message(bp, &req, sizeof(req), _hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
HWRM_CMD_TIMEOUT);
bp->grp_info[i].fw_grp_id = INVALID_HW_RING_ID; bp->grp_info[i].fw_grp_id = INVALID_HW_RING_ID;
} }
mutex_unlock(&bp->hwrm_cmd_lock); mutex_unlock(&bp->hwrm_cmd_lock);
return rc;
} }
static int hwrm_ring_alloc_send_msg(struct bnxt *bp, static int hwrm_ring_alloc_send_msg(struct bnxt *bp,
...@@ -5843,8 +5833,7 @@ bnxt_hwrm_reserve_pf_rings(struct bnxt *bp, int tx_rings, int rx_rings, ...@@ -5843,8 +5833,7 @@ bnxt_hwrm_reserve_pf_rings(struct bnxt *bp, int tx_rings, int rx_rings,
if (bp->hwrm_spec_code < 0x10601) if (bp->hwrm_spec_code < 0x10601)
bp->hw_resc.resv_tx_rings = tx_rings; bp->hw_resc.resv_tx_rings = tx_rings;
rc = bnxt_hwrm_get_rings(bp); return bnxt_hwrm_get_rings(bp);
return rc;
} }
static int static int
...@@ -5865,8 +5854,7 @@ bnxt_hwrm_reserve_vf_rings(struct bnxt *bp, int tx_rings, int rx_rings, ...@@ -5865,8 +5854,7 @@ bnxt_hwrm_reserve_vf_rings(struct bnxt *bp, int tx_rings, int rx_rings,
if (rc) if (rc)
return rc; return rc;
rc = bnxt_hwrm_get_rings(bp); return bnxt_hwrm_get_rings(bp);
return rc;
} }
static int bnxt_hwrm_reserve_rings(struct bnxt *bp, int tx, int rx, int grp, static int bnxt_hwrm_reserve_rings(struct bnxt *bp, int tx, int rx, int grp,
...@@ -6026,7 +6014,6 @@ static int bnxt_hwrm_check_vf_rings(struct bnxt *bp, int tx_rings, int rx_rings, ...@@ -6026,7 +6014,6 @@ static int bnxt_hwrm_check_vf_rings(struct bnxt *bp, int tx_rings, int rx_rings,
{ {
struct hwrm_func_vf_cfg_input req = {0}; struct hwrm_func_vf_cfg_input req = {0};
u32 flags; u32 flags;
int rc;
if (!BNXT_NEW_RM(bp)) if (!BNXT_NEW_RM(bp))
return 0; return 0;
...@@ -6043,8 +6030,8 @@ static int bnxt_hwrm_check_vf_rings(struct bnxt *bp, int tx_rings, int rx_rings, ...@@ -6043,8 +6030,8 @@ static int bnxt_hwrm_check_vf_rings(struct bnxt *bp, int tx_rings, int rx_rings,
flags |= FUNC_VF_CFG_REQ_FLAGS_RING_GRP_ASSETS_TEST; flags |= FUNC_VF_CFG_REQ_FLAGS_RING_GRP_ASSETS_TEST;
req.flags = cpu_to_le32(flags); req.flags = cpu_to_le32(flags);
rc = hwrm_send_message_silent(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT); return hwrm_send_message_silent(bp, &req, sizeof(req),
return rc; HWRM_CMD_TIMEOUT);
} }
static int bnxt_hwrm_check_pf_rings(struct bnxt *bp, int tx_rings, int rx_rings, static int bnxt_hwrm_check_pf_rings(struct bnxt *bp, int tx_rings, int rx_rings,
...@@ -6053,7 +6040,6 @@ static int bnxt_hwrm_check_pf_rings(struct bnxt *bp, int tx_rings, int rx_rings, ...@@ -6053,7 +6040,6 @@ static int bnxt_hwrm_check_pf_rings(struct bnxt *bp, int tx_rings, int rx_rings,
{ {
struct hwrm_func_cfg_input req = {0}; struct hwrm_func_cfg_input req = {0};
u32 flags; u32 flags;
int rc;
__bnxt_hwrm_reserve_pf_rings(bp, &req, tx_rings, rx_rings, ring_grps, __bnxt_hwrm_reserve_pf_rings(bp, &req, tx_rings, rx_rings, ring_grps,
cp_rings, stats, vnics); cp_rings, stats, vnics);
...@@ -6071,8 +6057,8 @@ static int bnxt_hwrm_check_pf_rings(struct bnxt *bp, int tx_rings, int rx_rings, ...@@ -6071,8 +6057,8 @@ static int bnxt_hwrm_check_pf_rings(struct bnxt *bp, int tx_rings, int rx_rings,
} }
req.flags = cpu_to_le32(flags); req.flags = cpu_to_le32(flags);
rc = hwrm_send_message_silent(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT); return hwrm_send_message_silent(bp, &req, sizeof(req),
return rc; HWRM_CMD_TIMEOUT);
} }
static int bnxt_hwrm_check_rings(struct bnxt *bp, int tx_rings, int rx_rings, static int bnxt_hwrm_check_rings(struct bnxt *bp, int tx_rings, int rx_rings,
...@@ -6311,16 +6297,16 @@ int bnxt_hwrm_set_coal(struct bnxt *bp) ...@@ -6311,16 +6297,16 @@ int bnxt_hwrm_set_coal(struct bnxt *bp)
return rc; return rc;
} }
static int bnxt_hwrm_stat_ctx_free(struct bnxt *bp) static void bnxt_hwrm_stat_ctx_free(struct bnxt *bp)
{ {
int rc = 0, i;
struct hwrm_stat_ctx_free_input req = {0}; struct hwrm_stat_ctx_free_input req = {0};
int i;
if (!bp->bnapi) if (!bp->bnapi)
return 0; return;
if (BNXT_CHIP_TYPE_NITRO_A0(bp)) if (BNXT_CHIP_TYPE_NITRO_A0(bp))
return 0; return;
bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_STAT_CTX_FREE, -1, -1); bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_STAT_CTX_FREE, -1, -1);
...@@ -6332,14 +6318,13 @@ static int bnxt_hwrm_stat_ctx_free(struct bnxt *bp) ...@@ -6332,14 +6318,13 @@ static int bnxt_hwrm_stat_ctx_free(struct bnxt *bp)
if (cpr->hw_stats_ctx_id != INVALID_STATS_CTX_ID) { if (cpr->hw_stats_ctx_id != INVALID_STATS_CTX_ID) {
req.stat_ctx_id = cpu_to_le32(cpr->hw_stats_ctx_id); req.stat_ctx_id = cpu_to_le32(cpr->hw_stats_ctx_id);
rc = _hwrm_send_message(bp, &req, sizeof(req), _hwrm_send_message(bp, &req, sizeof(req),
HWRM_CMD_TIMEOUT); HWRM_CMD_TIMEOUT);
cpr->hw_stats_ctx_id = INVALID_STATS_CTX_ID; cpr->hw_stats_ctx_id = INVALID_STATS_CTX_ID;
} }
} }
mutex_unlock(&bp->hwrm_cmd_lock); mutex_unlock(&bp->hwrm_cmd_lock);
return rc;
} }
static int bnxt_hwrm_stat_ctx_alloc(struct bnxt *bp) static int bnxt_hwrm_stat_ctx_alloc(struct bnxt *bp)
...@@ -6544,8 +6529,8 @@ static int bnxt_hwrm_func_backing_store_cfg(struct bnxt *bp, u32 enables) ...@@ -6544,8 +6529,8 @@ static int bnxt_hwrm_func_backing_store_cfg(struct bnxt *bp, u32 enables)
__le64 *pg_dir; __le64 *pg_dir;
u32 flags = 0; u32 flags = 0;
u8 *pg_attr; u8 *pg_attr;
int i, rc;
u32 ena; u32 ena;
int i;
if (!ctx) if (!ctx)
return 0; return 0;
...@@ -6632,8 +6617,7 @@ static int bnxt_hwrm_func_backing_store_cfg(struct bnxt *bp, u32 enables) ...@@ -6632,8 +6617,7 @@ static int bnxt_hwrm_func_backing_store_cfg(struct bnxt *bp, u32 enables)
bnxt_hwrm_set_pg_attr(&ctx_pg->ring_mem, pg_attr, pg_dir); bnxt_hwrm_set_pg_attr(&ctx_pg->ring_mem, pg_attr, pg_dir);
} }
req.flags = cpu_to_le32(flags); req.flags = cpu_to_le32(flags);
rc = hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT); return hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
return rc;
} }
static int bnxt_alloc_ctx_mem_blk(struct bnxt *bp, static int bnxt_alloc_ctx_mem_blk(struct bnxt *bp,
...@@ -7337,7 +7321,6 @@ int bnxt_hwrm_fw_set_time(struct bnxt *bp) ...@@ -7337,7 +7321,6 @@ int bnxt_hwrm_fw_set_time(struct bnxt *bp)
static int bnxt_hwrm_port_qstats(struct bnxt *bp) static int bnxt_hwrm_port_qstats(struct bnxt *bp)
{ {
int rc;
struct bnxt_pf_info *pf = &bp->pf; struct bnxt_pf_info *pf = &bp->pf;
struct hwrm_port_qstats_input req = {0}; struct hwrm_port_qstats_input req = {0};
...@@ -7348,8 +7331,7 @@ static int bnxt_hwrm_port_qstats(struct bnxt *bp) ...@@ -7348,8 +7331,7 @@ static int bnxt_hwrm_port_qstats(struct bnxt *bp)
req.port_id = cpu_to_le16(pf->port_id); req.port_id = cpu_to_le16(pf->port_id);
req.tx_stat_host_addr = cpu_to_le64(bp->hw_tx_port_stats_map); req.tx_stat_host_addr = cpu_to_le64(bp->hw_tx_port_stats_map);
req.rx_stat_host_addr = cpu_to_le64(bp->hw_rx_port_stats_map); req.rx_stat_host_addr = cpu_to_le64(bp->hw_rx_port_stats_map);
rc = hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT); return hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
return rc;
} }
static int bnxt_hwrm_port_qstats_ext(struct bnxt *bp) static int bnxt_hwrm_port_qstats_ext(struct bnxt *bp)
...@@ -7503,7 +7485,6 @@ static void bnxt_hwrm_resource_free(struct bnxt *bp, bool close_path, ...@@ -7503,7 +7485,6 @@ static void bnxt_hwrm_resource_free(struct bnxt *bp, bool close_path,
static int bnxt_hwrm_set_br_mode(struct bnxt *bp, u16 br_mode) static int bnxt_hwrm_set_br_mode(struct bnxt *bp, u16 br_mode)
{ {
struct hwrm_func_cfg_input req = {0}; struct hwrm_func_cfg_input req = {0};
int rc;
bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_FUNC_CFG, -1, -1); bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_FUNC_CFG, -1, -1);
req.fid = cpu_to_le16(0xffff); req.fid = cpu_to_le16(0xffff);
...@@ -7514,14 +7495,12 @@ static int bnxt_hwrm_set_br_mode(struct bnxt *bp, u16 br_mode) ...@@ -7514,14 +7495,12 @@ static int bnxt_hwrm_set_br_mode(struct bnxt *bp, u16 br_mode)
req.evb_mode = FUNC_CFG_REQ_EVB_MODE_VEPA; req.evb_mode = FUNC_CFG_REQ_EVB_MODE_VEPA;
else else
return -EINVAL; return -EINVAL;
rc = hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT); return hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
return rc;
} }
static int bnxt_hwrm_set_cache_line_size(struct bnxt *bp, int size) static int bnxt_hwrm_set_cache_line_size(struct bnxt *bp, int size)
{ {
struct hwrm_func_cfg_input req = {0}; struct hwrm_func_cfg_input req = {0};
int rc;
if (BNXT_VF(bp) || bp->hwrm_spec_code < 0x10803) if (BNXT_VF(bp) || bp->hwrm_spec_code < 0x10803)
return 0; return 0;
...@@ -7533,8 +7512,7 @@ static int bnxt_hwrm_set_cache_line_size(struct bnxt *bp, int size) ...@@ -7533,8 +7512,7 @@ static int bnxt_hwrm_set_cache_line_size(struct bnxt *bp, int size)
if (size == 128) if (size == 128)
req.options = FUNC_CFG_REQ_OPTIONS_CACHE_LINESIZE_SIZE_128; req.options = FUNC_CFG_REQ_OPTIONS_CACHE_LINESIZE_SIZE_128;
rc = hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT); return hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
return rc;
} }
static int __bnxt_setup_vnic(struct bnxt *bp, u16 vnic_id) static int __bnxt_setup_vnic(struct bnxt *bp, u16 vnic_id)
...@@ -8792,6 +8770,7 @@ static int bnxt_hwrm_if_change(struct bnxt *bp, bool up) ...@@ -8792,6 +8770,7 @@ static int bnxt_hwrm_if_change(struct bnxt *bp, bool up)
bnxt_free_ctx_mem(bp); bnxt_free_ctx_mem(bp);
kfree(bp->ctx); kfree(bp->ctx);
bp->ctx = NULL; bp->ctx = NULL;
bnxt_dcb_free(bp);
rc = bnxt_fw_init_one(bp); rc = bnxt_fw_init_one(bp);
if (rc) { if (rc) {
set_bit(BNXT_STATE_ABORT_ERR, &bp->state); set_bit(BNXT_STATE_ABORT_ERR, &bp->state);
...@@ -8887,14 +8866,12 @@ int bnxt_hwrm_alloc_wol_fltr(struct bnxt *bp) ...@@ -8887,14 +8866,12 @@ int bnxt_hwrm_alloc_wol_fltr(struct bnxt *bp)
int bnxt_hwrm_free_wol_fltr(struct bnxt *bp) int bnxt_hwrm_free_wol_fltr(struct bnxt *bp)
{ {
struct hwrm_wol_filter_free_input req = {0}; struct hwrm_wol_filter_free_input req = {0};
int rc;
bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_WOL_FILTER_FREE, -1, -1); bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_WOL_FILTER_FREE, -1, -1);
req.port_id = cpu_to_le16(bp->pf.port_id); req.port_id = cpu_to_le16(bp->pf.port_id);
req.enables = cpu_to_le32(WOL_FILTER_FREE_REQ_ENABLES_WOL_FILTER_ID); req.enables = cpu_to_le32(WOL_FILTER_FREE_REQ_ENABLES_WOL_FILTER_ID);
req.wol_filter_id = bp->wol_filter_id; req.wol_filter_id = bp->wol_filter_id;
rc = hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT); return hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
return rc;
} }
static u16 bnxt_hwrm_get_wol_fltrs(struct bnxt *bp, u16 handle) static u16 bnxt_hwrm_get_wol_fltrs(struct bnxt *bp, u16 handle)
...@@ -11452,6 +11429,8 @@ static void bnxt_remove_one(struct pci_dev *pdev) ...@@ -11452,6 +11429,8 @@ static void bnxt_remove_one(struct pci_dev *pdev)
bnxt_sriov_disable(bp); bnxt_sriov_disable(bp);
bnxt_dl_fw_reporters_destroy(bp, true); bnxt_dl_fw_reporters_destroy(bp, true);
if (BNXT_PF(bp))
devlink_port_type_clear(&bp->dl_port);
pci_disable_pcie_error_reporting(pdev); pci_disable_pcie_error_reporting(pdev);
unregister_netdev(dev); unregister_netdev(dev);
bnxt_dl_unregister(bp); bnxt_dl_unregister(bp);
......
...@@ -39,8 +39,8 @@ static int bnxt_queue_to_tc(struct bnxt *bp, u8 queue_id) ...@@ -39,8 +39,8 @@ static int bnxt_queue_to_tc(struct bnxt *bp, u8 queue_id)
static int bnxt_hwrm_queue_pri2cos_cfg(struct bnxt *bp, struct ieee_ets *ets) static int bnxt_hwrm_queue_pri2cos_cfg(struct bnxt *bp, struct ieee_ets *ets)
{ {
struct hwrm_queue_pri2cos_cfg_input req = {0}; struct hwrm_queue_pri2cos_cfg_input req = {0};
int rc = 0, i;
u8 *pri2cos; u8 *pri2cos;
int i;
bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_QUEUE_PRI2COS_CFG, -1, -1); bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_QUEUE_PRI2COS_CFG, -1, -1);
req.flags = cpu_to_le32(QUEUE_PRI2COS_CFG_REQ_FLAGS_PATH_BIDIR | req.flags = cpu_to_le32(QUEUE_PRI2COS_CFG_REQ_FLAGS_PATH_BIDIR |
...@@ -56,8 +56,7 @@ static int bnxt_hwrm_queue_pri2cos_cfg(struct bnxt *bp, struct ieee_ets *ets) ...@@ -56,8 +56,7 @@ static int bnxt_hwrm_queue_pri2cos_cfg(struct bnxt *bp, struct ieee_ets *ets)
qidx = bp->tc_to_qidx[ets->prio_tc[i]]; qidx = bp->tc_to_qidx[ets->prio_tc[i]];
pri2cos[i] = bp->q_info[qidx].queue_id; pri2cos[i] = bp->q_info[qidx].queue_id;
} }
rc = hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT); return hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
return rc;
} }
static int bnxt_hwrm_queue_pri2cos_qcfg(struct bnxt *bp, struct ieee_ets *ets) static int bnxt_hwrm_queue_pri2cos_qcfg(struct bnxt *bp, struct ieee_ets *ets)
...@@ -93,8 +92,8 @@ static int bnxt_hwrm_queue_cos2bw_cfg(struct bnxt *bp, struct ieee_ets *ets, ...@@ -93,8 +92,8 @@ static int bnxt_hwrm_queue_cos2bw_cfg(struct bnxt *bp, struct ieee_ets *ets,
{ {
struct hwrm_queue_cos2bw_cfg_input req = {0}; struct hwrm_queue_cos2bw_cfg_input req = {0};
struct bnxt_cos2bw_cfg cos2bw; struct bnxt_cos2bw_cfg cos2bw;
int rc = 0, i;
void *data; void *data;
int i;
bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_QUEUE_COS2BW_CFG, -1, -1); bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_QUEUE_COS2BW_CFG, -1, -1);
for (i = 0; i < max_tc; i++) { for (i = 0; i < max_tc; i++) {
...@@ -128,8 +127,7 @@ static int bnxt_hwrm_queue_cos2bw_cfg(struct bnxt *bp, struct ieee_ets *ets, ...@@ -128,8 +127,7 @@ static int bnxt_hwrm_queue_cos2bw_cfg(struct bnxt *bp, struct ieee_ets *ets,
req.unused_0 = 0; req.unused_0 = 0;
} }
} }
rc = hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT); return hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
return rc;
} }
static int bnxt_hwrm_queue_cos2bw_qcfg(struct bnxt *bp, struct ieee_ets *ets) static int bnxt_hwrm_queue_cos2bw_qcfg(struct bnxt *bp, struct ieee_ets *ets)
...@@ -236,7 +234,6 @@ static int bnxt_hwrm_queue_pfc_cfg(struct bnxt *bp, struct ieee_pfc *pfc) ...@@ -236,7 +234,6 @@ static int bnxt_hwrm_queue_pfc_cfg(struct bnxt *bp, struct ieee_pfc *pfc)
unsigned int tc_mask = 0, pri_mask = 0; unsigned int tc_mask = 0, pri_mask = 0;
u8 i, pri, lltc_count = 0; u8 i, pri, lltc_count = 0;
bool need_q_remap = false; bool need_q_remap = false;
int rc;
if (!my_ets) if (!my_ets)
return -EINVAL; return -EINVAL;
...@@ -267,15 +264,11 @@ static int bnxt_hwrm_queue_pfc_cfg(struct bnxt *bp, struct ieee_pfc *pfc) ...@@ -267,15 +264,11 @@ static int bnxt_hwrm_queue_pfc_cfg(struct bnxt *bp, struct ieee_pfc *pfc)
} }
if (need_q_remap) if (need_q_remap)
rc = bnxt_queue_remap(bp, tc_mask); bnxt_queue_remap(bp, tc_mask);
bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_QUEUE_PFCENABLE_CFG, -1, -1); bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_QUEUE_PFCENABLE_CFG, -1, -1);
req.flags = cpu_to_le32(pri_mask); req.flags = cpu_to_le32(pri_mask);
rc = hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT); return hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
if (rc)
return rc;
return rc;
} }
static int bnxt_hwrm_queue_pfc_qcfg(struct bnxt *bp, struct ieee_pfc *pfc) static int bnxt_hwrm_queue_pfc_qcfg(struct bnxt *bp, struct ieee_pfc *pfc)
......
...@@ -2606,7 +2606,7 @@ static int bnxt_set_phys_id(struct net_device *dev, ...@@ -2606,7 +2606,7 @@ static int bnxt_set_phys_id(struct net_device *dev,
struct bnxt_led_cfg *led_cfg; struct bnxt_led_cfg *led_cfg;
u8 led_state; u8 led_state;
__le16 duration; __le16 duration;
int i, rc; int i;
if (!bp->num_leds || BNXT_VF(bp)) if (!bp->num_leds || BNXT_VF(bp))
return -EOPNOTSUPP; return -EOPNOTSUPP;
...@@ -2632,8 +2632,7 @@ static int bnxt_set_phys_id(struct net_device *dev, ...@@ -2632,8 +2632,7 @@ static int bnxt_set_phys_id(struct net_device *dev,
led_cfg->led_blink_off = duration; led_cfg->led_blink_off = duration;
led_cfg->led_group_id = bp->leds[i].led_group_id; led_cfg->led_group_id = bp->leds[i].led_group_id;
} }
rc = hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT); return hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
return rc;
} }
static int bnxt_hwrm_selftest_irq(struct bnxt *bp, u16 cmpl_ring) static int bnxt_hwrm_selftest_irq(struct bnxt *bp, u16 cmpl_ring)
......
...@@ -138,7 +138,6 @@ static bool bnxt_is_trusted_vf(struct bnxt *bp, struct bnxt_vf_info *vf) ...@@ -138,7 +138,6 @@ static bool bnxt_is_trusted_vf(struct bnxt *bp, struct bnxt_vf_info *vf)
static int bnxt_hwrm_set_trusted_vf(struct bnxt *bp, struct bnxt_vf_info *vf) static int bnxt_hwrm_set_trusted_vf(struct bnxt *bp, struct bnxt_vf_info *vf)
{ {
struct hwrm_func_cfg_input req = {0}; struct hwrm_func_cfg_input req = {0};
int rc;
if (!(bp->fw_cap & BNXT_FW_CAP_TRUSTED_VF)) if (!(bp->fw_cap & BNXT_FW_CAP_TRUSTED_VF))
return 0; return 0;
...@@ -149,8 +148,7 @@ static int bnxt_hwrm_set_trusted_vf(struct bnxt *bp, struct bnxt_vf_info *vf) ...@@ -149,8 +148,7 @@ static int bnxt_hwrm_set_trusted_vf(struct bnxt *bp, struct bnxt_vf_info *vf)
req.flags = cpu_to_le32(FUNC_CFG_REQ_FLAGS_TRUSTED_VF_ENABLE); req.flags = cpu_to_le32(FUNC_CFG_REQ_FLAGS_TRUSTED_VF_ENABLE);
else else
req.flags = cpu_to_le32(FUNC_CFG_REQ_FLAGS_TRUSTED_VF_DISABLE); req.flags = cpu_to_le32(FUNC_CFG_REQ_FLAGS_TRUSTED_VF_DISABLE);
rc = hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT); return hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
return rc;
} }
int bnxt_set_vf_trust(struct net_device *dev, int vf_id, bool trusted) int bnxt_set_vf_trust(struct net_device *dev, int vf_id, bool trusted)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment