This workaround fixes the invalid key command SEC error. Fixes: 6127fff842a7 ("common/dpaax: remove outdated caamflib code") Cc: franck.lenorm...@nxp.com Cc: sta...@dpdk.org
Signed-off-by: Gagandeep Singh <g.si...@nxp.com> --- drivers/common/dpaax/caamflib/desc/pdcp.h | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/drivers/common/dpaax/caamflib/desc/pdcp.h b/drivers/common/dpaax/caamflib/desc/pdcp.h index f4379ede2c..c90eff26a8 100644 --- a/drivers/common/dpaax/caamflib/desc/pdcp.h +++ b/drivers/common/dpaax/caamflib/desc/pdcp.h @@ -619,7 +619,7 @@ pdcp_insert_cplane_enc_only_op(struct program *p, KEY(p, KEY1, cipherdata->key_enc_flags, cipherdata->key, cipherdata->keylen, INLINE_KEY(cipherdata)); - if ((sn_size != PDCP_SN_SIZE_18 && + if ((authdata && sn_size != PDCP_SN_SIZE_18 && !(rta_sec_era == RTA_SEC_ERA_8 && authdata->algtype == 0)) || (rta_sec_era == RTA_SEC_ERA_10)) { @@ -631,6 +631,7 @@ pdcp_insert_cplane_enc_only_op(struct program *p, (uint16_t)cipherdata->algtype << 8); return 0; } + /* Non-proto is supported only for 5bit cplane and 18bit uplane */ switch (sn_size) { case PDCP_SN_SIZE_5: @@ -2719,7 +2720,7 @@ cnstr_shdsc_pdcp_u_plane_encap(uint32_t *descbuf, case PDCP_CIPHER_TYPE_AES: case PDCP_CIPHER_TYPE_SNOW: case PDCP_CIPHER_TYPE_NULL: - if (rta_sec_era == RTA_SEC_ERA_8 && + if (rta_sec_era >= RTA_SEC_ERA_8 && authdata && authdata->algtype == 0){ err = pdcp_insert_uplane_with_int_op(p, swap, cipherdata, authdata, @@ -2729,6 +2730,17 @@ cnstr_shdsc_pdcp_u_plane_encap(uint32_t *descbuf, return err; break; } + if (rta_sec_era >= RTA_SEC_ERA_8 && + cipherdata->algtype == PDCP_CIPHER_TYPE_AES + && !authdata + && sn_size == PDCP_SN_SIZE_12) { + err = pdcp_insert_cplane_enc_only_op(p, swap, cipherdata, + authdata, + OP_TYPE_ENCAP_PROTOCOL, sn_size); + if (err) + return err; + break; + } if (pdb_type != PDCP_PDB_TYPE_FULL_PDB) { pr_err("PDB type must be FULL for PROTO desc\n"); -- 2.25.1