From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 5C8BDA04A3; Thu, 24 Feb 2022 12:18:06 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id EE71A41155; Thu, 24 Feb 2022 12:18:05 +0100 (CET) Received: from mail-io1-f47.google.com (mail-io1-f47.google.com [209.85.166.47]) by mails.dpdk.org (Postfix) with ESMTP id 270C94114D for ; Thu, 24 Feb 2022 12:18:05 +0100 (CET) Received: by mail-io1-f47.google.com with SMTP id q8so2261397iod.2 for ; Thu, 24 Feb 2022 03:18:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=8V8hELYMtx2vk0X4Yf9iyjfUxJ7sSbmH9E+yq+XLyns=; b=UtKrHuf4xlfwWbuZXCVACHH4GY+yy6jD7LWn3g7/r/vL8YcB39Z8mP2ph4XZJZNsOw /MK+nGKhVQ+iqnZKEUNhXMfv48r5gtCytenUj2mI+4l+49OP43HM0BezC926BriMjESy HuiU64hwcw4ZUm7JEEEYD+oRvBLI6/Dbvkdv2N6r4OXVSnAL0Fl6zICKjteX5xtzG4j3 VKTeOfXQyMOSQg29BV0Er0IlNSYnUSsD72YWJqV3jdLYREfTakP7Q0g4mVnl7cBU7Vxh 7zJech5o1Ua8NKojZspBuA0UwdhdwXqsyjomv6/pnWyKEkenqwVanSCzzcu1M8x9QtYl 9O0w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=8V8hELYMtx2vk0X4Yf9iyjfUxJ7sSbmH9E+yq+XLyns=; b=wTaT5XGZzxoii/YARmk4W7IYA26PRPRm6b48sC/IUWaA1+RNXGFhbhlMyB+He/3JPW kE8yGvUsk8fnN4F6KsAsuOLZEwds5VY+x561V/rleuNCWFSHJhb5jteMBbrW5oZXQSWV kzWy0YbekPcPjMaH2l49Dply2Fv1NfjL6iZrAHJuVBYEJkcIhS8r+zTxl0yWtkN9Pdul f3vO1LS+t3hAQYzrPn5WTiud17T3QP8iBU/I17MNt0qknpTK/1M1uODhPUexCFdbJWZ9 hUfGV7r1QE7yCTnpKQVRk7Kqsp+rvgBQSDGmiRDtnvThDyT1dDbNPsxBjn9bGbIDIX1d tLnA== X-Gm-Message-State: AOAM532Q3Bmb7sNhKG5o7hTIDyAKVCxRafpRGp+O1UpVssQRI9UefbNR opPQZIptp+gWf7Ol5MUZ1mJMFvdoJ+vBZJtYHuyQcME1BSDe3A== X-Google-Smtp-Source: ABdhPJyG4WSzn1SByUpEo0P7FtJDcVAThGO2eNEI9gNqF4J45WzHTYcYGdmHk+3YcN2szwW5yhSXRJ90whrpi+X9zCE= X-Received: by 2002:a6b:ce01:0:b0:610:8f2:3b7 with SMTP id p1-20020a6bce01000000b0061008f203b7mr1671611iob.25.1645701484422; Thu, 24 Feb 2022 03:18:04 -0800 (PST) MIME-Version: 1.0 References: <20220224080217.2895297-1-rkudurumalla@marvell.com> In-Reply-To: <20220224080217.2895297-1-rkudurumalla@marvell.com> From: Jerin Jacob Date: Thu, 24 Feb 2022 16:47:38 +0530 Message-ID: Subject: Re: [PATCH 1/2] net/cnxk: add callback handler to read ptp timestamp To: Rakesh Kudurumalla , Ferruh Yigit Cc: Nithin Dabilpuram , Kiran Kumar K , Sunil Kumar Kori , Satha Rao , dpdk-dev , Jerin Jacob Content-Type: text/plain; charset="UTF-8" X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org On Thu, Feb 24, 2022 at 1:32 PM Rakesh Kudurumalla wrote: > > timestamp resolution for an incoming and outgoing packets > is different for CN10k and CN9K.Added platform specific > callback to retrieve timestamp in correct format when read by > application > > Signed-off-by: Rakesh Kudurumalla Squashed 2/2 into 1/2. Acked-by: Jerin Jacob Updated git commit as follows and Applied to dpdk-next-net-mrvl/for-next-net. Thanks net/cnxk: add SoC specific PTP timestamp read Timestamp resolution for an incoming and outgoing packets is different for CN10k and CN9K. Added SoC specific callback to retrieve timestamp in correct format when read by application. Signed-off-by: Rakesh Kudurumalla Acked-by: Jerin Jacob > --- > drivers/net/cnxk/cn10k_ethdev.c | 23 +++++++++++++++++++++++ > drivers/net/cnxk/cn10k_rx.h | 32 +++++++++++++++++++++++++++++++- > drivers/net/cnxk/cn9k_ethdev.c | 21 +++++++++++++++++++++ > drivers/net/cnxk/cn9k_rx.h | 30 +++++++++++++++++++++++++++++- > 4 files changed, 104 insertions(+), 2 deletions(-) > > diff --git a/drivers/net/cnxk/cn10k_ethdev.c b/drivers/net/cnxk/cn10k_ethdev.c > index c6890f3699..e57847ef3a 100644 > --- a/drivers/net/cnxk/cn10k_ethdev.c > +++ b/drivers/net/cnxk/cn10k_ethdev.c > @@ -428,6 +428,27 @@ cn10k_nix_timesync_disable(struct rte_eth_dev *eth_dev) > return 0; > } > > +static int > +cn10k_nix_timesync_read_tx_timestamp(struct rte_eth_dev *eth_dev, > + struct timespec *timestamp) > +{ > + struct cnxk_eth_dev *dev = cnxk_eth_pmd_priv(eth_dev); > + struct cnxk_timesync_info *tstamp = &dev->tstamp; > + uint64_t ns; > + > + if (*tstamp->tx_tstamp == 0) > + return -EINVAL; > + > + *tstamp->tx_tstamp = ((*tstamp->tx_tstamp >> 32) * NSEC_PER_SEC) + > + (*tstamp->tx_tstamp & 0xFFFFFFFFUL); > + ns = rte_timecounter_update(&dev->tx_tstamp_tc, *tstamp->tx_tstamp); > + *timestamp = rte_ns_to_timespec(ns); > + *tstamp->tx_tstamp = 0; > + rte_wmb(); > + > + return 0; > +} > + > static int > cn10k_nix_dev_start(struct rte_eth_dev *eth_dev) > { > @@ -499,6 +520,8 @@ nix_eth_dev_ops_override(void) > cnxk_eth_dev_ops.timesync_disable = cn10k_nix_timesync_disable; > cnxk_eth_dev_ops.rx_metadata_negotiate = > cn10k_nix_rx_metadata_negotiate; > + cnxk_eth_dev_ops.timesync_read_tx_timestamp = > + cn10k_nix_timesync_read_tx_timestamp; > } > > static void > diff --git a/drivers/net/cnxk/cn10k_rx.h b/drivers/net/cnxk/cn10k_rx.h > index 2083c73879..abf280102b 100644 > --- a/drivers/net/cnxk/cn10k_rx.h > +++ b/drivers/net/cnxk/cn10k_rx.h > @@ -432,6 +432,36 @@ nix_rx_nb_pkts(struct cn10k_eth_rxq *rxq, const uint64_t wdata, > return RTE_MIN(pkts, available); > } > > +static __rte_always_inline void > +cn10k_nix_mbuf_to_tstamp(struct rte_mbuf *mbuf, > + struct cnxk_timesync_info *tstamp, > + const uint8_t ts_enable, uint64_t *tstamp_ptr) > +{ > + if (ts_enable) { > + mbuf->pkt_len -= CNXK_NIX_TIMESYNC_RX_OFFSET; > + mbuf->data_len -= CNXK_NIX_TIMESYNC_RX_OFFSET; > + > + /* Reading the rx timestamp inserted by CGX, viz at > + * starting of the packet data. > + */ > + *tstamp_ptr = ((*tstamp_ptr >> 32) * NSEC_PER_SEC) + > + (*tstamp_ptr & 0xFFFFFFFFUL); > + *cnxk_nix_timestamp_dynfield(mbuf, tstamp) = > + rte_be_to_cpu_64(*tstamp_ptr); > + /* RTE_MBUF_F_RX_IEEE1588_TMST flag needs to be set only in case > + * PTP packets are received. > + */ > + if (mbuf->packet_type == RTE_PTYPE_L2_ETHER_TIMESYNC) { > + tstamp->rx_tstamp = > + *cnxk_nix_timestamp_dynfield(mbuf, tstamp); > + tstamp->rx_ready = 1; > + mbuf->ol_flags |= RTE_MBUF_F_RX_IEEE1588_PTP | > + RTE_MBUF_F_RX_IEEE1588_TMST | > + tstamp->rx_tstamp_dynflag; > + } > + } > +} > + > static __rte_always_inline uint16_t > cn10k_nix_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t pkts, > const uint16_t flags) > @@ -486,7 +516,7 @@ cn10k_nix_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t pkts, > > cn10k_nix_cqe_to_mbuf(cq, cq->tag, mbuf, lookup_mem, mbuf_init, > flags); > - cnxk_nix_mbuf_to_tstamp(mbuf, rxq->tstamp, > + cn10k_nix_mbuf_to_tstamp(mbuf, rxq->tstamp, > (flags & NIX_RX_OFFLOAD_TSTAMP_F), > (uint64_t *)((uint8_t *)mbuf > + data_off)); > diff --git a/drivers/net/cnxk/cn9k_ethdev.c b/drivers/net/cnxk/cn9k_ethdev.c > index d81f9ac80f..6b049b2897 100644 > --- a/drivers/net/cnxk/cn9k_ethdev.c > +++ b/drivers/net/cnxk/cn9k_ethdev.c > @@ -450,6 +450,25 @@ cn9k_nix_dev_start(struct rte_eth_dev *eth_dev) > return 0; > } > > +static int > +cn9k_nix_timesync_read_tx_timestamp(struct rte_eth_dev *eth_dev, > + struct timespec *timestamp) > +{ > + struct cnxk_eth_dev *dev = cnxk_eth_pmd_priv(eth_dev); > + struct cnxk_timesync_info *tstamp = &dev->tstamp; > + uint64_t ns; > + > + if (*tstamp->tx_tstamp == 0) > + return -EINVAL; > + > + ns = rte_timecounter_update(&dev->tx_tstamp_tc, *tstamp->tx_tstamp); > + *timestamp = rte_ns_to_timespec(ns); > + *tstamp->tx_tstamp = 0; > + rte_wmb(); > + > + return 0; > +} > + > static int > cn9k_nix_rx_metadata_negotiate(struct rte_eth_dev *eth_dev, uint64_t *features) > { > @@ -492,6 +511,8 @@ nix_eth_dev_ops_override(void) > cnxk_eth_dev_ops.timesync_disable = cn9k_nix_timesync_disable; > cnxk_eth_dev_ops.mtr_ops_get = NULL; > cnxk_eth_dev_ops.rx_metadata_negotiate = cn9k_nix_rx_metadata_negotiate; > + cnxk_eth_dev_ops.timesync_read_tx_timestamp = > + cn9k_nix_timesync_read_tx_timestamp; > } > > static void > diff --git a/drivers/net/cnxk/cn9k_rx.h b/drivers/net/cnxk/cn9k_rx.h > index 6b6c5bfbc2..25a4927a33 100644 > --- a/drivers/net/cnxk/cn9k_rx.h > +++ b/drivers/net/cnxk/cn9k_rx.h > @@ -435,6 +435,34 @@ nix_rx_nb_pkts(struct cn9k_eth_rxq *rxq, const uint64_t wdata, > return RTE_MIN(pkts, available); > } > > +static __rte_always_inline void > +cn9k_nix_mbuf_to_tstamp(struct rte_mbuf *mbuf, > + struct cnxk_timesync_info *tstamp, > + const uint8_t ts_enable, uint64_t *tstamp_ptr) > +{ > + if (ts_enable) { > + mbuf->pkt_len -= CNXK_NIX_TIMESYNC_RX_OFFSET; > + mbuf->data_len -= CNXK_NIX_TIMESYNC_RX_OFFSET; > + > + /* Reading the rx timestamp inserted by CGX, viz at > + * starting of the packet data. > + */ > + *cnxk_nix_timestamp_dynfield(mbuf, tstamp) = > + rte_be_to_cpu_64(*tstamp_ptr); > + /* RTE_MBUF_F_RX_IEEE1588_TMST flag needs to be set only in case > + * PTP packets are received. > + */ > + if (mbuf->packet_type == RTE_PTYPE_L2_ETHER_TIMESYNC) { > + tstamp->rx_tstamp = > + *cnxk_nix_timestamp_dynfield(mbuf, tstamp); > + tstamp->rx_ready = 1; > + mbuf->ol_flags |= RTE_MBUF_F_RX_IEEE1588_PTP | > + RTE_MBUF_F_RX_IEEE1588_TMST | > + tstamp->rx_tstamp_dynflag; > + } > + } > +} > + > static __rte_always_inline uint16_t > cn9k_nix_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t pkts, > const uint16_t flags) > @@ -463,7 +491,7 @@ cn9k_nix_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t pkts, > > cn9k_nix_cqe_to_mbuf(cq, cq->tag, mbuf, lookup_mem, mbuf_init, > flags); > - cnxk_nix_mbuf_to_tstamp(mbuf, rxq->tstamp, > + cn9k_nix_mbuf_to_tstamp(mbuf, rxq->tstamp, > (flags & NIX_RX_OFFLOAD_TSTAMP_F), > (uint64_t *)((uint8_t *)mbuf > + data_off)); > -- > 2.25.1 >