From: Vamsi Attunuru <vattun...@marvell.com> Allow configuration of DPI DMA queue priority through mailbox request.
Signed-off-by: Vamsi Attunuru <vattun...@marvell.com> --- V3 changes: * Updated release notes. V2 changes: * Rebased to tot. v1 changes: * Addressed v0 comments. doc/guides/rel_notes/release_24_11.rst | 4 ++++ drivers/common/cnxk/roc_dpi.c | 2 ++ drivers/common/cnxk/roc_dpi.h | 1 + drivers/common/cnxk/roc_dpi_priv.h | 2 ++ drivers/common/cnxk/roc_features.h | 6 ++++++ drivers/dma/cnxk/cnxk_dmadev.c | 6 ++++++ drivers/dma/cnxk/cnxk_dmadev.h | 1 + 7 files changed, 22 insertions(+) diff --git a/doc/guides/rel_notes/release_24_11.rst b/doc/guides/rel_notes/release_24_11.rst index fa4822d928..7f08ab372c 100644 --- a/doc/guides/rel_notes/release_24_11.rst +++ b/doc/guides/rel_notes/release_24_11.rst @@ -231,6 +231,10 @@ New Features * Added independent enqueue feature. +* **Updated Marvell CNXK DMA driver.** + + Added support for DMA queue priority configuration. + * **Added IPv4 network order lookup in the FIB library.** A new flag field is introduced in ``rte_fib_conf`` structure. diff --git a/drivers/common/cnxk/roc_dpi.c b/drivers/common/cnxk/roc_dpi.c index 892685d185..71edfcbf9b 100644 --- a/drivers/common/cnxk/roc_dpi.c +++ b/drivers/common/cnxk/roc_dpi.c @@ -95,6 +95,7 @@ roc_dpi_configure(struct roc_dpi *roc_dpi, uint32_t chunk_sz, uint64_t aura, uin mbox_msg.u[1] = 0; /* DPI PF driver expects vfid starts from index 0 */ mbox_msg.s.vfid = roc_dpi->vfid; + mbox_msg.s.pri = roc_dpi->priority; mbox_msg.s.cmd = DPI_QUEUE_OPEN; mbox_msg.s.csize = chunk_sz; mbox_msg.s.aura = aura; @@ -137,6 +138,7 @@ roc_dpi_configure_v2(struct roc_dpi *roc_dpi, uint32_t chunk_sz, uint64_t aura, mbox_msg.u[1] = 0; /* DPI PF driver expects vfid starts from index 0 */ mbox_msg.s.vfid = roc_dpi->vfid; + mbox_msg.s.pri = roc_dpi->priority; mbox_msg.s.cmd = DPI_QUEUE_OPEN_V2; mbox_msg.s.csize = chunk_sz / 8; mbox_msg.s.aura = aura; diff --git a/drivers/common/cnxk/roc_dpi.h b/drivers/common/cnxk/roc_dpi.h index 7b4f9d4f4f..3a11559df9 100644 --- a/drivers/common/cnxk/roc_dpi.h +++ b/drivers/common/cnxk/roc_dpi.h @@ -9,6 +9,7 @@ struct roc_dpi { struct plt_pci_device *pci_dev; uint8_t *rbase; uint16_t vfid; + uint8_t priority; } __plt_cache_aligned; int __roc_api roc_dpi_dev_init(struct roc_dpi *roc_dpi, uint8_t offset); diff --git a/drivers/common/cnxk/roc_dpi_priv.h b/drivers/common/cnxk/roc_dpi_priv.h index 844e5f37ee..1f975915f7 100644 --- a/drivers/common/cnxk/roc_dpi_priv.h +++ b/drivers/common/cnxk/roc_dpi_priv.h @@ -38,6 +38,8 @@ typedef union dpi_mbox_msg_t { uint64_t wqecs : 1; /* WQE queue DMA completion status offset */ uint64_t wqecsoff : 8; + /* Priority */ + uint64_t pri : 1; } s; } dpi_mbox_msg_t; diff --git a/drivers/common/cnxk/roc_features.h b/drivers/common/cnxk/roc_features.h index 6abb35c296..0002a7b5c3 100644 --- a/drivers/common/cnxk/roc_features.h +++ b/drivers/common/cnxk/roc_features.h @@ -96,4 +96,10 @@ roc_feature_nix_has_second_pass_drop(void) return 0; } +static inline bool +roc_feature_dpi_has_priority(void) +{ + return roc_model_is_cn10k(); +} + #endif diff --git a/drivers/dma/cnxk/cnxk_dmadev.c b/drivers/dma/cnxk/cnxk_dmadev.c index 2d5307b22e..e7be3767b2 100644 --- a/drivers/dma/cnxk/cnxk_dmadev.c +++ b/drivers/dma/cnxk/cnxk_dmadev.c @@ -20,6 +20,10 @@ cnxk_dmadev_info_get(const struct rte_dma_dev *dev, struct rte_dma_info *dev_inf RTE_DMA_CAPA_DEV_TO_MEM | RTE_DMA_CAPA_DEV_TO_DEV | RTE_DMA_CAPA_OPS_COPY | RTE_DMA_CAPA_OPS_COPY_SG | RTE_DMA_CAPA_M2D_AUTO_FREE; + if (roc_feature_dpi_has_priority()) { + dev_info->dev_capa |= RTE_DMA_CAPA_PRI_POLICY_SP; + dev_info->nb_priorities = CN10K_DPI_MAX_PRI; + } dev_info->max_desc = CNXK_DPI_MAX_DESC; dev_info->min_desc = CNXK_DPI_MIN_DESC; dev_info->max_sges = CNXK_DPI_MAX_POINTER; @@ -107,6 +111,8 @@ cnxk_dmadev_configure(struct rte_dma_dev *dev, const struct rte_dma_conf *conf, */ cnxk_dmadev_vchan_free(dpivf, RTE_DMA_ALL_VCHAN); dpivf->num_vchans = conf->nb_vchans; + if (roc_feature_dpi_has_priority()) + dpivf->rdpi.priority = conf->priority; return 0; } diff --git a/drivers/dma/cnxk/cnxk_dmadev.h b/drivers/dma/cnxk/cnxk_dmadev.h index 15af1d64dc..39fd6afbe9 100644 --- a/drivers/dma/cnxk/cnxk_dmadev.h +++ b/drivers/dma/cnxk/cnxk_dmadev.h @@ -28,6 +28,7 @@ ((s).var - 1)) #define CNXK_DPI_MAX_DESC 32768 #define CNXK_DPI_MIN_DESC 2 +#define CN10K_DPI_MAX_PRI 2 #define CNXK_DPI_MAX_VCHANS_PER_QUEUE 4 #define CNXK_DPI_QUEUE_BUF_SIZE 16256 #define CNXK_DPI_QUEUE_BUF_SIZE_V2 130944 -- 2.34.1