DPDK patches and discussions
 help / color / mirror / Atom feed
From: <pbhagavatula@marvell.com>
To: <jerinj@marvell.com>, Pavan Nikhilesh <pbhagavatula@marvell.com>
Cc: <dev@dpdk.org>
Subject: [dpdk-dev] [PATCH v3 35/42] event/octeontx2: add TIM bucket operations
Date: Fri, 28 Jun 2019 23:53:46 +0530	[thread overview]
Message-ID: <20190628182354.228-36-pbhagavatula@marvell.com> (raw)
In-Reply-To: <20190628182354.228-1-pbhagavatula@marvell.com>

From: Pavan Nikhilesh <pbhagavatula@marvell.com>

Add TIM bucket operations used for event timer arm and cancel.

Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
---
 drivers/event/octeontx2/Makefile          |   1 +
 drivers/event/octeontx2/meson.build       |   1 +
 drivers/event/octeontx2/otx2_tim_evdev.h  |  36 +++++++
 drivers/event/octeontx2/otx2_tim_worker.c |   7 ++
 drivers/event/octeontx2/otx2_tim_worker.h | 111 ++++++++++++++++++++++
 5 files changed, 156 insertions(+)
 create mode 100644 drivers/event/octeontx2/otx2_tim_worker.c
 create mode 100644 drivers/event/octeontx2/otx2_tim_worker.h

diff --git a/drivers/event/octeontx2/Makefile b/drivers/event/octeontx2/Makefile
index 6f8d9fe2f..d01da6b11 100644
--- a/drivers/event/octeontx2/Makefile
+++ b/drivers/event/octeontx2/Makefile
@@ -32,6 +32,7 @@ LIBABIVER := 1
 
 SRCS-$(CONFIG_RTE_LIBRTE_PMD_OCTEONTX2_EVENTDEV) += otx2_worker_dual.c
 SRCS-$(CONFIG_RTE_LIBRTE_PMD_OCTEONTX2_EVENTDEV) += otx2_worker.c
+SRCS-$(CONFIG_RTE_LIBRTE_PMD_OCTEONTX2_EVENTDEV) += otx2_tim_worker.c
 SRCS-$(CONFIG_RTE_LIBRTE_PMD_OCTEONTX2_EVENTDEV) += otx2_evdev.c
 SRCS-$(CONFIG_RTE_LIBRTE_PMD_OCTEONTX2_EVENTDEV) += otx2_evdev_adptr.c
 SRCS-$(CONFIG_RTE_LIBRTE_PMD_OCTEONTX2_EVENTDEV) += otx2_tim_evdev.c
diff --git a/drivers/event/octeontx2/meson.build b/drivers/event/octeontx2/meson.build
index c709b5e69..bdb5beed6 100644
--- a/drivers/event/octeontx2/meson.build
+++ b/drivers/event/octeontx2/meson.build
@@ -9,6 +9,7 @@ sources = files('otx2_worker.c',
 		'otx2_evdev_irq.c',
 		'otx2_evdev_selftest.c',
 		'otx2_tim_evdev.c',
+		'otx2_tim_worker.c'
 		)
 
 allow_experimental_apis = true
diff --git a/drivers/event/octeontx2/otx2_tim_evdev.h b/drivers/event/octeontx2/otx2_tim_evdev.h
index aac7dc711..2be5d5f07 100644
--- a/drivers/event/octeontx2/otx2_tim_evdev.h
+++ b/drivers/event/octeontx2/otx2_tim_evdev.h
@@ -25,6 +25,42 @@
 #define TIM_LF_RAS_INT_ENA_W1S		(0x310)
 #define TIM_LF_RAS_INT_ENA_W1C		(0x318)
 
