From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 5C921A04A2; Wed, 6 Nov 2019 07:46:11 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 9BED01BF5B; Wed, 6 Nov 2019 07:46:10 +0100 (CET) Received: from mail-io1-f67.google.com (mail-io1-f67.google.com [209.85.166.67]) by dpdk.org (Postfix) with ESMTP id 5BA7AE07 for ; Wed, 6 Nov 2019 07:46:08 +0100 (CET) Received: by mail-io1-f67.google.com with SMTP id c11so25733891iom.10 for ; Tue, 05 Nov 2019 22:46:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=uhxOBJMuZVFW4z0tuhzhLXel1VVv9Lpcwq9ZhsaHTSM=; b=pxLjmwUs+ZliTwvQH43ku3MxzJnrGfiW3udAJp0M+TJdxV0QeVOnFw26XaSOaCsE7m e4OYmIruUx/3DWZJkKi9I6l/RbtqMzDSMoaLoz522bMYz8uzzf79gBiaSjuHvhwNooZB uAAZS0tg6EXyAMX79hL9fywLjvh/GNqRix8txhw0ZuzX2PTVisfB7Dx9XNr711uSeqNe DqU3rrSv1nJGYyaMaArrwZqVSqeHKGtLC2QmD4UMWK7SaqOsThxYR6Vjr0kxNFaBEGAB K7Hc9K6hCpqBx4wwRXbuQyD8RsOacXrx/qQOy4U1HDnEmCXykHDHGlXcewKlSkNgsuBg iXlA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=uhxOBJMuZVFW4z0tuhzhLXel1VVv9Lpcwq9ZhsaHTSM=; b=cHZeaIGcsa1MqV2VUBymr0zQ91F2/HoN9U7rb3mm4Xo9+1iYO2OJ5iLZkxdEEtYKFt RYFAScVT8OpTfidAiovnqBSyzVjwFpoLJV+Q/FhVDculsRC262DHVXLZ8142Nbk8Akmg tHZ7G0yRRloSFR4rps9Q/oGy7AOGeALZc2ucNV8qlKP4VfQpZLf/v48sSeU+OEOymXHD t+CvmvThsmWwuDcaJXwKXbtxxtlVMS7MCP+VQkEroosIhJRfZLpelfSQy0HVcqrFfgvs XmlabyWb72qYRlONLPg4aHIL6Ch/bbg7LuU+dX4Yig6igzBxHxF1yJ7gl/HGNhHTSpgR kHDA== X-Gm-Message-State: APjAAAWb1Oq0Q8hUmzlASr2fFkG9LVnauwMWyLhJ8Zc2LNb1EwIxrH/Y gbhsFSLo1aYXW9D3p9nJjzUsFSBXWFwzur6m7ps415n+pHI= X-Google-Smtp-Source: APXvYqzshDdmKsg5vEzUgQV5ZhLqSMoV819yoWRHsrsc8a9Oj7AF3znKgAT6NQfb4KjA1pLeUHL6sbPMl6Avv/++nrs= X-Received: by 2002:a6b:e403:: with SMTP id u3mr5298922iog.130.1573022767079; Tue, 05 Nov 2019 22:46:07 -0800 (PST) MIME-Version: 1.0 References: <20191030140821.7860-1-snilla@marvell.com> In-Reply-To: <20191030140821.7860-1-snilla@marvell.com> From: Jerin Jacob Date: Wed, 6 Nov 2019 12:15:50 +0530 Message-ID: To: Subrahmanyam Nilla Cc: dpdk-dev , Jerin Jacob , shallyv@marvell.com, venkatn@marvell.com, mchalla@marvell.com Content-Type: text/plain; charset="UTF-8" Subject: Re: [dpdk-dev] [PATCH v1 1/1] net/octeontx2: add SDP interface support X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" On Wed, Oct 30, 2019 at 7:38 PM Subrahmanyam Nilla wrote: > > System DPI Packet Interface Unit (SDP) is a co-processor > of OCTEON TX2 which provides PCIe endpoint support for a > remote host to DMA packets into and out of the OCTEON TX2 SoC. > SDP interface comes in to live only when it is connected in > EP mode. It exposes input and output queue pairs to remote host > for instruction input and packet output. It can be used as > a communication channel between remote host and OCTEON TX2. > Host machine needs to use corresponding user/kernel mode > driver to communicate with SDP interface on OCTEON TX2 SoC. > > SDP interface support is limited to SDP PF device now. > No SDP VF support. > > Signed-off-by: Subrahmanyam Nilla > Signed-off-by: Venkateshwarlu Nalla This change looks good to me. Could rebase the patch to dpdk-next-net-mrvl.git. Applying: net/octeontx2: add SDP interface support Using index info to reconstruct a base tree... M doc/guides/nics/octeontx2.rst M drivers/net/octeontx2/otx2_ethdev.c M drivers/net/octeontx2/otx2_flow_ctrl.c M drivers/net/octeontx2/otx2_ptp.c Falling back to patching base and 3-way merge... Auto-merging drivers/net/octeontx2/otx2_ptp.c Auto-merging drivers/net/octeontx2/otx2_flow_ctrl.c CONFLICT (content): Merge conflict in drivers/net/octeontx2/otx2_flow_ctrl.c Auto-merging drivers/net/octeontx2/otx2_ethdev.c Auto-merging doc/guides/nics/octeontx2.rst error: Failed to merge in the changes. Patch failed at 0001 net/octeontx2: add SDP interface support hint: Use 'git am --show-current-patch' to see the failed patch When you have resolved this problem, run "git am --continue". If you prefer to skip this patch, run "git am --skip" instead. To restore the original branch and stop patching, run "git am --abort". HEAD is now at b7ce8bb35 net/octeontx2: fix compilation with x86-x32 git am failed /tmp/r//v1-1-1-net-octeontx2-add-SDP-interface-support > --- > doc/guides/nics/octeontx2.rst | 4 ++++ > doc/guides/platform/octeontx2.rst | 21 +++++++++++++++++++++ > drivers/common/octeontx2/otx2_common.h | 2 ++ > drivers/common/octeontx2/otx2_dev.c | 1 + > drivers/common/octeontx2/otx2_dev.h | 4 ++++ > drivers/net/octeontx2/otx2_ethdev.c | 31 ++++++++++++++++++++++++++----- > drivers/net/octeontx2/otx2_ethdev.h | 1 + > drivers/net/octeontx2/otx2_ethdev_ops.c | 6 +++++- > drivers/net/octeontx2/otx2_flow_ctrl.c | 6 ++++++ > drivers/net/octeontx2/otx2_link.c | 6 +++--- > drivers/net/octeontx2/otx2_mac.c | 8 ++++---- > drivers/net/octeontx2/otx2_ptp.c | 6 +++--- > drivers/net/octeontx2/otx2_tm.c | 18 ++++++++++++------ > 13 files changed, 92 insertions(+), 22 deletions(-) > > diff --git a/doc/guides/nics/octeontx2.rst b/doc/guides/nics/octeontx2.rst > index fc8a130fb..7e901cec1 100644 > --- a/doc/guides/nics/octeontx2.rst > +++ b/doc/guides/nics/octeontx2.rst > @@ -200,6 +200,10 @@ Multicast MAC filtering > ``net_octeontx2`` pmd supports multicast mac filtering feature only on physical > function devices. > > +SDP interface support > +~~~~~~~~~~~~~~~~~~~~~ > +OCTEON TX2 SDP interface support is limited to PF device, No VF support. > + > Debugging Options > ----------------- > > diff --git a/doc/guides/platform/octeontx2.rst b/doc/guides/platform/octeontx2.rst > index 1c7d98f73..15b1641cf 100644 > --- a/doc/guides/platform/octeontx2.rst > +++ b/doc/guides/platform/octeontx2.rst > @@ -64,6 +64,8 @@ DPDK subsystem. > +---+-----+--------------------------------------------------------------+ > | 8 | DPI | rte_rawdev | > +---+-----+--------------------------------------------------------------+ > + | 9 | SDP | rte_ethdev | > + +---+-----+--------------------------------------------------------------+ > > PF0 is called the administrative / admin function (AF) and has exclusive > privileges to provision RVU functional block's LFs to each of the PF/VF. > @@ -102,6 +104,25 @@ Typical application usage models are, > #. Exception path to Linux kernel from DPDK application as SW ``KNI`` replacement. > #. Communication between two different DPDK applications. > > +SDP interface > +------------- > + > +System DPI Packet Interface unit(SDP) provides PCIe endpoint support for remote host > +to DMA packets into and out of OCTEON TX2 SoC. SDP interface comes in to live only when > +OCTEON TX2 SoC is connected in PCIe endpoint mode. It can be used to send/receive > +packets to/from remote host machine using input/output queue pairs exposed to it. > +SDP interface receives input packets from remote host from NIX-RX and sends packets > +to remote host using NIX-TX. Remote host machine need to use corresponding driver > +(kernel/user mode) to communicate with SDP interface on OCTEON TX2 SoC. SDP supports > +single PCIe SRIOV physical function(PF) and multiple virtual functions(VF's). Users > +can bind PF or VF to use SDP interface and it will be enumerated as ethdev ports. > + > +The primary use case for SDP is to enable the smart NIC use case. Typical usage models are, > + > +#. Communication channel between remote host and OCTEON TX2 SoC over PCIe. > +#. Transfer packets received from network interface to remote host over PCIe and > + vice-versa. > + > OCTEON TX2 packet flow > ---------------------- > > diff --git a/drivers/common/octeontx2/otx2_common.h b/drivers/common/octeontx2/otx2_common.h > index 0d0b87ee6..f62c45deb 100644 > --- a/drivers/common/octeontx2/otx2_common.h > +++ b/drivers/common/octeontx2/otx2_common.h > @@ -121,6 +121,8 @@ extern int otx2_logtype_dpi; > #define PCI_DEVID_OCTEONTX2_RVU_CPT_VF 0xA0FE > #define PCI_DEVID_OCTEONTX2_RVU_AF_VF 0xA0f8 > #define PCI_DEVID_OCTEONTX2_DPI_VF 0xA081 > +#define PCI_DEVID_OCTEONTX2_RVU_SDP_PF 0xA0f6 > +#define PCI_DEVID_OCTEONTX2_RVU_SDP_VF 0xA0f7 > > /* Subsystem Device ID */ > #define PCI_SUBSYS_DEVID_96XX_95XX 0xB200 > diff --git a/drivers/common/octeontx2/otx2_dev.c b/drivers/common/octeontx2/otx2_dev.c > index 910270975..0fc799e4a 100644 > --- a/drivers/common/octeontx2/otx2_dev.c > +++ b/drivers/common/octeontx2/otx2_dev.c > @@ -885,6 +885,7 @@ otx2_update_vf_hwcap(struct rte_pci_device *pci_dev, struct otx2_dev *dev) > case PCI_DEVID_OCTEONTX2_RVU_CPT_VF: > case PCI_DEVID_OCTEONTX2_RVU_AF_VF: > case PCI_DEVID_OCTEONTX2_RVU_VF: > + case PCI_DEVID_OCTEONTX2_RVU_SDP_VF: > dev->hwcap |= OTX2_HWCAP_F_VF; > break; > } > diff --git a/drivers/common/octeontx2/otx2_dev.h b/drivers/common/octeontx2/otx2_dev.h > index 5fd05fa17..7d9839c33 100644 > --- a/drivers/common/octeontx2/otx2_dev.h > +++ b/drivers/common/octeontx2/otx2_dev.h > @@ -19,6 +19,10 @@ > #define otx2_dev_is_lbk(dev) ((dev->hwcap & OTX2_HWCAP_F_VF) && \ > (dev->tx_chan_base < 0x700)) > #define otx2_dev_revid(dev) (dev->hwcap & 0xFF) > +#define otx2_dev_is_sdp(dev) (dev->sdp_link) > + > +#define otx2_dev_is_vf_or_sdp(dev) \ > + (otx2_dev_is_vf(dev) || otx2_dev_is_sdp(dev)) > > #define otx2_dev_is_A0(dev) \ > ((RVU_PCI_REV_MAJOR(otx2_dev_revid(dev)) == 0x0) && \ > diff --git a/drivers/net/octeontx2/otx2_ethdev.c b/drivers/net/octeontx2/otx2_ethdev.c > index 62291c698..b476b5ffb 100644 > --- a/drivers/net/octeontx2/otx2_ethdev.c > +++ b/drivers/net/octeontx2/otx2_ethdev.c > @@ -120,7 +120,7 @@ otx2_cgx_rxtx_start(struct otx2_eth_dev *dev) > { > struct otx2_mbox *mbox = dev->mbox; > > - if (otx2_dev_is_vf(dev)) > + if (otx2_dev_is_vf_or_sdp(dev)) > return 0; > > otx2_mbox_alloc_msg_cgx_start_rxtx(mbox); > @@ -133,7 +133,7 @@ otx2_cgx_rxtx_stop(struct otx2_eth_dev *dev) > { > struct otx2_mbox *mbox = dev->mbox; > > - if (otx2_dev_is_vf(dev)) > + if (otx2_dev_is_vf_or_sdp(dev)) > return 0; > > otx2_mbox_alloc_msg_cgx_stop_rxtx(mbox); > @@ -166,7 +166,7 @@ nix_cgx_start_link_event(struct otx2_eth_dev *dev) > { > struct otx2_mbox *mbox = dev->mbox; > > - if (otx2_dev_is_vf(dev)) > + if (otx2_dev_is_vf_or_sdp(dev)) > return 0; > > otx2_mbox_alloc_msg_cgx_start_linkevents(mbox); > @@ -179,7 +179,7 @@ cgx_intlbk_enable(struct otx2_eth_dev *dev, bool en) > { > struct otx2_mbox *mbox = dev->mbox; > > - if (otx2_dev_is_vf(dev)) > + if (otx2_dev_is_vf_or_sdp(dev)) > return 0; > > if (en) > @@ -195,7 +195,7 @@ nix_cgx_stop_link_event(struct otx2_eth_dev *dev) > { > struct otx2_mbox *mbox = dev->mbox; > > - if (otx2_dev_is_vf(dev)) > + if (otx2_dev_is_vf_or_sdp(dev)) > return 0; > > otx2_mbox_alloc_msg_cgx_stop_linkevents(mbox); > @@ -2056,6 +2056,15 @@ otx2_eth_dev_lf_detach(struct otx2_mbox *mbox) > return otx2_mbox_process(mbox); > } > > +static bool > +otx2_eth_dev_is_sdp(struct rte_pci_device *pci_dev) > +{ > + if (pci_dev->id.device_id == PCI_DEVID_OCTEONTX2_RVU_SDP_PF || > + pci_dev->id.device_id == PCI_DEVID_OCTEONTX2_RVU_SDP_VF) > + return true; > + return false; > +} > + > static int > otx2_eth_dev_init(struct rte_eth_dev *eth_dev) > { > @@ -2099,6 +2108,10 @@ otx2_eth_dev_init(struct rte_eth_dev *eth_dev) > goto error; > } > } > + if (otx2_eth_dev_is_sdp(pci_dev)) > + dev->sdp_link = true; > + else > + dev->sdp_link = false; > /* Device generic callbacks */ > dev->ops = &otx2_dev_ops; > dev->eth_dev = eth_dev; > @@ -2387,6 +2400,14 @@ static const struct rte_pci_id pci_nix_map[] = { > PCI_DEVID_OCTEONTX2_RVU_AF_VF) > }, > { > + RTE_PCI_DEVICE(PCI_VENDOR_ID_CAVIUM, > + PCI_DEVID_OCTEONTX2_RVU_SDP_PF) > + }, > + { > + RTE_PCI_DEVICE(PCI_VENDOR_ID_CAVIUM, > + PCI_DEVID_OCTEONTX2_RVU_SDP_VF) > + }, > + { > .vendor_id = 0, > }, > }; > diff --git a/drivers/net/octeontx2/otx2_ethdev.h b/drivers/net/octeontx2/otx2_ethdev.h > index 4d9ed4870..b49e309fd 100644 > --- a/drivers/net/octeontx2/otx2_ethdev.h > +++ b/drivers/net/octeontx2/otx2_ethdev.h > @@ -321,6 +321,7 @@ struct otx2_eth_dev { > uint64_t clk_delta; > bool mc_tbl_set; > struct otx2_nix_mc_filter_tbl mc_fltr_tbl; > + bool sdp_link; /* SDP flag */ > } __rte_cache_aligned; > > struct otx2_eth_txq { > diff --git a/drivers/net/octeontx2/otx2_ethdev_ops.c b/drivers/net/octeontx2/otx2_ethdev_ops.c > index fc0fbd9f2..d1e77c324 100644 > --- a/drivers/net/octeontx2/otx2_ethdev_ops.c > +++ b/drivers/net/octeontx2/otx2_ethdev_ops.c > @@ -36,6 +36,8 @@ otx2_nix_mtu_set(struct rte_eth_dev *eth_dev, uint16_t mtu) > > req = otx2_mbox_alloc_msg_nix_set_hw_frs(mbox); > req->update_smq = true; > + if (otx2_dev_is_sdp(dev)) > + req->sdp_link = true; > /* FRS HW config should exclude FCS but include NPC VTAG insert size */ > req->maxlen = frame_size - RTE_ETHER_CRC_LEN + NIX_MAX_VTAG_ACT_SIZE; > > @@ -46,6 +48,8 @@ otx2_nix_mtu_set(struct rte_eth_dev *eth_dev, uint16_t mtu) > /* Now just update Rx MAXLEN */ > req = otx2_mbox_alloc_msg_nix_set_hw_frs(mbox); > req->maxlen = frame_size - RTE_ETHER_CRC_LEN; > + if (otx2_dev_is_sdp(dev)) > + req->sdp_link = true; > > rc = otx2_mbox_process(mbox); > if (rc) > @@ -98,7 +102,7 @@ nix_cgx_promisc_config(struct rte_eth_dev *eth_dev, int en) > struct otx2_eth_dev *dev = otx2_eth_pmd_priv(eth_dev); > struct otx2_mbox *mbox = dev->mbox; > > - if (otx2_dev_is_vf(dev)) > + if (otx2_dev_is_vf_or_sdp(dev)) > return; > > if (en) > diff --git a/drivers/net/octeontx2/otx2_flow_ctrl.c b/drivers/net/octeontx2/otx2_flow_ctrl.c > index 1d00e4687..0e725493b 100644 > --- a/drivers/net/octeontx2/otx2_flow_ctrl.c > +++ b/drivers/net/octeontx2/otx2_flow_ctrl.c > @@ -14,6 +14,9 @@ otx2_nix_rxchan_bpid_cfg(struct rte_eth_dev *eth_dev, bool enb) > struct nix_bp_cfg_rsp *rsp; > int rc; > > + if (otx2_dev_is_sdp(dev)) > + return 0; > + > if (enb) { > req = otx2_mbox_alloc_msg_nix_bp_enable(mbox); > req->chan_base = 0; > @@ -189,6 +192,9 @@ otx2_nix_update_flow_ctrl_mode(struct rte_eth_dev *eth_dev) > struct otx2_eth_dev *dev = otx2_eth_pmd_priv(eth_dev); > struct rte_eth_fc_conf fc_conf; > > + if (otx2_dev_is_sdp(dev)) > + return 0; > + > memset(&fc_conf, 0, sizeof(struct rte_eth_fc_conf)); > /* Both Rx & Tx flow ctrl get enabled(RTE_FC_FULL) in HW > * by AF driver, update those info in PMD structure. > diff --git a/drivers/net/octeontx2/otx2_link.c b/drivers/net/octeontx2/otx2_link.c > index 725b793d4..f5679b06e 100644 > --- a/drivers/net/octeontx2/otx2_link.c > +++ b/drivers/net/octeontx2/otx2_link.c > @@ -93,7 +93,7 @@ otx2_nix_link_update(struct rte_eth_dev *eth_dev, int wait_to_complete) > > RTE_SET_USED(wait_to_complete); > > - if (otx2_dev_is_lbk(dev)) > + if (otx2_dev_is_lbk(dev) || otx2_dev_is_sdp(dev)) > return 0; > > otx2_mbox_alloc_msg_cgx_get_linkinfo(mbox); > @@ -129,7 +129,7 @@ otx2_nix_dev_set_link_up(struct rte_eth_dev *eth_dev) > struct otx2_eth_dev *dev = otx2_eth_pmd_priv(eth_dev); > int rc, i; > > - if (otx2_dev_is_vf(dev)) > + if (otx2_dev_is_vf_or_sdp(dev)) > return -ENOTSUP; > > rc = nix_dev_set_link_state(eth_dev, 1); > @@ -150,7 +150,7 @@ otx2_nix_dev_set_link_down(struct rte_eth_dev *eth_dev) > struct otx2_eth_dev *dev = otx2_eth_pmd_priv(eth_dev); > int i; > > - if (otx2_dev_is_vf(dev)) > + if (otx2_dev_is_vf_or_sdp(dev)) > return -ENOTSUP; > > /* Stop tx queues */ > diff --git a/drivers/net/octeontx2/otx2_mac.c b/drivers/net/octeontx2/otx2_mac.c > index b4bcc61f8..262d185e5 100644 > --- a/drivers/net/octeontx2/otx2_mac.c > +++ b/drivers/net/octeontx2/otx2_mac.c > @@ -15,7 +15,7 @@ otx2_cgx_mac_addr_set(struct rte_eth_dev *eth_dev, struct rte_ether_addr *addr) > struct otx2_mbox *mbox = dev->mbox; > int rc; > > - if (otx2_dev_is_vf(dev)) > + if (otx2_dev_is_vf_or_sdp(dev)) > return -ENOTSUP; > > if (otx2_dev_active_vfs(dev)) > @@ -38,7 +38,7 @@ otx2_cgx_mac_max_entries_get(struct otx2_eth_dev *dev) > struct otx2_mbox *mbox = dev->mbox; > int rc; > > - if (otx2_dev_is_vf(dev)) > + if (otx2_dev_is_vf_or_sdp(dev)) > return 0; > > otx2_mbox_alloc_msg_cgx_mac_max_entries_get(mbox); > @@ -59,7 +59,7 @@ otx2_nix_mac_addr_add(struct rte_eth_dev *eth_dev, struct rte_ether_addr *addr, > struct cgx_mac_addr_add_rsp *rsp; > int rc; > > - if (otx2_dev_is_vf(dev)) > + if (otx2_dev_is_vf_or_sdp(dev)) > return -ENOTSUP; > > if (otx2_dev_active_vfs(dev)) > @@ -89,7 +89,7 @@ otx2_nix_mac_addr_del(struct rte_eth_dev *eth_dev, uint32_t index) > struct cgx_mac_addr_del_req *req; > int rc; > > - if (otx2_dev_is_vf(dev)) > + if (otx2_dev_is_vf_or_sdp(dev)) > return; > > req = otx2_mbox_alloc_msg_cgx_mac_addr_del(mbox); > diff --git a/drivers/net/octeontx2/otx2_ptp.c b/drivers/net/octeontx2/otx2_ptp.c > index fd13c2678..4cd1cc8e5 100644 > --- a/drivers/net/octeontx2/otx2_ptp.c > +++ b/drivers/net/octeontx2/otx2_ptp.c > @@ -104,7 +104,7 @@ nix_ptp_config(struct rte_eth_dev *eth_dev, int en) > struct otx2_mbox *mbox = dev->mbox; > uint8_t rc = -EINVAL; > > - if (otx2_dev_is_vf(dev)) > + if (otx2_dev_is_vf_or_sdp(dev)) > return rc; > > if (en) { > @@ -168,7 +168,7 @@ otx2_nix_timesync_enable(struct rte_eth_dev *eth_dev) > } > > /* If we are VF, no further action can be taken */ > - if (otx2_dev_is_vf(dev)) > + if (otx2_dev_is_vf_or_sdp(dev)) > return -EINVAL; > > if (!(dev->rx_offload_flags & NIX_RX_OFFLOAD_PTYPE_F)) { > @@ -222,7 +222,7 @@ otx2_nix_timesync_disable(struct rte_eth_dev *eth_dev) > } > > /* If we are VF, nothing else can be done */ > - if (otx2_dev_is_vf(dev)) > + if (otx2_dev_is_vf_or_sdp(dev)) > return -EINVAL; > > dev->rx_offloads &= ~DEV_RX_OFFLOAD_TIMESTAMP; > diff --git a/drivers/net/octeontx2/otx2_tm.c b/drivers/net/octeontx2/otx2_tm.c > index 12903ec1b..ba615cebc 100644 > --- a/drivers/net/octeontx2/otx2_tm.c > +++ b/drivers/net/octeontx2/otx2_tm.c > @@ -410,6 +410,12 @@ populate_tm_registers(struct otx2_eth_dev *dev, > *regval++ = shaper2regval(&cir) | 1; > req->num_regs++; > } > + /* Configure TL4 to send to SDP channel instead of CGX/LBK */ > + if (otx2_dev_is_sdp(dev)) { > + *reg++ = NIX_AF_TL4X_SDP_LINK_CFG(schq); > + *regval++ = BIT_ULL(12); > + req->num_regs++; > + } > > rc = send_tm_reqval(mbox, req); > if (rc) > @@ -465,9 +471,12 @@ populate_tm_registers(struct otx2_eth_dev *dev, > else > *regval++ = (strict_schedul_prio << 24) | rr_quantum; > req->num_regs++; > - *reg++ = NIX_AF_TL3_TL2X_LINKX_CFG(schq, nix_get_link(dev)); > - *regval++ = BIT_ULL(12) | nix_get_relchan(dev); > - req->num_regs++; > + if (!otx2_dev_is_sdp(dev)) { > + *reg++ = NIX_AF_TL3_TL2X_LINKX_CFG(schq, > + nix_get_link(dev)); > + *regval++ = BIT_ULL(12) | nix_get_relchan(dev); > + req->num_regs++; > + } > if (pir.rate && pir.burst) { > *reg++ = NIX_AF_TL2X_PIR(schq); > *regval++ = shaper2regval(&pir) | 1; > @@ -522,9 +531,6 @@ nix_tm_txsch_reg_config(struct otx2_eth_dev *dev) > uint32_t lvl; > int rc = 0; > > - if (nix_get_link(dev) == 13) > - return -EPERM; > - > for (lvl = 0; lvl < (uint32_t)dev->otx2_tm_root_lvl + 1; lvl++) { > TAILQ_FOREACH(tm_node, &dev->node_list, node) { > if (tm_node->hw_lvl_id == lvl) { > -- > 2.13.6 >