net/dpaa: send error packets to application

Send error packets to main queue (rx) to make application
enable to receive error packets.
Earlier all packets with L3/L4 checksum errors were getting
dropped by the hardware.

Signed-off-by: Rohit Raj <rohit.raj@nxp.com>
Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com>
This commit is contained in:
Nipun Gupta 2020-09-24 09:32:08 +05:30 committed by Thomas Monjalon
parent 77393f5610
commit 95d226f0f8
3 changed files with 36 additions and 12 deletions

View File

@ -1045,7 +1045,8 @@ int dpaa_eth_rx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_idx,
rxq->fqid, ret); rxq->fqid, ret);
} }
} }
/* Enable main queue to receive error packets also by default */
fman_if_set_err_fqid(fif, rxq->fqid);
return 0; return 0;
} }
@ -2007,13 +2008,10 @@ dpaa_dev_init(struct rte_eth_dev *eth_dev)
fman_intf->mac_addr.addr_bytes[5]); fman_intf->mac_addr.addr_bytes[5]);
if (!fman_intf->is_shared_mac) { if (!fman_intf->is_shared_mac) {
/* Disable RX mode */ /* Configure error packet handling */
#ifdef RTE_LIBRTE_DPAA_DEBUG_DRIVER
fman_if_receive_rx_errors(fman_intf, fman_if_receive_rx_errors(fman_intf,
FM_FD_RX_STATUS_ERR_MASK); FM_FD_RX_STATUS_ERR_MASK);
#else /* Disable RX mode */
fman_if_discard_rx_errors(fman_intf);
#endif
fman_if_disable_rx(fman_intf); fman_if_disable_rx(fman_intf);
/* Disable promiscuous mode */ /* Disable promiscuous mode */
fman_if_promiscuous_disable(fman_intf); fman_if_promiscuous_disable(fman_intf);

View File

@ -125,6 +125,9 @@ static inline void dpaa_eth_packet_info(struct rte_mbuf *m, void *fd_virt_addr)
DPAA_DP_LOG(DEBUG, " Parsing mbuf: %p with annotations: %p", m, annot); DPAA_DP_LOG(DEBUG, " Parsing mbuf: %p with annotations: %p", m, annot);
m->ol_flags = PKT_RX_RSS_HASH | PKT_RX_IP_CKSUM_GOOD |
PKT_RX_L4_CKSUM_GOOD;
switch (prs) { switch (prs) {
case DPAA_PKT_TYPE_IPV4: case DPAA_PKT_TYPE_IPV4:
m->packet_type = RTE_PTYPE_L2_ETHER | m->packet_type = RTE_PTYPE_L2_ETHER |
@ -199,6 +202,16 @@ static inline void dpaa_eth_packet_info(struct rte_mbuf *m, void *fd_virt_addr)
m->packet_type = RTE_PTYPE_L2_ETHER | m->packet_type = RTE_PTYPE_L2_ETHER |
RTE_PTYPE_L3_IPV6 | RTE_PTYPE_L4_SCTP; RTE_PTYPE_L3_IPV6 | RTE_PTYPE_L4_SCTP;
break; break;
case DPAA_PKT_TYPE_IPV4_CSUM_ERR:
case DPAA_PKT_TYPE_IPV6_CSUM_ERR:
m->ol_flags = PKT_RX_RSS_HASH | PKT_RX_IP_CKSUM_BAD;
break;
case DPAA_PKT_TYPE_IPV4_TCP_CSUM_ERR:
case DPAA_PKT_TYPE_IPV6_TCP_CSUM_ERR:
case DPAA_PKT_TYPE_IPV4_UDP_CSUM_ERR:
case DPAA_PKT_TYPE_IPV6_UDP_CSUM_ERR:
m->ol_flags = PKT_RX_RSS_HASH | PKT_RX_L4_CKSUM_BAD;
break;
case DPAA_PKT_TYPE_NONE: case DPAA_PKT_TYPE_NONE:
m->packet_type = 0; m->packet_type = 0;
break; break;
@ -213,10 +226,6 @@ static inline void dpaa_eth_packet_info(struct rte_mbuf *m, void *fd_virt_addr)
/* Set the hash values */ /* Set the hash values */
m->hash.rss = (uint32_t)(annot->hash); m->hash.rss = (uint32_t)(annot->hash);
/* All packets with Bad checksum are dropped by interface (and
* corresponding notification issued to RX error queues).
*/
m->ol_flags = PKT_RX_RSS_HASH | PKT_RX_IP_CKSUM_GOOD;
/* Check if Vlan is present */ /* Check if Vlan is present */
if (prs & DPAA_PARSE_VLAN_MASK) if (prs & DPAA_PARSE_VLAN_MASK)

View File

@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-3-Clause /* SPDX-License-Identifier: BSD-3-Clause
* *
* Copyright 2016 Freescale Semiconductor, Inc. All rights reserved. * Copyright 2016 Freescale Semiconductor, Inc. All rights reserved.
* Copyright 2017 NXP * Copyright 2017,2020 NXP
* *
*/ */
@ -61,7 +61,7 @@
* 0x8000 - Ethernet type * 0x8000 - Ethernet type
* ShimR & Logical Port ID 0x0000 * ShimR & Logical Port ID 0x0000
*/ */
#define DPAA_PARSE_MASK 0x00E044ED00800000 #define DPAA_PARSE_MASK 0x00F044EF00800000
#define DPAA_PARSE_VLAN_MASK 0x0000000000700000 #define DPAA_PARSE_VLAN_MASK 0x0000000000700000
/* Parsed values (Little Endian) */ /* Parsed values (Little Endian) */
@ -137,6 +137,23 @@
(0x0020000000000000 | DPAA_PKT_TYPE_TUNNEL_4_6) (0x0020000000000000 | DPAA_PKT_TYPE_TUNNEL_4_6)
#define DPAA_PKT_TYPE_TUNNEL_6_4_TCP \ #define DPAA_PKT_TYPE_TUNNEL_6_4_TCP \
(0x0020000000000000 | DPAA_PKT_TYPE_TUNNEL_6_4) (0x0020000000000000 | DPAA_PKT_TYPE_TUNNEL_6_4)
/* Checksum Errors */
#define DPAA_PKT_IP_CSUM_ERR 0x0000400200000000
#define DPAA_PKT_L4_CSUM_ERR 0x0010000000000000
#define DPAA_PKT_TYPE_IPV4_CSUM_ERR \
(DPAA_PKT_IP_CSUM_ERR | DPAA_PKT_TYPE_IPV4)
#define DPAA_PKT_TYPE_IPV6_CSUM_ERR \
(DPAA_PKT_IP_CSUM_ERR | DPAA_PKT_TYPE_IPV6)
#define DPAA_PKT_TYPE_IPV4_TCP_CSUM_ERR \
(DPAA_PKT_L4_CSUM_ERR | DPAA_PKT_TYPE_IPV4_TCP)
#define DPAA_PKT_TYPE_IPV6_TCP_CSUM_ERR \
(DPAA_PKT_L4_CSUM_ERR | DPAA_PKT_TYPE_IPV6_TCP)
#define DPAA_PKT_TYPE_IPV4_UDP_CSUM_ERR \
(DPAA_PKT_L4_CSUM_ERR | DPAA_PKT_TYPE_IPV4_UDP)
#define DPAA_PKT_TYPE_IPV6_UDP_CSUM_ERR \
(DPAA_PKT_L4_CSUM_ERR | DPAA_PKT_TYPE_IPV6_UDP)
#define DPAA_PKT_L3_LEN_SHIFT 7 #define DPAA_PKT_L3_LEN_SHIFT 7
/** /**