drivers: mark cnxk to support disabling IOVA as PA
Enabled the flag pmd_supports_disable_iova_as_pa in cnxk driver build files as they work with IOVA as VA. Updated cn9k and cn10k soc build configurations to disable the IOVA as PA build by default. Signed-off-by: Shijith Thotton <sthotton@marvell.com> Acked-by: Olivier Matz <olivier.matz@6wind.com>
This commit is contained in:
parent
5812b32773
commit
6771216c2f
@ -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_PA', 0]
|
||||
],
|
||||
'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_PA', 0]
|
||||
]
|
||||
}
|
||||
|
||||
soc_stingray = {
|
||||
|
@ -575,6 +575,8 @@ Compile DPDK
|
||||
|
||||
DPDK may be compiled either natively on OCTEON CN9K/CN10K platform or cross-compiled on
|
||||
an x86 based platform.
|
||||
Meson build option ``enable_iova_as_pa`` is disabled on CNXK platforms.
|
||||
So only PMDs supporting this option are enabled on CNXK platform builds.
|
||||
|
||||
Native Compilation
|
||||
~~~~~~~~~~~~~~~~~~
|
||||
|
@ -87,3 +87,4 @@ sources += files('cnxk_telemetry_bphy.c',
|
||||
)
|
||||
|
||||
deps += ['bus_pci', 'net', 'telemetry']
|
||||
pmd_supports_disable_iova_as_pa = true
|
||||
|
@ -86,7 +86,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;
|
||||
|
||||
@ -103,7 +103,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;
|
||||
|
||||
|
@ -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__ */
|
||||
|
@ -31,3 +31,5 @@ if get_option('buildtype').contains('debug')
|
||||
else
|
||||
cflags += [ '-ULA_IPSEC_DEBUG','-UCNXK_CRYPTODEV_DEBUG' ]
|
||||
endif
|
||||
|
||||
pmd_supports_disable_iova_as_pa = true
|
||||
|
@ -3,3 +3,4 @@
|
||||
|
||||
deps += ['bus_pci', 'common_cnxk', 'dmadev']
|
||||
sources = files('cnxk_dmadev.c')
|
||||
pmd_supports_disable_iova_as_pa = true
|
||||
|
@ -479,3 +479,4 @@ foreach flag: extra_flags
|
||||
endforeach
|
||||
|
||||
deps += ['bus_pci', 'common_cnxk', 'net_cnxk', 'crypto_cnxk']
|
||||
pmd_supports_disable_iova_as_pa = true
|
||||
|
@ -17,3 +17,4 @@ sources = files(
|
||||
)
|
||||
|
||||
deps += ['eal', 'mbuf', 'kvargs', 'bus_pci', 'common_cnxk', 'mempool']
|
||||
pmd_supports_disable_iova_as_pa = true
|
||||
|
@ -67,9 +67,9 @@ nix_tx_offload_flags(struct rte_eth_dev *eth_dev)
|
||||
RTE_BUILD_BUG_ON(RTE_MBUF_OUTL2_LEN_BITS != 7);
|
||||
RTE_BUILD_BUG_ON(RTE_MBUF_OUTL3_LEN_BITS != 9);
|
||||
RTE_BUILD_BUG_ON(offsetof(struct rte_mbuf, data_off) !=
|
||||
offsetof(struct rte_mbuf, buf_iova) + 8);
|
||||
offsetof(struct rte_mbuf, buf_addr) + 16);
|
||||
RTE_BUILD_BUG_ON(offsetof(struct rte_mbuf, ol_flags) !=
|
||||
offsetof(struct rte_mbuf, buf_iova) + 16);
|
||||
offsetof(struct rte_mbuf, buf_addr) + 24);
|
||||
RTE_BUILD_BUG_ON(offsetof(struct rte_mbuf, pkt_len) !=
|
||||
offsetof(struct rte_mbuf, ol_flags) + 12);
|
||||
RTE_BUILD_BUG_ON(offsetof(struct rte_mbuf, tx_offload) !=
|
||||
|
@ -1900,14 +1900,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,
|
||||
@ -1915,28 +1907,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)) {
|
||||
@ -1986,17 +1974,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.
|
||||
|
@ -67,9 +67,9 @@ nix_tx_offload_flags(struct rte_eth_dev *eth_dev)
|
||||
RTE_BUILD_BUG_ON(RTE_MBUF_OUTL2_LEN_BITS != 7);
|
||||
RTE_BUILD_BUG_ON(RTE_MBUF_OUTL3_LEN_BITS != 9);
|
||||
RTE_BUILD_BUG_ON(offsetof(struct rte_mbuf, data_off) !=
|
||||
offsetof(struct rte_mbuf, buf_iova) + 8);
|
||||
offsetof(struct rte_mbuf, buf_addr) + 16);
|
||||
RTE_BUILD_BUG_ON(offsetof(struct rte_mbuf, ol_flags) !=
|
||||
offsetof(struct rte_mbuf, buf_iova) + 16);
|
||||
offsetof(struct rte_mbuf, buf_addr) + 24);
|
||||
RTE_BUILD_BUG_ON(offsetof(struct rte_mbuf, pkt_len) !=
|
||||
offsetof(struct rte_mbuf, ol_flags) + 12);
|
||||
RTE_BUILD_BUG_ON(offsetof(struct rte_mbuf, tx_offload) !=
|
||||
|
@ -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.
|
||||
|
@ -699,7 +699,7 @@ 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;
|
||||
rte_mbuf_iova_set(m, rte_mempool_virt2iova(m) + mbuf_size);
|
||||
m->buf_len = (uint16_t)buf_len;
|
||||
rte_pktmbuf_reset_headroom(m);
|
||||
m->data_len = 0;
|
||||
|
@ -194,3 +194,4 @@ foreach flag: extra_flags
|
||||
endforeach
|
||||
|
||||
headers = files('rte_pmd_cnxk.h')
|
||||
pmd_supports_disable_iova_as_pa = true
|
||||
|
@ -10,3 +10,4 @@ sources = files(
|
||||
'cnxk_bphy_irq.c',
|
||||
)
|
||||
headers = files('rte_pmd_bphy.h')
|
||||
pmd_supports_disable_iova_as_pa = true
|
||||
|
@ -9,3 +9,4 @@ sources = files(
|
||||
'cnxk_gpio_selftest.c',
|
||||
)
|
||||
headers = files('rte_pmd_cnxk_gpio.h')
|
||||
pmd_supports_disable_iova_as_pa = true
|
||||
|
Loading…
Reference in New Issue
Block a user