+#define TIM_BUCKET_W1_S_CHUNK_REMAINDER	(48)
+#define TIM_BUCKET_W1_M_CHUNK_REMAINDER	((1ULL << (64 - \
+					 TIM_BUCKET_W1_S_CHUNK_REMAINDER)) - 1)
+#define TIM_BUCKET_W1_S_LOCK		(40)
+#define TIM_BUCKET_W1_M_LOCK		((1ULL <<	\
+					 (TIM_BUCKET_W1_S_CHUNK_REMAINDER - \
+					  TIM_BUCKET_W1_S_LOCK)) - 1)
+#define TIM_BUCKET_W1_S_RSVD		(35)
+#define TIM_BUCKET_W1_S_BSK		(34)
+#define TIM_BUCKET_W1_M_BSK		((1ULL <<	\
+					 (TIM_BUCKET_W1_S_RSVD -	    \
+					  TIM_BUCKET_W1_S_BSK)) - 1)
+#define TIM_BUCKET_W1_S_HBT		(33)
+#define TIM_BUCKET_W1_M_HBT		((1ULL <<	\
+					 (TIM_BUCKET_W1_S_BSK -		    \
+					  TIM_BUCKET_W1_S_HBT)) - 1)
+#define TIM_BUCKET_W1_S_SBT		(32)
+#define TIM_BUCKET_W1_M_SBT		((1ULL <<	\
+					 (TIM_BUCKET_W1_S_HBT -		    \
+					  TIM_BUCKET_W1_S_SBT)) - 1)
+#define TIM_BUCKET_W1_S_NUM_ENTRIES	(0)
+#define TIM_BUCKET_W1_M_NUM_ENTRIES	((1ULL <<	\
+					 (TIM_BUCKET_W1_S_SBT -		    \
+					  TIM_BUCKET_W1_S_NUM_ENTRIES)) - 1)
+
+#define TIM_BUCKET_SEMA			(TIM_BUCKET_CHUNK_REMAIN)
+
+#define TIM_BUCKET_CHUNK_REMAIN \
+	(TIM_BUCKET_W1_M_CHUNK_REMAINDER << TIM_BUCKET_W1_S_CHUNK_REMAINDER)
+
+#define TIM_BUCKET_LOCK \
+	(TIM_BUCKET_W1_M_LOCK << TIM_BUCKET_W1_S_LOCK)
+
+#define TIM_BUCKET_SEMA_WLOCK \
+	(TIM_BUCKET_CHUNK_REMAIN | (1ull << TIM_BUCKET_W1_S_LOCK))
+
 #define OTX2_MAX_TIM_RINGS		(256)
 #define OTX2_TIM_MAX_BUCKETS		(0xFFFFF)
 #define OTX2_TIM_RING_DEF_CHUNK_SZ	(4096)
