From: Tomasz Duszynski <tduszynski@marvell.com>
To: <dev@dpdk.org>
Cc: <jerinj@marvell.com>, Tomasz Duszynski <tduszynski@marvell.com>
Subject: [PATCH 08/10] raw/cnxk_gpio: support standard GPIO operations
Date: Wed, 17 Nov 2021 01:21:53 +0100 [thread overview]
Message-ID: <20211117002155.293267-9-tduszynski@marvell.com> (raw)
In-Reply-To: <20211117002155.293267-1-tduszynski@marvell.com>
Add support for standard GPIO operations i.e ones normally
provided by GPIO sysfs interface.
Signed-off-by: Tomasz Duszynski <tduszynski@marvell.com>
---
doc/guides/rawdevs/cnxk_gpio.rst | 98 ++++++++
drivers/raw/cnxk_gpio/cnxk_gpio.c | 146 +++++++++++
drivers/raw/cnxk_gpio/rte_pmd_cnxk_gpio.h | 279 +++++++++++++++++++++-
3 files changed, 521 insertions(+), 2 deletions(-)
diff --git a/doc/guides/rawdevs/cnxk_gpio.rst b/doc/guides/rawdevs/cnxk_gpio.rst
index 868302d07f..f6c3c942c5 100644
--- a/doc/guides/rawdevs/cnxk_gpio.rst
+++ b/doc/guides/rawdevs/cnxk_gpio.rst
@@ -63,3 +63,101 @@ call barely exports GPIO to userspace.
To perform actual data transfer use standard ``rte_rawdev_enqueue_buffers()``
and ``rte_rawdev_dequeue_buffers()`` APIs. Not all messages produce sensible
responses hence dequeueing is not always necessary.
+
+CNXK GPIO PMD
+-------------
+
+PMD accepts ``struct cnxk_gpio_msg`` messages which differ by type and payload.
+Message types along with description are listed below. As for the usage examples
+please refer to ``cnxk_gpio_selftest()``. There's a set of convenient wrappers
+available, one for each existing command.
+
+Set GPIO value
+~~~~~~~~~~~~~~
+
+Message is used to set output to low or high. This does not work for GPIOs
+configured as input.
+
+Message must have type set to ``CNXK_GPIO_MSG_TYPE_SET_PIN_VALUE``.
+
+Payload must be an integer set to 0 (low) or 1 (high).
+
+Consider using ``rte_pmd_gpio_set_pin_value()`` wrapper.
+
+Set GPIO edge
+~~~~~~~~~~~~~
+
+Message is used to set edge that triggers interrupt.
+
+Message must have type set to ``CNXK_GPIO_MSG_TYPE_SET_PIN_EDGE``.
+
+Payload must be `enum cnxk_gpio_pin_edge`.
+
+Consider using ``rte_pmd_gpio_set_pin_edge()`` wrapper.
+
+Set GPIO direction
+~~~~~~~~~~~~~~~~~~
+
+Message is used to change GPIO direction to either input or output.
+
+Message must have type set to ``CNXK_GPIO_MSG_TYPE_SET_PIN_DIR``.
+
+Payload must be `enum cnxk_gpio_pin_dir`.
+
+Consider using ``rte_pmd_gpio_set_pin_dir()`` wrapper.
+
+Set GPIO active low
+~~~~~~~~~~~~~~~~~~~
+
+Message is used to set whether pin is active low.
+
+Message must have type set to ``CNXK_GPIO_MSG_TYPE_SET_PIN_ACTIVE_LOW``.
+
+Payload must be an integer set to 0 or 1. The latter activates inversion.
+
+Consider using ``rte_pmd_gpio_set_pin_active_low()`` wrapper.
+
+Get GPIO value
+~~~~~~~~~~~~~~
+
+Message is used to read GPIO value. Value can be 0 (low) or 1 (high).
+
+Message must have type set to ``CNXK_GPIO_MSG_TYPE_GET_PIN_VALUE``.
+
+Payload contains integer set to either 0 or 1.
+
+Consider using ``rte_pmd_gpio_get_pin_value()`` wrapper.
+
+Get GPIO edge
+~~~~~~~~~~~~~
+
+Message is used to read GPIO edge.
+
+Message must have type set to ``CNXK_GPIO_MSG_TYPE_GET_PIN_EDGE``.
+
+Payload contains `enum cnxk_gpio_pin_edge`.
+
+Consider using ``rte_pmd_gpio_get_pin_edge()`` wrapper.
+
+Get GPIO direction
+~~~~~~~~~~~~~~~~~~
+
+Message is used to read GPIO direction.
+
+Message must have type set to ``CNXK_GPIO_MSG_TYPE_GET_PIN_DIR``.
+
+Payload contains `enum cnxk_gpio_pin_dir`.
+
+Consider using ``rte_pmd_gpio_get_pin_dir()`` wrapper.
+
+Get GPIO active low
+~~~~~~~~~~~~~~~~~~~
+
+Message is used check whether inverted logic is active.
+
+Message must have type set to ``CNXK_GPIO_MSG_TYPE_GET_PIN_ACTIVE_LOW``.
+
+Payload contains an integer set to 0 or 1. The latter means inverted logic
+is turned on.
+
+Consider using ``rte_pmd_gpio_get_pin_active_low()`` wrapper.
diff --git a/drivers/raw/cnxk_gpio/cnxk_gpio.c b/drivers/raw/cnxk_gpio/cnxk_gpio.c
index 244a625822..c09bc5d56e 100644
--- a/drivers/raw/cnxk_gpio/cnxk_gpio.c
+++ b/drivers/raw/cnxk_gpio/cnxk_gpio.c
@@ -263,13 +263,159 @@ cnxk_gpio_queue_count(struct rte_rawdev *dev)
return gpiochip->num_gpios;
}
+static const struct {
+ enum cnxk_gpio_pin_edge edge;
+ const char *name;
+} cnxk_gpio_edge_name[] = {
+ { CNXK_GPIO_PIN_EDGE_NONE, "none" },
+ { CNXK_GPIO_PIN_EDGE_FALLING, "falling" },
+ { CNXK_GPIO_PIN_EDGE_RISING, "rising" },
+ { CNXK_GPIO_PIN_EDGE_BOTH, "both" },
+};
+
+static const char *
+cnxk_gpio_edge_to_name(enum cnxk_gpio_pin_edge edge)
+{
+ unsigned int i;
+
+ for (i = 0; i < RTE_DIM(cnxk_gpio_edge_name); i++) {
+ if (cnxk_gpio_edge_name[i].edge == edge)
+ return cnxk_gpio_edge_name[i].name;
+ }
+
+ return NULL;
+}
+
+static enum cnxk_gpio_pin_edge
+cnxk_gpio_name_to_edge(const char *name)
+{
+ unsigned int i;
+
+ for (i = 0; i < RTE_DIM(cnxk_gpio_edge_name); i++) {
+ if (!strcmp(cnxk_gpio_edge_name[i].name, name))
+ break;
+ }
+
+ return cnxk_gpio_edge_name[i].edge;
+}
+
+static const struct {
+ enum cnxk_gpio_pin_dir dir;
+ const char *name;
+} cnxk_gpio_dir_name[] = {
+ { CNXK_GPIO_PIN_DIR_IN, "in" },
+ { CNXK_GPIO_PIN_DIR_OUT, "out" },
+ { CNXK_GPIO_PIN_DIR_HIGH, "high" },
+ { CNXK_GPIO_PIN_DIR_LOW, "low" },
+};
+
+static const char *
+cnxk_gpio_dir_to_name(enum cnxk_gpio_pin_dir dir)
+{
+ unsigned int i;
+
+ for (i = 0; i < RTE_DIM(cnxk_gpio_dir_name); i++) {
+ if (cnxk_gpio_dir_name[i].dir == dir)
+ return cnxk_gpio_dir_name[i].name;
+ }
+
+ return NULL;
+}
+
+static enum cnxk_gpio_pin_dir
+cnxk_gpio_name_to_dir(const char *name)
+{
+ unsigned int i;
+
+ for (i = 0; i < RTE_DIM(cnxk_gpio_dir_name); i++) {
+ if (!strcmp(cnxk_gpio_dir_name[i].name, name))
+ break;
+ }
+
+ return cnxk_gpio_dir_name[i].dir;
+}
+
static int
cnxk_gpio_process_buf(struct cnxk_gpio *gpio, struct rte_rawdev_buf *rbuf)
{
struct cnxk_gpio_msg *msg = rbuf->buf_addr;
+ enum cnxk_gpio_pin_edge edge;
+ enum cnxk_gpio_pin_dir dir;
+ char buf[CNXK_GPIO_BUFSZ];
void *rsp = NULL;
+ int ret, val, n;
+
+ n = snprintf(buf, sizeof(buf), "%s/gpio%d", CNXK_GPIO_CLASS_PATH,
+ gpio->num);
switch (msg->type) {
+ case CNXK_GPIO_MSG_TYPE_SET_PIN_VALUE:
+ snprintf(buf + n, sizeof(buf) - n, "/value");
+ ret = cnxk_gpio_write_attr_int(buf, !!*(int *)msg->data);
+ break;
+ case CNXK_GPIO_MSG_TYPE_SET_PIN_EDGE:
+ snprintf(buf + n, sizeof(buf) - n, "/edge");
+ edge = *(enum cnxk_gpio_pin_edge *)msg->data;
+ ret = cnxk_gpio_write_attr(buf, cnxk_gpio_edge_to_name(edge));
+ break;
+ case CNXK_GPIO_MSG_TYPE_SET_PIN_DIR:
+ snprintf(buf + n, sizeof(buf) - n, "/direction");
+ dir = *(enum cnxk_gpio_pin_dir *)msg->data;
+ ret = cnxk_gpio_write_attr(buf, cnxk_gpio_dir_to_name(dir));
+ break;
+ case CNXK_GPIO_MSG_TYPE_SET_PIN_ACTIVE_LOW:
+ snprintf(buf + n, sizeof(buf) - n, "/active_low");
+ val = *(int *)msg->data;
+ ret = cnxk_gpio_write_attr_int(buf, val);
+ break;
+ case CNXK_GPIO_MSG_TYPE_GET_PIN_VALUE:
+ snprintf(buf + n, sizeof(buf) - n, "/value");
+ ret = cnxk_gpio_read_attr_int(buf, &val);
+ if (ret)
+ break;
+
+ rsp = rte_zmalloc(NULL, sizeof(int), 0);
+ if (!rsp)
+ return -ENOMEM;
+
+ *(int *)rsp = val;
+ break;
+ case CNXK_GPIO_MSG_TYPE_GET_PIN_EDGE:
+ snprintf(buf + n, sizeof(buf) - n, "/edge");
+ ret = cnxk_gpio_read_attr(buf, buf);
+ if (ret)
+ break;
+
+ rsp = rte_zmalloc(NULL, sizeof(enum cnxk_gpio_pin_edge), 0);
+ if (!rsp)
+ return -ENOMEM;
+
+ *(enum cnxk_gpio_pin_edge *)rsp = cnxk_gpio_name_to_edge(buf);
+ break;
+ case CNXK_GPIO_MSG_TYPE_GET_PIN_DIR:
+ snprintf(buf + n, sizeof(buf) - n, "/direction");
+ ret = cnxk_gpio_read_attr(buf, buf);
+ if (ret)
+ break;
+
+ rsp = rte_zmalloc(NULL, sizeof(enum cnxk_gpio_pin_dir), 0);
+ if (!rsp)
+ return -ENOMEM;
+
+ *(enum cnxk_gpio_pin_dir *)rsp = cnxk_gpio_name_to_dir(buf);
+ break;
+ case CNXK_GPIO_MSG_TYPE_GET_PIN_ACTIVE_LOW:
+ snprintf(buf + n, sizeof(buf) - n, "/active_low");
+ ret = cnxk_gpio_read_attr_int(buf, &val);
+ if (ret)
+ break;
+
+ rsp = rte_zmalloc(NULL, sizeof(int), 0);
+ if (!rsp)
+ return -ENOMEM;
+
+ *(int *)rsp = val;
+ break;
default:
return -EINVAL;
}
diff --git a/drivers/raw/cnxk_gpio/rte_pmd_cnxk_gpio.h b/drivers/raw/cnxk_gpio/rte_pmd_cnxk_gpio.h
index c71065e10c..7c3dc225ca 100644
--- a/drivers/raw/cnxk_gpio/rte_pmd_cnxk_gpio.h
+++ b/drivers/raw/cnxk_gpio/rte_pmd_cnxk_gpio.h
@@ -5,6 +5,10 @@
#ifndef _RTE_PMD_CNXK_GPIO_H_
#define _RTE_PMD_CNXK_GPIO_H_
+#include <rte_malloc.h>
+#include <rte_memcpy.h>
+#include <rte_rawdev.h>
+
/**
* @file rte_pmd_cnxk_gpio.h
*
@@ -20,8 +24,46 @@ extern "C" {
/** Available message types */
enum cnxk_gpio_msg_type {
- /** Invalid message type */
- CNXK_GPIO_MSG_TYPE_INVALID,
+ /** Type used to set output value */
+ CNXK_GPIO_MSG_TYPE_SET_PIN_VALUE,
+ /** Type used to set edge */
+ CNXK_GPIO_MSG_TYPE_SET_PIN_EDGE,
+ /** Type used to set direction */
+ CNXK_GPIO_MSG_TYPE_SET_PIN_DIR,
+ /** Type used to set inverted logic */
+ CNXK_GPIO_MSG_TYPE_SET_PIN_ACTIVE_LOW,
+ /** Type used to read value */
+ CNXK_GPIO_MSG_TYPE_GET_PIN_VALUE,
+ /** Type used to read edge */
+ CNXK_GPIO_MSG_TYPE_GET_PIN_EDGE,
+ /** Type used to read direction */
+ CNXK_GPIO_MSG_TYPE_GET_PIN_DIR,
+ /** Type used to read inverted logic state */
+ CNXK_GPIO_MSG_TYPE_GET_PIN_ACTIVE_LOW,
+};
+
+/** Available edges */
+enum cnxk_gpio_pin_edge {
+ /** Set edge to none */
+ CNXK_GPIO_PIN_EDGE_NONE,
+ /** Set edge to falling */
+ CNXK_GPIO_PIN_EDGE_FALLING,
+ /** Set edge to rising */
+ CNXK_GPIO_PIN_EDGE_RISING,
+ /** Set edge to both rising and falling */
+ CNXK_GPIO_PIN_EDGE_BOTH,
+};
+
+/** Available directions */
+enum cnxk_gpio_pin_dir {
+ /** Set direction to input */
+ CNXK_GPIO_PIN_DIR_IN,
+ /** Set direction to output */
+ CNXK_GPIO_PIN_DIR_OUT,
+ /** Set direction to output and value to 1 */
+ CNXK_GPIO_PIN_DIR_HIGH,
+ /* Set direction to output and value to 0 */
+ CNXK_GPIO_PIN_DIR_LOW,
};
struct cnxk_gpio_msg {
@@ -31,6 +73,239 @@ struct cnxk_gpio_msg {
void *data;
};
+/** @internal helper routine for enqueuing/dequeuing messages */
+static __rte_always_inline int
+__rte_pmd_gpio_enq_deq(uint16_t dev_id, int gpio, void *req, void *rsp,
+ size_t rsp_size)
+{
+ struct rte_rawdev_buf *bufs[1];
+ struct rte_rawdev_buf buf;
+ void *q;
+ int ret;
+
+ q = (void *)(size_t)gpio;
+ buf.buf_addr = req;
+ bufs[0] = &buf;
+
+ ret = rte_rawdev_enqueue_buffers(dev_id, bufs, RTE_DIM(bufs), q);
+ if (ret < 0)
+ return ret;
+ if (ret != RTE_DIM(bufs))
+ return -EIO;
+
+ if (!rsp)
+ return 0;
+
+ ret = rte_rawdev_dequeue_buffers(dev_id, bufs, RTE_DIM(bufs), q);
+ if (ret < 0)
+ return ret;
+ if (ret != RTE_DIM(bufs))
+ return -EIO;
+
+ rte_memcpy(rsp, buf.buf_addr, rsp_size);
+ rte_free(buf.buf_addr);
+
+ return 0;
+}
+
+/**
+ * Set output to specific value
+ *
+ * @param dev_id
+ * The identifier of the device
+ * @param gpio
+ * Zero-based GPIO number
+ * @param val
+ * Value output will be set to. 0 represents low state while
+ * 1 high state
+ *
+ * @return
+ * Returns 0 on success, negative error code otherwise
+ */
+static __rte_always_inline int
+rte_pmd_gpio_set_pin_value(uint16_t dev_id, int gpio, int val)
+{
+ struct cnxk_gpio_msg msg = {
+ .type = CNXK_GPIO_MSG_TYPE_SET_PIN_VALUE,
+ .data = &val,
+ };
+
+ return __rte_pmd_gpio_enq_deq(dev_id, gpio, &msg, NULL, 0);
+}
+
+/**
+ * Select signal edge that triggers interrupt
+ *
+ * @param dev_id
+ * The identifier of the device
+ * @param gpio
+ * Zero-based GPIO number
+ * @param edge
+ * Signal edge that triggers interrupt
+ *
+ * @return
+ * Returns 0 on success, negative error code otherwise
+ */
+static __rte_always_inline int
+rte_pmd_gpio_set_pin_edge(uint16_t dev_id, int gpio,
+ enum cnxk_gpio_pin_edge edge)
+{
+ struct cnxk_gpio_msg msg = {
+ .type = CNXK_GPIO_MSG_TYPE_SET_PIN_EDGE,
+ .data = &edge
+ };
+
+ return __rte_pmd_gpio_enq_deq(dev_id, gpio, &msg, NULL, 0);
+}
+
+/**
+ * Configure GPIO as input or output
+ *
+ * @param dev_id
+ * The identifier of the device
+ * @param gpio
+ * Zero-based GPIO number
+ * @param dir
+ * Direction of the GPIO
+ *
+ * @return
+ * Returns 0 on success, negative error code otherwise
+ */
+static __rte_always_inline int
+rte_pmd_gpio_set_pin_dir(uint16_t dev_id, int gpio, enum cnxk_gpio_pin_dir dir)
+{
+ struct cnxk_gpio_msg msg = {
+ .type = CNXK_GPIO_MSG_TYPE_SET_PIN_DIR,
+ .data = &dir,
+ };
+
+ return __rte_pmd_gpio_enq_deq(dev_id, gpio, &msg, NULL, 0);
+}
+
+/**
+ * Enable or disable inverted logic
+ *
+ * If GPIO is configured as output then writing 1 or 0 will result in setting
+ * output to respectively low or high
+ *
+ * If GPIO is configured as input then logic inversion applies to edges. Both
+ * current and future settings are affected
+ *
+ * @param dev_id
+ * The identifier of the device
+ * @param gpio
+ * Zero-based GPIO number
+ * @param val
+ * 0 to disable, 1 to enable inverted logic
+ *
+ * @return
+ * Returns 0 on success, negative error code otherwise
+ */
+static __rte_always_inline int
+rte_pmd_gpio_set_pin_active_low(uint16_t dev_id, int gpio, int val)
+{
+ struct cnxk_gpio_msg msg = {
+ .type = CNXK_GPIO_MSG_TYPE_SET_PIN_ACTIVE_LOW,
+ .data = &val,
+ };
+
+ return __rte_pmd_gpio_enq_deq(dev_id, gpio, &msg, NULL, 0);
+}
+
+/**
+ * Read GPIO value
+ *
+ * @param dev_id
+ * The identifier of the device
+ * @param gpio
+ * Zero-based GPIO number
+ * @param val
+ * Where to store read logical signal value i.e 0 or 1
+ *
+ * @return
+ * Returns 0 on success, negative error code otherwise
+ */
+static __rte_always_inline int
+rte_pmd_gpio_get_pin_value(uint16_t dev_id, int gpio, int *val)
+{
+ struct cnxk_gpio_msg msg = {
+ .type = CNXK_GPIO_MSG_TYPE_GET_PIN_VALUE,
+ };
+
+ return __rte_pmd_gpio_enq_deq(dev_id, gpio, &msg, val, sizeof(*val));
+}
+
+/**
+ * Read GPIO edge
+ *
+ * @param dev_id
+ * The identifier of the device
+ * @param gpio
+ * Zero-based GPIO number
+ * @param edge
+ * Where to store edge
+ *
+ * @return
+ * Returns 0 on success, negative error code otherwise
+ */
+static __rte_always_inline int
+rte_pmd_gpio_get_pin_edge(uint16_t dev_id, int gpio,
+ enum cnxk_gpio_pin_edge *edge)
+{
+ struct cnxk_gpio_msg msg = {
+ .type = CNXK_GPIO_MSG_TYPE_GET_PIN_EDGE,
+ };
+
+ return __rte_pmd_gpio_enq_deq(dev_id, gpio, &msg, edge, sizeof(*edge));
+}
+
+/**
+ * Read GPIO direction
+ *
+ * @param dev_id
+ * The identifier of the device
+ * @param gpio
+ * Zero-based GPIO number
+ * @param dir
+ * Where to store direction
+ *
+ * @return
+ * Returns 0 on success, negative error code otherwise
+ */
+static __rte_always_inline int
+rte_pmd_gpio_get_pin_dir(uint16_t dev_id, int gpio, enum cnxk_gpio_pin_dir *dir)
+{
+ struct cnxk_gpio_msg msg = {
+ .type = CNXK_GPIO_MSG_TYPE_GET_PIN_DIR,
+ };
+
+ return __rte_pmd_gpio_enq_deq(dev_id, gpio, &msg, dir, sizeof(*dir));
+}
+
+/**
+ * Read whether GPIO is active low
+ *
+ * @param dev_id
+ * The identifier of the device
+ * @param gpio
+ * Zero-based GPIO number
+ * @param val
+ * Where to store active low state
+ *
+ * @return
+ * Returns 0 on success, negative error code otherwise
+ */
+static __rte_always_inline int
+rte_pmd_gpio_get_pin_active_low(uint16_t dev_id, int gpio, int *val)
+{
+ struct cnxk_gpio_msg msg = {
+ .type = CNXK_GPIO_MSG_TYPE_GET_PIN_ACTIVE_LOW,
+ .data = &val,
+ };
+
+ return __rte_pmd_gpio_enq_deq(dev_id, gpio, &msg, val, sizeof(*val));
+}
+
#ifdef __cplusplus
}
#endif
--
2.25.1
next prev parent reply other threads:[~2021-11-17 0:23 UTC|newest]
Thread overview: 75+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-11-17 0:21 [DPDK 22.02 PATCH 00/10] Add cnxk_gpio PMD Tomasz Duszynski
2021-11-17 0:21 ` [PATCH 01/10] raw/cnxk_gpio: add GPIO driver skeleton Tomasz Duszynski
2021-11-17 0:21 ` [PATCH 02/10] raw/cnxk_gpio: support reading default queue conf Tomasz Duszynski
2021-11-17 0:21 ` [PATCH 03/10] raw/cnxk_gpio: support reading queue count Tomasz Duszynski
2021-11-17 0:21 ` [PATCH 04/10] raw/cnxk_gpio: support queue setup Tomasz Duszynski
2021-11-17 0:21 ` [PATCH 05/10] raw/cnxk_gpio: support queue release Tomasz Duszynski
2021-11-17 0:21 ` [PATCH 06/10] raw/cnxk_gpio: support enqueuing buffers Tomasz Duszynski
2021-11-17 0:21 ` [PATCH 07/10] raw/cnxk_gpio: support dequeuing buffers Tomasz Duszynski
2021-11-17 0:21 ` Tomasz Duszynski [this message]
2021-11-17 0:21 ` [PATCH 09/10] raw/cnxk_gpio: support custom irq handlers Tomasz Duszynski
2021-11-17 0:21 ` [PATCH 10/10] raw/cnxk_gpio: support selftest Tomasz Duszynski
2021-11-17 1:17 ` Stephen Hemminger
2021-11-28 15:44 ` [DPDK 22.02 PATCH v2 00/10] Add cnxk_gpio PMD Tomasz Duszynski
2021-11-28 15:44 ` [PATCH v2 01/10] raw/cnxk_gpio: add GPIO driver skeleton Tomasz Duszynski
2021-11-28 15:44 ` [PATCH v2 02/10] raw/cnxk_gpio: support reading default queue conf Tomasz Duszynski
2021-11-28 15:44 ` [PATCH v2 03/10] raw/cnxk_gpio: support reading queue count Tomasz Duszynski
2021-11-28 15:44 ` [PATCH v2 04/10] raw/cnxk_gpio: support queue setup Tomasz Duszynski
2021-11-28 15:44 ` [PATCH v2 05/10] raw/cnxk_gpio: support queue release Tomasz Duszynski
2021-11-28 15:44 ` [PATCH v2 06/10] raw/cnxk_gpio: support enqueuing buffers Tomasz Duszynski
2021-11-28 15:44 ` [PATCH v2 07/10] raw/cnxk_gpio: support dequeuing buffers Tomasz Duszynski
2021-11-28 15:44 ` [PATCH v2 08/10] raw/cnxk_gpio: support standard GPIO operations Tomasz Duszynski
2021-11-28 15:44 ` [PATCH v2 09/10] raw/cnxk_gpio: support custom irq handlers Tomasz Duszynski
2021-11-28 15:44 ` [PATCH v2 10/10] raw/cnxk_gpio: support selftest Tomasz Duszynski
2021-12-13 8:17 ` [PATCH v3 00/10] Add cnxk_gpio PMD Tomasz Duszynski
2021-12-13 8:17 ` [PATCH v3 01/10] raw/cnxk_gpio: add GPIO driver skeleton Tomasz Duszynski
2021-12-13 8:17 ` [PATCH v3 02/10] raw/cnxk_gpio: support reading default queue conf Tomasz Duszynski
2021-12-13 8:17 ` [PATCH v3 03/10] raw/cnxk_gpio: support reading queue count Tomasz Duszynski
2021-12-13 8:17 ` [PATCH v3 04/10] raw/cnxk_gpio: support queue setup Tomasz Duszynski
2021-12-13 8:17 ` [PATCH v3 05/10] raw/cnxk_gpio: support queue release Tomasz Duszynski
2021-12-13 8:17 ` [PATCH v3 06/10] raw/cnxk_gpio: support enqueuing buffers Tomasz Duszynski
2021-12-13 8:17 ` [PATCH v3 07/10] raw/cnxk_gpio: support dequeuing buffers Tomasz Duszynski
2021-12-13 8:17 ` [PATCH v3 08/10] raw/cnxk_gpio: support standard GPIO operations Tomasz Duszynski
2021-12-13 8:17 ` [PATCH v3 09/10] raw/cnxk_gpio: support custom irq handlers Tomasz Duszynski
2021-12-13 8:17 ` [PATCH v3 10/10] raw/cnxk_gpio: support selftest Tomasz Duszynski
2022-01-05 14:00 ` [PATCH v4 00/11] Add cnxk_gpio Tomasz Duszynski
2022-01-05 14:00 ` [PATCH v4 01/11] raw/cnxk_gpio: add GPIO driver skeleton Tomasz Duszynski
2022-01-05 14:00 ` [PATCH v4 02/11] raw/cnxk_gpio: support reading default queue conf Tomasz Duszynski
2022-01-05 14:00 ` [PATCH v4 03/11] raw/cnxk_gpio: support reading queue count Tomasz Duszynski
2022-01-05 14:00 ` [PATCH v4 04/11] raw/cnxk_gpio: support queue setup Tomasz Duszynski
2022-01-05 14:00 ` [PATCH v4 05/11] raw/cnxk_gpio: support queue release Tomasz Duszynski
2022-01-05 14:00 ` [PATCH v4 06/11] raw/cnxk_gpio: support enqueuing buffers Tomasz Duszynski
2022-01-05 14:00 ` [PATCH v4 07/11] raw/cnxk_gpio: support dequeuing buffers Tomasz Duszynski
2022-01-05 14:00 ` [PATCH v4 08/11] raw/cnxk_gpio: support standard GPIO operations Tomasz Duszynski
2022-01-05 14:00 ` [PATCH v4 09/11] raw/cnxk_gpio: support custom irq handlers Tomasz Duszynski
2022-01-05 14:00 ` [PATCH v4 10/11] raw/cnxk_gpio: support selftest Tomasz Duszynski
2022-01-05 14:00 ` [PATCH v4 11/11] raw/cnxk_gpio: add option to allow using subset of GPIOs Tomasz Duszynski
2022-01-06 9:43 ` [PATCH v4 00/11] Add cnxk_gpio Jerin Jacob
2022-01-18 13:24 ` [PATCH v5 " Tomasz Duszynski
2022-01-18 13:24 ` [PATCH v5 01/11] raw/cnxk_gpio: add GPIO driver skeleton Tomasz Duszynski
2022-01-18 13:24 ` [PATCH v5 02/11] raw/cnxk_gpio: support reading default queue conf Tomasz Duszynski
2022-01-18 13:24 ` [PATCH v5 03/11] raw/cnxk_gpio: support reading queue count Tomasz Duszynski
2022-01-18 13:24 ` [PATCH v5 04/11] raw/cnxk_gpio: support queue setup Tomasz Duszynski
2022-01-18 13:24 ` [PATCH v5 05/11] raw/cnxk_gpio: support queue release Tomasz Duszynski
2022-01-18 13:24 ` [PATCH v5 06/11] raw/cnxk_gpio: support enqueuing buffers Tomasz Duszynski
2022-01-18 13:24 ` [PATCH v5 07/11] raw/cnxk_gpio: support dequeuing buffers Tomasz Duszynski
2022-01-18 13:24 ` [PATCH v5 08/11] raw/cnxk_gpio: support standard GPIO operations Tomasz Duszynski
2022-01-18 13:24 ` [PATCH v5 09/11] raw/cnxk_gpio: support custom irq handlers Tomasz Duszynski
2022-01-18 13:24 ` [PATCH v5 10/11] raw/cnxk_gpio: support selftest Tomasz Duszynski
2022-01-18 13:24 ` [PATCH v5 11/11] raw/cnxk_gpio: add option to allow using subset of GPIOs Tomasz Duszynski
2022-02-09 13:24 ` [PATCH v5 00/11] Add cnxk_gpio Thomas Monjalon
2022-02-17 11:09 ` [PATCH v6 " Tomasz Duszynski
2022-02-17 11:09 ` [PATCH v6 01/11] raw/cnxk_gpio: add GPIO driver skeleton Tomasz Duszynski
2022-02-18 11:47 ` Thomas Monjalon
2022-02-22 14:18 ` Ferruh Yigit
2022-02-17 11:09 ` [PATCH v6 02/11] raw/cnxk_gpio: support reading default queue conf Tomasz Duszynski
2022-02-17 11:09 ` [PATCH v6 03/11] raw/cnxk_gpio: support reading queue count Tomasz Duszynski
2022-02-17 11:09 ` [PATCH v6 04/11] raw/cnxk_gpio: support queue setup Tomasz Duszynski
2022-02-17 11:09 ` [PATCH v6 05/11] raw/cnxk_gpio: support queue release Tomasz Duszynski
2022-02-17 11:09 ` [PATCH v6 06/11] raw/cnxk_gpio: support enqueuing buffers Tomasz Duszynski
2022-02-17 11:09 ` [PATCH v6 07/11] raw/cnxk_gpio: support dequeuing buffers Tomasz Duszynski
2022-02-17 11:09 ` [PATCH v6 08/11] raw/cnxk_gpio: support standard GPIO operations Tomasz Duszynski
2022-02-17 11:09 ` [PATCH v6 09/11] raw/cnxk_gpio: support custom irq handlers Tomasz Duszynski
2022-02-17 11:09 ` [PATCH v6 10/11] raw/cnxk_gpio: support selftest Tomasz Duszynski
2022-02-17 11:09 ` [PATCH v6 11/11] raw/cnxk_gpio: add option to allow using subset of GPIOs Tomasz Duszynski
2022-02-18 17:19 ` [PATCH v6 00/11] Add cnxk_gpio Thomas Monjalon
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=20211117002155.293267-9-tduszynski@marvell.com \
--to=tduszynski@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).