xref: /dpdk/drivers/net/dpaa2/dpaa2_sparser.c (revision 25d0ae6242453c3e482d752495d5a30f3ada11dd)
172ec7a67SSunil Kumar Kori /* SPDX-License-Identifier: BSD-3-Clause
2*25d0ae62SJun Yang  * Copyright 2018-2023 NXP
372ec7a67SSunil Kumar Kori  */
472ec7a67SSunil Kumar Kori 
572ec7a67SSunil Kumar Kori #include <rte_mbuf.h>
672ec7a67SSunil Kumar Kori #include <rte_ethdev.h>
772ec7a67SSunil Kumar Kori #include <rte_malloc.h>
872ec7a67SSunil Kumar Kori #include <rte_memcpy.h>
972ec7a67SSunil Kumar Kori #include <rte_string_fns.h>
101acb7f54SDavid Marchand #include <dev_driver.h>
1172ec7a67SSunil Kumar Kori 
1272ec7a67SSunil Kumar Kori #include <fslmc_logs.h>
1372ec7a67SSunil Kumar Kori #include <fslmc_vfio.h>
1472ec7a67SSunil Kumar Kori #include <dpaa2_hw_pvt.h>
1572ec7a67SSunil Kumar Kori #include <dpaa2_hw_dpio.h>
1672ec7a67SSunil Kumar Kori #include <dpaa2_hw_mempool.h>
1772ec7a67SSunil Kumar Kori #include <dpaa2_pmd_logs.h>
1872ec7a67SSunil Kumar Kori 
1972ec7a67SSunil Kumar Kori #include "dpaa2_ethdev.h"
2072ec7a67SSunil Kumar Kori #include "dpaa2_sparser.h"
2172ec7a67SSunil Kumar Kori #include "base/dpaa2_hw_dpni_annot.h"
2272ec7a67SSunil Kumar Kori #define __STDC_FORMAT_MACROS
2372ec7a67SSunil Kumar Kori #include <stdint.h>
2472ec7a67SSunil Kumar Kori #include <inttypes.h>
2572ec7a67SSunil Kumar Kori 
2672ec7a67SSunil Kumar Kori uint8_t wriop_bytecode[] = {
2772ec7a67SSunil Kumar Kori 	0x00, 0x04, 0x29, 0x42, 0x03, 0xe0, 0x12, 0x00, 0x29, 0x02,
2872ec7a67SSunil Kumar Kori 	0x18, 0x00, 0x87, 0x3c, 0x00, 0x02, 0x18, 0x00, 0x00, 0x00
2972ec7a67SSunil Kumar Kori };
3072ec7a67SSunil Kumar Kori 
3172ec7a67SSunil Kumar Kori struct frame_attr frame_attr_arr[] = {
3272ec7a67SSunil Kumar Kori 	/* Frame Attribute Flags 1 */
3372ec7a67SSunil Kumar Kori 	/* 000 */ {"Routing header present in IPv6 header 2 ", 0, 0x80000000},
3472ec7a67SSunil Kumar Kori 	/* 001 */ {"GTP Primed was detected                 ", 0, 0x40000000},
3572ec7a67SSunil Kumar Kori 	/* 002 */ {"VLAN with VID = 0 was detected          ", 0, 0x20000000},
3672ec7a67SSunil Kumar Kori 	/* 003 */ {"A PTP frame was detected                ", 0, 0x10000000},
3772ec7a67SSunil Kumar Kori 	/* 004 */ {"VXLAN was parsed                        ", 0, 0x08000000},
3872ec7a67SSunil Kumar Kori 	/* 005 */ {"A VXLAN HXS parsing error was detected  ", 0, 0x04000000},
3972ec7a67SSunil Kumar Kori 	/* 006 */ {"Ethernet control protocol was detected  ", 0, 0x02000000},
4072ec7a67SSunil Kumar Kori 	/* 007 */ {"IKE was detected at UDP port 4500       ", 0, 0x01000000},
4172ec7a67SSunil Kumar Kori 	/* 008 */ {"Shim Shell Soft Parsing Error           ", 0, 0x00800000},
4272ec7a67SSunil Kumar Kori 	/* 009 */ {"Parsing Error                           ", 0, 0x00400000},
4372ec7a67SSunil Kumar Kori 	/* 010 */ {"Ethernet MAC Present                    ", 0, 0x00200000},
4472ec7a67SSunil Kumar Kori 	/* 011 */ {"Ethernet Unicast                        ", 0, 0x00100000},
4572ec7a67SSunil Kumar Kori 	/* 012 */ {"Ethernet Multicast                      ", 0, 0x00080000},
4672ec7a67SSunil Kumar Kori 	/* 013 */ {"Ethernet Broadcast                      ", 0, 0x00040000},
4772ec7a67SSunil Kumar Kori 	/* 014 */ {"BPDU frame (MAC DA is 01:80:C2:00:00:00)", 0, 0x00020000},
4872ec7a67SSunil Kumar Kori 	/* 015 */ {"FCoE detected (Ether type is 0x8906)    ", 0, 0x00010000},
4972ec7a67SSunil Kumar Kori 	/* 016 */ {"FIP detected (Ether type is 0x8914)     ", 0, 0x00008000},
5072ec7a67SSunil Kumar Kori 	/* 017 */ {"Ethernet Parsing Error                  ", 0, 0x00004000},
5172ec7a67SSunil Kumar Kori 	/* 018 */ {"LLC+SNAP Present                        ", 0, 0x00002000},
5272ec7a67SSunil Kumar Kori 	/* 019 */ {"Unknown LLC/OUI                         ", 0, 0x00001000},
5372ec7a67SSunil Kumar Kori 	/* 020 */ {"LLC+SNAP Error                          ", 0, 0x00000800},
5472ec7a67SSunil Kumar Kori 	/* 021 */ {"VLAN 1 Present                          ", 0, 0x00000400},
5572ec7a67SSunil Kumar Kori 	/* 022 */ {"VLAN n Present                          ", 0, 0x00000200},
5672ec7a67SSunil Kumar Kori 	/* 023 */ {"CFI bit in a \"8100\" VLAN tag is set   ", 0, 0x00000100},
5772ec7a67SSunil Kumar Kori 	/* 024 */ {"VLAN Parsing Error                      ", 0, 0x00000080},
5872ec7a67SSunil Kumar Kori 	/* 025 */ {"PPPoE+PPP Present                       ", 0, 0x00000040},
5972ec7a67SSunil Kumar Kori 	/* 026 */ {"PPPoE+PPP Parsing Error                 ", 0, 0x00000020},
6072ec7a67SSunil Kumar Kori 	/* 027 */ {"MPLS 1 Present                          ", 0, 0x00000010},
6172ec7a67SSunil Kumar Kori 	/* 028 */ {"MPLS n Present                          ", 0, 0x00000008},
6272ec7a67SSunil Kumar Kori 	/* 029 */ {"MPLS Parsing Error                      ", 0, 0x00000004},
6372ec7a67SSunil Kumar Kori 	/* 030 */ {"ARP frame Present (Ethertype 0x0806)    ", 0, 0x00000002},
6472ec7a67SSunil Kumar Kori 	/* 031 */ {"ARP Parsing Error                       ", 0, 0x00000001},
6572ec7a67SSunil Kumar Kori 	/* Frame Attribute Flags 2 */
6672ec7a67SSunil Kumar Kori 	/* 032 */ {"L2 Unknown Protocol                     ", 1, 0x80000000},
6772ec7a67SSunil Kumar Kori 	/* 033 */ {"L2 Soft Parsing Error                   ", 1, 0x40000000},
6872ec7a67SSunil Kumar Kori 	/* 034 */ {"IPv4 1 Present                          ", 1, 0x20000000},
6972ec7a67SSunil Kumar Kori 	/* 035 */ {"IPv4 1 Unicast                          ", 1, 0x10000000},
7072ec7a67SSunil Kumar Kori 	/* 036 */ {"IPv4 1 Multicast                        ", 1, 0x08000000},
7172ec7a67SSunil Kumar Kori 	/* 037 */ {"IPv4 1 Broadcast                        ", 1, 0x04000000},
7272ec7a67SSunil Kumar Kori 	/* 038 */ {"IPv4 n Present                          ", 1, 0x02000000},
7372ec7a67SSunil Kumar Kori 	/* 039 */ {"IPv4 n Unicast                          ", 1, 0x01000000},
7472ec7a67SSunil Kumar Kori 	/* 040 */ {"IPv4 n Multicast                        ", 1, 0x00800000},
7572ec7a67SSunil Kumar Kori 	/* 041 */ {"IPv4 n Broadcast                        ", 1, 0x00400000},
7672ec7a67SSunil Kumar Kori 	/* 042 */ {"IPv6 1 Present                          ", 1, 0x00200000},
7772ec7a67SSunil Kumar Kori 	/* 043 */ {"IPv6 1 Unicast                          ", 1, 0x00100000},
7872ec7a67SSunil Kumar Kori 	/* 044 */ {"IPv6 1 Multicast                        ", 1, 0x00080000},
7972ec7a67SSunil Kumar Kori 	/* 045 */ {"IPv6 n Present                          ", 1, 0x00040000},
8072ec7a67SSunil Kumar Kori 	/* 046 */ {"IPv6 n Unicast                          ", 1, 0x00020000},
8172ec7a67SSunil Kumar Kori 	/* 047 */ {"IPv6 n Multicast                        ", 1, 0x00010000},
8272ec7a67SSunil Kumar Kori 	/* 048 */ {"IP 1 option present                     ", 1, 0x00008000},
8372ec7a67SSunil Kumar Kori 	/* 049 */ {"IP 1 Unknown Protocol                   ", 1, 0x00004000},
8472ec7a67SSunil Kumar Kori 	/* 050 */ {"IP 1 Packet is a fragment               ", 1, 0x00002000},
8572ec7a67SSunil Kumar Kori 	/* 051 */ {"IP 1 Packet is an initial fragment      ", 1, 0x00001000},
8672ec7a67SSunil Kumar Kori 	/* 052 */ {"IP 1 Parsing Error                      ", 1, 0x00000800},
8772ec7a67SSunil Kumar Kori 	/* 053 */ {"IP n option present                     ", 1, 0x00000400},
8872ec7a67SSunil Kumar Kori 	/* 054 */ {"IP n Unknown Protocol                   ", 1, 0x00000200},
8972ec7a67SSunil Kumar Kori 	/* 055 */ {"IP n Packet is a fragment               ", 1, 0x00000100},
9072ec7a67SSunil Kumar Kori 	/* 056 */ {"IP n Packet is an initial fragment      ", 1, 0x00000080},
9172ec7a67SSunil Kumar Kori 	/* 057 */ {"ICMP detected (IP proto is 1)           ", 1, 0x00000040},
9272ec7a67SSunil Kumar Kori 	/* 058 */ {"IGMP detected (IP proto is 2)           ", 1, 0x00000020},
9372ec7a67SSunil Kumar Kori 	/* 059 */ {"ICMPv6 detected (IP proto is 3a)        ", 1, 0x00000010},
9472ec7a67SSunil Kumar Kori 	/* 060 */ {"UDP Light detected (IP proto is 136)    ", 1, 0x00000008},
9572ec7a67SSunil Kumar Kori 	/* 061 */ {"IP n Parsing Error                      ", 1, 0x00000004},
9672ec7a67SSunil Kumar Kori 	/* 062 */ {"Min. Encap Present                      ", 1, 0x00000002},
9772ec7a67SSunil Kumar Kori 	/* 063 */ {"Min. Encap S flag set                   ", 1, 0x00000001},
9872ec7a67SSunil Kumar Kori 	/* Frame Attribute Flags 3 */
9972ec7a67SSunil Kumar Kori 	/* 064 */ {"Min. Encap Parsing Error                ", 2, 0x80000000},
10072ec7a67SSunil Kumar Kori 	/* 065 */ {"GRE Present                             ", 2, 0x40000000},
10172ec7a67SSunil Kumar Kori 	/* 066 */ {"GRE R bit set                           ", 2, 0x20000000},
10272ec7a67SSunil Kumar Kori 	/* 067 */ {"GRE Parsing Error                       ", 2, 0x10000000},
10372ec7a67SSunil Kumar Kori 	/* 068 */ {"L3 Unknown Protocol                     ", 2, 0x08000000},
10472ec7a67SSunil Kumar Kori 	/* 069 */ {"L3 Soft Parsing Error                   ", 2, 0x04000000},
10572ec7a67SSunil Kumar Kori 	/* 070 */ {"UDP Present                             ", 2, 0x02000000},
10672ec7a67SSunil Kumar Kori 	/* 071 */ {"UDP Parsing Error                       ", 2, 0x01000000},
10772ec7a67SSunil Kumar Kori 	/* 072 */ {"TCP Present                             ", 2, 0x00800000},
10872ec7a67SSunil Kumar Kori 	/* 073 */ {"TCP options present                     ", 2, 0x00400000},
10972ec7a67SSunil Kumar Kori 	/* 074 */ {"TCP Control bits 6-11 set               ", 2, 0x00200000},
11072ec7a67SSunil Kumar Kori 	/* 075 */ {"TCP Control bits 3-5 set                ", 2, 0x00100000},
11172ec7a67SSunil Kumar Kori 	/* 076 */ {"TCP Parsing Error                       ", 2, 0x00080000},
11272ec7a67SSunil Kumar Kori 	/* 077 */ {"IPSec Present                           ", 2, 0x00040000},
11372ec7a67SSunil Kumar Kori 	/* 078 */ {"IPSec ESP found                         ", 2, 0x00020000},
11472ec7a67SSunil Kumar Kori 	/* 079 */ {"IPSec AH found                          ", 2, 0x00010000},
11572ec7a67SSunil Kumar Kori 	/* 080 */ {"IPSec Parsing Error                     ", 2, 0x00008000},
11672ec7a67SSunil Kumar Kori 	/* 081 */ {"SCTP Present                            ", 2, 0x00004000},
11772ec7a67SSunil Kumar Kori 	/* 082 */ {"SCTP Parsing Error                      ", 2, 0x00002000},
11872ec7a67SSunil Kumar Kori 	/* 083 */ {"DCCP Present                            ", 2, 0x00001000},
11972ec7a67SSunil Kumar Kori 	/* 084 */ {"DCCP Parsing Error                      ", 2, 0x00000800},
12072ec7a67SSunil Kumar Kori 	/* 085 */ {"L4 Unknown Protocol                     ", 2, 0x00000400},
12172ec7a67SSunil Kumar Kori 	/* 086 */ {"L4 Soft Parsing Error                   ", 2, 0x00000200},
12272ec7a67SSunil Kumar Kori 	/* 087 */ {"GTP Present                             ", 2, 0x00000100},
12372ec7a67SSunil Kumar Kori 	/* 088 */ {"GTP Parsing Error                       ", 2, 0x00000080},
12472ec7a67SSunil Kumar Kori 	/* 089 */ {"ESP Present                             ", 2, 0x00000040},
12572ec7a67SSunil Kumar Kori 	/* 090 */ {"ESP Parsing Error                       ", 2, 0x00000020},
12672ec7a67SSunil Kumar Kori 	/* 091 */ {"iSCSI detected (Port# 860)              ", 2, 0x00000010},
12772ec7a67SSunil Kumar Kori 	/* 092 */ {"Capwap-control detected (Port# 5246)    ", 2, 0x00000008},
12872ec7a67SSunil Kumar Kori 	/* 093 */ {"Capwap-data detected (Port# 5247)       ", 2, 0x00000004},
12972ec7a67SSunil Kumar Kori 	/* 094 */ {"L5 Soft Parsing Error                   ", 2, 0x00000002},
13072ec7a67SSunil Kumar Kori 	/* 095 */ {"IPv6 Route hdr1 present                 ", 2, 0x00000001},
13172ec7a67SSunil Kumar Kori 	/* 096 */ {NULL,                                       0, 0x00000000}
13272ec7a67SSunil Kumar Kori };
13372ec7a67SSunil Kumar Kori 
13472ec7a67SSunil Kumar Kori struct frame_attr_ext frame_attr_ext_arr[] = {
13572ec7a67SSunil Kumar Kori 	/* Frame Attribute Flags Extension */
13672ec7a67SSunil Kumar Kori 	/* 096 */ {"User defined soft parser bit #0         ", 0, 0x8000},
13772ec7a67SSunil Kumar Kori 	/* 096 */ {"User defined soft parser bit #1         ", 0, 0x4000},
13872ec7a67SSunil Kumar Kori 	/* 096 */ {"User defined soft parser bit #2         ", 0, 0x2000},
13972ec7a67SSunil Kumar Kori 	/* 096 */ {"User defined soft parser bit #3         ", 0, 0x1000},
14072ec7a67SSunil Kumar Kori 	/* 096 */ {"User defined soft parser bit #4         ", 0, 0x0800},
14172ec7a67SSunil Kumar Kori 	/* 096 */ {"User defined soft parser bit #5         ", 0, 0x0400},
14272ec7a67SSunil Kumar Kori 	/* 096 */ {"User defined soft parser bit #6         ", 0, 0x0200},
14372ec7a67SSunil Kumar Kori 	/* 096 */ {"User defined soft parser bit #7         ", 0, 0x0100},
14472ec7a67SSunil Kumar Kori 	/* 097 */ {"Reserved                                ", 0, 0x00ff},
14572ec7a67SSunil Kumar Kori 	/* 112 */ {NULL,                                       0, 0x0000}
14672ec7a67SSunil Kumar Kori };
14772ec7a67SSunil Kumar Kori 
14872ec7a67SSunil Kumar Kori int dpaa2_eth_load_wriop_soft_parser(struct dpaa2_dev_priv *priv,
14972ec7a67SSunil Kumar Kori 				     enum dpni_soft_sequence_dest dest)
15072ec7a67SSunil Kumar Kori {
15172ec7a67SSunil Kumar Kori 	struct fsl_mc_io *dpni = priv->hw;
15272ec7a67SSunil Kumar Kori 	struct dpni_load_ss_cfg     cfg;
15372ec7a67SSunil Kumar Kori 	struct dpni_drv_sparser_param	sp_param;
15472ec7a67SSunil Kumar Kori 	uint8_t *addr;
15572ec7a67SSunil Kumar Kori 	int ret;
15672ec7a67SSunil Kumar Kori 
15772ec7a67SSunil Kumar Kori 	memset(&sp_param, 0, sizeof(sp_param));
15872ec7a67SSunil Kumar Kori 	sp_param.start_pc = priv->ss_offset;
15972ec7a67SSunil Kumar Kori 	sp_param.byte_code = &wriop_bytecode[0];
16072ec7a67SSunil Kumar Kori 	sp_param.size = sizeof(wriop_bytecode);
16172ec7a67SSunil Kumar Kori 
16272ec7a67SSunil Kumar Kori 	cfg.dest = dest;
16372ec7a67SSunil Kumar Kori 	cfg.ss_offset = sp_param.start_pc;
16472ec7a67SSunil Kumar Kori 	cfg.ss_size = sp_param.size;
16572ec7a67SSunil Kumar Kori 
16672ec7a67SSunil Kumar Kori 	addr = rte_malloc(NULL, sp_param.size, 64);
16772ec7a67SSunil Kumar Kori 	if (!addr) {
168f665790aSDavid Marchand 		DPAA2_PMD_ERR("Memory unavailable for soft parser param");
16972ec7a67SSunil Kumar Kori 		return -1;
17072ec7a67SSunil Kumar Kori 	}
17172ec7a67SSunil Kumar Kori 
17272ec7a67SSunil Kumar Kori 	memcpy(addr, sp_param.byte_code, sp_param.size);
173*25d0ae62SJun Yang 	cfg.ss_iova = DPAA2_VADDR_TO_IOVA_AND_CHECK(addr, sp_param.size);
174*25d0ae62SJun Yang 	if (cfg.ss_iova == RTE_BAD_IOVA) {
175*25d0ae62SJun Yang 		DPAA2_PMD_ERR("No IOMMU map for soft sequence(%p), size=%d",
176*25d0ae62SJun Yang 			addr, sp_param.size);
177*25d0ae62SJun Yang 		rte_free(addr);
178*25d0ae62SJun Yang 
179*25d0ae62SJun Yang 		return -ENOBUFS;
180*25d0ae62SJun Yang 	}
18172ec7a67SSunil Kumar Kori 
18272ec7a67SSunil Kumar Kori 	ret = dpni_load_sw_sequence(dpni, CMD_PRI_LOW, priv->token, &cfg);
18372ec7a67SSunil Kumar Kori 	if (ret) {
184f665790aSDavid Marchand 		DPAA2_PMD_ERR("dpni_load_sw_sequence failed");
18572ec7a67SSunil Kumar Kori 		rte_free(addr);
18672ec7a67SSunil Kumar Kori 		return ret;
18772ec7a67SSunil Kumar Kori 	}
18872ec7a67SSunil Kumar Kori 
189*25d0ae62SJun Yang 	priv->ss_iova = cfg.ss_iova;
19072ec7a67SSunil Kumar Kori 	priv->ss_offset += sp_param.size;
191a247fcd9SStephen Hemminger 	DPAA2_PMD_INFO("Soft parser loaded for dpni@%d", priv->hw_id);
19272ec7a67SSunil Kumar Kori 
19372ec7a67SSunil Kumar Kori 	rte_free(addr);
19472ec7a67SSunil Kumar Kori 	return 0;
19572ec7a67SSunil Kumar Kori }
19672ec7a67SSunil Kumar Kori 
19772ec7a67SSunil Kumar Kori int dpaa2_eth_enable_wriop_soft_parser(struct dpaa2_dev_priv *priv,
19872ec7a67SSunil Kumar Kori 				       enum dpni_soft_sequence_dest dest)
19972ec7a67SSunil Kumar Kori {
20072ec7a67SSunil Kumar Kori 	struct fsl_mc_io *dpni = priv->hw;
20172ec7a67SSunil Kumar Kori 	struct dpni_enable_ss_cfg cfg;
20272ec7a67SSunil Kumar Kori 	uint8_t pa[3];
20372ec7a67SSunil Kumar Kori 	struct dpni_drv_sparser_param sp_param;
20472ec7a67SSunil Kumar Kori 	uint8_t *param_addr = NULL;
20572ec7a67SSunil Kumar Kori 	int ret;
20672ec7a67SSunil Kumar Kori 
20772ec7a67SSunil Kumar Kori 	memset(&sp_param, 0, sizeof(sp_param));
20872ec7a67SSunil Kumar Kori 	pa[0] = 32;	/* Custom Header Length in bytes */
20972ec7a67SSunil Kumar Kori 	sp_param.custom_header_first = 1;
21072ec7a67SSunil Kumar Kori 	sp_param.param_offset = 32;
21172ec7a67SSunil Kumar Kori 	sp_param.param_size = 1;
21272ec7a67SSunil Kumar Kori 	sp_param.start_pc = priv->ss_offset;
21372ec7a67SSunil Kumar Kori 	sp_param.param_array = (uint8_t *)&pa[0];
21472ec7a67SSunil Kumar Kori 
21572ec7a67SSunil Kumar Kori 	cfg.dest = dest;
21672ec7a67SSunil Kumar Kori 	cfg.ss_offset = sp_param.start_pc;
21772ec7a67SSunil Kumar Kori 	cfg.set_start = sp_param.custom_header_first;
21872ec7a67SSunil Kumar Kori 	cfg.hxs = (uint16_t)sp_param.link_to_hard_hxs;
21972ec7a67SSunil Kumar Kori 	cfg.param_offset = sp_param.param_offset;
22072ec7a67SSunil Kumar Kori 	cfg.param_size = sp_param.param_size;
22172ec7a67SSunil Kumar Kori 	if (cfg.param_size) {
22272ec7a67SSunil Kumar Kori 		param_addr = rte_malloc(NULL, cfg.param_size, 64);
22372ec7a67SSunil Kumar Kori 		if (!param_addr) {
224f665790aSDavid Marchand 			DPAA2_PMD_ERR("Memory unavailable for soft parser param");
22572ec7a67SSunil Kumar Kori 			return -1;
22672ec7a67SSunil Kumar Kori 		}
22772ec7a67SSunil Kumar Kori 
22872ec7a67SSunil Kumar Kori 		memcpy(param_addr, sp_param.param_array, cfg.param_size);
229*25d0ae62SJun Yang 		cfg.param_iova = DPAA2_VADDR_TO_IOVA_AND_CHECK(param_addr,
230*25d0ae62SJun Yang 			cfg.param_size);
231*25d0ae62SJun Yang 		if (cfg.param_iova == RTE_BAD_IOVA) {
232*25d0ae62SJun Yang 			DPAA2_PMD_ERR("%s: No IOMMU map for %p, size=%d",
233*25d0ae62SJun Yang 				__func__, param_addr, cfg.param_size);
234*25d0ae62SJun Yang 			rte_free(param_addr);
235*25d0ae62SJun Yang 
236*25d0ae62SJun Yang 			return -ENOBUFS;
237*25d0ae62SJun Yang 		}
23872ec7a67SSunil Kumar Kori 		priv->ss_param_iova = cfg.param_iova;
23972ec7a67SSunil Kumar Kori 	} else {
24072ec7a67SSunil Kumar Kori 		cfg.param_iova = 0;
24172ec7a67SSunil Kumar Kori 	}
24272ec7a67SSunil Kumar Kori 
24372ec7a67SSunil Kumar Kori 	ret = dpni_enable_sw_sequence(dpni, CMD_PRI_LOW, priv->token, &cfg);
24472ec7a67SSunil Kumar Kori 	if (ret) {
245*25d0ae62SJun Yang 		DPAA2_PMD_ERR("Soft parser enabled for dpni@%d failed",
24672ec7a67SSunil Kumar Kori 			priv->hw_id);
24772ec7a67SSunil Kumar Kori 		rte_free(param_addr);
24872ec7a67SSunil Kumar Kori 		return ret;
24972ec7a67SSunil Kumar Kori 	}
25072ec7a67SSunil Kumar Kori 
25172ec7a67SSunil Kumar Kori 	rte_free(param_addr);
252a247fcd9SStephen Hemminger 	DPAA2_PMD_INFO("Soft parser enabled for dpni@%d", priv->hw_id);
25372ec7a67SSunil Kumar Kori 	return 0;
25472ec7a67SSunil Kumar Kori }
255