[RFC PATCH v4 03/27] qed: Add qed-NVMeTCP personality

Shai Malin malin1024 at gmail.com
Mon May 3 16:26:39 BST 2021


On 5/1/21 2:11 PM, Hannes Reinecke wrote:
> On 4/29/21 9:09 PM, Shai Malin wrote:
> > From: Omkar Kulkarni <okulkarni at 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 at marvell.com>
> > Signed-off-by: Prabhakar Kushwaha <pkushwaha at marvell.com>
> > Signed-off-by: Omkar Kulkarni <okulkarni at marvell.com>
> > Signed-off-by: Shai Malin <smalin at marvell.com>
> > Signed-off-by: Michal Kalderon <mkalderon at marvell.com>
> > Signed-off-by: Ariel Elior <aelior at 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 at 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



More information about the Linux-nvme mailing list