Commit 848dc857 authored by Hongguang Gao's avatar Hongguang Gao Committed by Ajit Khaparde

bnxt_en: Remove struct bnxt access from RoCE driver

Decouple RoCE driver from directly accessing L2's private bnxt
structure. Move the fields needed by RoCE driver into bnxt_en_dev.
They'll be passed to RoCE driver by bnxt_rdma_aux_device_add()
function.
Signed-off-by: default avatarHongguang Gao <hongguang.gao@broadcom.com>
Signed-off-by: default avatarAjit Khaparde <ajit.khaparde@broadcom.com>
Reviewed-by: default avatarAndy Gospodarek <andrew.gospodarek@broadcom.com>
Reviewed-by: default avatarSelvin Xavier <selvin.xavier@broadcom.com>
Reviewed-by: default avatarLeon Romanovsky <leonro@nvidia.com>
parent 3b65e945
...@@ -112,16 +112,14 @@ static int bnxt_re_setup_chip_ctx(struct bnxt_re_dev *rdev, u8 wqe_mode) ...@@ -112,16 +112,14 @@ static int bnxt_re_setup_chip_ctx(struct bnxt_re_dev *rdev, u8 wqe_mode)
{ {
struct bnxt_qplib_chip_ctx *chip_ctx; struct bnxt_qplib_chip_ctx *chip_ctx;
struct bnxt_en_dev *en_dev; struct bnxt_en_dev *en_dev;
struct bnxt *bp;
en_dev = rdev->en_dev; en_dev = rdev->en_dev;
bp = netdev_priv(en_dev->net);
chip_ctx = kzalloc(sizeof(*chip_ctx), GFP_KERNEL); chip_ctx = kzalloc(sizeof(*chip_ctx), GFP_KERNEL);
if (!chip_ctx) if (!chip_ctx)
return -ENOMEM; return -ENOMEM;
chip_ctx->chip_num = bp->chip_num; chip_ctx->chip_num = en_dev->chip_num;
chip_ctx->hw_stats_size = bp->hw_ring_stats_size; chip_ctx->hw_stats_size = en_dev->hw_ring_stats_size;
rdev->chip_ctx = chip_ctx; rdev->chip_ctx = chip_ctx;
/* rest members to follow eventually */ /* rest members to follow eventually */
...@@ -129,7 +127,7 @@ static int bnxt_re_setup_chip_ctx(struct bnxt_re_dev *rdev, u8 wqe_mode) ...@@ -129,7 +127,7 @@ static int bnxt_re_setup_chip_ctx(struct bnxt_re_dev *rdev, u8 wqe_mode)
rdev->qplib_res.cctx = rdev->chip_ctx; rdev->qplib_res.cctx = rdev->chip_ctx;
rdev->rcfw.res = &rdev->qplib_res; rdev->rcfw.res = &rdev->qplib_res;
rdev->qplib_res.dattr = &rdev->dev_attr; rdev->qplib_res.dattr = &rdev->dev_attr;
rdev->qplib_res.is_vf = BNXT_VF(bp); rdev->qplib_res.is_vf = BNXT_EN_VF(en_dev);
bnxt_re_set_drv_mode(rdev, wqe_mode); bnxt_re_set_drv_mode(rdev, wqe_mode);
if (bnxt_qplib_determine_atomics(en_dev->pdev)) if (bnxt_qplib_determine_atomics(en_dev->pdev))
...@@ -142,10 +140,7 @@ static int bnxt_re_setup_chip_ctx(struct bnxt_re_dev *rdev, u8 wqe_mode) ...@@ -142,10 +140,7 @@ static int bnxt_re_setup_chip_ctx(struct bnxt_re_dev *rdev, u8 wqe_mode)
static void bnxt_re_get_sriov_func_type(struct bnxt_re_dev *rdev) static void bnxt_re_get_sriov_func_type(struct bnxt_re_dev *rdev)
{ {
struct bnxt *bp; if (BNXT_EN_VF(rdev->en_dev))
bp = netdev_priv(rdev->en_dev->net);
if (BNXT_VF(bp))
rdev->is_virtfn = 1; rdev->is_virtfn = 1;
} }
...@@ -957,7 +952,6 @@ static int bnxt_re_query_hwrm_pri2cos(struct bnxt_re_dev *rdev, u8 dir, ...@@ -957,7 +952,6 @@ static int bnxt_re_query_hwrm_pri2cos(struct bnxt_re_dev *rdev, u8 dir,
u64 *cid_map) u64 *cid_map)
{ {
struct hwrm_queue_pri2cos_qcfg_input req = {0}; struct hwrm_queue_pri2cos_qcfg_input req = {0};
struct bnxt *bp = netdev_priv(rdev->netdev);
struct hwrm_queue_pri2cos_qcfg_output resp; struct hwrm_queue_pri2cos_qcfg_output resp;
struct bnxt_en_dev *en_dev = rdev->en_dev; struct bnxt_en_dev *en_dev = rdev->en_dev;
struct bnxt_fw_msg fw_msg; struct bnxt_fw_msg fw_msg;
...@@ -974,7 +968,7 @@ static int bnxt_re_query_hwrm_pri2cos(struct bnxt_re_dev *rdev, u8 dir, ...@@ -974,7 +968,7 @@ static int bnxt_re_query_hwrm_pri2cos(struct bnxt_re_dev *rdev, u8 dir,
flags |= (dir & 0x01); flags |= (dir & 0x01);
flags |= HWRM_QUEUE_PRI2COS_QCFG_INPUT_FLAGS_IVLAN; flags |= HWRM_QUEUE_PRI2COS_QCFG_INPUT_FLAGS_IVLAN;
req.flags = cpu_to_le32(flags); req.flags = cpu_to_le32(flags);
req.port_id = bp->pf.port_id; req.port_id = en_dev->pf_port_id;
bnxt_re_fill_fw_msg(&fw_msg, (void *)&req, sizeof(req), (void *)&resp, bnxt_re_fill_fw_msg(&fw_msg, (void *)&req, sizeof(req), (void *)&resp,
sizeof(resp), DFLT_HWRM_CMD_TIMEOUT); sizeof(resp), DFLT_HWRM_CMD_TIMEOUT);
...@@ -1547,7 +1541,6 @@ static int bnxt_re_probe(struct auxiliary_device *adev, ...@@ -1547,7 +1541,6 @@ static int bnxt_re_probe(struct auxiliary_device *adev,
static int bnxt_re_suspend(struct auxiliary_device *adev, pm_message_t state) static int bnxt_re_suspend(struct auxiliary_device *adev, pm_message_t state)
{ {
struct bnxt_re_dev *rdev = auxiliary_get_drvdata(adev); struct bnxt_re_dev *rdev = auxiliary_get_drvdata(adev);
struct bnxt *bp;
if (!rdev) if (!rdev)
return 0; return 0;
...@@ -1559,15 +1552,14 @@ static int bnxt_re_suspend(struct auxiliary_device *adev, pm_message_t state) ...@@ -1559,15 +1552,14 @@ static int bnxt_re_suspend(struct auxiliary_device *adev, pm_message_t state)
* ie. by calling bnxt_re_dev_stop and release the MSIx vectors as * ie. by calling bnxt_re_dev_stop and release the MSIx vectors as
* L2 driver want to modify the MSIx table. * L2 driver want to modify the MSIx table.
*/ */
bp = netdev_priv(rdev->netdev);
ibdev_info(&rdev->ibdev, "Handle device suspend call"); ibdev_info(&rdev->ibdev, "Handle device suspend call");
/* Check the current device state from L2 structure and move the /* Check the current device state from bnxt_en_dev and move the
* device to detached state if FW_FATAL_COND is set. * device to detached state if FW_FATAL_COND is set.
* This prevents more commands to HW during clean-up, * This prevents more commands to HW during clean-up,
* in case the device is already in error. * in case the device is already in error.
*/ */
if (test_bit(BNXT_STATE_FW_FATAL_COND, &bp->state)) if (test_bit(BNXT_STATE_FW_FATAL_COND, &rdev->en_dev->en_state))
set_bit(ERR_DEVICE_DETACHED, &rdev->rcfw.cmdq.flags); set_bit(ERR_DEVICE_DETACHED, &rdev->rcfw.cmdq.flags);
bnxt_re_dev_stop(rdev); bnxt_re_dev_stop(rdev);
......
...@@ -287,6 +287,7 @@ void bnxt_ulp_stop(struct bnxt *bp) ...@@ -287,6 +287,7 @@ void bnxt_ulp_stop(struct bnxt *bp)
pm_message_t pm = {}; pm_message_t pm = {};
adrv = to_auxiliary_drv(adev->dev.driver); adrv = to_auxiliary_drv(adev->dev.driver);
edev->en_state = bp->state;
adrv->suspend(adev, pm); adrv->suspend(adev, pm);
} }
} }
...@@ -313,6 +314,7 @@ void bnxt_ulp_start(struct bnxt *bp, int err) ...@@ -313,6 +314,7 @@ void bnxt_ulp_start(struct bnxt *bp, int err)
struct auxiliary_driver *adrv; struct auxiliary_driver *adrv;
adrv = to_auxiliary_drv(adev->dev.driver); adrv = to_auxiliary_drv(adev->dev.driver);
edev->en_state = bp->state;
adrv->resume(adev); adrv->resume(adev);
} }
} }
...@@ -444,6 +446,13 @@ static void bnxt_set_edev_info(struct bnxt_en_dev *edev, struct bnxt *bp) ...@@ -444,6 +446,13 @@ static void bnxt_set_edev_info(struct bnxt_en_dev *edev, struct bnxt *bp)
edev->flags |= BNXT_EN_FLAG_ROCEV1_CAP; edev->flags |= BNXT_EN_FLAG_ROCEV1_CAP;
if (bp->flags & BNXT_FLAG_ROCEV2_CAP) if (bp->flags & BNXT_FLAG_ROCEV2_CAP)
edev->flags |= BNXT_EN_FLAG_ROCEV2_CAP; edev->flags |= BNXT_EN_FLAG_ROCEV2_CAP;
if (bp->flags & BNXT_FLAG_VF)
edev->flags |= BNXT_EN_FLAG_VF;
edev->chip_num = bp->chip_num;
edev->hw_ring_stats_size = bp->hw_ring_stats_size;
edev->pf_port_id = bp->pf.port_id;
edev->en_state = bp->state;
} }
void bnxt_rdma_aux_device_init(struct bnxt *bp) void bnxt_rdma_aux_device_init(struct bnxt *bp)
......
...@@ -59,6 +59,9 @@ struct bnxt_en_dev { ...@@ -59,6 +59,9 @@ struct bnxt_en_dev {
BNXT_EN_FLAG_ROCEV2_CAP) BNXT_EN_FLAG_ROCEV2_CAP)
#define BNXT_EN_FLAG_MSIX_REQUESTED 0x4 #define BNXT_EN_FLAG_MSIX_REQUESTED 0x4
#define BNXT_EN_FLAG_ULP_STOPPED 0x8 #define BNXT_EN_FLAG_ULP_STOPPED 0x8
#define BNXT_EN_FLAG_VF 0x10
#define BNXT_EN_VF(edev) ((edev)->flags & BNXT_EN_FLAG_VF)
struct bnxt_ulp *ulp_tbl; struct bnxt_ulp *ulp_tbl;
int l2_db_size; /* Doorbell BAR size in int l2_db_size; /* Doorbell BAR size in
* bytes mapped by L2 * bytes mapped by L2
...@@ -68,6 +71,14 @@ struct bnxt_en_dev { ...@@ -68,6 +71,14 @@ struct bnxt_en_dev {
* bytes mapped as non- * bytes mapped as non-
* cacheable. * cacheable.
*/ */
u16 chip_num;
u16 hw_ring_stats_size;
u16 pf_port_id;
unsigned long en_state; /* Could be checked in
* RoCE driver suspend
* mode only. Will be
* updated in resume.
*/
}; };
static inline bool bnxt_ulp_registered(struct bnxt_en_dev *edev) static inline bool bnxt_ulp_registered(struct bnxt_en_dev *edev)
......
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