From: Radha Mohan Chintakuntla Date: Tue, 6 Oct 2020 05:30:21 +0000 (-0700) Subject: raw/octeontx2_dma: support multiple DPI blocks X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=4495bd887d38;p=dpdk.git raw/octeontx2_dma: support multiple DPI blocks This patch adds support for multiple DPI blocks by removing the fixed macro that was writing to same sysfs entry for different DPI blocks. Signed-off-by: Radha Mohan Chintakuntla Reviewed-by: Satananda Burla Acked-by: Satha Rao --- diff --git a/drivers/raw/octeontx2_dma/otx2_dpi_msg.c b/drivers/raw/octeontx2_dma/otx2_dpi_msg.c index aa361cb8ad..655de216ab 100644 --- a/drivers/raw/octeontx2_dma/otx2_dpi_msg.c +++ b/drivers/raw/octeontx2_dma/otx2_dpi_msg.c @@ -39,14 +39,14 @@ union dpi_mbox_message_u { }; static inline int -send_msg_to_pf(const char *value, int size) +send_msg_to_pf(struct rte_pci_addr *pci, const char *value, int size) { char buff[255] = { 0 }; int res, fd; res = snprintf(buff, sizeof(buff), "%s/" PCI_PRI_FMT "/%s", - rte_pci_get_sysfs_path(), DPI_PF_DBDF_DOMAIN, - DPI_PF_DBDF_BUS, DPI_PF_DBDF_DEVICE & 0x7, + rte_pci_get_sysfs_path(), pci->domain, + pci->bus, DPI_PF_DBDF_DEVICE & 0x7, DPI_PF_DBDF_FUNCTION & 0x7, DPI_PF_MBOX_SYSFS_ENTRY); if ((res < 0) || ((size_t)res > sizeof(buff))) return -ERANGE; @@ -63,20 +63,20 @@ send_msg_to_pf(const char *value, int size) } int -otx2_dpi_queue_open(uint16_t vf_id, uint32_t size, uint32_t gaura) +otx2_dpi_queue_open(struct dpi_vf_s *dpivf, uint32_t size, uint32_t gaura) { union dpi_mbox_message_u mbox_msg; int ret = 0; /* DPI PF driver expects vfid starts from index 0 */ - mbox_msg.s.vfid = vf_id; + mbox_msg.s.vfid = dpivf->vf_id; mbox_msg.s.cmd = DPI_QUEUE_OPEN; mbox_msg.s.csize = size; mbox_msg.s.aura = gaura; mbox_msg.s.sso_pf_func = otx2_sso_pf_func_get(); mbox_msg.s.npa_pf_func = otx2_npa_pf_func_get(); - ret = send_msg_to_pf((const char *)&mbox_msg, + ret = send_msg_to_pf(&dpivf->dev->addr, (const char *)&mbox_msg, sizeof(mbox_msg)); if (ret < 0) otx2_dpi_dbg("Failed to send mbox message to dpi pf"); @@ -85,16 +85,16 @@ otx2_dpi_queue_open(uint16_t vf_id, uint32_t size, uint32_t gaura) } int -otx2_dpi_queue_close(uint16_t vf_id) +otx2_dpi_queue_close(struct dpi_vf_s *dpivf) { union dpi_mbox_message_u mbox_msg; int ret = 0; /* DPI PF driver expects vfid starts from index 0 */ - mbox_msg.s.vfid = vf_id; + mbox_msg.s.vfid = dpivf->vf_id; mbox_msg.s.cmd = DPI_QUEUE_CLOSE; - ret = send_msg_to_pf((const char *)&mbox_msg, + ret = send_msg_to_pf(&dpivf->dev->addr, (const char *)&mbox_msg, sizeof(mbox_msg)); if (ret < 0) otx2_dpi_dbg("Failed to send mbox message to dpi pf"); diff --git a/drivers/raw/octeontx2_dma/otx2_dpi_rawdev.c b/drivers/raw/octeontx2_dma/otx2_dpi_rawdev.c index a1b94ce1d8..efdba2779b 100644 --- a/drivers/raw/octeontx2_dma/otx2_dpi_rawdev.c +++ b/drivers/raw/octeontx2_dma/otx2_dpi_rawdev.c @@ -60,7 +60,7 @@ dma_queue_finish(struct dpi_vf_s *dpivf) reg = otx2_read64(dpivf->vf_bar0 + DPI_VDMA_SADDR); } - if (otx2_dpi_queue_close(dpivf->vf_id) < 0) + if (otx2_dpi_queue_close(dpivf) < 0) return -EACCES; rte_mempool_put(dpivf->chunk_pool, dpivf->base_ptr); @@ -323,7 +323,7 @@ otx2_dpi_rawdev_configure(const struct rte_rawdev *dev, rte_rawdev_obj_t config, otx2_write64(0, dpivf->vf_bar0 + DPI_VDMA_REQQ_CTL); otx2_write64(((uint64_t)buf >> 7) << 7, dpivf->vf_bar0 + DPI_VDMA_SADDR); - if (otx2_dpi_queue_open(dpivf->vf_id, DPI_CHUNK_SIZE, gaura) < 0) { + if (otx2_dpi_queue_open(dpivf, DPI_CHUNK_SIZE, gaura) < 0) { otx2_err("Unable to open DPI VF %d", dpivf->vf_id); rte_mempool_put(conf->chunk_pool, buf); return -EACCES; diff --git a/drivers/raw/octeontx2_dma/otx2_dpi_rawdev.h b/drivers/raw/octeontx2_dma/otx2_dpi_rawdev.h index 81740e84b2..2bc9e3da3c 100644 --- a/drivers/raw/octeontx2_dma/otx2_dpi_rawdev.h +++ b/drivers/raw/octeontx2_dma/otx2_dpi_rawdev.h @@ -190,8 +190,8 @@ union dpi_dma_instr_hdr_u { } s; }; -int otx2_dpi_queue_open(uint16_t vf_id, uint32_t size, uint32_t gaura); -int otx2_dpi_queue_close(uint16_t vf_id); +int otx2_dpi_queue_open(struct dpi_vf_s *dpivf, uint32_t size, uint32_t gaura); +int otx2_dpi_queue_close(struct dpi_vf_s *dpivf); int test_otx2_dma_rawdev(uint16_t val); #endif /* _DPI_RAWDEV_H_ */