From: Nithin Dabilpuram Date: Wed, 4 Sep 2019 08:04:31 +0000 (+0530) Subject: net/octeontx2: fix packet type translation X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=6283eb682f57c156dcd6a6c10eef691cd25e3332;p=dpdk.git net/octeontx2: fix packet type translation Extract and use layer type LB..LE for non-tunnel ptype and LF..LH as tunnel ptype translation. Fixes: 6e892eabce11 ("net/octeontx2: support packet type") Cc: stable@dpdk.org Signed-off-by: Nithin Dabilpuram Acked-by: Jerin Jacob --- diff --git a/drivers/net/octeontx2/otx2_lookup.c b/drivers/net/octeontx2/otx2_lookup.c index 3347e7014f..b1c2f885f6 100644 --- a/drivers/net/octeontx2/otx2_lookup.c +++ b/drivers/net/octeontx2/otx2_lookup.c @@ -79,7 +79,8 @@ static void nix_create_non_tunnel_ptype_array(uint16_t *ptype) { uint8_t lb, lc, ld, le; - uint16_t idx, val; + uint16_t val; + uint32_t idx; for (idx = 0; idx < PTYPE_NON_TUNNEL_ARRAY_SZ; idx++) { lb = idx & 0xF; @@ -181,28 +182,29 @@ nix_create_non_tunnel_ptype_array(uint16_t *ptype) } } -#define TU_SHIFT(x) ((x) >> PTYPE_WIDTH) +#define TU_SHIFT(x) ((x) >> PTYPE_NON_TUNNEL_WIDTH) static void nix_create_tunnel_ptype_array(uint16_t *ptype) { - uint8_t le, lf, lg; - uint16_t idx, val; + uint8_t lf, lg, lh; + uint16_t val; + uint32_t idx; /* Skip non tunnel ptype array memory */ ptype = ptype + PTYPE_NON_TUNNEL_ARRAY_SZ; for (idx = 0; idx < PTYPE_TUNNEL_ARRAY_SZ; idx++) { - le = idx & 0xF; - lf = (idx & 0xF0) >> 4; - lg = (idx & 0xF00) >> 8; + lf = idx & 0xF; + lg = (idx & 0xF0) >> 4; + lh = (idx & 0xF00) >> 8; val = RTE_PTYPE_UNKNOWN; - switch (le) { + switch (lf) { case NPC_LT_LF_TU_ETHER: val |= TU_SHIFT(RTE_PTYPE_INNER_L2_ETHER); break; } - switch (lf) { + switch (lg) { case NPC_LT_LG_TU_IP: val |= TU_SHIFT(RTE_PTYPE_INNER_L3_IPV4); break; @@ -210,7 +212,7 @@ nix_create_tunnel_ptype_array(uint16_t *ptype) val |= TU_SHIFT(RTE_PTYPE_INNER_L3_IPV6); break; } - switch (lg) { + switch (lh) { case NPC_LT_LH_TU_TCP: val |= TU_SHIFT(RTE_PTYPE_INNER_L4_TCP); break; diff --git a/drivers/net/octeontx2/otx2_rx.h b/drivers/net/octeontx2/otx2_rx.h index d12e8b8091..1a1ac40bdf 100644 --- a/drivers/net/octeontx2/otx2_rx.h +++ b/drivers/net/octeontx2/otx2_rx.h @@ -8,9 +8,10 @@ /* Default mark value used when none is provided. */ #define OTX2_FLOW_ACTION_FLAG_DEFAULT 0xffff -#define PTYPE_WIDTH 12 -#define PTYPE_NON_TUNNEL_ARRAY_SZ BIT(PTYPE_WIDTH) -#define PTYPE_TUNNEL_ARRAY_SZ BIT(PTYPE_WIDTH) +#define PTYPE_NON_TUNNEL_WIDTH 16 +#define PTYPE_TUNNEL_WIDTH 12 +#define PTYPE_NON_TUNNEL_ARRAY_SZ BIT(PTYPE_NON_TUNNEL_WIDTH) +#define PTYPE_TUNNEL_ARRAY_SZ BIT(PTYPE_TUNNEL_WIDTH) #define PTYPE_ARRAY_SZ ((PTYPE_NON_TUNNEL_ARRAY_SZ +\ PTYPE_TUNNEL_ARRAY_SZ) *\ sizeof(uint16_t)) @@ -97,11 +98,11 @@ static __rte_always_inline uint32_t nix_ptype_get(const void * const lookup_mem, const uint64_t in) { const uint16_t * const ptype = lookup_mem; - const uint16_t lg_lf_le = (in & 0xFFF000000000000) >> 48; - const uint16_t tu_l2 = ptype[(in & 0x000FFF000000000) >> 36]; - const uint16_t il4_tu = ptype[PTYPE_NON_TUNNEL_ARRAY_SZ + lg_lf_le]; + const uint16_t lh_lg_lf = (in & 0xFFF0000000000000) >> 52; + const uint16_t tu_l2 = ptype[(in & 0x000FFFF000000000) >> 36]; + const uint16_t il4_tu = ptype[PTYPE_NON_TUNNEL_ARRAY_SZ + lh_lg_lf]; - return (il4_tu << PTYPE_WIDTH) | tu_l2; + return (il4_tu << PTYPE_NON_TUNNEL_WIDTH) | tu_l2; } static __rte_always_inline uint32_t