From: Jun Yang <jun.y...@nxp.com> Make header room big enough for IPSec with TX dynamic confirm enabled. Ingress minimum header room: 64(size of parser result) + 8(address of SEC context) * 2. Egress minimum header room: 88(FAEAD offset) + 8(FAEAD size) + 8(address of SEC context) * 2 + 114(expansion).
Signed-off-by: Jun Yang <jun.y...@nxp.com> --- drivers/bus/fslmc/portal/dpaa2_hw_pvt.h | 10 ++++++++++ drivers/crypto/dpaa2_sec/dpaa2_sec_priv.h | 4 +--- drivers/net/dpaa2/base/dpaa2_hw_dpni.c | 18 ++++++++++++++++-- drivers/net/dpaa2/base/dpaa2_hw_dpni_annot.h | 6 ++++++ drivers/net/dpaa2/dpaa2_ethdev.h | 6 +++++- 5 files changed, 38 insertions(+), 6 deletions(-) diff --git a/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h b/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h index be0719aac6..10bc191645 100644 --- a/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h +++ b/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h @@ -84,6 +84,16 @@ #define DPAA2_INVALID_FLOW_ID 0xffff #define DPAA2_INVALID_CGID 0xff +#define SEC_FLC_DHR_OUTBOUND (-114) +#define SEC_FLC_DHR_INBOUND 0 + +/** Consider aligning with 8 bytes to multiply point size with 2.*/ +#define DPAA2_SEC_SIMPLE_FD_OB_MIN \ + ((-SEC_FLC_DHR_OUTBOUND) + sizeof(void *) * 2) + +#define DPAA2_SEC_SIMPLE_FD_IB_MIN \ + ((-SEC_FLC_DHR_INBOUND) + sizeof(void *) * 2) + struct dpaa2_queue; struct eqresp_metadata { diff --git a/drivers/crypto/dpaa2_sec/dpaa2_sec_priv.h b/drivers/crypto/dpaa2_sec/dpaa2_sec_priv.h index e9b601c035..755c8e9cc3 100644 --- a/drivers/crypto/dpaa2_sec/dpaa2_sec_priv.h +++ b/drivers/crypto/dpaa2_sec/dpaa2_sec_priv.h @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-3-Clause * * Copyright (c) 2016 Freescale Semiconductor, Inc. All rights reserved. - * Copyright 2016,2020-2023 NXP + * Copyright 2016,2020-2024 NXP * */ @@ -20,8 +20,6 @@ extern uint8_t cryptodev_driver_id; #define FLE_POOL_BUF_SIZE 256 #define FLE_POOL_CACHE_SIZE 512 #define FLE_SG_MEM_SIZE(num) (FLE_POOL_BUF_SIZE + ((num) * 32)) -#define SEC_FLC_DHR_OUTBOUND -114 -#define SEC_FLC_DHR_INBOUND 0 #define MAX_QUEUES 64 #define MAX_DESC_SIZE 64 diff --git a/drivers/net/dpaa2/base/dpaa2_hw_dpni.c b/drivers/net/dpaa2/base/dpaa2_hw_dpni.c index 8d00a86032..b1d473429a 100644 --- a/drivers/net/dpaa2/base/dpaa2_hw_dpni.c +++ b/drivers/net/dpaa2/base/dpaa2_hw_dpni.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-3-Clause * * Copyright (c) 2016 Freescale Semiconductor, Inc. All rights reserved. - * Copyright 2016-2021 NXP + * Copyright 2016-2021,2023-2024 NXP * */ @@ -492,7 +492,21 @@ dpaa2_attach_bp_list(struct dpaa2_dev_priv *priv, */ /* ... rx buffer layout ... */ - tot_size = RTE_PKTMBUF_HEADROOM; + if (priv->flags & DPAA2_TX_DYNAMIC_CONF_ENABLE) { + int out_min_hdr_room, in_min_hdr_room; + /** Additional headroom layout for IPSec with TX configure + * dynamic enabled. + */ + in_min_hdr_room = DPAA2_RX_MIN_FD_OFFSET + + DPAA2_SEC_SIMPLE_FD_IB_MIN; + out_min_hdr_room = DPAA2_DYN_TX_MIN_FD_OFFSET + + DPAA2_SEC_SIMPLE_FD_OB_MIN; + tot_size = RTE_MAX(in_min_hdr_room, out_min_hdr_room); + if (tot_size < RTE_PKTMBUF_HEADROOM) + tot_size = RTE_PKTMBUF_HEADROOM; + } else { + tot_size = RTE_PKTMBUF_HEADROOM; + } tot_size = RTE_ALIGN_CEIL(tot_size, DPAA2_PACKET_LAYOUT_ALIGN); memset(&layout, 0, sizeof(struct dpni_buffer_layout)); diff --git a/drivers/net/dpaa2/base/dpaa2_hw_dpni_annot.h b/drivers/net/dpaa2/base/dpaa2_hw_dpni_annot.h index fb026d6e49..d156b07087 100644 --- a/drivers/net/dpaa2/base/dpaa2_hw_dpni_annot.h +++ b/drivers/net/dpaa2/base/dpaa2_hw_dpni_annot.h @@ -253,6 +253,9 @@ struct dpaa2_annot_hdr { #define PARSE_ERROR_CODE(var) ((uint64_t)(var) & 0xFF00000000000000) #define SOFT_PARSING_CONTEXT(var) ((uint64_t)(var) & 0x00FFFFFFFFFFFFFF) +#define DPAA2_RX_MIN_FD_OFFSET \ + (DPAA2_FD_PTA_SIZE + sizeof(struct dpaa2_annot_hdr)) + /*FAEAD offset in anmotation area*/ #define DPAA2_FD_HW_ANNOT_FAEAD_OFFSET 0x58 @@ -261,6 +264,9 @@ struct dpaa2_faead { uint32_t ctrl; }; +#define DPAA2_DYN_TX_MIN_FD_OFFSET \ + (DPAA2_FD_HW_ANNOT_FAEAD_OFFSET + sizeof(struct dpaa2_faead)) + /*FAEAD bits */ /*A2 OMB contains valid data*/ #define DPAA2_ANNOT_FAEAD_A2V 0x20000000 diff --git a/drivers/net/dpaa2/dpaa2_ethdev.h b/drivers/net/dpaa2/dpaa2_ethdev.h index fd3119247a..b9dd9b22fd 100644 --- a/drivers/net/dpaa2/dpaa2_ethdev.h +++ b/drivers/net/dpaa2/dpaa2_ethdev.h @@ -70,8 +70,12 @@ /* Disable RX tail drop, default is enable */ #define DPAA2_RX_TAILDROP_OFF 0x04 /* Tx confirmation enabled */ -#define DPAA2_TX_CONF_ENABLE 0x06 +#define DPAA2_TX_CONF_ENABLE 0x08 +/* Tx dynamic confirmation enabled, + * only valid with Tx confirmation enabled. + */ +#define DPAA2_TX_DYNAMIC_CONF_ENABLE 0x10 /* DPDMUX index for DPMAC */ #define DPAA2_DPDMUX_DPMAC_IDX 0 -- 2.25.1