From: Shai Malin <malin1024@gmail.com>
To: Hannes Reinecke <hare@suse.de>
Cc: Shai Malin <smalin@marvell.com>,
netdev@vger.kernel.org, linux-nvme@lists.infradead.org,
davem@davemloft.net, kuba@kernel.org, sagi@grimberg.me,
hch@lst.de, axboe@fb.com, kbusch@kernel.org,
Ariel Elior <aelior@marvell.com>,
Michal Kalderon <mkalderon@marvell.com>,
okulkarni@marvell.com, pkushwaha@marvell.com
Subject: Re: [RFC PATCH v4 03/27] qed: Add qed-NVMeTCP personality
Date: Mon, 3 May 2021 18:26:39 +0300 [thread overview]
Message-ID: <CAKKgK4x5Q1Y+qgkx55629BkFn=TNZDQGqNajaJ-EPVM6BXb6Sg@mail.gmail.com> (raw)
In-Reply-To: <6b933b6e-684a-fc58-8db6-4404806ab114@suse.de>
On 5/1/21 2:11 PM, Hannes Reinecke wrote:
> On 4/29/21 9:09 PM, Shai Malin wrote:
> > From: Omkar Kulkarni <okulkarni@marvell.com>
> >
> > This patch adds qed NVMeTCP personality in order to support the NVMeTCP
> > qed functionalities and manage the HW device shared resources.
> > The same design is used with Eth (qede), RDMA(qedr), iSCSI (qedi) and
> > FCoE (qedf).
> >
> > Acked-by: Igor Russkikh <irusskikh@marvell.com>
> > Signed-off-by: Prabhakar Kushwaha <pkushwaha@marvell.com>
> > Signed-off-by: Omkar Kulkarni <okulkarni@marvell.com>
> > Signed-off-by: Shai Malin <smalin@marvell.com>
> > Signed-off-by: Michal Kalderon <mkalderon@marvell.com>
> > Signed-off-by: Ariel Elior <aelior@marvell.com>
> > ---
> > drivers/net/ethernet/qlogic/qed/qed.h | 3 ++
> > drivers/net/ethernet/qlogic/qed/qed_cxt.c | 32 ++++++++++++++
> > drivers/net/ethernet/qlogic/qed/qed_cxt.h | 1 +
> > drivers/net/ethernet/qlogic/qed/qed_dev.c | 44 ++++++++++++++++---
> > drivers/net/ethernet/qlogic/qed/qed_hsi.h | 3 +-
> > drivers/net/ethernet/qlogic/qed/qed_ll2.c | 31 ++++++++-----
> > drivers/net/ethernet/qlogic/qed/qed_mcp.c | 3 ++
> > drivers/net/ethernet/qlogic/qed/qed_mng_tlv.c | 3 +-
> > drivers/net/ethernet/qlogic/qed/qed_ooo.c | 5 ++-
> > .../net/ethernet/qlogic/qed/qed_sp_commands.c | 1 +
> > 10 files changed, 108 insertions(+), 18 deletions(-)
> >
> > diff --git a/drivers/net/ethernet/qlogic/qed/qed.h b/drivers/net/ethernet/qlogic/qed/qed.h
> > index 91d4635009ab..7ae648c4edba 100644
> > --- a/drivers/net/ethernet/qlogic/qed/qed.h
> > +++ b/drivers/net/ethernet/qlogic/qed/qed.h
> > @@ -200,6 +200,7 @@ enum qed_pci_personality {
> > QED_PCI_ETH,
> > QED_PCI_FCOE,
> > QED_PCI_ISCSI,
> > + QED_PCI_NVMETCP,
> > QED_PCI_ETH_ROCE,
> > QED_PCI_ETH_IWARP,
> > QED_PCI_ETH_RDMA,
> > @@ -285,6 +286,8 @@ struct qed_hw_info {
> > ((dev)->hw_info.personality == QED_PCI_FCOE)
> > #define QED_IS_ISCSI_PERSONALITY(dev) \
> > ((dev)->hw_info.personality == QED_PCI_ISCSI)
> > +#define QED_IS_NVMETCP_PERSONALITY(dev) \
> > + ((dev)->hw_info.personality == QED_PCI_NVMETCP)
> >
> So you have a distinct PCI personality for NVMe-oF, but not for the
> protocol? Strange.
> Why don't you have a distinct NVMe-oF protocol ID?
>
> > /* Resource Allocation scheme results */
> > u32 resc_start[QED_MAX_RESC];
> > diff --git a/drivers/net/ethernet/qlogic/qed/qed_cxt.c b/drivers/net/ethernet/qlogic/qed/qed_cxt.c
> > index 0a22f8ce9a2c..6cef75723e38 100644
> > --- a/drivers/net/ethernet/qlogic/qed/qed_cxt.c
> > +++ b/drivers/net/ethernet/qlogic/qed/qed_cxt.c
> > @@ -2106,6 +2106,30 @@ int qed_cxt_set_pf_params(struct qed_hwfn *p_hwfn, u32 rdma_tasks)
> > }
> > break;
> > }
> > + case QED_PCI_NVMETCP:
> > + {
> > + struct qed_nvmetcp_pf_params *p_params;
> > +
> > + p_params = &p_hwfn->pf_params.nvmetcp_pf_params;
> > +
> > + if (p_params->num_cons && p_params->num_tasks) {
> > + qed_cxt_set_proto_cid_count(p_hwfn,
> > + PROTOCOLID_NVMETCP,
> > + p_params->num_cons,
> > + 0);
> > +
> > + qed_cxt_set_proto_tid_count(p_hwfn,
> > + PROTOCOLID_NVMETCP,
> > + QED_CTX_NVMETCP_TID_SEG,
> > + 0,
> > + p_params->num_tasks,
> > + true);
> > + } else {
> > + DP_INFO(p_hwfn->cdev,
> > + "NvmeTCP personality used without setting params!\n");
> > + }
> > + break;
> > + }
> > default:
> > return -EINVAL;
> > }
> > @@ -2132,6 +2156,10 @@ int qed_cxt_get_tid_mem_info(struct qed_hwfn *p_hwfn,
> > proto = PROTOCOLID_ISCSI;
> > seg = QED_CXT_ISCSI_TID_SEG;
> > break;
> > + case QED_PCI_NVMETCP:
> > + proto = PROTOCOLID_NVMETCP;
> > + seg = QED_CTX_NVMETCP_TID_SEG;
> > + break;
> > default:
> > return -EINVAL;
> > }
> > @@ -2458,6 +2486,10 @@ int qed_cxt_get_task_ctx(struct qed_hwfn *p_hwfn,
> > proto = PROTOCOLID_ISCSI;
> > seg = QED_CXT_ISCSI_TID_SEG;
> > break;
> > + case QED_PCI_NVMETCP:
> > + proto = PROTOCOLID_NVMETCP;
> > + seg = QED_CTX_NVMETCP_TID_SEG;
> > + break;
> > default:
> > return -EINVAL;
> > }
> > diff --git a/drivers/net/ethernet/qlogic/qed/qed_cxt.h b/drivers/net/ethernet/qlogic/qed/qed_cxt.h
> > index 056e79620a0e..8f1a77cb33f6 100644
> > --- a/drivers/net/ethernet/qlogic/qed/qed_cxt.h
> > +++ b/drivers/net/ethernet/qlogic/qed/qed_cxt.h
> > @@ -51,6 +51,7 @@ int qed_cxt_get_tid_mem_info(struct qed_hwfn *p_hwfn,
> > struct qed_tid_mem *p_info);
> >
> > #define QED_CXT_ISCSI_TID_SEG PROTOCOLID_ISCSI
> > +#define QED_CTX_NVMETCP_TID_SEG PROTOCOLID_NVMETCP
> > #define QED_CXT_ROCE_TID_SEG PROTOCOLID_ROCE
> > #define QED_CXT_FCOE_TID_SEG PROTOCOLID_FCOE
> > enum qed_cxt_elem_type {
> > diff --git a/drivers/net/ethernet/qlogic/qed/qed_dev.c b/drivers/net/ethernet/qlogic/qed/qed_dev.c
> > index d2f5855b2ea7..d3f8cc42d07e 100644
> > --- a/drivers/net/ethernet/qlogic/qed/qed_dev.c
> > +++ b/drivers/net/ethernet/qlogic/qed/qed_dev.c
> > @@ -37,6 +37,7 @@
> > #include "qed_sriov.h"
> > #include "qed_vf.h"
> > #include "qed_rdma.h"
> > +#include "qed_nvmetcp.h"
> >
> > static DEFINE_SPINLOCK(qm_lock);
> >
> > @@ -667,7 +668,8 @@ qed_llh_set_engine_affin(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt)
> > }
> >
> > /* Storage PF is bound to a single engine while L2 PF uses both */
> > - if (QED_IS_FCOE_PERSONALITY(p_hwfn) || QED_IS_ISCSI_PERSONALITY(p_hwfn))
> > + if (QED_IS_FCOE_PERSONALITY(p_hwfn) || QED_IS_ISCSI_PERSONALITY(p_hwfn) ||
> > + QED_IS_NVMETCP_PERSONALITY(p_hwfn))
> > eng = cdev->fir_affin ? QED_ENG1 : QED_ENG0;
> > else /* L2_PERSONALITY */
> > eng = QED_BOTH_ENG;
> > @@ -1164,6 +1166,9 @@ void qed_llh_remove_mac_filter(struct qed_dev *cdev,
> > if (!test_bit(QED_MF_LLH_MAC_CLSS, &cdev->mf_bits))
> > goto out;
> >
> > + if (QED_IS_NVMETCP_PERSONALITY(p_hwfn))
> > + return;
> > +
> > ether_addr_copy(filter.mac.addr, mac_addr);
> > rc = qed_llh_shadow_remove_filter(cdev, ppfid, &filter, &filter_idx,
> > &ref_cnt);
> > @@ -1381,6 +1386,11 @@ void qed_resc_free(struct qed_dev *cdev)
> > qed_ooo_free(p_hwfn);
> > }
> >
> > + if (p_hwfn->hw_info.personality == QED_PCI_NVMETCP) {
> > + qed_nvmetcp_free(p_hwfn);
> > + qed_ooo_free(p_hwfn);
> > + }
> > +
> > if (QED_IS_RDMA_PERSONALITY(p_hwfn) && rdma_info) {
> > qed_spq_unregister_async_cb(p_hwfn, rdma_info->proto);
> > qed_rdma_info_free(p_hwfn);
> > @@ -1423,6 +1433,7 @@ static u32 qed_get_pq_flags(struct qed_hwfn *p_hwfn)
> > flags |= PQ_FLAGS_OFLD;
> > break;
> > case QED_PCI_ISCSI:
> > + case QED_PCI_NVMETCP:
> > flags |= PQ_FLAGS_ACK | PQ_FLAGS_OOO | PQ_FLAGS_OFLD;
> > break;
> > case QED_PCI_ETH_ROCE:
> > @@ -2269,6 +2280,12 @@ int qed_resc_alloc(struct qed_dev *cdev)
> > PROTOCOLID_ISCSI,
> > NULL);
> > n_eqes += 2 * num_cons;
> > + } else if (p_hwfn->hw_info.personality == QED_PCI_NVMETCP) {
> > + num_cons =
> > + qed_cxt_get_proto_cid_count(p_hwfn,
> > + PROTOCOLID_NVMETCP,
> > + NULL);
> > + n_eqes += 2 * num_cons;
> > }
> >
> > if (n_eqes > 0xFFFF) {
> > @@ -2313,6 +2330,15 @@ int qed_resc_alloc(struct qed_dev *cdev)
> > goto alloc_err;
> > }
> >
> > + if (p_hwfn->hw_info.personality == QED_PCI_NVMETCP) {
> > + rc = qed_nvmetcp_alloc(p_hwfn);
> > + if (rc)
> > + goto alloc_err;
> > + rc = qed_ooo_alloc(p_hwfn);
> > + if (rc)
> > + goto alloc_err;
> > + }
> > +
> > if (QED_IS_RDMA_PERSONALITY(p_hwfn)) {
> > rc = qed_rdma_info_alloc(p_hwfn);
> > if (rc)
> > @@ -2393,6 +2419,11 @@ void qed_resc_setup(struct qed_dev *cdev)
> > qed_iscsi_setup(p_hwfn);
> > qed_ooo_setup(p_hwfn);
> > }
> > +
> > + if (p_hwfn->hw_info.personality == QED_PCI_NVMETCP) {
> > + qed_nvmetcp_setup(p_hwfn);
> > + qed_ooo_setup(p_hwfn);
> > + }
> > }
> > }
> >
> > @@ -2854,7 +2885,8 @@ static int qed_hw_init_pf(struct qed_hwfn *p_hwfn,
> >
> > /* Protocol Configuration */
> > STORE_RT_REG(p_hwfn, PRS_REG_SEARCH_TCP_RT_OFFSET,
> > - (p_hwfn->hw_info.personality == QED_PCI_ISCSI) ? 1 : 0);
> > + ((p_hwfn->hw_info.personality == QED_PCI_ISCSI) ||
> > + (p_hwfn->hw_info.personality == QED_PCI_NVMETCP)) ? 1 : 0);
> > STORE_RT_REG(p_hwfn, PRS_REG_SEARCH_FCOE_RT_OFFSET,
> > (p_hwfn->hw_info.personality == QED_PCI_FCOE) ? 1 : 0);
> > STORE_RT_REG(p_hwfn, PRS_REG_SEARCH_ROCE_RT_OFFSET, 0);
> > @@ -3531,7 +3563,7 @@ static void qed_hw_set_feat(struct qed_hwfn *p_hwfn)
> > RESC_NUM(p_hwfn,
> > QED_CMDQS_CQS));
> >
> > - if (QED_IS_ISCSI_PERSONALITY(p_hwfn))
> > + if (QED_IS_ISCSI_PERSONALITY(p_hwfn) || QED_IS_NVMETCP_PERSONALITY(p_hwfn))
> > feat_num[QED_ISCSI_CQ] = min_t(u32, sb_cnt.cnt,
> > RESC_NUM(p_hwfn,
> > QED_CMDQS_CQS));
> > @@ -3734,7 +3766,8 @@ int qed_hw_get_dflt_resc(struct qed_hwfn *p_hwfn,
> > break;
> > case QED_BDQ:
> > if (p_hwfn->hw_info.personality != QED_PCI_ISCSI &&
> > - p_hwfn->hw_info.personality != QED_PCI_FCOE)
> > + p_hwfn->hw_info.personality != QED_PCI_FCOE &&
> > + p_hwfn->hw_info.personality != QED_PCI_NVMETCP)
> > *p_resc_num = 0;
> > else
> > *p_resc_num = 1;
> > @@ -3755,7 +3788,8 @@ int qed_hw_get_dflt_resc(struct qed_hwfn *p_hwfn,
> > *p_resc_start = 0;
> > else if (p_hwfn->cdev->num_ports_in_engine == 4)
> > *p_resc_start = p_hwfn->port_id;
> > - else if (p_hwfn->hw_info.personality == QED_PCI_ISCSI)
> > + else if (p_hwfn->hw_info.personality == QED_PCI_ISCSI ||
> > + p_hwfn->hw_info.personality == QED_PCI_NVMETCP)
> > *p_resc_start = p_hwfn->port_id;
> > else if (p_hwfn->hw_info.personality == QED_PCI_FCOE)
> > *p_resc_start = p_hwfn->port_id + 2;
> > diff --git a/drivers/net/ethernet/qlogic/qed/qed_hsi.h b/drivers/net/ethernet/qlogic/qed/qed_hsi.h
> > index 24472f6a83c2..9c9ec8f53ef8 100644
> > --- a/drivers/net/ethernet/qlogic/qed/qed_hsi.h
> > +++ b/drivers/net/ethernet/qlogic/qed/qed_hsi.h
> > @@ -12148,7 +12148,8 @@ struct public_func {
> > #define FUNC_MF_CFG_PROTOCOL_ISCSI 0x00000010
> > #define FUNC_MF_CFG_PROTOCOL_FCOE 0x00000020
> > #define FUNC_MF_CFG_PROTOCOL_ROCE 0x00000030
> > -#define FUNC_MF_CFG_PROTOCOL_MAX 0x00000030
> > +#define FUNC_MF_CFG_PROTOCOL_NVMETCP 0x00000040
> > +#define FUNC_MF_CFG_PROTOCOL_MAX 0x00000040
> >
> > #define FUNC_MF_CFG_MIN_BW_MASK 0x0000ff00
> > #define FUNC_MF_CFG_MIN_BW_SHIFT 8
> > diff --git a/drivers/net/ethernet/qlogic/qed/qed_ll2.c b/drivers/net/ethernet/qlogic/qed/qed_ll2.c
> > index 49783f365079..88bfcdcd4a4c 100644
> > --- a/drivers/net/ethernet/qlogic/qed/qed_ll2.c
> > +++ b/drivers/net/ethernet/qlogic/qed/qed_ll2.c
> > @@ -960,7 +960,8 @@ static int qed_sp_ll2_rx_queue_start(struct qed_hwfn *p_hwfn,
> >
> > if (test_bit(QED_MF_LL2_NON_UNICAST, &p_hwfn->cdev->mf_bits) &&
> > p_ramrod->main_func_queue && conn_type != QED_LL2_TYPE_ROCE &&
> > - conn_type != QED_LL2_TYPE_IWARP) {
> > + conn_type != QED_LL2_TYPE_IWARP &&
> > + (!QED_IS_NVMETCP_PERSONALITY(p_hwfn))) {
> > p_ramrod->mf_si_bcast_accept_all = 1;
> > p_ramrod->mf_si_mcast_accept_all = 1;
> > } else {
> > @@ -1049,6 +1050,8 @@ static int qed_sp_ll2_tx_queue_start(struct qed_hwfn *p_hwfn,
> > case QED_LL2_TYPE_OOO:
> > if (p_hwfn->hw_info.personality == QED_PCI_ISCSI)
> > p_ramrod->conn_type = PROTOCOLID_ISCSI;
> > + else if (p_hwfn->hw_info.personality == QED_PCI_NVMETCP)
> > + p_ramrod->conn_type = PROTOCOLID_NVMETCP;
> > else
> > p_ramrod->conn_type = PROTOCOLID_IWARP;
> > break;
> > @@ -1634,7 +1637,8 @@ int qed_ll2_establish_connection(void *cxt, u8 connection_handle)
> > if (rc)
> > goto out;
> >
> > - if (!QED_IS_RDMA_PERSONALITY(p_hwfn))
> > + if (!QED_IS_RDMA_PERSONALITY(p_hwfn) &&
> > + !QED_IS_NVMETCP_PERSONALITY(p_hwfn))
> > qed_wr(p_hwfn, p_ptt, PRS_REG_USE_LIGHT_L2, 1);
> >
> > qed_ll2_establish_connection_ooo(p_hwfn, p_ll2_conn);
> > @@ -2376,7 +2380,8 @@ static int qed_ll2_start_ooo(struct qed_hwfn *p_hwfn,
> > static bool qed_ll2_is_storage_eng1(struct qed_dev *cdev)
> > {
> > return (QED_IS_FCOE_PERSONALITY(QED_LEADING_HWFN(cdev)) ||
> > - QED_IS_ISCSI_PERSONALITY(QED_LEADING_HWFN(cdev))) &&
> > + QED_IS_ISCSI_PERSONALITY(QED_LEADING_HWFN(cdev)) ||
> > + QED_IS_NVMETCP_PERSONALITY(QED_LEADING_HWFN(cdev))) &&
> > (QED_AFFIN_HWFN(cdev) != QED_LEADING_HWFN(cdev));
> > }
> >
> > @@ -2402,11 +2407,13 @@ static int qed_ll2_stop(struct qed_dev *cdev)
> >
> > if (cdev->ll2->handle == QED_LL2_UNUSED_HANDLE)
> > return 0;
> > + if (!QED_IS_NVMETCP_PERSONALITY(p_hwfn))
> > + qed_llh_remove_mac_filter(cdev, 0, cdev->ll2_mac_address);
> >
> > qed_llh_remove_mac_filter(cdev, 0, cdev->ll2_mac_address);
> > eth_zero_addr(cdev->ll2_mac_address);
> >
> > - if (QED_IS_ISCSI_PERSONALITY(p_hwfn))
> > + if (QED_IS_ISCSI_PERSONALITY(p_hwfn) || QED_IS_NVMETCP_PERSONALITY(p_hwfn))
> > qed_ll2_stop_ooo(p_hwfn);
> >
> > /* In CMT mode, LL2 is always started on engine 0 for a storage PF */
> > @@ -2442,6 +2449,7 @@ static int __qed_ll2_start(struct qed_hwfn *p_hwfn,
> > conn_type = QED_LL2_TYPE_FCOE;
> > break;
> > case QED_PCI_ISCSI:
> > + case QED_PCI_NVMETCP:
> > conn_type = QED_LL2_TYPE_ISCSI;
> > break;
> > case QED_PCI_ETH_ROCE:
> > @@ -2567,7 +2575,7 @@ static int qed_ll2_start(struct qed_dev *cdev, struct qed_ll2_params *params)
> > }
> > }
> >
> > - if (QED_IS_ISCSI_PERSONALITY(p_hwfn)) {
> > + if (QED_IS_ISCSI_PERSONALITY(p_hwfn) || QED_IS_NVMETCP_PERSONALITY(p_hwfn)) {
> > DP_VERBOSE(cdev, QED_MSG_STORAGE, "Starting OOO LL2 queue\n");
> > rc = qed_ll2_start_ooo(p_hwfn, params);
> > if (rc) {
> > @@ -2576,10 +2584,13 @@ static int qed_ll2_start(struct qed_dev *cdev, struct qed_ll2_params *params)
> > }
> > }
> >
> > - rc = qed_llh_add_mac_filter(cdev, 0, params->ll2_mac_address);
> > - if (rc) {
> > - DP_NOTICE(cdev, "Failed to add an LLH filter\n");
> > - goto err3;
> > + if (!QED_IS_NVMETCP_PERSONALITY(p_hwfn)) {
> > + rc = qed_llh_add_mac_filter(cdev, 0, params->ll2_mac_address);
> > + if (rc) {
> > + DP_NOTICE(cdev, "Failed to add an LLH filter\n");
> > + goto err3;
> > + }
> > +
> > }
> >
> > ether_addr_copy(cdev->ll2_mac_address, params->ll2_mac_address);
> > @@ -2587,7 +2598,7 @@ static int qed_ll2_start(struct qed_dev *cdev, struct qed_ll2_params *params)
> > return 0;
> >
> > err3:
> > - if (QED_IS_ISCSI_PERSONALITY(p_hwfn))
> > + if (QED_IS_ISCSI_PERSONALITY(p_hwfn) || QED_IS_NVMETCP_PERSONALITY(p_hwfn))
> > qed_ll2_stop_ooo(p_hwfn);
> > err2:
> > if (b_is_storage_eng1)
> > diff --git a/drivers/net/ethernet/qlogic/qed/qed_mcp.c b/drivers/net/ethernet/qlogic/qed/qed_mcp.c
> > index cd882c453394..4387292c37e2 100644
> > --- a/drivers/net/ethernet/qlogic/qed/qed_mcp.c
> > +++ b/drivers/net/ethernet/qlogic/qed/qed_mcp.c
> > @@ -2446,6 +2446,9 @@ qed_mcp_get_shmem_proto(struct qed_hwfn *p_hwfn,
> > case FUNC_MF_CFG_PROTOCOL_ISCSI:
> > *p_proto = QED_PCI_ISCSI;
> > break;
> > + case FUNC_MF_CFG_PROTOCOL_NVMETCP:
> > + *p_proto = QED_PCI_NVMETCP;
> > + break;
> > case FUNC_MF_CFG_PROTOCOL_FCOE:
> > *p_proto = QED_PCI_FCOE;
> > break;
> > diff --git a/drivers/net/ethernet/qlogic/qed/qed_mng_tlv.c b/drivers/net/ethernet/qlogic/qed/qed_mng_tlv.c
> > index 3e3192a3ad9b..6190adf965bc 100644
> > --- a/drivers/net/ethernet/qlogic/qed/qed_mng_tlv.c
> > +++ b/drivers/net/ethernet/qlogic/qed/qed_mng_tlv.c
> > @@ -1306,7 +1306,8 @@ int qed_mfw_process_tlv_req(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt)
> > }
> >
> > if ((tlv_group & QED_MFW_TLV_ISCSI) &&
> > - p_hwfn->hw_info.personality != QED_PCI_ISCSI) {
> > + p_hwfn->hw_info.personality != QED_PCI_ISCSI &&
> > + p_hwfn->hw_info.personality != QED_PCI_NVMETCP) {
> > DP_VERBOSE(p_hwfn, QED_MSG_SP,
> > "Skipping iSCSI TLVs for non-iSCSI function\n");
> > tlv_group &= ~QED_MFW_TLV_ISCSI;
> > diff --git a/drivers/net/ethernet/qlogic/qed/qed_ooo.c b/drivers/net/ethernet/qlogic/qed/qed_ooo.c
> > index 88353aa404dc..d37bb2463f98 100644
> > --- a/drivers/net/ethernet/qlogic/qed/qed_ooo.c
> > +++ b/drivers/net/ethernet/qlogic/qed/qed_ooo.c
> > @@ -16,7 +16,7 @@
> > #include "qed_ll2.h"
> > #include "qed_ooo.h"
> > #include "qed_cxt.h"
> > -
> > +#include "qed_nvmetcp.h"
> > static struct qed_ooo_archipelago
> > *qed_ooo_seek_archipelago(struct qed_hwfn *p_hwfn,
> > struct qed_ooo_info
> > @@ -85,6 +85,9 @@ int qed_ooo_alloc(struct qed_hwfn *p_hwfn)
> > case QED_PCI_ISCSI:
> > proto = PROTOCOLID_ISCSI;
> > break;
> > + case QED_PCI_NVMETCP:
> > + proto = PROTOCOLID_NVMETCP;
> > + break;
> > case QED_PCI_ETH_RDMA:
> > case QED_PCI_ETH_IWARP:
> > proto = PROTOCOLID_IWARP;
> > diff --git a/drivers/net/ethernet/qlogic/qed/qed_sp_commands.c b/drivers/net/ethernet/qlogic/qed/qed_sp_commands.c
> > index aa71adcf31ee..60b3876387a9 100644
> > --- a/drivers/net/ethernet/qlogic/qed/qed_sp_commands.c
> > +++ b/drivers/net/ethernet/qlogic/qed/qed_sp_commands.c
> > @@ -385,6 +385,7 @@ int qed_sp_pf_start(struct qed_hwfn *p_hwfn,
> > p_ramrod->personality = PERSONALITY_FCOE;
> > break;
> > case QED_PCI_ISCSI:
> > + case QED_PCI_NVMETCP:
> > p_ramrod->personality = PERSONALITY_ISCSI;
> > break;
> > case QED_PCI_ETH_ROCE:
> >
> As indicated, I do find this mix of 'nvmetcp is nearly iscsi' a bit
> strange. I would have preferred to have distinct types for nvmetcp.
>
PERSONALITY_ determines the FW resource layout, which is the same for iSCSI and
NVMeTCP. I will change PERSONALITY_ISCSI to PERSONALITY_TCP_ULP.
> Cheers,
>
> Hannes
> --
> Dr. Hannes Reinecke Kernel Storage Architect
> hare@suse.de +49 911 74053 688
> SUSE Software Solutions GmbH, Maxfeldstr. 5, 90409 Nürnberg
> HRB 36809 (AG Nürnberg), Geschäftsführer: Felix Imendörffer
next prev parent reply other threads:[~2021-05-03 15:26 UTC|newest]
Thread overview: 82+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-04-29 19:08 [RFC PATCH v4 00/27] NVMeTCP Offload ULP and QEDN Device Driver Shai Malin
2021-04-29 19:09 ` [RFC PATCH v4 01/27] qed: Add NVMeTCP Offload PF Level FW and HW HSI Shai Malin
2021-05-01 16:50 ` Hannes Reinecke
2021-05-03 15:23 ` Shai Malin
2021-04-29 19:09 ` [RFC PATCH v4 02/27] qed: Add NVMeTCP Offload Connection " Shai Malin
2021-05-01 17:28 ` Hannes Reinecke
2021-05-03 15:25 ` Shai Malin
2021-04-29 19:09 ` [RFC PATCH v4 03/27] qed: Add qed-NVMeTCP personality Shai Malin
2021-05-02 11:11 ` Hannes Reinecke
2021-05-03 15:26 ` Shai Malin [this message]
2021-04-29 19:09 ` [RFC PATCH v4 04/27] qed: Add support of HW filter block Shai Malin
2021-05-02 11:13 ` Hannes Reinecke
2021-05-03 15:27 ` Shai Malin
2021-04-29 19:09 ` [RFC PATCH v4 05/27] qed: Add NVMeTCP Offload IO Level FW and HW HSI Shai Malin
2021-05-02 11:22 ` Hannes Reinecke
2021-05-04 16:25 ` Shai Malin
2021-04-29 19:09 ` [RFC PATCH v4 06/27] qed: Add NVMeTCP Offload IO Level FW Initializations Shai Malin
2021-05-02 11:24 ` Hannes Reinecke
2021-05-04 16:28 ` Shai Malin
2021-04-29 19:09 ` [RFC PATCH v4 07/27] qed: Add IP services APIs support Shai Malin
2021-05-02 11:26 ` Hannes Reinecke
2021-05-03 15:44 ` Shai Malin
2021-04-29 19:09 ` [RFC PATCH v4 08/27] nvme-tcp-offload: Add nvme-tcp-offload - NVMeTCP HW offload ULP Shai Malin
2021-05-01 12:18 ` Hannes Reinecke
2021-05-03 15:46 ` Shai Malin
2021-04-29 19:09 ` [RFC PATCH v4 09/27] nvme-fabrics: Move NVMF_ALLOWED_OPTS and NVMF_REQUIRED_OPTS definitions Shai Malin
2021-05-01 12:19 ` Hannes Reinecke
2021-05-03 15:50 ` Shai Malin
2021-04-29 19:09 ` [RFC PATCH v4 10/27] nvme-tcp-offload: Add device scan implementation Shai Malin
2021-05-01 12:25 ` Hannes Reinecke
2021-05-05 17:52 ` Shai Malin
2021-04-29 19:09 ` [RFC PATCH v4 11/27] nvme-tcp-offload: Add controller level implementation Shai Malin
2021-04-29 19:09 ` [RFC PATCH v4 12/27] nvme-tcp-offload: Add controller level error recovery implementation Shai Malin
2021-05-01 16:29 ` Hannes Reinecke
2021-05-03 15:52 ` Shai Malin
2021-04-29 19:09 ` [RFC PATCH v4 13/27] nvme-tcp-offload: Add queue level implementation Shai Malin
2021-05-01 16:36 ` Hannes Reinecke
2021-05-03 15:56 ` Shai Malin
2021-04-29 19:09 ` [RFC PATCH v4 14/27] nvme-tcp-offload: Add IO " Shai Malin
2021-05-01 16:38 ` Hannes Reinecke
2021-05-04 16:34 ` Shai Malin
2021-04-29 19:09 ` [RFC PATCH v4 15/27] nvme-tcp-offload: Add Timeout and ASYNC Support Shai Malin
2021-05-01 16:45 ` Hannes Reinecke
2021-05-04 16:49 ` Shai Malin
2021-04-29 19:09 ` [RFC PATCH v4 16/27] qedn: Add qedn - Marvell's NVMeTCP HW offload vendor driver Shai Malin
2021-05-02 11:27 ` Hannes Reinecke
2021-05-04 16:52 ` Shai Malin
2021-04-29 19:09 ` [RFC PATCH v4 17/27] qedn: Add qedn probe Shai Malin
2021-05-02 11:28 ` Hannes Reinecke
2021-05-08 11:01 ` Shai Malin
2021-04-29 19:09 ` [RFC PATCH v4 18/27] qedn: Add qedn_claim_dev API support Shai Malin
2021-05-02 11:29 ` Hannes Reinecke
2021-05-07 13:57 ` Shai Malin
2021-04-29 19:09 ` [RFC PATCH v4 19/27] qedn: Add IRQ and fast-path resources initializations Shai Malin
2021-05-02 11:32 ` Hannes Reinecke
2021-05-05 17:54 ` Shai Malin
2021-04-29 19:09 ` [RFC PATCH v4 20/27] qedn: Add connection-level slowpath functionality Shai Malin
2021-05-02 11:37 ` Hannes Reinecke
2021-05-05 17:56 ` Shai Malin
2021-04-29 19:09 ` [RFC PATCH v4 21/27] qedn: Add support of configuring HW filter block Shai Malin
2021-05-02 11:38 ` Hannes Reinecke
2021-05-05 17:57 ` Shai Malin
2021-04-29 19:09 ` [RFC PATCH v4 22/27] qedn: Add IO level nvme_req and fw_cq workqueues Shai Malin
2021-05-02 11:42 ` Hannes Reinecke
2021-05-07 13:56 ` Shai Malin
2021-04-29 19:09 ` [RFC PATCH v4 23/27] qedn: Add support of Task and SGL Shai Malin
2021-05-02 11:48 ` Hannes Reinecke
2021-05-07 14:00 ` Shai Malin
2021-04-29 19:09 ` [RFC PATCH v4 24/27] qedn: Add support of NVME ICReq & ICResp Shai Malin
2021-05-02 11:53 ` Hannes Reinecke
2021-05-05 18:01 ` Shai Malin
2021-04-29 19:09 ` [RFC PATCH v4 25/27] qedn: Add IO level fastpath functionality Shai Malin
2021-05-02 11:54 ` Hannes Reinecke
2021-05-05 18:04 ` Shai Malin
2021-04-29 19:09 ` [RFC PATCH v4 26/27] qedn: Add Connection and IO level recovery flows Shai Malin
2021-05-02 11:57 ` Hannes Reinecke
2021-05-05 18:06 ` Shai Malin
2021-04-29 19:09 ` [RFC PATCH v4 27/27] qedn: Add support of ASYNC Shai Malin
2021-05-02 11:59 ` Hannes Reinecke
2021-05-05 18:08 ` Shai Malin
2021-05-01 16:47 ` [RFC PATCH v4 00/27] NVMeTCP Offload ULP and QEDN Device Driver Hannes Reinecke
2021-05-03 15:13 ` Shai Malin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CAKKgK4x5Q1Y+qgkx55629BkFn=TNZDQGqNajaJ-EPVM6BXb6Sg@mail.gmail.com' \
--to=malin1024@gmail.com \
--cc=aelior@marvell.com \
--cc=axboe@fb.com \
--cc=davem@davemloft.net \
--cc=hare@suse.de \
--cc=hch@lst.de \
--cc=kbusch@kernel.org \
--cc=kuba@kernel.org \
--cc=linux-nvme@lists.infradead.org \
--cc=mkalderon@marvell.com \
--cc=netdev@vger.kernel.org \
--cc=okulkarni@marvell.com \
--cc=pkushwaha@marvell.com \
--cc=sagi@grimberg.me \
--cc=smalin@marvell.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).