diff --git a/drivers/event/octeontx2/otx2_tim_worker.c b/drivers/event/octeontx2/otx2_tim_worker.c
new file mode 100644
index 000000000..29ed1fd5a
--- /dev/null
+++ b/drivers/event/octeontx2/otx2_tim_worker.c
@@ -0,0 +1,7 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(C) 2019 Marvell International Ltd.
+ */
+
+#include "otx2_tim_evdev.h"
+#include "otx2_tim_worker.h"
+
diff --git a/drivers/event/octeontx2/otx2_tim_worker.h b/drivers/event/octeontx2/otx2_tim_worker.h
new file mode 100644
index 000000000..ccb137d13
--- /dev/null
+++ b/drivers/event/octeontx2/otx2_tim_worker.h
@@ -0,0 +1,111 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(C) 2019 Marvell International Ltd.
+ */
+
+#ifndef __OTX2_TIM_WORKER_H__
+#define __OTX2_TIM_WORKER_H__
+
+#include "otx2_tim_evdev.h"
+
+static inline int16_t
+tim_bkt_fetch_rem(uint64_t w1)
+{
+	return (w1 >> TIM_BUCKET_W1_S_CHUNK_REMAINDER) &
+		TIM_BUCKET_W1_M_CHUNK_REMAINDER;
+}
+
+static inline int16_t
+tim_bkt_get_rem(struct otx2_tim_bkt *bktp)
+{
+	return __atomic_load_n(&bktp->chunk_remainder, __ATOMIC_ACQUIRE);
+}
+
+static inline void
+tim_bkt_set_rem(struct otx2_tim_bkt *bktp, uint16_t v)
+{
+	__atomic_store_n(&bktp->chunk_remainder, v, __ATOMIC_RELAXED);
+}
+
+static inline void
+tim_bkt_sub_rem(struct otx2_tim_bkt *bktp, uint16_t v)
+{
+	__atomic_fetch_sub(&bktp->chunk_remainder, v, __ATOMIC_RELAXED);
+}
+
+static inline uint8_t
+tim_bkt_get_hbt(uint64_t w1)
+{
+	return (w1 >> TIM_BUCKET_W1_S_HBT) & TIM_BUCKET_W1_M_HBT;
+}
+
+static inline uint8_t
+tim_bkt_get_bsk(uint64_t w1)
+{
+	return (w1 >> TIM_BUCKET_W1_S_BSK) & TIM_BUCKET_W1_M_BSK;
+}
+
+static inline uint64_t
+tim_bkt_clr_bsk(struct otx2_tim_bkt *bktp)
+{
+	/* Clear everything except lock. */
+	const uint64_t v = TIM_BUCKET_W1_M_LOCK << TIM_BUCKET_W1_S_LOCK;
+
+	return __atomic_fetch_and(&bktp->w1, v, __ATOMIC_ACQ_REL);
+}
+
+static inline uint64_t
+tim_bkt_fetch_sema_lock(struct otx2_tim_bkt *bktp)
+{
+	return __atomic_fetch_add(&bktp->w1, TIM_BUCKET_SEMA_WLOCK,
+			__ATOMIC_ACQUIRE);
+}
+
+static inline uint64_t
+tim_bkt_fetch_sema(struct otx2_tim_bkt *bktp)
+{
+	return __atomic_fetch_add(&bktp->w1, TIM_BUCKET_SEMA, __ATOMIC_RELAXED);
+}
+
+static inline uint64_t
+tim_bkt_inc_lock(struct otx2_tim_bkt *bktp)
+{
+	const uint64_t v = 1ull << TIM_BUCKET_W1_S_LOCK;
+
+	return __atomic_fetch_add(&bktp->w1, v, __ATOMIC_ACQUIRE);
+}
+
+static inline void
+tim_bkt_dec_lock(struct otx2_tim_bkt *bktp)
+{
+	__atomic_add_fetch(&bktp->lock, 0xff, __ATOMIC_RELEASE);
+}
+
+static inline uint32_t
+tim_bkt_get_nent(uint64_t w1)
+{
+	return (w1 >> TIM_BUCKET_W1_S_NUM_ENTRIES) &
+		TIM_BUCKET_W1_M_NUM_ENTRIES;
+}
+
+static inline void
+tim_bkt_inc_nent(struct otx2_tim_bkt *bktp)
+{
+	__atomic_add_fetch(&bktp->nb_entry, 1, __ATOMIC_RELAXED);
+}
+
+static inline void
+tim_bkt_add_nent(struct otx2_tim_bkt *bktp, uint32_t v)
+{
+	__atomic_add_fetch(&bktp->nb_entry, v, __ATOMIC_RELAXED);
+}
+
+static inline uint64_t
+tim_bkt_clr_nent(struct otx2_tim_bkt *bktp)
+{
+	const uint64_t v = ~(TIM_BUCKET_W1_M_NUM_ENTRIES <<
+			TIM_BUCKET_W1_S_NUM_ENTRIES);
+
+	return __atomic_and_fetch(&bktp->w1, v, __ATOMIC_ACQ_REL);
+}
+
+#endif /* __OTX2_TIM_WORKER_H__ */
-- 
2.22.0


  parent reply	other threads:[~2019-06-28 18:29 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-06-28 18:23 [dpdk-dev] [PATCH v3 00/42] OCTEONTX2 event device driver pbhagavatula
2019-06-28 18:23 ` [dpdk-dev] [PATCH v3 01/42] event/octeontx2: add build infra and device probe pbhagavatula
2019-06-28 18:23 ` [dpdk-dev] [PATCH v3 02/42] event/octeontx2: add init and fini for octeontx2 SSO object pbhagavatula
2019-06-28 18:23 ` [dpdk-dev] [PATCH v3 03/42] event/octeontx2: add device capabilities function pbhagavatula
2019-06-28 18:23 ` [dpdk-dev] [PATCH v3 04/42] event/octeontx2: add device configure function pbhagavatula
2019-06-28 18:23 ` [dpdk-dev] [PATCH v3 05/42] event/octeontx2: add event queue config functions pbhagavatula
2019-06-28 18:23 ` [dpdk-dev] [PATCH v3 06/42] event/octeontx2: allocate event inflight buffers pbhagavatula
2019-06-28 18:23 ` [dpdk-dev] [PATCH v3 07/42] event/octeontx2: add devargs for inflight buffer count pbhagavatula
2019-06-28 18:23 ` [dpdk-dev] [PATCH v3 08/42] event/octeontx2: add event port config functions pbhagavatula
2019-06-28 18:23 ` [dpdk-dev] [PATCH v3 09/42] event/octeontx2: support linking queues to ports pbhagavatula
2019-06-28 18:23 ` [dpdk-dev] [PATCH v3 10/42] event/octeontx2: support dequeue timeout tick conversion pbhagavatula
2019-06-28 18:23 ` [dpdk-dev] [PATCH v3 11/42] event/octeontx2: add SSO GWS and GGRP IRQ handlers pbhagavatula
2019-06-28 18:23 ` [dpdk-dev] [PATCH v3 12/42] event/octeontx2: add register dump functions pbhagavatula
2019-06-28 18:23 ` [dpdk-dev] [PATCH v3 13/42] event/octeontx2: add xstats support pbhagavatula
2019-06-28 18:23 ` [dpdk-dev] [PATCH v3 14/42] event/octeontx2: add SSO HW device operations pbhagavatula
2019-06-28 18:23 ` [dpdk-dev] [PATCH v3 15/42] event/octeontx2: add worker enqueue functions pbhagavatula
2019-06-28 18:23 ` [dpdk-dev] [PATCH v3 16/42] event/octeontx2: add worker dequeue functions pbhagavatula
2019-06-28 18:23 ` [dpdk-dev] [PATCH v3 17/42] event/octeontx2: add octeontx2 SSO dual workslot mode pbhagavatula
2019-06-28 18:23 ` [dpdk-dev] [PATCH v3 18/42] event/octeontx2: add SSO dual GWS HW device operations pbhagavatula
2019-06-28 18:23 ` [dpdk-dev] [PATCH v3 19/42] event/octeontx2: add worker dual GWS enqueue functions pbhagavatula
2019-06-28 18:23 ` [dpdk-dev] [PATCH v3 20/42] event/octeontx2: add worker dual GWS dequeue functions pbhagavatula
2019-06-28 18:23 ` [dpdk-dev] [PATCH v3 21/42] event/octeontx2: add devargs to force legacy mode pbhagavatula
2019-06-28 18:23 ` [dpdk-dev] [PATCH v3 22/42] event/octeontx2: add device start function pbhagavatula
2019-06-28 18:23 ` [dpdk-dev] [PATCH v3 23/42] event/octeontx2: add devargs to control SSO GGRP QoS pbhagavatula
2019-06-28 18:23 ` [dpdk-dev] [PATCH v3 24/42] event/octeontx2: add device stop and close functions pbhagavatula
2019-06-28 18:23 ` [dpdk-dev] [PATCH v3 25/42] event/octeontx2: add SSO selftest pbhagavatula
2019-06-28 18:23 ` [dpdk-dev] [PATCH v3 26/42] event/octeontx2: add event timer support pbhagavatula
2019-06-28 18:23 ` [dpdk-dev] [PATCH v3 27/42] event/octeontx2: add timer adapter capabilities pbhagavatula
2019-06-28 18:23 ` [dpdk-dev] [PATCH v3 28/42] event/octeontx2: create and free timer adapter pbhagavatula
2019-06-28 18:23 ` [dpdk-dev] [PATCH v3 29/42] event/octeontx2: allow TIM to optimize config pbhagavatula
2019-06-28 18:23 ` [dpdk-dev] [PATCH v3 30/42] event/octeontx2: add devargs to disable NPA pbhagavatula
2019-06-28 18:23 ` [dpdk-dev] [PATCH v3 31/42] event/octeontx2: add devargs to modify chunk slots pbhagavatula
2019-06-28 18:23 ` [dpdk-dev] [PATCH v3 32/42] event/octeontx2: add TIM IRQ handlers pbhagavatula
2019-06-28 18:23 ` [dpdk-dev] [PATCH v3 33/42] event/octeontx2: allow adapters to resize inflight buffers pbhagavatula
2019-06-28 18:23 ` [dpdk-dev] [PATCH v3 34/42] event/octeontx2: add timer adapter info get function pbhagavatula
2019-06-28 18:23 ` pbhagavatula [this message]
2019-06-28 18:23 ` [dpdk-dev] [PATCH v3 36/42] event/octeontx2: add event timer arm routine pbhagavatula
2019-06-28 18:23 ` [dpdk-dev] [PATCH v3 37/42] event/octeontx2: add event timer arm timeout burst pbhagavatula
2019-06-28 18:23 ` [dpdk-dev] [PATCH v3 38/42] event/octeontx2: add event timer cancel function pbhagavatula
2019-06-28 18:23 ` [dpdk-dev] [PATCH v3 39/42] event/octeontx2: add event timer stats get and reset pbhagavatula
2019-06-28 18:23 ` [dpdk-dev] [PATCH v3 40/42] event/octeontx2: add even timer adapter start and stop pbhagavatula
2019-06-28 18:23 ` [dpdk-dev] [PATCH v3 41/42] event/octeontx2: add devargs to limit timer adapters pbhagavatula
2019-06-28 18:23 ` [dpdk-dev] [PATCH v3 42/42] event/octeontx2: add devargs to control adapter parameters pbhagavatula
2019-07-02  4:25 ` [dpdk-dev] [PATCH v3 00/42] OCTEONTX2 event device driver Jerin Jacob Kollanukkaran

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=20190628182354.228-36-pbhagavatula@marvell.com \
    --to=pbhagavatula@marvell.com \
    --cc=dev@dpdk.org \
    --cc=jerinj@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).