mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-28 20:02:17 +00:00
qed: Inform qedi the number of possible CQs
Now that management firmware is capable of telling us the number of CQs available for a given PF, qed needs to communicate the number to qedi so it would know have many to use. Signed-off-by: Yuval Mintz <Yuval.Mintz@cavium.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
3ddc48dc19
commit
08737a3fa3
4 changed files with 21 additions and 2 deletions
|
@ -225,8 +225,9 @@ enum QED_FEATURE {
|
||||||
QED_PF_L2_QUE,
|
QED_PF_L2_QUE,
|
||||||
QED_VF,
|
QED_VF,
|
||||||
QED_RDMA_CNQ,
|
QED_RDMA_CNQ,
|
||||||
QED_VF_L2_QUE,
|
QED_ISCSI_CQ,
|
||||||
QED_FCOE_CQ,
|
QED_FCOE_CQ,
|
||||||
|
QED_VF_L2_QUE,
|
||||||
QED_MAX_FEATURES,
|
QED_MAX_FEATURES,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -2045,12 +2045,17 @@ static void qed_hw_set_feat(struct qed_hwfn *p_hwfn)
|
||||||
QED_VF_L2_QUE));
|
QED_VF_L2_QUE));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (p_hwfn->hw_info.personality == QED_PCI_ISCSI)
|
||||||
|
feat_num[QED_ISCSI_CQ] = min_t(u32, RESC_NUM(p_hwfn, QED_SB),
|
||||||
|
RESC_NUM(p_hwfn,
|
||||||
|
QED_CMDQS_CQS));
|
||||||
DP_VERBOSE(p_hwfn,
|
DP_VERBOSE(p_hwfn,
|
||||||
NETIF_MSG_PROBE,
|
NETIF_MSG_PROBE,
|
||||||
"#PF_L2_QUEUES=%d VF_L2_QUEUES=%d #ROCE_CNQ=%d #SBS=%d\n",
|
"#PF_L2_QUEUES=%d VF_L2_QUEUES=%d #ROCE_CNQ=%d ISCSI_CQ=%d #SBS=%d\n",
|
||||||
(int)FEAT_NUM(p_hwfn, QED_PF_L2_QUE),
|
(int)FEAT_NUM(p_hwfn, QED_PF_L2_QUE),
|
||||||
(int)FEAT_NUM(p_hwfn, QED_VF_L2_QUE),
|
(int)FEAT_NUM(p_hwfn, QED_VF_L2_QUE),
|
||||||
(int)FEAT_NUM(p_hwfn, QED_RDMA_CNQ),
|
(int)FEAT_NUM(p_hwfn, QED_RDMA_CNQ),
|
||||||
|
(int)FEAT_NUM(p_hwfn, QED_ISCSI_CQ),
|
||||||
RESC_NUM(p_hwfn, QED_SB));
|
RESC_NUM(p_hwfn, QED_SB));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -181,6 +181,15 @@ qed_sp_iscsi_func_start(struct qed_hwfn *p_hwfn,
|
||||||
p_params = &p_hwfn->pf_params.iscsi_pf_params;
|
p_params = &p_hwfn->pf_params.iscsi_pf_params;
|
||||||
p_queue = &p_init->q_params;
|
p_queue = &p_init->q_params;
|
||||||
|
|
||||||
|
/* Sanity */
|
||||||
|
if (p_params->num_queues > p_hwfn->hw_info.feat_num[QED_ISCSI_CQ]) {
|
||||||
|
DP_ERR(p_hwfn,
|
||||||
|
"Cannot satisfy CQ amount. Queues requested %d, CQs available %d. Aborting function start\n",
|
||||||
|
p_params->num_queues,
|
||||||
|
p_hwfn->hw_info.resc_num[QED_ISCSI_CQ]);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
SET_FIELD(p_init->hdr.flags,
|
SET_FIELD(p_init->hdr.flags,
|
||||||
ISCSI_SLOW_PATH_HDR_LAYER_CODE, ISCSI_SLOW_PATH_LAYER_CODE);
|
ISCSI_SLOW_PATH_HDR_LAYER_CODE, ISCSI_SLOW_PATH_LAYER_CODE);
|
||||||
p_init->hdr.op_code = ISCSI_RAMROD_CMD_ID_INIT_FUNC;
|
p_init->hdr.op_code = ISCSI_RAMROD_CMD_ID_INIT_FUNC;
|
||||||
|
@ -1012,6 +1021,8 @@ static int qed_fill_iscsi_dev_info(struct qed_dev *cdev,
|
||||||
info->secondary_bdq_rq_addr =
|
info->secondary_bdq_rq_addr =
|
||||||
qed_iscsi_get_secondary_bdq_prod(hwfn, BDQ_ID_RQ);
|
qed_iscsi_get_secondary_bdq_prod(hwfn, BDQ_ID_RQ);
|
||||||
|
|
||||||
|
info->num_cqs = FEAT_NUM(hwfn, QED_ISCSI_CQ);
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -67,6 +67,8 @@ struct qed_dev_iscsi_info {
|
||||||
|
|
||||||
void __iomem *primary_dbq_rq_addr;
|
void __iomem *primary_dbq_rq_addr;
|
||||||
void __iomem *secondary_bdq_rq_addr;
|
void __iomem *secondary_bdq_rq_addr;
|
||||||
|
|
||||||
|
u8 num_cqs;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct qed_iscsi_id_params {
|
struct qed_iscsi_id_params {
|
||||||
|
|
Loading…
Reference in a new issue