[PATCH net-next v5 00/15] bnxt_en: Add kTLS TX offload support
From: Michael Chan <michael.chan@broadcom.com>
Date: 2026-07-10 04:24:47
This patchset adds kTLS offload support for TX direction. A number of new files are added: bnxt_mpc.[ch] handle midpath channels (MPCs) used to offload kTLS connections to the chip's crypto blocks without going through FW. bnxt_crypto.[ch] handle the crypto interface and resources. bnxt_ktls.[ch] handle kTLS offload. A new CONFIG_BNXT_TLS is added to enable all of the above. The first 6 patches add the MPC logic including resource accounting and reservations. The next 5 patches add the crypto logic to handle the crypto resources and to send/receive control data using the MPCs. The last 4 patches add kTLS offload for the TX direction. There will be a follow-on patchset to make the TX offload more complete and to add the RX direction offload. v5: Fix most valid Sashiko reported issues or add comments to clarify: Patch #2: Clarify in the commit log that kTLS, MPC rings are only supported on P5_PLUS chips in response to some Sashiko comments. Patch #3: Improve the ethtool -L MPC calculation to use the actual MPC rings during ring check. Add a comment in the code to explain the bnxt_trim_mpc_ring() call. Patch #5: Check for P5_PLUS before allocating mpc_info to more clearly document that MPC rings are only supported on P5_PLUS chips. Patch #8: Pre-existing Sashiko issue not addressed. Patch #9: More clearly document and explain that bnxt_clear_crypto() has no concurrent readers/writers. Add comment to explain that the bnxt_free_one_ctx() caller is reponsible to check the epoch value when needed. Patch #10: Add description in commit log that crypto engines use short completions only. Already explained that only P5_PLUS supports MPC. Patch #11: Defer the MPC ring reset to bnxt_sp_task() just like other resets to avoid any possibility od deadlock. Add more comments to explain the MPC ring disable, stop, start. Patch #12: The bnxt_drv_busy() is the existing driver scheme to wait for activities to stop during shutdown. Patch #13: The kTLS software counters match the other driver software counters using plain u64. We can add u64_stats_sync for 32-bit systems but it makes more sense to add it to all the existing counters as well. Use BNXT_NO_FW_ACCESS() to fix possible massive AER timeout. Patch #15: Use bool instead of bit fields to keep track of kTLS states (requested by Paolo). v4: https://lore.kernel.org/netdev/20260629184921.3496727-1-michael.chan@broadcom.com/ (local) Fix kerneldoc prototype warning and uninitialized variable warnings reported by Jakub. Fix most valid Sashiko reported issues. v3: https://lore.kernel.org/netdev/20260614072407.2761092-1-michael.chan@broadcom.com/ (local) Fix most AI reported issues from Jakub. v2: https://lore.kernel.org/netdev/20260512212105.3488258-1-michael.chan@broadcom.com/ (local) Fix unused variable compile warnings in patch 10 and 12 by reorganizing the patches (reported by Jakub) Fix some error recovery issues in patch 12 v1: https://lore.kernel.org/netdev/20260504235836.3019499-1-michael.chan@broadcom.com/ (local) Michael Chan (15): bnxt_en: Add Midpath channel information bnxt_en: Account for the MPC TX and CP rings bnxt_en: Set default MPC ring count bnxt_en: Rename xdp_tx_lock to tx_lock bnxt_en: Allocate and free MPC software structures bnxt_en: Allocate and free MPC channels from firmware bnxt_en: Allocate crypto structure and backing store bnxt_en: Reserve crypto RX and TX key contexts on a PF bnxt_en: Add infrastructure for crypto key context IDs bnxt_en: Add MPC transmit and completion functions bnxt_en: Add crypto MPC transmit/completion infrastructure bnxt_en: Support kTLS TX offload by implementing .tls_dev_add/del() bnxt_en: Implement kTLS TX normal path bnxt_en: Add support for inline transmit BDs bnxt_en: Add kTLS retransmission support drivers/net/ethernet/broadcom/Kconfig | 9 + drivers/net/ethernet/broadcom/bnxt/Makefile | 1 + drivers/net/ethernet/broadcom/bnxt/bnxt.c | 291 +++++-- drivers/net/ethernet/broadcom/bnxt/bnxt.h | 95 ++- .../net/ethernet/broadcom/bnxt/bnxt_crypto.c | 617 ++++++++++++++ .../net/ethernet/broadcom/bnxt/bnxt_crypto.h | 230 +++++ .../net/ethernet/broadcom/bnxt/bnxt_ethtool.c | 61 +- drivers/net/ethernet/broadcom/bnxt/bnxt_gso.c | 2 +- .../net/ethernet/broadcom/bnxt/bnxt_ktls.c | 578 +++++++++++++ .../net/ethernet/broadcom/bnxt/bnxt_ktls.h | 174 ++++ drivers/net/ethernet/broadcom/bnxt/bnxt_mpc.c | 783 ++++++++++++++++++ drivers/net/ethernet/broadcom/bnxt/bnxt_mpc.h | 227 +++++ .../net/ethernet/broadcom/bnxt/bnxt_sriov.c | 6 +- drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c | 8 +- include/linux/bnxt/hsi.h | 37 + 15 files changed, 3052 insertions(+), 67 deletions(-) create mode 100644 drivers/net/ethernet/broadcom/bnxt/bnxt_crypto.c create mode 100644 drivers/net/ethernet/broadcom/bnxt/bnxt_crypto.h create mode 100644 drivers/net/ethernet/broadcom/bnxt/bnxt_ktls.c create mode 100644 drivers/net/ethernet/broadcom/bnxt/bnxt_ktls.h create mode 100644 drivers/net/ethernet/broadcom/bnxt/bnxt_mpc.c create mode 100644 drivers/net/ethernet/broadcom/bnxt/bnxt_mpc.h -- 2.51.0