> -----Original Message-----
> From: Intel-wired-lan <[email protected]> On Behalf
> Of Ratheesh Kannoth
> Sent: Friday, May 8, 2026 5:49 AM
> To: [email protected]; [email protected];
> [email protected]; [email protected]; oss-
> [email protected]
> Cc: [email protected]; [email protected]; Nguyen, Anthony L
> <[email protected]>; Kubalewski, Arkadiusz
> <[email protected]>; [email protected];
> [email protected]; [email protected]; [email protected];
> [email protected]; [email protected]; [email protected]; Vecera, Ivan
> <[email protected]>; [email protected]; [email protected];
> [email protected]; [email protected]; [email protected];
> [email protected]; [email protected]; [email protected];
> [email protected]; Kitszel, Przemyslaw
> <[email protected]>; [email protected];
> [email protected]; [email protected]; [email protected];
> Ratheesh Kannoth <[email protected]>
> Subject: [Intel-wired-lan] [PATCH v12 net-next 7/9] octeontx2-af: npc:
> Support for custom KPU profile from filesystem
>
> Flashing updated firmware on deployed devices is cumbersome. Provide a
> mechanism to load a custom KPU (Key Parse Unit) profile directly from
> the filesystem at module load time.
>
> When the rvu_af module is loaded with the kpu_profile parameter, the
> specified profile is read from /lib/firmware/kpu and programmed into
> the KPU registers. Add npc_kpu_profile_cam2 for the extended cam
> format used by filesystem-loaded profiles and support ptype/ptype_mask
> in npc_config_kpucam when profile->from_fs is set.
>
> Usage:
> 1. Copy the KPU profile file to /lib/firmware/kpu.
> 2. Build OCTEONTX2_AF as a module.
> 3. Load: insmod rvu_af.ko kpu_profile=<profile_name>
>
> Signed-off-by: Ratheesh Kannoth <[email protected]>
> ---
> .../ethernet/marvell/octeontx2/af/cn20k/npc.c | 57 ++-
> .../net/ethernet/marvell/octeontx2/af/npc.h | 17 +
> .../net/ethernet/marvell/octeontx2/af/rvu.h | 12 +-
> .../ethernet/marvell/octeontx2/af/rvu_npc.c | 456 ++++++++++++++---
> -
> .../ethernet/marvell/octeontx2/af/rvu_npc.h | 17 +
> .../ethernet/marvell/octeontx2/af/rvu_reg.h | 1 +
> 6 files changed, 449 insertions(+), 111 deletions(-)
>
> diff --git a/drivers/net/ethernet/marvell/octeontx2/af/cn20k/npc.c
> b/drivers/net/ethernet/marvell/octeontx2/af/cn20k/npc.c
> index 6f8f42234b06..67dfbe5ca903 100644
> --- a/drivers/net/ethernet/marvell/octeontx2/af/cn20k/npc.c
> +++ b/drivers/net/ethernet/marvell/octeontx2/af/cn20k/npc.c
> @@ -521,13 +521,17 @@ npc_program_single_kpm_profile(struct rvu *rvu,
> int blkaddr,
> int kpm, int start_entry,
> const struct npc_kpu_profile *profile) {
...
> +void npc_load_kpu_profile(struct rvu *rvu) {
> + struct npc_kpu_profile_adapter *profile = &rvu->kpu;
> + const char *kpu_profile = rvu->kpu_pfl_name;
> +
> + profile->from_fs = false;
> +
> + npc_prepare_default_kpu(rvu, profile);
> +
> + /* If user not specified profile customization */
> + if (!strncmp(kpu_profile, def_pfl_name, KPU_NAME_LEN))
> + return;
> +
> + /* Order of preceedence for load loading NPC profile (high to
> low)
> + * Firmware binary in filesystem.
> + * Firmware database method.
> + * Default KPU profile.
> + */
> +
> + /* Filesystem-based KPU loading is not supported on cn20k.
> + * npc_prepare_default_kpu() was invoked earlier, but control
> + * reached this point because the default profile was not
> selected.
> + * No need to call it again.
> + */
It looks like comment contradicts with the code below?
Isn't it?
> + if (!is_cn20k(rvu->pdev)) {
> + if (!npc_load_kpu_profile_from_fs(rvu))
> + return;
> + }
> +
> + /* First prepare default KPU, then we'll customize top entries.
> */
> + npc_prepare_default_kpu(rvu, profile);
> + if (!npc_load_kpu_profile_from_fw(rvu))
> + return;
>
...
> #define NPC_AF_KPUX_ENTRYX_CAMX(a, b, c) \
> (0x100000 | (a) << 14 | (b) << 6 | (c) << 3)
> --
> 2.43.0