>> Enabled the flag pmd_iova_as_va in cnxk driver build files as they work >> with IOVA as VA. Updated cn9k and cn10k soc build configurations to >> enable the IOVA as VA build by default. >> >> Signed-off-by: Shijith Thotton <sthot...@marvell.com> >> --- >> config/arm/meson.build | 8 +++- >> drivers/common/cnxk/meson.build | 1 + >> drivers/crypto/cnxk/cn10k_ipsec_la_ops.h | 4 +- >> drivers/crypto/cnxk/cn9k_ipsec_la_ops.h | 2 +- >> drivers/crypto/cnxk/meson.build | 2 + >> drivers/dma/cnxk/meson.build | 1 + >> drivers/event/cnxk/meson.build | 1 + >> drivers/mempool/cnxk/meson.build | 1 + >> drivers/net/cnxk/cn10k_tx.h | 55 +++++++----------------- >> drivers/net/cnxk/cn9k_tx.h | 55 +++++++----------------- >> drivers/net/cnxk/cnxk_ethdev.h | 1 - >> drivers/net/cnxk/meson.build | 1 + >> drivers/raw/cnxk_bphy/meson.build | 1 + >> drivers/raw/cnxk_gpio/meson.build | 1 + >> 14 files changed, 50 insertions(+), 84 deletions(-) >> >> diff --git a/config/arm/meson.build b/config/arm/meson.build >> index 9f1636e0d5..4e95e8b388 100644 >> --- a/config/arm/meson.build >> +++ b/config/arm/meson.build >> @@ -294,7 +294,8 @@ soc_cn10k = { >> 'flags': [ >> ['RTE_MAX_LCORE', 24], >> ['RTE_MAX_NUMA_NODES', 1], >> - ['RTE_MEMPOOL_ALIGN', 128] >> + ['RTE_MEMPOOL_ALIGN', 128], >> + ['RTE_IOVA_AS_VA', 1] >> ], >> 'part_number': '0xd49', >> 'extra_march_features': ['crypto'], >> @@ -370,7 +371,10 @@ soc_cn9k = { >> 'description': 'Marvell OCTEON 9', >> 'implementer': '0x43', >> 'part_number': '0xb2', >> - 'numa': false >> + 'numa': false, >> + 'flags': [ >> + ['RTE_IOVA_AS_VA', 1] >> + ] >> } >> >> soc_stingray = { >> diff --git a/drivers/common/cnxk/meson.build >b/drivers/common/cnxk/meson.build >> index 6f808271d1..d019cfa8d1 100644 >> --- a/drivers/common/cnxk/meson.build >> +++ b/drivers/common/cnxk/meson.build >> @@ -86,3 +86,4 @@ sources += files('cnxk_telemetry_bphy.c', >> ) >> >> deps += ['bus_pci', 'net', 'telemetry'] >> +pmd_iova_as_va = true >> diff --git a/drivers/crypto/cnxk/cn10k_ipsec_la_ops.h >b/drivers/crypto/cnxk/cn10k_ipsec_la_ops.h >> index 66cfe6ca98..16db14344d 100644 >> --- a/drivers/crypto/cnxk/cn10k_ipsec_la_ops.h >> +++ b/drivers/crypto/cnxk/cn10k_ipsec_la_ops.h >> @@ -85,7 +85,7 @@ process_outb_sa(struct roc_cpt_lf *lf, struct rte_crypto_op >*cop, >> >> /* Prepare CPT instruction */ >> inst->w4.u64 = inst_w4_u64 | rte_pktmbuf_pkt_len(m_src); >> - dptr = rte_pktmbuf_iova(m_src); >> + dptr = rte_pktmbuf_mtod(m_src, uint64_t); >> inst->dptr = dptr; >> inst->rptr = dptr; >> >> @@ -102,7 +102,7 @@ process_inb_sa(struct rte_crypto_op *cop, struct >cn10k_ipsec_sa *sa, >> >> /* Prepare CPT instruction */ >> inst->w4.u64 = sa->inst.w4 | rte_pktmbuf_pkt_len(m_src); >> - dptr = rte_pktmbuf_iova(m_src); >> + dptr = rte_pktmbuf_mtod(m_src, uint64_t); >> inst->dptr = dptr; >> inst->rptr = dptr; >> >> diff --git a/drivers/crypto/cnxk/cn9k_ipsec_la_ops.h >b/drivers/crypto/cnxk/cn9k_ipsec_la_ops.h >> index e469596756..8b68e4c728 100644 >> --- a/drivers/crypto/cnxk/cn9k_ipsec_la_ops.h >> +++ b/drivers/crypto/cnxk/cn9k_ipsec_la_ops.h >> @@ -99,7 +99,7 @@ process_inb_sa(struct rte_crypto_op *cop, struct >cn9k_ipsec_sa *sa, >> >> /* Prepare CPT instruction */ >> inst->w4.u64 = sa->inst.w4 | rte_pktmbuf_pkt_len(m_src); >> - inst->dptr = inst->rptr = rte_pktmbuf_iova(m_src); >> + inst->dptr = inst->rptr = rte_pktmbuf_mtod(m_src, uint64_t); >> inst->w7.u64 = sa->inst.w7; >> } >> #endif /* __CN9K_IPSEC_LA_OPS_H__ */ >> diff --git a/drivers/crypto/cnxk/meson.build >> b/drivers/crypto/cnxk/meson.build >> index 23a1cc3aac..764e7bb99a 100644 >> --- a/drivers/crypto/cnxk/meson.build >> +++ b/drivers/crypto/cnxk/meson.build >> @@ -31,3 +31,5 @@ if get_option('buildtype').contains('debug') >> else >> cflags += [ '-ULA_IPSEC_DEBUG' ] >> endif >> + >> +pmd_iova_as_va = true >> diff --git a/drivers/dma/cnxk/meson.build b/drivers/dma/cnxk/meson.build >> index d4be4ee860..ef0e3db109 100644 >> --- a/drivers/dma/cnxk/meson.build >> +++ b/drivers/dma/cnxk/meson.build >> @@ -3,3 +3,4 @@ >> >> deps += ['bus_pci', 'common_cnxk', 'dmadev'] >> sources = files('cnxk_dmadev.c') >> +pmd_iova_as_va = true >> diff --git a/drivers/event/cnxk/meson.build b/drivers/event/cnxk/meson.build >> index b27bae7b12..650d0d4256 100644 >> --- a/drivers/event/cnxk/meson.build >> +++ b/drivers/event/cnxk/meson.build >> @@ -479,3 +479,4 @@ foreach flag: extra_flags >> endforeach >> >> deps += ['bus_pci', 'common_cnxk', 'net_cnxk', 'crypto_cnxk'] >> +pmd_iova_as_va = true >> diff --git a/drivers/mempool/cnxk/meson.build >b/drivers/mempool/cnxk/meson.build >> index d5d1978569..a328176457 100644 >> --- a/drivers/mempool/cnxk/meson.build >> +++ b/drivers/mempool/cnxk/meson.build >> @@ -17,3 +17,4 @@ sources = files( >> ) >> >> deps += ['eal', 'mbuf', 'kvargs', 'bus_pci', 'common_cnxk', 'mempool'] >> +pmd_iova_as_va = true >> diff --git a/drivers/net/cnxk/cn10k_tx.h b/drivers/net/cnxk/cn10k_tx.h >> index ea13866b20..2ef62da132 100644 >> --- a/drivers/net/cnxk/cn10k_tx.h >> +++ b/drivers/net/cnxk/cn10k_tx.h >> @@ -1775,14 +1775,6 @@ cn10k_nix_xmit_pkts_vector(void *tx_queue, >uint64_t *ws, >> mbuf2 = (uint64_t *)tx_pkts[2]; >> mbuf3 = (uint64_t *)tx_pkts[3]; >> >> - mbuf0 = (uint64_t *)((uintptr_t)mbuf0 + >> - offsetof(struct rte_mbuf, buf_iova)); >> - mbuf1 = (uint64_t *)((uintptr_t)mbuf1 + >> - offsetof(struct rte_mbuf, buf_iova)); >> - mbuf2 = (uint64_t *)((uintptr_t)mbuf2 + >> - offsetof(struct rte_mbuf, buf_iova)); >> - mbuf3 = (uint64_t *)((uintptr_t)mbuf3 + >> - offsetof(struct rte_mbuf, buf_iova)); >> /* >> * Get mbuf's, olflags, iova, pktlen, dataoff >> * dataoff_iovaX.D[0] = iova, >> @@ -1790,28 +1782,24 @@ cn10k_nix_xmit_pkts_vector(void *tx_queue, >uint64_t *ws, >> * len_olflagsX.D[0] = ol_flags, >> * len_olflagsX.D[1](63:32) = mbuf->pkt_len >> */ >> - dataoff_iova0 = vld1q_u64(mbuf0); >> - len_olflags0 = vld1q_u64(mbuf0 + 2); >> - dataoff_iova1 = vld1q_u64(mbuf1); >> - len_olflags1 = vld1q_u64(mbuf1 + 2); >> - dataoff_iova2 = vld1q_u64(mbuf2); >> - len_olflags2 = vld1q_u64(mbuf2 + 2); >> - dataoff_iova3 = vld1q_u64(mbuf3); >> - len_olflags3 = vld1q_u64(mbuf3 + 2); >> + dataoff_iova0 = >> + vsetq_lane_u64(((struct rte_mbuf *)mbuf0)->data_off, >vld1q_u64(mbuf0), 1); >> + len_olflags0 = vld1q_u64(mbuf0 + 3); >> + dataoff_iova1 = >> + vsetq_lane_u64(((struct rte_mbuf *)mbuf0)->data_off, >vld1q_u64(mbuf1), 1); >> + len_olflags1 = vld1q_u64(mbuf1 + 3); >> + dataoff_iova2 = >> + vsetq_lane_u64(((struct rte_mbuf *)mbuf0)->data_off, >vld1q_u64(mbuf2), 1); >> + len_olflags2 = vld1q_u64(mbuf2 + 3); >> + dataoff_iova3 = >> + vsetq_lane_u64(((struct rte_mbuf *)mbuf0)->data_off, >vld1q_u64(mbuf3), 1); >> + len_olflags3 = vld1q_u64(mbuf3 + 3); >> >> /* Move mbufs to point pool */ >> - mbuf0 = (uint64_t *)((uintptr_t)mbuf0 + >> - offsetof(struct rte_mbuf, pool) - >> - offsetof(struct rte_mbuf, buf_iova)); >> - mbuf1 = (uint64_t *)((uintptr_t)mbuf1 + >> - offsetof(struct rte_mbuf, pool) - >> - offsetof(struct rte_mbuf, buf_iova)); >> - mbuf2 = (uint64_t *)((uintptr_t)mbuf2 + >> - offsetof(struct rte_mbuf, pool) - >> - offsetof(struct rte_mbuf, buf_iova)); >> - mbuf3 = (uint64_t *)((uintptr_t)mbuf3 + >> - offsetof(struct rte_mbuf, pool) - >> - offsetof(struct rte_mbuf, buf_iova)); >> + mbuf0 = (uint64_t *)((uintptr_t)mbuf0 + offsetof(struct >> rte_mbuf, >pool)); >> + mbuf1 = (uint64_t *)((uintptr_t)mbuf1 + offsetof(struct >> rte_mbuf, >pool)); >> + mbuf2 = (uint64_t *)((uintptr_t)mbuf2 + offsetof(struct >> rte_mbuf, >pool)); >> + mbuf3 = (uint64_t *)((uintptr_t)mbuf3 + offsetof(struct >> rte_mbuf, >pool)); >> >> if (flags & (NIX_TX_OFFLOAD_OL3_OL4_CSUM_F | >> NIX_TX_OFFLOAD_L3_L4_CSUM_F)) { >> @@ -1861,17 +1849,6 @@ cn10k_nix_xmit_pkts_vector(void *tx_queue, >uint64_t *ws, >> xtmp128 = vzip2q_u64(len_olflags0, len_olflags1); >> ytmp128 = vzip2q_u64(len_olflags2, len_olflags3); >> >> - /* Clear dataoff_iovaX.D[1] bits other than dataoff(15:0) */ >> - const uint64x2_t and_mask0 = { >> - 0xFFFFFFFFFFFFFFFF, >> - 0x000000000000FFFF, >> - }; >> - >> - dataoff_iova0 = vandq_u64(dataoff_iova0, and_mask0); >> - dataoff_iova1 = vandq_u64(dataoff_iova1, and_mask0); >> - dataoff_iova2 = vandq_u64(dataoff_iova2, and_mask0); >> - dataoff_iova3 = vandq_u64(dataoff_iova3, and_mask0); >> - >> /* >> * Pick only 16 bits of pktlen preset at bits 63:32 >> * and place them at bits 15:0. >> diff --git a/drivers/net/cnxk/cn9k_tx.h b/drivers/net/cnxk/cn9k_tx.h >> index 6ce81f5c96..f5d99ccb5a 100644 >> --- a/drivers/net/cnxk/cn9k_tx.h >> +++ b/drivers/net/cnxk/cn9k_tx.h >> @@ -1005,14 +1005,6 @@ cn9k_nix_xmit_pkts_vector(void *tx_queue, struct >rte_mbuf **tx_pkts, >> mbuf2 = (uint64_t *)tx_pkts[2]; >> mbuf3 = (uint64_t *)tx_pkts[3]; >> >> - mbuf0 = (uint64_t *)((uintptr_t)mbuf0 + >> - offsetof(struct rte_mbuf, buf_iova)); >> - mbuf1 = (uint64_t *)((uintptr_t)mbuf1 + >> - offsetof(struct rte_mbuf, buf_iova)); >> - mbuf2 = (uint64_t *)((uintptr_t)mbuf2 + >> - offsetof(struct rte_mbuf, buf_iova)); >> - mbuf3 = (uint64_t *)((uintptr_t)mbuf3 + >> - offsetof(struct rte_mbuf, buf_iova)); >> /* >> * Get mbuf's, olflags, iova, pktlen, dataoff >> * dataoff_iovaX.D[0] = iova, >> @@ -1020,28 +1012,24 @@ cn9k_nix_xmit_pkts_vector(void *tx_queue, struct >rte_mbuf **tx_pkts, >> * len_olflagsX.D[0] = ol_flags, >> * len_olflagsX.D[1](63:32) = mbuf->pkt_len >> */ >> - dataoff_iova0 = vld1q_u64(mbuf0); >> - len_olflags0 = vld1q_u64(mbuf0 + 2); >> - dataoff_iova1 = vld1q_u64(mbuf1); >> - len_olflags1 = vld1q_u64(mbuf1 + 2); >> - dataoff_iova2 = vld1q_u64(mbuf2); >> - len_olflags2 = vld1q_u64(mbuf2 + 2); >> - dataoff_iova3 = vld1q_u64(mbuf3); >> - len_olflags3 = vld1q_u64(mbuf3 + 2); >> + dataoff_iova0 = >> + vsetq_lane_u64(((struct rte_mbuf *)mbuf0)->data_off, >vld1q_u64(mbuf0), 1); >> + len_olflags0 = vld1q_u64(mbuf0 + 3); >> + dataoff_iova1 = >> + vsetq_lane_u64(((struct rte_mbuf *)mbuf1)->data_off, >vld1q_u64(mbuf1), 1); >> + len_olflags1 = vld1q_u64(mbuf1 + 3); >> + dataoff_iova2 = >> + vsetq_lane_u64(((struct rte_mbuf *)mbuf2)->data_off, >vld1q_u64(mbuf2), 1); >> + len_olflags2 = vld1q_u64(mbuf2 + 3); >> + dataoff_iova3 = >> + vsetq_lane_u64(((struct rte_mbuf *)mbuf3)->data_off, >vld1q_u64(mbuf3), 1); >> + len_olflags3 = vld1q_u64(mbuf3 + 3); >> >> /* Move mbufs to point pool */ >> - mbuf0 = (uint64_t *)((uintptr_t)mbuf0 + >> - offsetof(struct rte_mbuf, pool) - >> - offsetof(struct rte_mbuf, buf_iova)); >> - mbuf1 = (uint64_t *)((uintptr_t)mbuf1 + >> - offsetof(struct rte_mbuf, pool) - >> - offsetof(struct rte_mbuf, buf_iova)); >> - mbuf2 = (uint64_t *)((uintptr_t)mbuf2 + >> - offsetof(struct rte_mbuf, pool) - >> - offsetof(struct rte_mbuf, buf_iova)); >> - mbuf3 = (uint64_t *)((uintptr_t)mbuf3 + >> - offsetof(struct rte_mbuf, pool) - >> - offsetof(struct rte_mbuf, buf_iova)); >> + mbuf0 = (uint64_t *)((uintptr_t)mbuf0 + offsetof(struct >> rte_mbuf, >pool)); >> + mbuf1 = (uint64_t *)((uintptr_t)mbuf1 + offsetof(struct >> rte_mbuf, >pool)); >> + mbuf2 = (uint64_t *)((uintptr_t)mbuf2 + offsetof(struct >> rte_mbuf, >pool)); >> + mbuf3 = (uint64_t *)((uintptr_t)mbuf3 + offsetof(struct >> rte_mbuf, >pool)); >> >> if (flags & (NIX_TX_OFFLOAD_OL3_OL4_CSUM_F | >> NIX_TX_OFFLOAD_L3_L4_CSUM_F)) { >> @@ -1091,17 +1079,6 @@ cn9k_nix_xmit_pkts_vector(void *tx_queue, struct >rte_mbuf **tx_pkts, >> xtmp128 = vzip2q_u64(len_olflags0, len_olflags1); >> ytmp128 = vzip2q_u64(len_olflags2, len_olflags3); >> >> - /* Clear dataoff_iovaX.D[1] bits other than dataoff(15:0) */ >> - const uint64x2_t and_mask0 = { >> - 0xFFFFFFFFFFFFFFFF, >> - 0x000000000000FFFF, >> - }; >> - >> - dataoff_iova0 = vandq_u64(dataoff_iova0, and_mask0); >> - dataoff_iova1 = vandq_u64(dataoff_iova1, and_mask0); >> - dataoff_iova2 = vandq_u64(dataoff_iova2, and_mask0); >> - dataoff_iova3 = vandq_u64(dataoff_iova3, and_mask0); >> - >> /* >> * Pick only 16 bits of pktlen preset at bits 63:32 >> * and place them at bits 15:0. >> diff --git a/drivers/net/cnxk/cnxk_ethdev.h b/drivers/net/cnxk/cnxk_ethdev.h >> index 4cb7c9e90c..abf1e4215f 100644 >> --- a/drivers/net/cnxk/cnxk_ethdev.h >> +++ b/drivers/net/cnxk/cnxk_ethdev.h >> @@ -690,7 +690,6 @@ cnxk_pktmbuf_detach(struct rte_mbuf *m) >> >> m->priv_size = priv_size; >> m->buf_addr = (char *)m + mbuf_size; >> - m->buf_iova = rte_mempool_virt2iova(m) + mbuf_size; >> m->buf_len = (uint16_t)buf_len; >> rte_pktmbuf_reset_headroom(m); >> m->data_len = 0; > >I missed it during previous review, but shouldn't the accessor be used >instead? I mean, if the build is done with PA enabled, and another >driver accesses to m->buf_iova, it has to be correct. >
Thanks, I will change. >> diff --git a/drivers/net/cnxk/meson.build b/drivers/net/cnxk/meson.build >> index f347e98fce..01489b3a36 100644 >> --- a/drivers/net/cnxk/meson.build >> +++ b/drivers/net/cnxk/meson.build >> @@ -194,3 +194,4 @@ foreach flag: extra_flags >> endforeach >> >> headers = files('rte_pmd_cnxk.h') >> +pmd_iova_as_va = true >> diff --git a/drivers/raw/cnxk_bphy/meson.build >b/drivers/raw/cnxk_bphy/meson.build >> index 14147feaf4..781ed63e05 100644 >> --- a/drivers/raw/cnxk_bphy/meson.build >> +++ b/drivers/raw/cnxk_bphy/meson.build >> @@ -10,3 +10,4 @@ sources = files( >> 'cnxk_bphy_irq.c', >> ) >> headers = files('rte_pmd_bphy.h') >> +pmd_iova_as_va = true >> diff --git a/drivers/raw/cnxk_gpio/meson.build >b/drivers/raw/cnxk_gpio/meson.build >> index a75a5b9084..f9aed173b6 100644 >> --- a/drivers/raw/cnxk_gpio/meson.build >> +++ b/drivers/raw/cnxk_gpio/meson.build >> @@ -9,3 +9,4 @@ sources = files( >> 'cnxk_gpio_selftest.c', >> ) >> headers = files('rte_pmd_cnxk_gpio.h') >> +pmd_iova_as_va = true >> -- >> 2.25.1 >>