15a9f0eacSShiju Jose // SPDX-License-Identifier: GPL-2.0+
25a9f0eacSShiju Jose /* Copyright (c) 2016-2017 Hisilicon Limited. */
35a9f0eacSShiju Jose 
4*2870c4d6SJakub Kicinski #include <linux/sched/clock.h>
5*2870c4d6SJakub Kicinski 
65a9f0eacSShiju Jose #include "hclge_err.h"
75a9f0eacSShiju Jose 
86d67ee9aSShiju Jose static const struct hclge_hw_error hclge_imp_tcm_ecc_int[] = {
960fe9ff9SJiaran Zhang 	{
1060fe9ff9SJiaran Zhang 		.int_msk = BIT(1),
1160fe9ff9SJiaran Zhang 		.msg = "imp_itcm0_ecc_mbit_err",
1260fe9ff9SJiaran Zhang 		.reset_level = HNAE3_NONE_RESET
1360fe9ff9SJiaran Zhang 	}, {
1460fe9ff9SJiaran Zhang 		.int_msk = BIT(3),
1560fe9ff9SJiaran Zhang 		.msg = "imp_itcm1_ecc_mbit_err",
1660fe9ff9SJiaran Zhang 		.reset_level = HNAE3_NONE_RESET
1760fe9ff9SJiaran Zhang 	}, {
1860fe9ff9SJiaran Zhang 		.int_msk = BIT(5),
1960fe9ff9SJiaran Zhang 		.msg = "imp_itcm2_ecc_mbit_err",
2060fe9ff9SJiaran Zhang 		.reset_level = HNAE3_NONE_RESET
2160fe9ff9SJiaran Zhang 	}, {
2260fe9ff9SJiaran Zhang 		.int_msk = BIT(7),
2360fe9ff9SJiaran Zhang 		.msg = "imp_itcm3_ecc_mbit_err",
2460fe9ff9SJiaran Zhang 		.reset_level = HNAE3_NONE_RESET
2560fe9ff9SJiaran Zhang 	}, {
2660fe9ff9SJiaran Zhang 		.int_msk = BIT(9),
2760fe9ff9SJiaran Zhang 		.msg = "imp_dtcm0_mem0_ecc_mbit_err",
2860fe9ff9SJiaran Zhang 		.reset_level = HNAE3_NONE_RESET
2960fe9ff9SJiaran Zhang 	}, {
3060fe9ff9SJiaran Zhang 		.int_msk = BIT(11),
3160fe9ff9SJiaran Zhang 		.msg = "imp_dtcm0_mem1_ecc_mbit_err",
3260fe9ff9SJiaran Zhang 		.reset_level = HNAE3_NONE_RESET
3360fe9ff9SJiaran Zhang 	}, {
3460fe9ff9SJiaran Zhang 		.int_msk = BIT(13),
3560fe9ff9SJiaran Zhang 		.msg = "imp_dtcm1_mem0_ecc_mbit_err",
3660fe9ff9SJiaran Zhang 		.reset_level = HNAE3_NONE_RESET
3760fe9ff9SJiaran Zhang 	}, {
3860fe9ff9SJiaran Zhang 		.int_msk = BIT(15),
3960fe9ff9SJiaran Zhang 		.msg = "imp_dtcm1_mem1_ecc_mbit_err",
4060fe9ff9SJiaran Zhang 		.reset_level = HNAE3_NONE_RESET
4160fe9ff9SJiaran Zhang 	}, {
4260fe9ff9SJiaran Zhang 		.int_msk = BIT(17),
4360fe9ff9SJiaran Zhang 		.msg = "imp_itcm4_ecc_mbit_err",
4460fe9ff9SJiaran Zhang 		.reset_level = HNAE3_NONE_RESET
4560fe9ff9SJiaran Zhang 	}, {
4660fe9ff9SJiaran Zhang 		/* sentinel */
4760fe9ff9SJiaran Zhang 	}
486d67ee9aSShiju Jose };
496d67ee9aSShiju Jose 
506d67ee9aSShiju Jose static const struct hclge_hw_error hclge_cmdq_nic_mem_ecc_int[] = {
5160fe9ff9SJiaran Zhang 	{
5260fe9ff9SJiaran Zhang 		.int_msk = BIT(1),
5360fe9ff9SJiaran Zhang 		.msg = "cmdq_nic_rx_depth_ecc_mbit_err",
5460fe9ff9SJiaran Zhang 		.reset_level = HNAE3_NONE_RESET
5560fe9ff9SJiaran Zhang 	}, {
5660fe9ff9SJiaran Zhang 		.int_msk = BIT(3),
5760fe9ff9SJiaran Zhang 		.msg = "cmdq_nic_tx_depth_ecc_mbit_err",
5860fe9ff9SJiaran Zhang 		.reset_level = HNAE3_NONE_RESET
5960fe9ff9SJiaran Zhang 	}, {
6060fe9ff9SJiaran Zhang 		.int_msk = BIT(5),
6160fe9ff9SJiaran Zhang 		.msg = "cmdq_nic_rx_tail_ecc_mbit_err",
6260fe9ff9SJiaran Zhang 		.reset_level = HNAE3_NONE_RESET
6360fe9ff9SJiaran Zhang 	}, {
6460fe9ff9SJiaran Zhang 		.int_msk = BIT(7),
6560fe9ff9SJiaran Zhang 		.msg = "cmdq_nic_tx_tail_ecc_mbit_err",
6660fe9ff9SJiaran Zhang 		.reset_level = HNAE3_NONE_RESET
6760fe9ff9SJiaran Zhang 	}, {
6860fe9ff9SJiaran Zhang 		.int_msk = BIT(9),
6960fe9ff9SJiaran Zhang 		.msg = "cmdq_nic_rx_head_ecc_mbit_err",
7060fe9ff9SJiaran Zhang 		.reset_level = HNAE3_NONE_RESET
7160fe9ff9SJiaran Zhang 	}, {
7260fe9ff9SJiaran Zhang 		.int_msk = BIT(11),
7360fe9ff9SJiaran Zhang 		.msg = "cmdq_nic_tx_head_ecc_mbit_err",
7460fe9ff9SJiaran Zhang 		.reset_level = HNAE3_NONE_RESET
7560fe9ff9SJiaran Zhang 	}, {
7660fe9ff9SJiaran Zhang 		.int_msk = BIT(13),
7760fe9ff9SJiaran Zhang 		.msg = "cmdq_nic_rx_addr_ecc_mbit_err",
7860fe9ff9SJiaran Zhang 		.reset_level = HNAE3_NONE_RESET
7960fe9ff9SJiaran Zhang 	}, {
8060fe9ff9SJiaran Zhang 		.int_msk = BIT(15),
8160fe9ff9SJiaran Zhang 		.msg = "cmdq_nic_tx_addr_ecc_mbit_err",
8260fe9ff9SJiaran Zhang 		.reset_level = HNAE3_NONE_RESET
8360fe9ff9SJiaran Zhang 	}, {
8460fe9ff9SJiaran Zhang 		.int_msk = BIT(17),
8560fe9ff9SJiaran Zhang 		.msg = "cmdq_rocee_rx_depth_ecc_mbit_err",
8660fe9ff9SJiaran Zhang 		.reset_level = HNAE3_NONE_RESET
8760fe9ff9SJiaran Zhang 	}, {
8860fe9ff9SJiaran Zhang 		.int_msk = BIT(19),
8960fe9ff9SJiaran Zhang 		.msg = "cmdq_rocee_tx_depth_ecc_mbit_err",
9060fe9ff9SJiaran Zhang 		.reset_level = HNAE3_NONE_RESET
9160fe9ff9SJiaran Zhang 	}, {
9260fe9ff9SJiaran Zhang 		.int_msk = BIT(21),
9360fe9ff9SJiaran Zhang 		.msg = "cmdq_rocee_rx_tail_ecc_mbit_err",
9460fe9ff9SJiaran Zhang 		.reset_level = HNAE3_NONE_RESET
9560fe9ff9SJiaran Zhang 	}, {
9660fe9ff9SJiaran Zhang 		.int_msk = BIT(23),
9760fe9ff9SJiaran Zhang 		.msg = "cmdq_rocee_tx_tail_ecc_mbit_err",
9860fe9ff9SJiaran Zhang 		.reset_level = HNAE3_NONE_RESET
9960fe9ff9SJiaran Zhang 	}, {
10060fe9ff9SJiaran Zhang 		.int_msk = BIT(25),
10160fe9ff9SJiaran Zhang 		.msg = "cmdq_rocee_rx_head_ecc_mbit_err",
10260fe9ff9SJiaran Zhang 		.reset_level = HNAE3_NONE_RESET
10360fe9ff9SJiaran Zhang 	}, {
10460fe9ff9SJiaran Zhang 		.int_msk = BIT(27),
10560fe9ff9SJiaran Zhang 		.msg = "cmdq_rocee_tx_head_ecc_mbit_err",
10660fe9ff9SJiaran Zhang 		.reset_level = HNAE3_NONE_RESET
10760fe9ff9SJiaran Zhang 	}, {
10860fe9ff9SJiaran Zhang 		.int_msk = BIT(29),
10960fe9ff9SJiaran Zhang 		.msg = "cmdq_rocee_rx_addr_ecc_mbit_err",
11060fe9ff9SJiaran Zhang 		.reset_level = HNAE3_NONE_RESET
11160fe9ff9SJiaran Zhang 	}, {
11260fe9ff9SJiaran Zhang 		.int_msk = BIT(31),
11360fe9ff9SJiaran Zhang 		.msg = "cmdq_rocee_tx_addr_ecc_mbit_err",
11460fe9ff9SJiaran Zhang 		.reset_level = HNAE3_NONE_RESET
11560fe9ff9SJiaran Zhang 	}, {
11660fe9ff9SJiaran Zhang 		/* sentinel */
11760fe9ff9SJiaran Zhang 	}
1186d67ee9aSShiju Jose };
1196d67ee9aSShiju Jose 
1206d67ee9aSShiju Jose static const struct hclge_hw_error hclge_tqp_int_ecc_int[] = {
12160fe9ff9SJiaran Zhang 	{
12260fe9ff9SJiaran Zhang 		.int_msk = BIT(6),
12360fe9ff9SJiaran Zhang 		.msg = "tqp_int_cfg_even_ecc_mbit_err",
12460fe9ff9SJiaran Zhang 		.reset_level = HNAE3_NONE_RESET
12560fe9ff9SJiaran Zhang 	}, {
12660fe9ff9SJiaran Zhang 		.int_msk = BIT(7),
12760fe9ff9SJiaran Zhang 		.msg = "tqp_int_cfg_odd_ecc_mbit_err",
12860fe9ff9SJiaran Zhang 		.reset_level = HNAE3_NONE_RESET
12960fe9ff9SJiaran Zhang 	}, {
13060fe9ff9SJiaran Zhang 		.int_msk = BIT(8),
13160fe9ff9SJiaran Zhang 		.msg = "tqp_int_ctrl_even_ecc_mbit_err",
13260fe9ff9SJiaran Zhang 		.reset_level = HNAE3_NONE_RESET
13360fe9ff9SJiaran Zhang 	}, {
13460fe9ff9SJiaran Zhang 		.int_msk = BIT(9),
13560fe9ff9SJiaran Zhang 		.msg = "tqp_int_ctrl_odd_ecc_mbit_err",
13660fe9ff9SJiaran Zhang 		.reset_level = HNAE3_NONE_RESET
13760fe9ff9SJiaran Zhang 	}, {
13860fe9ff9SJiaran Zhang 		.int_msk = BIT(10),
13960fe9ff9SJiaran Zhang 		.msg = "tx_que_scan_int_ecc_mbit_err",
14060fe9ff9SJiaran Zhang 		.reset_level = HNAE3_NONE_RESET
14160fe9ff9SJiaran Zhang 	}, {
14260fe9ff9SJiaran Zhang 		.int_msk = BIT(11),
14360fe9ff9SJiaran Zhang 		.msg = "rx_que_scan_int_ecc_mbit_err",
14460fe9ff9SJiaran Zhang 		.reset_level = HNAE3_NONE_RESET
14560fe9ff9SJiaran Zhang 	}, {
14660fe9ff9SJiaran Zhang 		/* sentinel */
14760fe9ff9SJiaran Zhang 	}
1486d67ee9aSShiju Jose };
1496d67ee9aSShiju Jose 
150332fbf57SShiju Jose static const struct hclge_hw_error hclge_msix_sram_ecc_int[] = {
15160fe9ff9SJiaran Zhang 	{
15260fe9ff9SJiaran Zhang 		.int_msk = BIT(1),
15360fe9ff9SJiaran Zhang 		.msg = "msix_nic_ecc_mbit_err",
15460fe9ff9SJiaran Zhang 		.reset_level = HNAE3_NONE_RESET
15560fe9ff9SJiaran Zhang 	}, {
15660fe9ff9SJiaran Zhang 		.int_msk = BIT(3),
15760fe9ff9SJiaran Zhang 		.msg = "msix_rocee_ecc_mbit_err",
15860fe9ff9SJiaran Zhang 		.reset_level = HNAE3_NONE_RESET
15960fe9ff9SJiaran Zhang 	}, {
16060fe9ff9SJiaran Zhang 		/* sentinel */
16160fe9ff9SJiaran Zhang 	}
162332fbf57SShiju Jose };
163332fbf57SShiju Jose 
164332fbf57SShiju Jose static const struct hclge_hw_error hclge_igu_int[] = {
16560fe9ff9SJiaran Zhang 	{
16660fe9ff9SJiaran Zhang 		.int_msk = BIT(0),
16760fe9ff9SJiaran Zhang 		.msg = "igu_rx_buf0_ecc_mbit_err",
16860fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
16960fe9ff9SJiaran Zhang 	}, {
17060fe9ff9SJiaran Zhang 		.int_msk = BIT(2),
17160fe9ff9SJiaran Zhang 		.msg = "igu_rx_buf1_ecc_mbit_err",
17260fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
17360fe9ff9SJiaran Zhang 	}, {
17460fe9ff9SJiaran Zhang 		/* sentinel */
17560fe9ff9SJiaran Zhang 	}
176bf1faf94SShiju Jose };
177bf1faf94SShiju Jose 
178332fbf57SShiju Jose static const struct hclge_hw_error hclge_igu_egu_tnl_int[] = {
17960fe9ff9SJiaran Zhang 	{
18060fe9ff9SJiaran Zhang 		.int_msk = BIT(0),
18160fe9ff9SJiaran Zhang 		.msg = "rx_buf_overflow",
18260fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
18360fe9ff9SJiaran Zhang 	}, {
18460fe9ff9SJiaran Zhang 		.int_msk = BIT(1),
18560fe9ff9SJiaran Zhang 		.msg = "rx_stp_fifo_overflow",
18660fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
18760fe9ff9SJiaran Zhang 	}, {
18860fe9ff9SJiaran Zhang 		.int_msk = BIT(2),
18960fe9ff9SJiaran Zhang 		.msg = "rx_stp_fifo_underflow",
19060fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
19160fe9ff9SJiaran Zhang 	}, {
19260fe9ff9SJiaran Zhang 		.int_msk = BIT(3),
19360fe9ff9SJiaran Zhang 		.msg = "tx_buf_overflow",
19460fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
19560fe9ff9SJiaran Zhang 	}, {
19660fe9ff9SJiaran Zhang 		.int_msk = BIT(4),
19760fe9ff9SJiaran Zhang 		.msg = "tx_buf_underrun",
19860fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
19960fe9ff9SJiaran Zhang 	}, {
20060fe9ff9SJiaran Zhang 		.int_msk = BIT(5),
20160fe9ff9SJiaran Zhang 		.msg = "rx_stp_buf_overflow",
20260fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
20360fe9ff9SJiaran Zhang 	}, {
20460fe9ff9SJiaran Zhang 		/* sentinel */
20560fe9ff9SJiaran Zhang 	}
206bf1faf94SShiju Jose };
207bf1faf94SShiju Jose 
208bf1faf94SShiju Jose static const struct hclge_hw_error hclge_ncsi_err_int[] = {
20960fe9ff9SJiaran Zhang 	{
21060fe9ff9SJiaran Zhang 		.int_msk = BIT(1),
21160fe9ff9SJiaran Zhang 		.msg = "ncsi_tx_ecc_mbit_err",
21260fe9ff9SJiaran Zhang 		.reset_level = HNAE3_NONE_RESET
21360fe9ff9SJiaran Zhang 	}, {
21460fe9ff9SJiaran Zhang 		/* sentinel */
21560fe9ff9SJiaran Zhang 	}
216bf1faf94SShiju Jose };
217bf1faf94SShiju Jose 
218332fbf57SShiju Jose static const struct hclge_hw_error hclge_ppp_mpf_abnormal_int_st1[] = {
21960fe9ff9SJiaran Zhang 	{
22060fe9ff9SJiaran Zhang 		.int_msk = BIT(0),
22160fe9ff9SJiaran Zhang 		.msg = "vf_vlan_ad_mem_ecc_mbit_err",
22260fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
22360fe9ff9SJiaran Zhang 	}, {
22460fe9ff9SJiaran Zhang 		.int_msk = BIT(1),
22560fe9ff9SJiaran Zhang 		.msg = "umv_mcast_group_mem_ecc_mbit_err",
22660fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
22760fe9ff9SJiaran Zhang 	}, {
22860fe9ff9SJiaran Zhang 		.int_msk = BIT(2),
22960fe9ff9SJiaran Zhang 		.msg = "umv_key_mem0_ecc_mbit_err",
23060fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
23160fe9ff9SJiaran Zhang 	}, {
23260fe9ff9SJiaran Zhang 		.int_msk = BIT(3),
23360fe9ff9SJiaran Zhang 		.msg = "umv_key_mem1_ecc_mbit_err",
23460fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
23560fe9ff9SJiaran Zhang 	}, {
23660fe9ff9SJiaran Zhang 		.int_msk = BIT(4),
23760fe9ff9SJiaran Zhang 		.msg = "umv_key_mem2_ecc_mbit_err",
23860fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
23960fe9ff9SJiaran Zhang 	}, {
24060fe9ff9SJiaran Zhang 		.int_msk = BIT(5),
24160fe9ff9SJiaran Zhang 		.msg = "umv_key_mem3_ecc_mbit_err",
24260fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
24360fe9ff9SJiaran Zhang 	}, {
24460fe9ff9SJiaran Zhang 		.int_msk = BIT(6),
24560fe9ff9SJiaran Zhang 		.msg = "umv_ad_mem_ecc_mbit_err",
24660fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
24760fe9ff9SJiaran Zhang 	}, {
24860fe9ff9SJiaran Zhang 		.int_msk = BIT(7),
24960fe9ff9SJiaran Zhang 		.msg = "rss_tc_mode_mem_ecc_mbit_err",
25060fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
25160fe9ff9SJiaran Zhang 	}, {
25260fe9ff9SJiaran Zhang 		.int_msk = BIT(8),
25360fe9ff9SJiaran Zhang 		.msg = "rss_idt_mem0_ecc_mbit_err",
25460fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
25560fe9ff9SJiaran Zhang 	}, {
25660fe9ff9SJiaran Zhang 		.int_msk = BIT(9),
25760fe9ff9SJiaran Zhang 		.msg = "rss_idt_mem1_ecc_mbit_err",
25860fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
25960fe9ff9SJiaran Zhang 	}, {
26060fe9ff9SJiaran Zhang 		.int_msk = BIT(10),
26160fe9ff9SJiaran Zhang 		.msg = "rss_idt_mem2_ecc_mbit_err",
26260fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
26360fe9ff9SJiaran Zhang 	}, {
26460fe9ff9SJiaran Zhang 		.int_msk = BIT(11),
26560fe9ff9SJiaran Zhang 		.msg = "rss_idt_mem3_ecc_mbit_err",
26660fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
26760fe9ff9SJiaran Zhang 	}, {
26860fe9ff9SJiaran Zhang 		.int_msk = BIT(12),
26960fe9ff9SJiaran Zhang 		.msg = "rss_idt_mem4_ecc_mbit_err",
27060fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
27160fe9ff9SJiaran Zhang 	}, {
27260fe9ff9SJiaran Zhang 		.int_msk = BIT(13),
27360fe9ff9SJiaran Zhang 		.msg = "rss_idt_mem5_ecc_mbit_err",
27460fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
27560fe9ff9SJiaran Zhang 	}, {
27660fe9ff9SJiaran Zhang 		.int_msk = BIT(14),
27760fe9ff9SJiaran Zhang 		.msg = "rss_idt_mem6_ecc_mbit_err",
27860fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
27960fe9ff9SJiaran Zhang 	}, {
28060fe9ff9SJiaran Zhang 		.int_msk = BIT(15),
28160fe9ff9SJiaran Zhang 		.msg = "rss_idt_mem7_ecc_mbit_err",
28260fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
28360fe9ff9SJiaran Zhang 	}, {
28460fe9ff9SJiaran Zhang 		.int_msk = BIT(16),
28560fe9ff9SJiaran Zhang 		.msg = "rss_idt_mem8_ecc_mbit_err",
28660fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
28760fe9ff9SJiaran Zhang 	}, {
28860fe9ff9SJiaran Zhang 		.int_msk = BIT(17),
28960fe9ff9SJiaran Zhang 		.msg = "rss_idt_mem9_ecc_mbit_err",
29060fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
29160fe9ff9SJiaran Zhang 	}, {
29260fe9ff9SJiaran Zhang 		.int_msk = BIT(18),
29360fe9ff9SJiaran Zhang 		.msg = "rss_idt_mem10_ecc_mbit_err",
29460fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
29560fe9ff9SJiaran Zhang 	}, {
29660fe9ff9SJiaran Zhang 		.int_msk = BIT(19),
29760fe9ff9SJiaran Zhang 		.msg = "rss_idt_mem11_ecc_mbit_err",
29860fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
29960fe9ff9SJiaran Zhang 	}, {
30060fe9ff9SJiaran Zhang 		.int_msk = BIT(20),
30160fe9ff9SJiaran Zhang 		.msg = "rss_idt_mem12_ecc_mbit_err",
30260fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
30360fe9ff9SJiaran Zhang 	}, {
30460fe9ff9SJiaran Zhang 		.int_msk = BIT(21),
30560fe9ff9SJiaran Zhang 		.msg = "rss_idt_mem13_ecc_mbit_err",
30660fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
30760fe9ff9SJiaran Zhang 	}, {
30860fe9ff9SJiaran Zhang 		.int_msk = BIT(22),
30960fe9ff9SJiaran Zhang 		.msg = "rss_idt_mem14_ecc_mbit_err",
31060fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
31160fe9ff9SJiaran Zhang 	}, {
31260fe9ff9SJiaran Zhang 		.int_msk = BIT(23),
31360fe9ff9SJiaran Zhang 		.msg = "rss_idt_mem15_ecc_mbit_err",
31460fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
31560fe9ff9SJiaran Zhang 	}, {
31660fe9ff9SJiaran Zhang 		.int_msk = BIT(24),
31760fe9ff9SJiaran Zhang 		.msg = "port_vlan_mem_ecc_mbit_err",
31860fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
31960fe9ff9SJiaran Zhang 	}, {
32060fe9ff9SJiaran Zhang 		.int_msk = BIT(25),
32160fe9ff9SJiaran Zhang 		.msg = "mcast_linear_table_mem_ecc_mbit_err",
32260fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
32360fe9ff9SJiaran Zhang 	}, {
32460fe9ff9SJiaran Zhang 		.int_msk = BIT(26),
32560fe9ff9SJiaran Zhang 		.msg = "mcast_result_mem_ecc_mbit_err",
32660fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
32760fe9ff9SJiaran Zhang 	}, {
32860fe9ff9SJiaran Zhang 		.int_msk = BIT(27),
32960fe9ff9SJiaran Zhang 		.msg = "flow_director_ad_mem0_ecc_mbit_err",
33060fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
33160fe9ff9SJiaran Zhang 	}, {
33260fe9ff9SJiaran Zhang 		.int_msk = BIT(28),
33360fe9ff9SJiaran Zhang 		.msg = "flow_director_ad_mem1_ecc_mbit_err",
33460fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
33560fe9ff9SJiaran Zhang 	}, {
33660fe9ff9SJiaran Zhang 		.int_msk = BIT(29),
33760fe9ff9SJiaran Zhang 		.msg = "rx_vlan_tag_memory_ecc_mbit_err",
33860fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
33960fe9ff9SJiaran Zhang 	}, {
34060fe9ff9SJiaran Zhang 		.int_msk = BIT(30),
34160fe9ff9SJiaran Zhang 		.msg = "Tx_UP_mapping_config_mem_ecc_mbit_err",
34260fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
34360fe9ff9SJiaran Zhang 	}, {
34460fe9ff9SJiaran Zhang 		/* sentinel */
34560fe9ff9SJiaran Zhang 	}
346da2d072aSShiju Jose };
347da2d072aSShiju Jose 
3488fc9d3e3SShiju Jose static const struct hclge_hw_error hclge_ppp_pf_abnormal_int[] = {
34960fe9ff9SJiaran Zhang 	{
35060fe9ff9SJiaran Zhang 		.int_msk = BIT(0),
35160fe9ff9SJiaran Zhang 		.msg = "tx_vlan_tag_err",
35260fe9ff9SJiaran Zhang 		.reset_level = HNAE3_NONE_RESET
35360fe9ff9SJiaran Zhang 	}, {
35460fe9ff9SJiaran Zhang 		.int_msk = BIT(1),
35560fe9ff9SJiaran Zhang 		.msg = "rss_list_tc_unassigned_queue_err",
35660fe9ff9SJiaran Zhang 		.reset_level = HNAE3_NONE_RESET
35760fe9ff9SJiaran Zhang 	}, {
35860fe9ff9SJiaran Zhang 		/* sentinel */
35960fe9ff9SJiaran Zhang 	}
360da2d072aSShiju Jose };
361da2d072aSShiju Jose 
362332fbf57SShiju Jose static const struct hclge_hw_error hclge_ppp_mpf_abnormal_int_st3[] = {
36360fe9ff9SJiaran Zhang 	{
36460fe9ff9SJiaran Zhang 		.int_msk = BIT(0),
36560fe9ff9SJiaran Zhang 		.msg = "hfs_fifo_mem_ecc_mbit_err",
36660fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
36760fe9ff9SJiaran Zhang 	}, {
36860fe9ff9SJiaran Zhang 		.int_msk = BIT(1),
36960fe9ff9SJiaran Zhang 		.msg = "rslt_descr_fifo_mem_ecc_mbit_err",
37060fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
37160fe9ff9SJiaran Zhang 	}, {
37260fe9ff9SJiaran Zhang 		.int_msk = BIT(2),
37360fe9ff9SJiaran Zhang 		.msg = "tx_vlan_tag_mem_ecc_mbit_err",
37460fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
37560fe9ff9SJiaran Zhang 	}, {
37660fe9ff9SJiaran Zhang 		.int_msk = BIT(3),
37760fe9ff9SJiaran Zhang 		.msg = "FD_CN0_memory_ecc_mbit_err",
37860fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
37960fe9ff9SJiaran Zhang 	}, {
38060fe9ff9SJiaran Zhang 		.int_msk = BIT(4),
38160fe9ff9SJiaran Zhang 		.msg = "FD_CN1_memory_ecc_mbit_err",
38260fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
38360fe9ff9SJiaran Zhang 	}, {
38460fe9ff9SJiaran Zhang 		.int_msk = BIT(5),
38560fe9ff9SJiaran Zhang 		.msg = "GRO_AD_memory_ecc_mbit_err",
38660fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
38760fe9ff9SJiaran Zhang 	}, {
38860fe9ff9SJiaran Zhang 		/* sentinel */
38960fe9ff9SJiaran Zhang 	}
390da2d072aSShiju Jose };
391da2d072aSShiju Jose 
392332fbf57SShiju Jose static const struct hclge_hw_error hclge_tm_sch_rint[] = {
39360fe9ff9SJiaran Zhang 	{
39460fe9ff9SJiaran Zhang 		.int_msk = BIT(1),
39560fe9ff9SJiaran Zhang 		.msg = "tm_sch_ecc_mbit_err",
39660fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
39760fe9ff9SJiaran Zhang 	}, {
39860fe9ff9SJiaran Zhang 		.int_msk = BIT(2),
39960fe9ff9SJiaran Zhang 		.msg = "tm_sch_port_shap_sub_fifo_wr_err",
40060fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
40160fe9ff9SJiaran Zhang 	}, {
40260fe9ff9SJiaran Zhang 		.int_msk = BIT(3),
40360fe9ff9SJiaran Zhang 		.msg = "tm_sch_port_shap_sub_fifo_rd_err",
40460fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
40560fe9ff9SJiaran Zhang 	}, {
40660fe9ff9SJiaran Zhang 		.int_msk = BIT(4),
40760fe9ff9SJiaran Zhang 		.msg = "tm_sch_pg_pshap_sub_fifo_wr_err",
40860fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
40960fe9ff9SJiaran Zhang 	}, {
41060fe9ff9SJiaran Zhang 		.int_msk = BIT(5),
41160fe9ff9SJiaran Zhang 		.msg = "tm_sch_pg_pshap_sub_fifo_rd_err",
41260fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
41360fe9ff9SJiaran Zhang 	}, {
41460fe9ff9SJiaran Zhang 		.int_msk = BIT(6),
41560fe9ff9SJiaran Zhang 		.msg = "tm_sch_pg_cshap_sub_fifo_wr_err",
41660fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
41760fe9ff9SJiaran Zhang 	}, {
41860fe9ff9SJiaran Zhang 		.int_msk = BIT(7),
41960fe9ff9SJiaran Zhang 		.msg = "tm_sch_pg_cshap_sub_fifo_rd_err",
42060fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
42160fe9ff9SJiaran Zhang 	}, {
42260fe9ff9SJiaran Zhang 		.int_msk = BIT(8),
42360fe9ff9SJiaran Zhang 		.msg = "tm_sch_pri_pshap_sub_fifo_wr_err",
42460fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
42560fe9ff9SJiaran Zhang 	}, {
42660fe9ff9SJiaran Zhang 		.int_msk = BIT(9),
42760fe9ff9SJiaran Zhang 		.msg = "tm_sch_pri_pshap_sub_fifo_rd_err",
42860fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
42960fe9ff9SJiaran Zhang 	}, {
43060fe9ff9SJiaran Zhang 		.int_msk = BIT(10),
43160fe9ff9SJiaran Zhang 		.msg = "tm_sch_pri_cshap_sub_fifo_wr_err",
43260fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
43360fe9ff9SJiaran Zhang 	}, {
43460fe9ff9SJiaran Zhang 		.int_msk = BIT(11),
43560fe9ff9SJiaran Zhang 		.msg = "tm_sch_pri_cshap_sub_fifo_rd_err",
43660fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
43760fe9ff9SJiaran Zhang 	}, {
43860fe9ff9SJiaran Zhang 		.int_msk = BIT(12),
43960fe9ff9SJiaran Zhang 		.msg = "tm_sch_port_shap_offset_fifo_wr_err",
44060fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
44160fe9ff9SJiaran Zhang 	}, {
44260fe9ff9SJiaran Zhang 		.int_msk = BIT(13),
44360fe9ff9SJiaran Zhang 		.msg = "tm_sch_port_shap_offset_fifo_rd_err",
44460fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
44560fe9ff9SJiaran Zhang 	}, {
44660fe9ff9SJiaran Zhang 		.int_msk = BIT(14),
44760fe9ff9SJiaran Zhang 		.msg = "tm_sch_pg_pshap_offset_fifo_wr_err",
44860fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
44960fe9ff9SJiaran Zhang 	}, {
45060fe9ff9SJiaran Zhang 		.int_msk = BIT(15),
45160fe9ff9SJiaran Zhang 		.msg = "tm_sch_pg_pshap_offset_fifo_rd_err",
45260fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
45360fe9ff9SJiaran Zhang 	}, {
45460fe9ff9SJiaran Zhang 		.int_msk = BIT(16),
45560fe9ff9SJiaran Zhang 		.msg = "tm_sch_pg_cshap_offset_fifo_wr_err",
45660fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
45760fe9ff9SJiaran Zhang 	}, {
45860fe9ff9SJiaran Zhang 		.int_msk = BIT(17),
45960fe9ff9SJiaran Zhang 		.msg = "tm_sch_pg_cshap_offset_fifo_rd_err",
46060fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
46160fe9ff9SJiaran Zhang 	}, {
46260fe9ff9SJiaran Zhang 		.int_msk = BIT(18),
46360fe9ff9SJiaran Zhang 		.msg = "tm_sch_pri_pshap_offset_fifo_wr_err",
46460fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
46560fe9ff9SJiaran Zhang 	}, {
46660fe9ff9SJiaran Zhang 		.int_msk = BIT(19),
46760fe9ff9SJiaran Zhang 		.msg = "tm_sch_pri_pshap_offset_fifo_rd_err",
46860fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
46960fe9ff9SJiaran Zhang 	}, {
47060fe9ff9SJiaran Zhang 		.int_msk = BIT(20),
47160fe9ff9SJiaran Zhang 		.msg = "tm_sch_pri_cshap_offset_fifo_wr_err",
47260fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
47360fe9ff9SJiaran Zhang 	}, {
47460fe9ff9SJiaran Zhang 		.int_msk = BIT(21),
47560fe9ff9SJiaran Zhang 		.msg = "tm_sch_pri_cshap_offset_fifo_rd_err",
47660fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
47760fe9ff9SJiaran Zhang 	}, {
47860fe9ff9SJiaran Zhang 		.int_msk = BIT(22),
47960fe9ff9SJiaran Zhang 		.msg = "tm_sch_rq_fifo_wr_err",
48060fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
48160fe9ff9SJiaran Zhang 	}, {
48260fe9ff9SJiaran Zhang 		.int_msk = BIT(23),
48360fe9ff9SJiaran Zhang 		.msg = "tm_sch_rq_fifo_rd_err",
48460fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
48560fe9ff9SJiaran Zhang 	}, {
48660fe9ff9SJiaran Zhang 		.int_msk = BIT(24),
48760fe9ff9SJiaran Zhang 		.msg = "tm_sch_nq_fifo_wr_err",
48860fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
48960fe9ff9SJiaran Zhang 	}, {
49060fe9ff9SJiaran Zhang 		.int_msk = BIT(25),
49160fe9ff9SJiaran Zhang 		.msg = "tm_sch_nq_fifo_rd_err",
49260fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
49360fe9ff9SJiaran Zhang 	}, {
49460fe9ff9SJiaran Zhang 		.int_msk = BIT(26),
49560fe9ff9SJiaran Zhang 		.msg = "tm_sch_roce_up_fifo_wr_err",
49660fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
49760fe9ff9SJiaran Zhang 	}, {
49860fe9ff9SJiaran Zhang 		.int_msk = BIT(27),
49960fe9ff9SJiaran Zhang 		.msg = "tm_sch_roce_up_fifo_rd_err",
50060fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
50160fe9ff9SJiaran Zhang 	}, {
50260fe9ff9SJiaran Zhang 		.int_msk = BIT(28),
50360fe9ff9SJiaran Zhang 		.msg = "tm_sch_rcb_byte_fifo_wr_err",
50460fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
50560fe9ff9SJiaran Zhang 	}, {
50660fe9ff9SJiaran Zhang 		.int_msk = BIT(29),
50760fe9ff9SJiaran Zhang 		.msg = "tm_sch_rcb_byte_fifo_rd_err",
50860fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
50960fe9ff9SJiaran Zhang 	}, {
51060fe9ff9SJiaran Zhang 		.int_msk = BIT(30),
51160fe9ff9SJiaran Zhang 		.msg = "tm_sch_ssu_byte_fifo_wr_err",
51260fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
51360fe9ff9SJiaran Zhang 	}, {
51460fe9ff9SJiaran Zhang 		.int_msk = BIT(31),
51560fe9ff9SJiaran Zhang 		.msg = "tm_sch_ssu_byte_fifo_rd_err",
51660fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
51760fe9ff9SJiaran Zhang 	}, {
51860fe9ff9SJiaran Zhang 		/* sentinel */
51960fe9ff9SJiaran Zhang 	}
52001865a50SShiju Jose };
52101865a50SShiju Jose 
522332fbf57SShiju Jose static const struct hclge_hw_error hclge_qcn_fifo_rint[] = {
52360fe9ff9SJiaran Zhang 	{
52460fe9ff9SJiaran Zhang 		.int_msk = BIT(0),
52560fe9ff9SJiaran Zhang 		.msg = "qcn_shap_gp0_sch_fifo_rd_err",
52660fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
52760fe9ff9SJiaran Zhang 	}, {
52860fe9ff9SJiaran Zhang 		.int_msk = BIT(1),
52960fe9ff9SJiaran Zhang 		.msg = "qcn_shap_gp0_sch_fifo_wr_err",
53060fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
53160fe9ff9SJiaran Zhang 	}, {
53260fe9ff9SJiaran Zhang 		.int_msk = BIT(2),
53360fe9ff9SJiaran Zhang 		.msg = "qcn_shap_gp1_sch_fifo_rd_err",
53460fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
53560fe9ff9SJiaran Zhang 	}, {
53660fe9ff9SJiaran Zhang 		.int_msk = BIT(3),
53760fe9ff9SJiaran Zhang 		.msg = "qcn_shap_gp1_sch_fifo_wr_err",
53860fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
53960fe9ff9SJiaran Zhang 	}, {
54060fe9ff9SJiaran Zhang 		.int_msk = BIT(4),
54160fe9ff9SJiaran Zhang 		.msg = "qcn_shap_gp2_sch_fifo_rd_err",
54260fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
54360fe9ff9SJiaran Zhang 	}, {
54460fe9ff9SJiaran Zhang 		.int_msk = BIT(5),
54560fe9ff9SJiaran Zhang 		.msg = "qcn_shap_gp2_sch_fifo_wr_err",
54660fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
54760fe9ff9SJiaran Zhang 	}, {
54860fe9ff9SJiaran Zhang 		.int_msk = BIT(6),
54960fe9ff9SJiaran Zhang 		.msg = "qcn_shap_gp3_sch_fifo_rd_err",
55060fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
55160fe9ff9SJiaran Zhang 	}, {
55260fe9ff9SJiaran Zhang 		.int_msk = BIT(7),
55360fe9ff9SJiaran Zhang 		.msg = "qcn_shap_gp3_sch_fifo_wr_err",
55460fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
55560fe9ff9SJiaran Zhang 	}, {
55660fe9ff9SJiaran Zhang 		.int_msk = BIT(8),
55760fe9ff9SJiaran Zhang 		.msg = "qcn_shap_gp0_offset_fifo_rd_err",
55860fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
55960fe9ff9SJiaran Zhang 	}, {
56060fe9ff9SJiaran Zhang 		.int_msk = BIT(9),
56160fe9ff9SJiaran Zhang 		.msg = "qcn_shap_gp0_offset_fifo_wr_err",
56260fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
56360fe9ff9SJiaran Zhang 	}, {
56460fe9ff9SJiaran Zhang 		.int_msk = BIT(10),
56560fe9ff9SJiaran Zhang 		.msg = "qcn_shap_gp1_offset_fifo_rd_err",
56660fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
56760fe9ff9SJiaran Zhang 	}, {
56860fe9ff9SJiaran Zhang 		.int_msk = BIT(11),
56960fe9ff9SJiaran Zhang 		.msg = "qcn_shap_gp1_offset_fifo_wr_err",
57060fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
57160fe9ff9SJiaran Zhang 	}, {
57260fe9ff9SJiaran Zhang 		.int_msk = BIT(12),
57360fe9ff9SJiaran Zhang 		.msg = "qcn_shap_gp2_offset_fifo_rd_err",
57460fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
57560fe9ff9SJiaran Zhang 	}, {
57660fe9ff9SJiaran Zhang 		.int_msk = BIT(13),
57760fe9ff9SJiaran Zhang 		.msg = "qcn_shap_gp2_offset_fifo_wr_err",
57860fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
57960fe9ff9SJiaran Zhang 	}, {
58060fe9ff9SJiaran Zhang 		.int_msk = BIT(14),
58160fe9ff9SJiaran Zhang 		.msg = "qcn_shap_gp3_offset_fifo_rd_err",
58260fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
58360fe9ff9SJiaran Zhang 	}, {
58460fe9ff9SJiaran Zhang 		.int_msk = BIT(15),
58560fe9ff9SJiaran Zhang 		.msg = "qcn_shap_gp3_offset_fifo_wr_err",
58660fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
58760fe9ff9SJiaran Zhang 	}, {
58860fe9ff9SJiaran Zhang 		.int_msk = BIT(16),
58960fe9ff9SJiaran Zhang 		.msg = "qcn_byte_info_fifo_rd_err",
59060fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
59160fe9ff9SJiaran Zhang 	}, {
59260fe9ff9SJiaran Zhang 		.int_msk = BIT(17),
59360fe9ff9SJiaran Zhang 		.msg = "qcn_byte_info_fifo_wr_err",
59460fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
59560fe9ff9SJiaran Zhang 	}, {
59660fe9ff9SJiaran Zhang 		/* sentinel */
59760fe9ff9SJiaran Zhang 	}
598332fbf57SShiju Jose };
599332fbf57SShiju Jose 
600332fbf57SShiju Jose static const struct hclge_hw_error hclge_qcn_ecc_rint[] = {
60160fe9ff9SJiaran Zhang 	{
60260fe9ff9SJiaran Zhang 		.int_msk = BIT(1),
60360fe9ff9SJiaran Zhang 		.msg = "qcn_byte_mem_ecc_mbit_err",
60460fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
60560fe9ff9SJiaran Zhang 	}, {
60660fe9ff9SJiaran Zhang 		.int_msk = BIT(3),
60760fe9ff9SJiaran Zhang 		.msg = "qcn_time_mem_ecc_mbit_err",
60860fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
60960fe9ff9SJiaran Zhang 	}, {
61060fe9ff9SJiaran Zhang 		.int_msk = BIT(5),
61160fe9ff9SJiaran Zhang 		.msg = "qcn_fb_mem_ecc_mbit_err",
61260fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
61360fe9ff9SJiaran Zhang 	}, {
61460fe9ff9SJiaran Zhang 		.int_msk = BIT(7),
61560fe9ff9SJiaran Zhang 		.msg = "qcn_link_mem_ecc_mbit_err",
61660fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
61760fe9ff9SJiaran Zhang 	}, {
61860fe9ff9SJiaran Zhang 		.int_msk = BIT(9),
61960fe9ff9SJiaran Zhang 		.msg = "qcn_rate_mem_ecc_mbit_err",
62060fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
62160fe9ff9SJiaran Zhang 	}, {
62260fe9ff9SJiaran Zhang 		.int_msk = BIT(11),
62360fe9ff9SJiaran Zhang 		.msg = "qcn_tmplt_mem_ecc_mbit_err",
62460fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
62560fe9ff9SJiaran Zhang 	}, {
62660fe9ff9SJiaran Zhang 		.int_msk = BIT(13),
62760fe9ff9SJiaran Zhang 		.msg = "qcn_shap_cfg_mem_ecc_mbit_err",
62860fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
62960fe9ff9SJiaran Zhang 	}, {
63060fe9ff9SJiaran Zhang 		.int_msk = BIT(15),
63160fe9ff9SJiaran Zhang 		.msg = "qcn_gp0_barrel_mem_ecc_mbit_err",
63260fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
63360fe9ff9SJiaran Zhang 	}, {
63460fe9ff9SJiaran Zhang 		.int_msk = BIT(17),
63560fe9ff9SJiaran Zhang 		.msg = "qcn_gp1_barrel_mem_ecc_mbit_err",
63660fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
63760fe9ff9SJiaran Zhang 	}, {
63860fe9ff9SJiaran Zhang 		.int_msk = BIT(19),
63960fe9ff9SJiaran Zhang 		.msg = "qcn_gp2_barrel_mem_ecc_mbit_err",
64060fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
64160fe9ff9SJiaran Zhang 	}, {
64260fe9ff9SJiaran Zhang 		.int_msk = BIT(21),
64360fe9ff9SJiaran Zhang 		.msg = "qcn_gp3_barral_mem_ecc_mbit_err",
64460fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
64560fe9ff9SJiaran Zhang 	}, {
64660fe9ff9SJiaran Zhang 		/* sentinel */
64760fe9ff9SJiaran Zhang 	}
64801865a50SShiju Jose };
64901865a50SShiju Jose 
6507838f908SShiju Jose static const struct hclge_hw_error hclge_mac_afifo_tnl_int[] = {
65160fe9ff9SJiaran Zhang 	{
65260fe9ff9SJiaran Zhang 		.int_msk = BIT(0),
65360fe9ff9SJiaran Zhang 		.msg = "egu_cge_afifo_ecc_1bit_err",
65460fe9ff9SJiaran Zhang 		.reset_level = HNAE3_NONE_RESET
65560fe9ff9SJiaran Zhang 	}, {
65660fe9ff9SJiaran Zhang 		.int_msk = BIT(1),
65760fe9ff9SJiaran Zhang 		.msg = "egu_cge_afifo_ecc_mbit_err",
65860fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
65960fe9ff9SJiaran Zhang 	}, {
66060fe9ff9SJiaran Zhang 		.int_msk = BIT(2),
66160fe9ff9SJiaran Zhang 		.msg = "egu_lge_afifo_ecc_1bit_err",
66260fe9ff9SJiaran Zhang 		.reset_level = HNAE3_NONE_RESET
66360fe9ff9SJiaran Zhang 	}, {
66460fe9ff9SJiaran Zhang 		.int_msk = BIT(3),
66560fe9ff9SJiaran Zhang 		.msg = "egu_lge_afifo_ecc_mbit_err",
66660fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
66760fe9ff9SJiaran Zhang 	}, {
66860fe9ff9SJiaran Zhang 		.int_msk = BIT(4),
66960fe9ff9SJiaran Zhang 		.msg = "cge_igu_afifo_ecc_1bit_err",
67060fe9ff9SJiaran Zhang 		.reset_level = HNAE3_NONE_RESET
67160fe9ff9SJiaran Zhang 	}, {
67260fe9ff9SJiaran Zhang 		.int_msk = BIT(5),
67360fe9ff9SJiaran Zhang 		.msg = "cge_igu_afifo_ecc_mbit_err",
67460fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
67560fe9ff9SJiaran Zhang 	}, {
67660fe9ff9SJiaran Zhang 		.int_msk = BIT(6),
67760fe9ff9SJiaran Zhang 		.msg = "lge_igu_afifo_ecc_1bit_err",
67860fe9ff9SJiaran Zhang 		.reset_level = HNAE3_NONE_RESET
67960fe9ff9SJiaran Zhang 	}, {
68060fe9ff9SJiaran Zhang 		.int_msk = BIT(7),
68160fe9ff9SJiaran Zhang 		.msg = "lge_igu_afifo_ecc_mbit_err",
68260fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
68360fe9ff9SJiaran Zhang 	}, {
68460fe9ff9SJiaran Zhang 		.int_msk = BIT(8),
68560fe9ff9SJiaran Zhang 		.msg = "cge_igu_afifo_overflow_err",
68660fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
68760fe9ff9SJiaran Zhang 	}, {
68860fe9ff9SJiaran Zhang 		.int_msk = BIT(9),
68960fe9ff9SJiaran Zhang 		.msg = "lge_igu_afifo_overflow_err",
69060fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
69160fe9ff9SJiaran Zhang 	}, {
69260fe9ff9SJiaran Zhang 		.int_msk = BIT(10),
69360fe9ff9SJiaran Zhang 		.msg = "egu_cge_afifo_underrun_err",
69460fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
69560fe9ff9SJiaran Zhang 	}, {
69660fe9ff9SJiaran Zhang 		.int_msk = BIT(11),
69760fe9ff9SJiaran Zhang 		.msg = "egu_lge_afifo_underrun_err",
69860fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
69960fe9ff9SJiaran Zhang 	}, {
70060fe9ff9SJiaran Zhang 		.int_msk = BIT(12),
70160fe9ff9SJiaran Zhang 		.msg = "egu_ge_afifo_underrun_err",
70260fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
70360fe9ff9SJiaran Zhang 	}, {
70460fe9ff9SJiaran Zhang 		.int_msk = BIT(13),
70560fe9ff9SJiaran Zhang 		.msg = "ge_igu_afifo_overflow_err",
70660fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
70760fe9ff9SJiaran Zhang 	}, {
70860fe9ff9SJiaran Zhang 		/* sentinel */
70960fe9ff9SJiaran Zhang 	}
7107838f908SShiju Jose };
7117838f908SShiju Jose 
712f69b10b3SShiju Jose static const struct hclge_hw_error hclge_ppu_mpf_abnormal_int_st2[] = {
71360fe9ff9SJiaran Zhang 	{
71460fe9ff9SJiaran Zhang 		.int_msk = BIT(13),
71560fe9ff9SJiaran Zhang 		.msg = "rpu_rx_pkt_bit32_ecc_mbit_err",
71660fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
71760fe9ff9SJiaran Zhang 	}, {
71860fe9ff9SJiaran Zhang 		.int_msk = BIT(14),
71960fe9ff9SJiaran Zhang 		.msg = "rpu_rx_pkt_bit33_ecc_mbit_err",
72060fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
72160fe9ff9SJiaran Zhang 	}, {
72260fe9ff9SJiaran Zhang 		.int_msk = BIT(15),
72360fe9ff9SJiaran Zhang 		.msg = "rpu_rx_pkt_bit34_ecc_mbit_err",
72460fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
72560fe9ff9SJiaran Zhang 	}, {
72660fe9ff9SJiaran Zhang 		.int_msk = BIT(16),
72760fe9ff9SJiaran Zhang 		.msg = "rpu_rx_pkt_bit35_ecc_mbit_err",
72860fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
72960fe9ff9SJiaran Zhang 	}, {
73060fe9ff9SJiaran Zhang 		.int_msk = BIT(17),
73160fe9ff9SJiaran Zhang 		.msg = "rcb_tx_ring_ecc_mbit_err",
73260fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
73360fe9ff9SJiaran Zhang 	}, {
73460fe9ff9SJiaran Zhang 		.int_msk = BIT(18),
73560fe9ff9SJiaran Zhang 		.msg = "rcb_rx_ring_ecc_mbit_err",
73660fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
73760fe9ff9SJiaran Zhang 	}, {
73860fe9ff9SJiaran Zhang 		.int_msk = BIT(19),
73960fe9ff9SJiaran Zhang 		.msg = "rcb_tx_fbd_ecc_mbit_err",
74060fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
74160fe9ff9SJiaran Zhang 	}, {
74260fe9ff9SJiaran Zhang 		.int_msk = BIT(20),
74360fe9ff9SJiaran Zhang 		.msg = "rcb_rx_ebd_ecc_mbit_err",
74460fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
74560fe9ff9SJiaran Zhang 	}, {
74660fe9ff9SJiaran Zhang 		.int_msk = BIT(21),
74760fe9ff9SJiaran Zhang 		.msg = "rcb_tso_info_ecc_mbit_err",
74860fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
74960fe9ff9SJiaran Zhang 	}, {
75060fe9ff9SJiaran Zhang 		.int_msk = BIT(22),
75160fe9ff9SJiaran Zhang 		.msg = "rcb_tx_int_info_ecc_mbit_err",
75260fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
75360fe9ff9SJiaran Zhang 	}, {
75460fe9ff9SJiaran Zhang 		.int_msk = BIT(23),
75560fe9ff9SJiaran Zhang 		.msg = "rcb_rx_int_info_ecc_mbit_err",
75660fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
75760fe9ff9SJiaran Zhang 	}, {
75860fe9ff9SJiaran Zhang 		.int_msk = BIT(24),
75960fe9ff9SJiaran Zhang 		.msg = "tpu_tx_pkt_0_ecc_mbit_err",
76060fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
76160fe9ff9SJiaran Zhang 	}, {
76260fe9ff9SJiaran Zhang 		.int_msk = BIT(25),
76360fe9ff9SJiaran Zhang 		.msg = "tpu_tx_pkt_1_ecc_mbit_err",
76460fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
76560fe9ff9SJiaran Zhang 	}, {
76660fe9ff9SJiaran Zhang 		.int_msk = BIT(26),
76760fe9ff9SJiaran Zhang 		.msg = "rd_bus_err",
76860fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
76960fe9ff9SJiaran Zhang 	}, {
77060fe9ff9SJiaran Zhang 		.int_msk = BIT(27),
77160fe9ff9SJiaran Zhang 		.msg = "wr_bus_err",
77260fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
77360fe9ff9SJiaran Zhang 	}, {
77460fe9ff9SJiaran Zhang 		.int_msk = BIT(28),
77560fe9ff9SJiaran Zhang 		.msg = "reg_search_miss",
77660fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
77760fe9ff9SJiaran Zhang 	}, {
77860fe9ff9SJiaran Zhang 		.int_msk = BIT(29),
77960fe9ff9SJiaran Zhang 		.msg = "rx_q_search_miss",
78060fe9ff9SJiaran Zhang 		.reset_level = HNAE3_NONE_RESET
78160fe9ff9SJiaran Zhang 	}, {
78260fe9ff9SJiaran Zhang 		.int_msk = BIT(30),
78360fe9ff9SJiaran Zhang 		.msg = "ooo_ecc_err_detect",
78460fe9ff9SJiaran Zhang 		.reset_level = HNAE3_NONE_RESET
78560fe9ff9SJiaran Zhang 	}, {
78660fe9ff9SJiaran Zhang 		.int_msk = BIT(31),
78760fe9ff9SJiaran Zhang 		.msg = "ooo_ecc_err_multpl",
78860fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
78960fe9ff9SJiaran Zhang 	}, {
79060fe9ff9SJiaran Zhang 		/* sentinel */
79160fe9ff9SJiaran Zhang 	}
792f69b10b3SShiju Jose };
793f69b10b3SShiju Jose 
794f69b10b3SShiju Jose static const struct hclge_hw_error hclge_ppu_mpf_abnormal_int_st3[] = {
79560fe9ff9SJiaran Zhang 	{
79660fe9ff9SJiaran Zhang 		.int_msk = BIT(4),
79760fe9ff9SJiaran Zhang 		.msg = "gro_bd_ecc_mbit_err",
79860fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
79960fe9ff9SJiaran Zhang 	}, {
80060fe9ff9SJiaran Zhang 		.int_msk = BIT(5),
80160fe9ff9SJiaran Zhang 		.msg = "gro_context_ecc_mbit_err",
80260fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
80360fe9ff9SJiaran Zhang 	}, {
80460fe9ff9SJiaran Zhang 		.int_msk = BIT(6),
80560fe9ff9SJiaran Zhang 		.msg = "rx_stash_cfg_ecc_mbit_err",
80660fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
80760fe9ff9SJiaran Zhang 	}, {
80860fe9ff9SJiaran Zhang 		.int_msk = BIT(7),
80960fe9ff9SJiaran Zhang 		.msg = "axi_rd_fbd_ecc_mbit_err",
81060fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
81160fe9ff9SJiaran Zhang 	}, {
81260fe9ff9SJiaran Zhang 		/* sentinel */
81360fe9ff9SJiaran Zhang 	}
814f69b10b3SShiju Jose };
815f69b10b3SShiju Jose 
816f69b10b3SShiju Jose static const struct hclge_hw_error hclge_ppu_pf_abnormal_int[] = {
81760fe9ff9SJiaran Zhang 	{
81860fe9ff9SJiaran Zhang 		.int_msk = BIT(0),
81960fe9ff9SJiaran Zhang 		.msg = "over_8bd_no_fe",
82060fe9ff9SJiaran Zhang 		.reset_level = HNAE3_FUNC_RESET
82160fe9ff9SJiaran Zhang 	}, {
82260fe9ff9SJiaran Zhang 		.int_msk = BIT(1),
82360fe9ff9SJiaran Zhang 		.msg = "tso_mss_cmp_min_err",
82460fe9ff9SJiaran Zhang 		.reset_level = HNAE3_NONE_RESET
82560fe9ff9SJiaran Zhang 	}, {
82660fe9ff9SJiaran Zhang 		.int_msk = BIT(2),
82760fe9ff9SJiaran Zhang 		.msg = "tso_mss_cmp_max_err",
82860fe9ff9SJiaran Zhang 		.reset_level = HNAE3_NONE_RESET
82960fe9ff9SJiaran Zhang 	}, {
83060fe9ff9SJiaran Zhang 		.int_msk = BIT(3),
83160fe9ff9SJiaran Zhang 		.msg = "tx_rd_fbd_poison",
83260fe9ff9SJiaran Zhang 		.reset_level = HNAE3_FUNC_RESET
83360fe9ff9SJiaran Zhang 	}, {
83460fe9ff9SJiaran Zhang 		.int_msk = BIT(4),
83560fe9ff9SJiaran Zhang 		.msg = "rx_rd_ebd_poison",
83660fe9ff9SJiaran Zhang 		.reset_level = HNAE3_FUNC_RESET
83760fe9ff9SJiaran Zhang 	}, {
83860fe9ff9SJiaran Zhang 		.int_msk = BIT(5),
83960fe9ff9SJiaran Zhang 		.msg = "buf_wait_timeout",
84060fe9ff9SJiaran Zhang 		.reset_level = HNAE3_NONE_RESET
84160fe9ff9SJiaran Zhang 	}, {
84260fe9ff9SJiaran Zhang 		/* sentinel */
84360fe9ff9SJiaran Zhang 	}
844f69b10b3SShiju Jose };
845f69b10b3SShiju Jose 
846c3529177SShiju Jose static const struct hclge_hw_error hclge_ssu_com_err_int[] = {
84760fe9ff9SJiaran Zhang 	{
84860fe9ff9SJiaran Zhang 		.int_msk = BIT(0),
84960fe9ff9SJiaran Zhang 		.msg = "buf_sum_err",
85060fe9ff9SJiaran Zhang 		.reset_level = HNAE3_NONE_RESET
85160fe9ff9SJiaran Zhang 	}, {
85260fe9ff9SJiaran Zhang 		.int_msk = BIT(1),
85360fe9ff9SJiaran Zhang 		.msg = "ppp_mb_num_err",
85460fe9ff9SJiaran Zhang 		.reset_level = HNAE3_NONE_RESET
85560fe9ff9SJiaran Zhang 	}, {
85660fe9ff9SJiaran Zhang 		.int_msk = BIT(2),
85760fe9ff9SJiaran Zhang 		.msg = "ppp_mbid_err",
85860fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
85960fe9ff9SJiaran Zhang 	}, {
86060fe9ff9SJiaran Zhang 		.int_msk = BIT(3),
86160fe9ff9SJiaran Zhang 		.msg = "ppp_rlt_mac_err",
86260fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
86360fe9ff9SJiaran Zhang 	}, {
86460fe9ff9SJiaran Zhang 		.int_msk = BIT(4),
86560fe9ff9SJiaran Zhang 		.msg = "ppp_rlt_host_err",
86660fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
86760fe9ff9SJiaran Zhang 	}, {
86860fe9ff9SJiaran Zhang 		.int_msk = BIT(5),
86960fe9ff9SJiaran Zhang 		.msg = "cks_edit_position_err",
87060fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
87160fe9ff9SJiaran Zhang 	}, {
87260fe9ff9SJiaran Zhang 		.int_msk = BIT(6),
87360fe9ff9SJiaran Zhang 		.msg = "cks_edit_condition_err",
87460fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
87560fe9ff9SJiaran Zhang 	}, {
87660fe9ff9SJiaran Zhang 		.int_msk = BIT(7),
87760fe9ff9SJiaran Zhang 		.msg = "vlan_edit_condition_err",
87860fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
87960fe9ff9SJiaran Zhang 	}, {
88060fe9ff9SJiaran Zhang 		.int_msk = BIT(8),
88160fe9ff9SJiaran Zhang 		.msg = "vlan_num_ot_err",
88260fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
88360fe9ff9SJiaran Zhang 	}, {
88460fe9ff9SJiaran Zhang 		.int_msk = BIT(9),
88560fe9ff9SJiaran Zhang 		.msg = "vlan_num_in_err",
88660fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
88760fe9ff9SJiaran Zhang 	}, {
88860fe9ff9SJiaran Zhang 		/* sentinel */
88960fe9ff9SJiaran Zhang 	}
890c3529177SShiju Jose };
891c3529177SShiju Jose 
8923d69e59fSWeihang Li #define HCLGE_SSU_MEM_ECC_ERR(x) \
89360fe9ff9SJiaran Zhang { \
89460fe9ff9SJiaran Zhang 	.int_msk = BIT(x), \
89560fe9ff9SJiaran Zhang 	.msg = "ssu_mem" #x "_ecc_mbit_err", \
89660fe9ff9SJiaran Zhang 	.reset_level = HNAE3_GLOBAL_RESET \
89760fe9ff9SJiaran Zhang }
8983d69e59fSWeihang Li 
8993d69e59fSWeihang Li static const struct hclge_hw_error hclge_ssu_mem_ecc_err_int[] = {
9003d69e59fSWeihang Li 	HCLGE_SSU_MEM_ECC_ERR(0),
9013d69e59fSWeihang Li 	HCLGE_SSU_MEM_ECC_ERR(1),
9023d69e59fSWeihang Li 	HCLGE_SSU_MEM_ECC_ERR(2),
9033d69e59fSWeihang Li 	HCLGE_SSU_MEM_ECC_ERR(3),
9043d69e59fSWeihang Li 	HCLGE_SSU_MEM_ECC_ERR(4),
9053d69e59fSWeihang Li 	HCLGE_SSU_MEM_ECC_ERR(5),
9063d69e59fSWeihang Li 	HCLGE_SSU_MEM_ECC_ERR(6),
9073d69e59fSWeihang Li 	HCLGE_SSU_MEM_ECC_ERR(7),
9083d69e59fSWeihang Li 	HCLGE_SSU_MEM_ECC_ERR(8),
9093d69e59fSWeihang Li 	HCLGE_SSU_MEM_ECC_ERR(9),
9103d69e59fSWeihang Li 	HCLGE_SSU_MEM_ECC_ERR(10),
9113d69e59fSWeihang Li 	HCLGE_SSU_MEM_ECC_ERR(11),
9123d69e59fSWeihang Li 	HCLGE_SSU_MEM_ECC_ERR(12),
9133d69e59fSWeihang Li 	HCLGE_SSU_MEM_ECC_ERR(13),
9143d69e59fSWeihang Li 	HCLGE_SSU_MEM_ECC_ERR(14),
9153d69e59fSWeihang Li 	HCLGE_SSU_MEM_ECC_ERR(15),
9163d69e59fSWeihang Li 	HCLGE_SSU_MEM_ECC_ERR(16),
9173d69e59fSWeihang Li 	HCLGE_SSU_MEM_ECC_ERR(17),
9183d69e59fSWeihang Li 	HCLGE_SSU_MEM_ECC_ERR(18),
9193d69e59fSWeihang Li 	HCLGE_SSU_MEM_ECC_ERR(19),
9203d69e59fSWeihang Li 	HCLGE_SSU_MEM_ECC_ERR(20),
9213d69e59fSWeihang Li 	HCLGE_SSU_MEM_ECC_ERR(21),
9223d69e59fSWeihang Li 	HCLGE_SSU_MEM_ECC_ERR(22),
9233d69e59fSWeihang Li 	HCLGE_SSU_MEM_ECC_ERR(23),
9243d69e59fSWeihang Li 	HCLGE_SSU_MEM_ECC_ERR(24),
9253d69e59fSWeihang Li 	HCLGE_SSU_MEM_ECC_ERR(25),
9263d69e59fSWeihang Li 	HCLGE_SSU_MEM_ECC_ERR(26),
9273d69e59fSWeihang Li 	HCLGE_SSU_MEM_ECC_ERR(27),
9283d69e59fSWeihang Li 	HCLGE_SSU_MEM_ECC_ERR(28),
9293d69e59fSWeihang Li 	HCLGE_SSU_MEM_ECC_ERR(29),
9303d69e59fSWeihang Li 	HCLGE_SSU_MEM_ECC_ERR(30),
9313d69e59fSWeihang Li 	HCLGE_SSU_MEM_ECC_ERR(31),
9323d69e59fSWeihang Li 	{ /* sentinel */ }
9333d69e59fSWeihang Li };
9343d69e59fSWeihang Li 
935c3529177SShiju Jose static const struct hclge_hw_error hclge_ssu_port_based_err_int[] = {
93660fe9ff9SJiaran Zhang 	{
93760fe9ff9SJiaran Zhang 		.int_msk = BIT(0),
93860fe9ff9SJiaran Zhang 		.msg = "roc_pkt_without_key_port",
93960fe9ff9SJiaran Zhang 		.reset_level = HNAE3_FUNC_RESET
94060fe9ff9SJiaran Zhang 	}, {
94160fe9ff9SJiaran Zhang 		.int_msk = BIT(1),
94260fe9ff9SJiaran Zhang 		.msg = "tpu_pkt_without_key_port",
94360fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
94460fe9ff9SJiaran Zhang 	}, {
94560fe9ff9SJiaran Zhang 		.int_msk = BIT(2),
94660fe9ff9SJiaran Zhang 		.msg = "igu_pkt_without_key_port",
94760fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
94860fe9ff9SJiaran Zhang 	}, {
94960fe9ff9SJiaran Zhang 		.int_msk = BIT(3),
95060fe9ff9SJiaran Zhang 		.msg = "roc_eof_mis_match_port",
95160fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
95260fe9ff9SJiaran Zhang 	}, {
95360fe9ff9SJiaran Zhang 		.int_msk = BIT(4),
95460fe9ff9SJiaran Zhang 		.msg = "tpu_eof_mis_match_port",
95560fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
95660fe9ff9SJiaran Zhang 	}, {
95760fe9ff9SJiaran Zhang 		.int_msk = BIT(5),
95860fe9ff9SJiaran Zhang 		.msg = "igu_eof_mis_match_port",
95960fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
96060fe9ff9SJiaran Zhang 	}, {
96160fe9ff9SJiaran Zhang 		.int_msk = BIT(6),
96260fe9ff9SJiaran Zhang 		.msg = "roc_sof_mis_match_port",
96360fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
96460fe9ff9SJiaran Zhang 	}, {
96560fe9ff9SJiaran Zhang 		.int_msk = BIT(7),
96660fe9ff9SJiaran Zhang 		.msg = "tpu_sof_mis_match_port",
96760fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
96860fe9ff9SJiaran Zhang 	}, {
96960fe9ff9SJiaran Zhang 		.int_msk = BIT(8),
97060fe9ff9SJiaran Zhang 		.msg = "igu_sof_mis_match_port",
97160fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
97260fe9ff9SJiaran Zhang 	}, {
97360fe9ff9SJiaran Zhang 		.int_msk = BIT(11),
97460fe9ff9SJiaran Zhang 		.msg = "ets_rd_int_rx_port",
97560fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
97660fe9ff9SJiaran Zhang 	}, {
97760fe9ff9SJiaran Zhang 		.int_msk = BIT(12),
97860fe9ff9SJiaran Zhang 		.msg = "ets_wr_int_rx_port",
97960fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
98060fe9ff9SJiaran Zhang 	}, {
98160fe9ff9SJiaran Zhang 		.int_msk = BIT(13),
98260fe9ff9SJiaran Zhang 		.msg = "ets_rd_int_tx_port",
98360fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
98460fe9ff9SJiaran Zhang 	}, {
98560fe9ff9SJiaran Zhang 		.int_msk = BIT(14),
98660fe9ff9SJiaran Zhang 		.msg = "ets_wr_int_tx_port",
98760fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
98860fe9ff9SJiaran Zhang 	}, {
98960fe9ff9SJiaran Zhang 		/* sentinel */
99060fe9ff9SJiaran Zhang 	}
991c3529177SShiju Jose };
992c3529177SShiju Jose 
993c3529177SShiju Jose static const struct hclge_hw_error hclge_ssu_fifo_overflow_int[] = {
99460fe9ff9SJiaran Zhang 	{
99560fe9ff9SJiaran Zhang 		.int_msk = BIT(0),
99660fe9ff9SJiaran Zhang 		.msg = "ig_mac_inf_int",
99760fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
99860fe9ff9SJiaran Zhang 	}, {
99960fe9ff9SJiaran Zhang 		.int_msk = BIT(1),
100060fe9ff9SJiaran Zhang 		.msg = "ig_host_inf_int",
100160fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
100260fe9ff9SJiaran Zhang 	}, {
100360fe9ff9SJiaran Zhang 		.int_msk = BIT(2),
100460fe9ff9SJiaran Zhang 		.msg = "ig_roc_buf_int",
100560fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
100660fe9ff9SJiaran Zhang 	}, {
100760fe9ff9SJiaran Zhang 		.int_msk = BIT(3),
100860fe9ff9SJiaran Zhang 		.msg = "ig_host_data_fifo_int",
100960fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
101060fe9ff9SJiaran Zhang 	}, {
101160fe9ff9SJiaran Zhang 		.int_msk = BIT(4),
101260fe9ff9SJiaran Zhang 		.msg = "ig_host_key_fifo_int",
101360fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
101460fe9ff9SJiaran Zhang 	}, {
101560fe9ff9SJiaran Zhang 		.int_msk = BIT(5),
101660fe9ff9SJiaran Zhang 		.msg = "tx_qcn_fifo_int",
101760fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
101860fe9ff9SJiaran Zhang 	}, {
101960fe9ff9SJiaran Zhang 		.int_msk = BIT(6),
102060fe9ff9SJiaran Zhang 		.msg = "rx_qcn_fifo_int",
102160fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
102260fe9ff9SJiaran Zhang 	}, {
102360fe9ff9SJiaran Zhang 		.int_msk = BIT(7),
102460fe9ff9SJiaran Zhang 		.msg = "tx_pf_rd_fifo_int",
102560fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
102660fe9ff9SJiaran Zhang 	}, {
102760fe9ff9SJiaran Zhang 		.int_msk = BIT(8),
102860fe9ff9SJiaran Zhang 		.msg = "rx_pf_rd_fifo_int",
102960fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
103060fe9ff9SJiaran Zhang 	}, {
103160fe9ff9SJiaran Zhang 		.int_msk = BIT(9),
103260fe9ff9SJiaran Zhang 		.msg = "qm_eof_fifo_int",
103360fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
103460fe9ff9SJiaran Zhang 	}, {
103560fe9ff9SJiaran Zhang 		.int_msk = BIT(10),
103660fe9ff9SJiaran Zhang 		.msg = "mb_rlt_fifo_int",
103760fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
103860fe9ff9SJiaran Zhang 	}, {
103960fe9ff9SJiaran Zhang 		.int_msk = BIT(11),
104060fe9ff9SJiaran Zhang 		.msg = "dup_uncopy_fifo_int",
104160fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
104260fe9ff9SJiaran Zhang 	}, {
104360fe9ff9SJiaran Zhang 		.int_msk = BIT(12),
104460fe9ff9SJiaran Zhang 		.msg = "dup_cnt_rd_fifo_int",
104560fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
104660fe9ff9SJiaran Zhang 	}, {
104760fe9ff9SJiaran Zhang 		.int_msk = BIT(13),
104860fe9ff9SJiaran Zhang 		.msg = "dup_cnt_drop_fifo_int",
104960fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
105060fe9ff9SJiaran Zhang 	}, {
105160fe9ff9SJiaran Zhang 		.int_msk = BIT(14),
105260fe9ff9SJiaran Zhang 		.msg = "dup_cnt_wrb_fifo_int",
105360fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
105460fe9ff9SJiaran Zhang 	}, {
105560fe9ff9SJiaran Zhang 		.int_msk = BIT(15),
105660fe9ff9SJiaran Zhang 		.msg = "host_cmd_fifo_int",
105760fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
105860fe9ff9SJiaran Zhang 	}, {
105960fe9ff9SJiaran Zhang 		.int_msk = BIT(16),
106060fe9ff9SJiaran Zhang 		.msg = "mac_cmd_fifo_int",
106160fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
106260fe9ff9SJiaran Zhang 	}, {
106360fe9ff9SJiaran Zhang 		.int_msk = BIT(17),
106460fe9ff9SJiaran Zhang 		.msg = "host_cmd_bitmap_empty_int",
106560fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
106660fe9ff9SJiaran Zhang 	}, {
106760fe9ff9SJiaran Zhang 		.int_msk = BIT(18),
106860fe9ff9SJiaran Zhang 		.msg = "mac_cmd_bitmap_empty_int",
106960fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
107060fe9ff9SJiaran Zhang 	}, {
107160fe9ff9SJiaran Zhang 		.int_msk = BIT(19),
107260fe9ff9SJiaran Zhang 		.msg = "dup_bitmap_empty_int",
107360fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
107460fe9ff9SJiaran Zhang 	}, {
107560fe9ff9SJiaran Zhang 		.int_msk = BIT(20),
107660fe9ff9SJiaran Zhang 		.msg = "out_queue_bitmap_empty_int",
107760fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
107860fe9ff9SJiaran Zhang 	}, {
107960fe9ff9SJiaran Zhang 		.int_msk = BIT(21),
108060fe9ff9SJiaran Zhang 		.msg = "bank2_bitmap_empty_int",
108160fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
108260fe9ff9SJiaran Zhang 	}, {
108360fe9ff9SJiaran Zhang 		.int_msk = BIT(22),
108460fe9ff9SJiaran Zhang 		.msg = "bank1_bitmap_empty_int",
108560fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
108660fe9ff9SJiaran Zhang 	}, {
108760fe9ff9SJiaran Zhang 		.int_msk = BIT(23),
108860fe9ff9SJiaran Zhang 		.msg = "bank0_bitmap_empty_int",
108960fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
109060fe9ff9SJiaran Zhang 	}, {
109160fe9ff9SJiaran Zhang 		/* sentinel */
109260fe9ff9SJiaran Zhang 	}
1093c3529177SShiju Jose };
1094c3529177SShiju Jose 
1095c3529177SShiju Jose static const struct hclge_hw_error hclge_ssu_ets_tcg_int[] = {
109660fe9ff9SJiaran Zhang 	{
109760fe9ff9SJiaran Zhang 		.int_msk = BIT(0),
109860fe9ff9SJiaran Zhang 		.msg = "ets_rd_int_rx_tcg",
109960fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
110060fe9ff9SJiaran Zhang 	}, {
110160fe9ff9SJiaran Zhang 		.int_msk = BIT(1),
110260fe9ff9SJiaran Zhang 		.msg = "ets_wr_int_rx_tcg",
110360fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
110460fe9ff9SJiaran Zhang 	}, {
110560fe9ff9SJiaran Zhang 		.int_msk = BIT(2),
110660fe9ff9SJiaran Zhang 		.msg = "ets_rd_int_tx_tcg",
110760fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
110860fe9ff9SJiaran Zhang 	}, {
110960fe9ff9SJiaran Zhang 		.int_msk = BIT(3),
111060fe9ff9SJiaran Zhang 		.msg = "ets_wr_int_tx_tcg",
111160fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
111260fe9ff9SJiaran Zhang 	}, {
111360fe9ff9SJiaran Zhang 		/* sentinel */
111460fe9ff9SJiaran Zhang 	}
1115c3529177SShiju Jose };
1116c3529177SShiju Jose 
1117c3529177SShiju Jose static const struct hclge_hw_error hclge_ssu_port_based_pf_int[] = {
111860fe9ff9SJiaran Zhang 	{
111960fe9ff9SJiaran Zhang 		.int_msk = BIT(0),
112060fe9ff9SJiaran Zhang 		.msg = "roc_pkt_without_key_port",
112160fe9ff9SJiaran Zhang 		.reset_level = HNAE3_FUNC_RESET
112260fe9ff9SJiaran Zhang 	}, {
112360fe9ff9SJiaran Zhang 		.int_msk = BIT(9),
112460fe9ff9SJiaran Zhang 		.msg = "low_water_line_err_port",
112560fe9ff9SJiaran Zhang 		.reset_level = HNAE3_NONE_RESET
112660fe9ff9SJiaran Zhang 	}, {
112760fe9ff9SJiaran Zhang 		.int_msk = BIT(10),
112860fe9ff9SJiaran Zhang 		.msg = "hi_water_line_err_port",
112960fe9ff9SJiaran Zhang 		.reset_level = HNAE3_GLOBAL_RESET
113060fe9ff9SJiaran Zhang 	}, {
113160fe9ff9SJiaran Zhang 		/* sentinel */
113260fe9ff9SJiaran Zhang 	}
1133c3529177SShiju Jose };
1134c3529177SShiju Jose 
1135630ba007SShiju Jose static const struct hclge_hw_error hclge_rocee_qmm_ovf_err_int[] = {
113660fe9ff9SJiaran Zhang 	{
113760fe9ff9SJiaran Zhang 		.int_msk = 0,
113860fe9ff9SJiaran Zhang 		.msg = "rocee qmm ovf: sgid invalid err"
113960fe9ff9SJiaran Zhang 	}, {
114060fe9ff9SJiaran Zhang 		.int_msk = 0x4,
114160fe9ff9SJiaran Zhang 		.msg = "rocee qmm ovf: sgid ovf err"
114260fe9ff9SJiaran Zhang 	}, {
114360fe9ff9SJiaran Zhang 		.int_msk = 0x8,
114460fe9ff9SJiaran Zhang 		.msg = "rocee qmm ovf: smac invalid err"
114560fe9ff9SJiaran Zhang 	}, {
114660fe9ff9SJiaran Zhang 		.int_msk = 0xC,
114760fe9ff9SJiaran Zhang 		.msg = "rocee qmm ovf: smac ovf err"
114860fe9ff9SJiaran Zhang 	}, {
114960fe9ff9SJiaran Zhang 		.int_msk = 0x10,
115060fe9ff9SJiaran Zhang 		.msg = "rocee qmm ovf: cqc invalid err"
115160fe9ff9SJiaran Zhang 	}, {
115260fe9ff9SJiaran Zhang 		.int_msk = 0x11,
115360fe9ff9SJiaran Zhang 		.msg = "rocee qmm ovf: cqc ovf err"
115460fe9ff9SJiaran Zhang 	}, {
115560fe9ff9SJiaran Zhang 		.int_msk = 0x12,
115660fe9ff9SJiaran Zhang 		.msg = "rocee qmm ovf: cqc hopnum err"
115760fe9ff9SJiaran Zhang 	}, {
115860fe9ff9SJiaran Zhang 		.int_msk = 0x13,
115960fe9ff9SJiaran Zhang 		.msg = "rocee qmm ovf: cqc ba0 err"
116060fe9ff9SJiaran Zhang 	}, {
116160fe9ff9SJiaran Zhang 		.int_msk = 0x14,
116260fe9ff9SJiaran Zhang 		.msg = "rocee qmm ovf: srqc invalid err"
116360fe9ff9SJiaran Zhang 	}, {
116460fe9ff9SJiaran Zhang 		.int_msk = 0x15,
116560fe9ff9SJiaran Zhang 		.msg = "rocee qmm ovf: srqc ovf err"
116660fe9ff9SJiaran Zhang 	}, {
116760fe9ff9SJiaran Zhang 		.int_msk = 0x16,
116860fe9ff9SJiaran Zhang 		.msg = "rocee qmm ovf: srqc hopnum err"
116960fe9ff9SJiaran Zhang 	}, {
117060fe9ff9SJiaran Zhang 		.int_msk = 0x17,
117160fe9ff9SJiaran Zhang 		.msg = "rocee qmm ovf: srqc ba0 err"
117260fe9ff9SJiaran Zhang 	}, {
117360fe9ff9SJiaran Zhang 		.int_msk = 0x18,
117460fe9ff9SJiaran Zhang 		.msg = "rocee qmm ovf: mpt invalid err"
117560fe9ff9SJiaran Zhang 	}, {
117660fe9ff9SJiaran Zhang 		.int_msk = 0x19,
117760fe9ff9SJiaran Zhang 		.msg = "rocee qmm ovf: mpt ovf err"
117860fe9ff9SJiaran Zhang 	}, {
117960fe9ff9SJiaran Zhang 		.int_msk = 0x1A,
118060fe9ff9SJiaran Zhang 		.msg = "rocee qmm ovf: mpt hopnum err"
118160fe9ff9SJiaran Zhang 	}, {
118260fe9ff9SJiaran Zhang 		.int_msk = 0x1B,
118360fe9ff9SJiaran Zhang 		.msg = "rocee qmm ovf: mpt ba0 err"
118460fe9ff9SJiaran Zhang 	}, {
118560fe9ff9SJiaran Zhang 		.int_msk = 0x1C,
118660fe9ff9SJiaran Zhang 		.msg = "rocee qmm ovf: qpc invalid err"
118760fe9ff9SJiaran Zhang 	}, {
118860fe9ff9SJiaran Zhang 		.int_msk = 0x1D,
118960fe9ff9SJiaran Zhang 		.msg = "rocee qmm ovf: qpc ovf err"
119060fe9ff9SJiaran Zhang 	}, {
119160fe9ff9SJiaran Zhang 		.int_msk = 0x1E,
119260fe9ff9SJiaran Zhang 		.msg = "rocee qmm ovf: qpc hopnum err"
119360fe9ff9SJiaran Zhang 	}, {
119460fe9ff9SJiaran Zhang 		.int_msk = 0x1F,
119560fe9ff9SJiaran Zhang 		.msg = "rocee qmm ovf: qpc ba0 err"
119660fe9ff9SJiaran Zhang 	}, {
119760fe9ff9SJiaran Zhang 		/* sentinel */
119860fe9ff9SJiaran Zhang 	}
1199630ba007SShiju Jose };
1200630ba007SShiju Jose 
12012e2deee7SJiaran Zhang static const struct hclge_hw_module_id hclge_hw_module_id_st[] = {
12022e2deee7SJiaran Zhang 	{
12032e2deee7SJiaran Zhang 		.module_id = MODULE_NONE,
12042e2deee7SJiaran Zhang 		.msg = "MODULE_NONE"
12052e2deee7SJiaran Zhang 	}, {
12062e2deee7SJiaran Zhang 		.module_id = MODULE_BIOS_COMMON,
12072e2deee7SJiaran Zhang 		.msg = "MODULE_BIOS_COMMON"
12082e2deee7SJiaran Zhang 	}, {
12092e2deee7SJiaran Zhang 		.module_id = MODULE_GE,
12102e2deee7SJiaran Zhang 		.msg = "MODULE_GE"
12112e2deee7SJiaran Zhang 	}, {
12122e2deee7SJiaran Zhang 		.module_id = MODULE_IGU_EGU,
12132e2deee7SJiaran Zhang 		.msg = "MODULE_IGU_EGU"
12142e2deee7SJiaran Zhang 	}, {
12152e2deee7SJiaran Zhang 		.module_id = MODULE_LGE,
12162e2deee7SJiaran Zhang 		.msg = "MODULE_LGE"
12172e2deee7SJiaran Zhang 	}, {
12182e2deee7SJiaran Zhang 		.module_id = MODULE_NCSI,
12192e2deee7SJiaran Zhang 		.msg = "MODULE_NCSI"
12202e2deee7SJiaran Zhang 	}, {
12212e2deee7SJiaran Zhang 		.module_id = MODULE_PPP,
12222e2deee7SJiaran Zhang 		.msg = "MODULE_PPP"
12232e2deee7SJiaran Zhang 	}, {
12242e2deee7SJiaran Zhang 		.module_id = MODULE_QCN,
12252e2deee7SJiaran Zhang 		.msg = "MODULE_QCN"
12262e2deee7SJiaran Zhang 	}, {
12272e2deee7SJiaran Zhang 		.module_id = MODULE_RCB_RX,
12282e2deee7SJiaran Zhang 		.msg = "MODULE_RCB_RX"
12292e2deee7SJiaran Zhang 	}, {
12302e2deee7SJiaran Zhang 		.module_id = MODULE_RTC,
12312e2deee7SJiaran Zhang 		.msg = "MODULE_RTC"
12322e2deee7SJiaran Zhang 	}, {
12332e2deee7SJiaran Zhang 		.module_id = MODULE_SSU,
12342e2deee7SJiaran Zhang 		.msg = "MODULE_SSU"
12352e2deee7SJiaran Zhang 	}, {
12362e2deee7SJiaran Zhang 		.module_id = MODULE_TM,
12372e2deee7SJiaran Zhang 		.msg = "MODULE_TM"
12382e2deee7SJiaran Zhang 	}, {
12392e2deee7SJiaran Zhang 		.module_id = MODULE_RCB_TX,
12402e2deee7SJiaran Zhang 		.msg = "MODULE_RCB_TX"
12412e2deee7SJiaran Zhang 	}, {
12422e2deee7SJiaran Zhang 		.module_id = MODULE_TXDMA,
12432e2deee7SJiaran Zhang 		.msg = "MODULE_TXDMA"
12442e2deee7SJiaran Zhang 	}, {
12452e2deee7SJiaran Zhang 		.module_id = MODULE_MASTER,
12462e2deee7SJiaran Zhang 		.msg = "MODULE_MASTER"
12478a95e360SJiaran Zhang 	}, {
1248da3fea80SJiaran Zhang 		.module_id = MODULE_HIMAC,
1249da3fea80SJiaran Zhang 		.msg = "MODULE_HIMAC"
1250da3fea80SJiaran Zhang 	}, {
12518a95e360SJiaran Zhang 		.module_id = MODULE_ROCEE_TOP,
12528a95e360SJiaran Zhang 		.msg = "MODULE_ROCEE_TOP"
12538a95e360SJiaran Zhang 	}, {
12548a95e360SJiaran Zhang 		.module_id = MODULE_ROCEE_TIMER,
12558a95e360SJiaran Zhang 		.msg = "MODULE_ROCEE_TIMER"
12568a95e360SJiaran Zhang 	}, {
12578a95e360SJiaran Zhang 		.module_id = MODULE_ROCEE_MDB,
12588a95e360SJiaran Zhang 		.msg = "MODULE_ROCEE_MDB"
12598a95e360SJiaran Zhang 	}, {
12608a95e360SJiaran Zhang 		.module_id = MODULE_ROCEE_TSP,
12618a95e360SJiaran Zhang 		.msg = "MODULE_ROCEE_TSP"
12628a95e360SJiaran Zhang 	}, {
12638a95e360SJiaran Zhang 		.module_id = MODULE_ROCEE_TRP,
12648a95e360SJiaran Zhang 		.msg = "MODULE_ROCEE_TRP"
12658a95e360SJiaran Zhang 	}, {
12668a95e360SJiaran Zhang 		.module_id = MODULE_ROCEE_SCC,
12678a95e360SJiaran Zhang 		.msg = "MODULE_ROCEE_SCC"
12688a95e360SJiaran Zhang 	}, {
12698a95e360SJiaran Zhang 		.module_id = MODULE_ROCEE_CAEP,
12708a95e360SJiaran Zhang 		.msg = "MODULE_ROCEE_CAEP"
12718a95e360SJiaran Zhang 	}, {
12728a95e360SJiaran Zhang 		.module_id = MODULE_ROCEE_GEN_AC,
12738a95e360SJiaran Zhang 		.msg = "MODULE_ROCEE_GEN_AC"
12748a95e360SJiaran Zhang 	}, {
12758a95e360SJiaran Zhang 		.module_id = MODULE_ROCEE_QMM,
12768a95e360SJiaran Zhang 		.msg = "MODULE_ROCEE_QMM"
12778a95e360SJiaran Zhang 	}, {
12788a95e360SJiaran Zhang 		.module_id = MODULE_ROCEE_LSAN,
12798a95e360SJiaran Zhang 		.msg = "MODULE_ROCEE_LSAN"
12802e2deee7SJiaran Zhang 	}
12812e2deee7SJiaran Zhang };
12822e2deee7SJiaran Zhang 
12832e2deee7SJiaran Zhang static const struct hclge_hw_type_id hclge_hw_type_id_st[] = {
12842e2deee7SJiaran Zhang 	{
12852e2deee7SJiaran Zhang 		.type_id = NONE_ERROR,
12862e2deee7SJiaran Zhang 		.msg = "none_error"
12872e2deee7SJiaran Zhang 	}, {
12882e2deee7SJiaran Zhang 		.type_id = FIFO_ERROR,
12892e2deee7SJiaran Zhang 		.msg = "fifo_error"
12902e2deee7SJiaran Zhang 	}, {
12912e2deee7SJiaran Zhang 		.type_id = MEMORY_ERROR,
12922e2deee7SJiaran Zhang 		.msg = "memory_error"
12932e2deee7SJiaran Zhang 	}, {
12942e2deee7SJiaran Zhang 		.type_id = POISON_ERROR,
12952e2deee7SJiaran Zhang 		.msg = "poison_error"
12962e2deee7SJiaran Zhang 	}, {
12972e2deee7SJiaran Zhang 		.type_id = MSIX_ECC_ERROR,
12982e2deee7SJiaran Zhang 		.msg = "msix_ecc_error"
12992e2deee7SJiaran Zhang 	}, {
13002e2deee7SJiaran Zhang 		.type_id = TQP_INT_ECC_ERROR,
13012e2deee7SJiaran Zhang 		.msg = "tqp_int_ecc_error"
13022e2deee7SJiaran Zhang 	}, {
13032e2deee7SJiaran Zhang 		.type_id = PF_ABNORMAL_INT_ERROR,
13042e2deee7SJiaran Zhang 		.msg = "pf_abnormal_int_error"
13052e2deee7SJiaran Zhang 	}, {
13062e2deee7SJiaran Zhang 		.type_id = MPF_ABNORMAL_INT_ERROR,
13072e2deee7SJiaran Zhang 		.msg = "mpf_abnormal_int_error"
13082e2deee7SJiaran Zhang 	}, {
13092e2deee7SJiaran Zhang 		.type_id = COMMON_ERROR,
13102e2deee7SJiaran Zhang 		.msg = "common_error"
13112e2deee7SJiaran Zhang 	}, {
13122e2deee7SJiaran Zhang 		.type_id = PORT_ERROR,
13132e2deee7SJiaran Zhang 		.msg = "port_error"
13142e2deee7SJiaran Zhang 	}, {
13152e2deee7SJiaran Zhang 		.type_id = ETS_ERROR,
13162e2deee7SJiaran Zhang 		.msg = "ets_error"
13172e2deee7SJiaran Zhang 	}, {
13182e2deee7SJiaran Zhang 		.type_id = NCSI_ERROR,
13192e2deee7SJiaran Zhang 		.msg = "ncsi_error"
13202e2deee7SJiaran Zhang 	}, {
13212e2deee7SJiaran Zhang 		.type_id = GLB_ERROR,
13222e2deee7SJiaran Zhang 		.msg = "glb_error"
13238a95e360SJiaran Zhang 	}, {
1324da3fea80SJiaran Zhang 		.type_id = LINK_ERROR,
1325da3fea80SJiaran Zhang 		.msg = "link_error"
1326da3fea80SJiaran Zhang 	}, {
1327da3fea80SJiaran Zhang 		.type_id = PTP_ERROR,
1328da3fea80SJiaran Zhang 		.msg = "ptp_error"
1329da3fea80SJiaran Zhang 	}, {
13308a95e360SJiaran Zhang 		.type_id = ROCEE_NORMAL_ERR,
13318a95e360SJiaran Zhang 		.msg = "rocee_normal_error"
13328a95e360SJiaran Zhang 	}, {
13338a95e360SJiaran Zhang 		.type_id = ROCEE_OVF_ERR,
13348a95e360SJiaran Zhang 		.msg = "rocee_ovf_error"
1335b566ef60SWeihang Li 	}, {
1336b566ef60SWeihang Li 		.type_id = ROCEE_BUS_ERR,
1337b566ef60SWeihang Li 		.msg = "rocee_bus_error"
1338b566ef60SWeihang Li 	},
13392e2deee7SJiaran Zhang };
13402e2deee7SJiaran Zhang 
hclge_log_error(struct device * dev,char * reg,const struct hclge_hw_error * err,u32 err_sts,unsigned long * reset_requests)1341a955d71dSShiju Jose static void hclge_log_error(struct device *dev, char *reg,
1342332fbf57SShiju Jose 			    const struct hclge_hw_error *err,
1343a955d71dSShiju Jose 			    u32 err_sts, unsigned long *reset_requests)
1344332fbf57SShiju Jose {
1345332fbf57SShiju Jose 	while (err->msg) {
1346c41e672dSWeihang Li 		if (err->int_msk & err_sts) {
1347ac887be5SXiaofei Tan 			dev_err(dev, "%s %s found [error status=0x%x]\n",
1348332fbf57SShiju Jose 				reg, err->msg, err_sts);
1349a955d71dSShiju Jose 			if (err->reset_level &&
1350a955d71dSShiju Jose 			    err->reset_level != HNAE3_NONE_RESET)
1351a955d71dSShiju Jose 				set_bit(err->reset_level, reset_requests);
1352c41e672dSWeihang Li 		}
1353332fbf57SShiju Jose 		err++;
1354332fbf57SShiju Jose 	}
1355332fbf57SShiju Jose }
1356332fbf57SShiju Jose 
13576d67ee9aSShiju Jose /* hclge_cmd_query_error: read the error information
13586d67ee9aSShiju Jose  * @hdev: pointer to struct hclge_dev
13596d67ee9aSShiju Jose  * @desc: descriptor for describing the command
13606d67ee9aSShiju Jose  * @cmd:  command opcode
13616d67ee9aSShiju Jose  * @flag: flag for extended command structure
13626d67ee9aSShiju Jose  *
13636d67ee9aSShiju Jose  * This function query the error info from hw register/s using command
13646d67ee9aSShiju Jose  */
hclge_cmd_query_error(struct hclge_dev * hdev,struct hclge_desc * desc,u32 cmd,u16 flag)13656d67ee9aSShiju Jose static int hclge_cmd_query_error(struct hclge_dev *hdev,
1366dbae56a3SWeihang Li 				 struct hclge_desc *desc, u32 cmd, u16 flag)
13676d67ee9aSShiju Jose {
13686d67ee9aSShiju Jose 	struct device *dev = &hdev->pdev->dev;
13699b2f3477SWeihang Li 	int desc_num = 1;
13706d67ee9aSShiju Jose 	int ret;
13716d67ee9aSShiju Jose 
13726d67ee9aSShiju Jose 	hclge_cmd_setup_basic_desc(&desc[0], cmd, true);
13736d67ee9aSShiju Jose 	if (flag) {
13746d67ee9aSShiju Jose 		desc[0].flag |= cpu_to_le16(flag);
13756d67ee9aSShiju Jose 		hclge_cmd_setup_basic_desc(&desc[1], cmd, true);
13769b2f3477SWeihang Li 		desc_num = 2;
13776d67ee9aSShiju Jose 	}
13786d67ee9aSShiju Jose 
13799b2f3477SWeihang Li 	ret = hclge_cmd_send(&hdev->hw, &desc[0], desc_num);
13806d67ee9aSShiju Jose 	if (ret)
13816d67ee9aSShiju Jose 		dev_err(dev, "query error cmd failed (%d)\n", ret);
13826d67ee9aSShiju Jose 
13836d67ee9aSShiju Jose 	return ret;
13846d67ee9aSShiju Jose }
13856d67ee9aSShiju Jose 
hclge_clear_mac_tnl_int(struct hclge_dev * hdev)1386a6345787SWeihang Li static int hclge_clear_mac_tnl_int(struct hclge_dev *hdev)
1387a6345787SWeihang Li {
1388a6345787SWeihang Li 	struct hclge_desc desc;
1389a6345787SWeihang Li 
1390a6345787SWeihang Li 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_CLEAR_MAC_TNL_INT, false);
1391a6345787SWeihang Li 	desc.data[0] = cpu_to_le32(HCLGE_MAC_TNL_INT_CLR);
1392a6345787SWeihang Li 
1393a6345787SWeihang Li 	return hclge_cmd_send(&hdev->hw, &desc, 1);
1394a6345787SWeihang Li }
1395a6345787SWeihang Li 
hclge_config_common_hw_err_int(struct hclge_dev * hdev,bool en)139698da4027SShiju Jose static int hclge_config_common_hw_err_int(struct hclge_dev *hdev, bool en)
13976d67ee9aSShiju Jose {
13986d67ee9aSShiju Jose 	struct device *dev = &hdev->pdev->dev;
13996d67ee9aSShiju Jose 	struct hclge_desc desc[2];
14006d67ee9aSShiju Jose 	int ret;
14016d67ee9aSShiju Jose 
140298da4027SShiju Jose 	/* configure common error interrupts */
14036d67ee9aSShiju Jose 	hclge_cmd_setup_basic_desc(&desc[0], HCLGE_COMMON_ECC_INT_CFG, false);
1404d3c69a88SJie Wang 	desc[0].flag |= cpu_to_le16(HCLGE_COMM_CMD_FLAG_NEXT);
14056d67ee9aSShiju Jose 	hclge_cmd_setup_basic_desc(&desc[1], HCLGE_COMMON_ECC_INT_CFG, false);
14066d67ee9aSShiju Jose 
14076d67ee9aSShiju Jose 	if (en) {
14086d67ee9aSShiju Jose 		desc[0].data[0] = cpu_to_le32(HCLGE_IMP_TCM_ECC_ERR_INT_EN);
14096d67ee9aSShiju Jose 		desc[0].data[2] = cpu_to_le32(HCLGE_CMDQ_NIC_ECC_ERR_INT_EN |
14106d67ee9aSShiju Jose 					HCLGE_CMDQ_ROCEE_ECC_ERR_INT_EN);
14116d67ee9aSShiju Jose 		desc[0].data[3] = cpu_to_le32(HCLGE_IMP_RD_POISON_ERR_INT_EN);
1412332fbf57SShiju Jose 		desc[0].data[4] = cpu_to_le32(HCLGE_TQP_ECC_ERR_INT_EN |
1413332fbf57SShiju Jose 					      HCLGE_MSIX_SRAM_ECC_ERR_INT_EN);
14146d67ee9aSShiju Jose 		desc[0].data[5] = cpu_to_le32(HCLGE_IMP_ITCM4_ECC_ERR_INT_EN);
14156d67ee9aSShiju Jose 	}
1416166b04c3SShiju Jose 
14176d67ee9aSShiju Jose 	desc[1].data[0] = cpu_to_le32(HCLGE_IMP_TCM_ECC_ERR_INT_EN_MASK);
14186d67ee9aSShiju Jose 	desc[1].data[2] = cpu_to_le32(HCLGE_CMDQ_NIC_ECC_ERR_INT_EN_MASK |
14196d67ee9aSShiju Jose 				HCLGE_CMDQ_ROCEE_ECC_ERR_INT_EN_MASK);
14206d67ee9aSShiju Jose 	desc[1].data[3] = cpu_to_le32(HCLGE_IMP_RD_POISON_ERR_INT_EN_MASK);
1421332fbf57SShiju Jose 	desc[1].data[4] = cpu_to_le32(HCLGE_TQP_ECC_ERR_INT_EN_MASK |
1422332fbf57SShiju Jose 				      HCLGE_MSIX_SRAM_ECC_ERR_INT_EN_MASK);
14236d67ee9aSShiju Jose 	desc[1].data[5] = cpu_to_le32(HCLGE_IMP_ITCM4_ECC_ERR_INT_EN_MASK);
14246d67ee9aSShiju Jose 
14256d67ee9aSShiju Jose 	ret = hclge_cmd_send(&hdev->hw, &desc[0], 2);
14266d67ee9aSShiju Jose 	if (ret)
14276d67ee9aSShiju Jose 		dev_err(dev,
142898da4027SShiju Jose 			"fail(%d) to configure common err interrupts\n", ret);
14296d67ee9aSShiju Jose 
14306d67ee9aSShiju Jose 	return ret;
14316d67ee9aSShiju Jose }
14326d67ee9aSShiju Jose 
hclge_config_ncsi_hw_err_int(struct hclge_dev * hdev,bool en)143398da4027SShiju Jose static int hclge_config_ncsi_hw_err_int(struct hclge_dev *hdev, bool en)
1434bf1faf94SShiju Jose {
1435bf1faf94SShiju Jose 	struct device *dev = &hdev->pdev->dev;
1436bf1faf94SShiju Jose 	struct hclge_desc desc;
1437bf1faf94SShiju Jose 	int ret;
1438bf1faf94SShiju Jose 
1439295ba232SGuangbin Huang 	if (hdev->ae_dev->dev_version < HNAE3_DEVICE_VERSION_V2)
1440bf1faf94SShiju Jose 		return 0;
1441bf1faf94SShiju Jose 
144298da4027SShiju Jose 	/* configure NCSI error interrupts */
1443bf1faf94SShiju Jose 	hclge_cmd_setup_basic_desc(&desc, HCLGE_NCSI_INT_EN, false);
1444bf1faf94SShiju Jose 	if (en)
1445bf1faf94SShiju Jose 		desc.data[0] = cpu_to_le32(HCLGE_NCSI_ERR_INT_EN);
1446bf1faf94SShiju Jose 
1447bf1faf94SShiju Jose 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
1448bf1faf94SShiju Jose 	if (ret)
1449bf1faf94SShiju Jose 		dev_err(dev,
145098da4027SShiju Jose 			"fail(%d) to configure  NCSI error interrupts\n", ret);
1451bf1faf94SShiju Jose 
1452bf1faf94SShiju Jose 	return ret;
1453bf1faf94SShiju Jose }
1454bf1faf94SShiju Jose 
hclge_config_igu_egu_hw_err_int(struct hclge_dev * hdev,bool en)145598da4027SShiju Jose static int hclge_config_igu_egu_hw_err_int(struct hclge_dev *hdev, bool en)
1456bf1faf94SShiju Jose {
1457bf1faf94SShiju Jose 	struct device *dev = &hdev->pdev->dev;
1458bf1faf94SShiju Jose 	struct hclge_desc desc;
1459bf1faf94SShiju Jose 	int ret;
1460bf1faf94SShiju Jose 
146198da4027SShiju Jose 	/* configure IGU,EGU error interrupts */
1462bf1faf94SShiju Jose 	hclge_cmd_setup_basic_desc(&desc, HCLGE_IGU_COMMON_INT_EN, false);
14632867298dSYufeng Mo 	desc.data[0] = cpu_to_le32(HCLGE_IGU_ERR_INT_TYPE);
1464bf1faf94SShiju Jose 	if (en)
14652867298dSYufeng Mo 		desc.data[0] |= cpu_to_le32(HCLGE_IGU_ERR_INT_EN);
1466166b04c3SShiju Jose 
1467bf1faf94SShiju Jose 	desc.data[1] = cpu_to_le32(HCLGE_IGU_ERR_INT_EN_MASK);
1468bf1faf94SShiju Jose 
1469bf1faf94SShiju Jose 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
1470bf1faf94SShiju Jose 	if (ret) {
1471bf1faf94SShiju Jose 		dev_err(dev,
147298da4027SShiju Jose 			"fail(%d) to configure IGU common interrupts\n", ret);
1473bf1faf94SShiju Jose 		return ret;
1474bf1faf94SShiju Jose 	}
1475bf1faf94SShiju Jose 
1476bf1faf94SShiju Jose 	hclge_cmd_setup_basic_desc(&desc, HCLGE_IGU_EGU_TNL_INT_EN, false);
1477bf1faf94SShiju Jose 	if (en)
1478bf1faf94SShiju Jose 		desc.data[0] = cpu_to_le32(HCLGE_IGU_TNL_ERR_INT_EN);
1479166b04c3SShiju Jose 
1480bf1faf94SShiju Jose 	desc.data[1] = cpu_to_le32(HCLGE_IGU_TNL_ERR_INT_EN_MASK);
1481bf1faf94SShiju Jose 
1482bf1faf94SShiju Jose 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
1483bf1faf94SShiju Jose 	if (ret) {
1484bf1faf94SShiju Jose 		dev_err(dev,
148598da4027SShiju Jose 			"fail(%d) to configure IGU-EGU TNL interrupts\n", ret);
1486bf1faf94SShiju Jose 		return ret;
1487bf1faf94SShiju Jose 	}
1488bf1faf94SShiju Jose 
148998da4027SShiju Jose 	ret = hclge_config_ncsi_hw_err_int(hdev, en);
1490bf1faf94SShiju Jose 
1491bf1faf94SShiju Jose 	return ret;
1492bf1faf94SShiju Jose }
1493bf1faf94SShiju Jose 
hclge_config_ppp_error_interrupt(struct hclge_dev * hdev,u32 cmd,bool en)149498da4027SShiju Jose static int hclge_config_ppp_error_interrupt(struct hclge_dev *hdev, u32 cmd,
1495da2d072aSShiju Jose 					    bool en)
1496da2d072aSShiju Jose {
1497da2d072aSShiju Jose 	struct device *dev = &hdev->pdev->dev;
1498da2d072aSShiju Jose 	struct hclge_desc desc[2];
1499da2d072aSShiju Jose 	int ret;
1500da2d072aSShiju Jose 
150198da4027SShiju Jose 	/* configure PPP error interrupts */
1502da2d072aSShiju Jose 	hclge_cmd_setup_basic_desc(&desc[0], cmd, false);
1503d3c69a88SJie Wang 	desc[0].flag |= cpu_to_le16(HCLGE_COMM_CMD_FLAG_NEXT);
1504da2d072aSShiju Jose 	hclge_cmd_setup_basic_desc(&desc[1], cmd, false);
1505da2d072aSShiju Jose 
1506da2d072aSShiju Jose 	if (cmd == HCLGE_PPP_CMD0_INT_CMD) {
1507da2d072aSShiju Jose 		if (en) {
1508da2d072aSShiju Jose 			desc[0].data[0] =
1509da2d072aSShiju Jose 				cpu_to_le32(HCLGE_PPP_MPF_ECC_ERR_INT0_EN);
1510da2d072aSShiju Jose 			desc[0].data[1] =
1511da2d072aSShiju Jose 				cpu_to_le32(HCLGE_PPP_MPF_ECC_ERR_INT1_EN);
15128fc9d3e3SShiju Jose 			desc[0].data[4] = cpu_to_le32(HCLGE_PPP_PF_ERR_INT_EN);
1513da2d072aSShiju Jose 		}
1514166b04c3SShiju Jose 
1515da2d072aSShiju Jose 		desc[1].data[0] =
1516da2d072aSShiju Jose 			cpu_to_le32(HCLGE_PPP_MPF_ECC_ERR_INT0_EN_MASK);
1517da2d072aSShiju Jose 		desc[1].data[1] =
1518da2d072aSShiju Jose 			cpu_to_le32(HCLGE_PPP_MPF_ECC_ERR_INT1_EN_MASK);
1519295ba232SGuangbin Huang 		if (hdev->ae_dev->dev_version >= HNAE3_DEVICE_VERSION_V2)
15208fc9d3e3SShiju Jose 			desc[1].data[2] =
15218fc9d3e3SShiju Jose 				cpu_to_le32(HCLGE_PPP_PF_ERR_INT_EN_MASK);
1522da2d072aSShiju Jose 	} else if (cmd == HCLGE_PPP_CMD1_INT_CMD) {
1523da2d072aSShiju Jose 		if (en) {
1524da2d072aSShiju Jose 			desc[0].data[0] =
1525da2d072aSShiju Jose 				cpu_to_le32(HCLGE_PPP_MPF_ECC_ERR_INT2_EN);
1526da2d072aSShiju Jose 			desc[0].data[1] =
1527da2d072aSShiju Jose 				cpu_to_le32(HCLGE_PPP_MPF_ECC_ERR_INT3_EN);
1528da2d072aSShiju Jose 		}
1529166b04c3SShiju Jose 
1530da2d072aSShiju Jose 		desc[1].data[0] =
1531da2d072aSShiju Jose 				cpu_to_le32(HCLGE_PPP_MPF_ECC_ERR_INT2_EN_MASK);
1532da2d072aSShiju Jose 		desc[1].data[1] =
1533da2d072aSShiju Jose 				cpu_to_le32(HCLGE_PPP_MPF_ECC_ERR_INT3_EN_MASK);
1534da2d072aSShiju Jose 	}
1535da2d072aSShiju Jose 
1536da2d072aSShiju Jose 	ret = hclge_cmd_send(&hdev->hw, &desc[0], 2);
1537da2d072aSShiju Jose 	if (ret)
153898da4027SShiju Jose 		dev_err(dev, "fail(%d) to configure PPP error intr\n", ret);
1539da2d072aSShiju Jose 
1540da2d072aSShiju Jose 	return ret;
1541da2d072aSShiju Jose }
1542da2d072aSShiju Jose 
hclge_config_ppp_hw_err_int(struct hclge_dev * hdev,bool en)154398da4027SShiju Jose static int hclge_config_ppp_hw_err_int(struct hclge_dev *hdev, bool en)
1544da2d072aSShiju Jose {
1545da2d072aSShiju Jose 	int ret;
1546da2d072aSShiju Jose 
154798da4027SShiju Jose 	ret = hclge_config_ppp_error_interrupt(hdev, HCLGE_PPP_CMD0_INT_CMD,
1548da2d072aSShiju Jose 					       en);
1549da2d072aSShiju Jose 	if (ret)
155098da4027SShiju Jose 		return ret;
155198da4027SShiju Jose 
155298da4027SShiju Jose 	ret = hclge_config_ppp_error_interrupt(hdev, HCLGE_PPP_CMD1_INT_CMD,
155398da4027SShiju Jose 					       en);
1554da2d072aSShiju Jose 
1555da2d072aSShiju Jose 	return ret;
1556da2d072aSShiju Jose }
1557da2d072aSShiju Jose 
hclge_config_tm_hw_err_int(struct hclge_dev * hdev,bool en)1558f3fa4a94SShiju Jose static int hclge_config_tm_hw_err_int(struct hclge_dev *hdev, bool en)
155901865a50SShiju Jose {
156001865a50SShiju Jose 	struct device *dev = &hdev->pdev->dev;
156101865a50SShiju Jose 	struct hclge_desc desc;
156201865a50SShiju Jose 	int ret;
156301865a50SShiju Jose 
156498da4027SShiju Jose 	/* configure TM SCH hw errors */
156501865a50SShiju Jose 	hclge_cmd_setup_basic_desc(&desc, HCLGE_TM_SCH_ECC_INT_EN, false);
156601865a50SShiju Jose 	if (en)
156701865a50SShiju Jose 		desc.data[0] = cpu_to_le32(HCLGE_TM_SCH_ECC_ERR_INT_EN);
156801865a50SShiju Jose 
156901865a50SShiju Jose 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
157001865a50SShiju Jose 	if (ret) {
157198da4027SShiju Jose 		dev_err(dev, "fail(%d) to configure TM SCH errors\n", ret);
157201865a50SShiju Jose 		return ret;
157301865a50SShiju Jose 	}
157401865a50SShiju Jose 
157598da4027SShiju Jose 	/* configure TM QCN hw errors */
1576d914971dSJiaran Zhang 	hclge_cmd_setup_basic_desc(&desc, HCLGE_TM_QCN_MEM_INT_CFG, false);
157760484103SJiaran Zhang 	desc.data[0] = cpu_to_le32(HCLGE_TM_QCN_ERR_INT_TYPE);
157860484103SJiaran Zhang 	if (en) {
157960484103SJiaran Zhang 		desc.data[0] |= cpu_to_le32(HCLGE_TM_QCN_FIFO_INT_EN);
158001865a50SShiju Jose 		desc.data[1] = cpu_to_le32(HCLGE_TM_QCN_MEM_ERR_INT_EN);
158160484103SJiaran Zhang 	}
158201865a50SShiju Jose 
158301865a50SShiju Jose 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
158401865a50SShiju Jose 	if (ret)
158501865a50SShiju Jose 		dev_err(dev,
158698da4027SShiju Jose 			"fail(%d) to configure TM QCN mem errors\n", ret);
158701865a50SShiju Jose 
158801865a50SShiju Jose 	return ret;
158901865a50SShiju Jose }
159001865a50SShiju Jose 
hclge_config_mac_err_int(struct hclge_dev * hdev,bool en)15917838f908SShiju Jose static int hclge_config_mac_err_int(struct hclge_dev *hdev, bool en)
15927838f908SShiju Jose {
15937838f908SShiju Jose 	struct device *dev = &hdev->pdev->dev;
15947838f908SShiju Jose 	struct hclge_desc desc;
15957838f908SShiju Jose 	int ret;
15967838f908SShiju Jose 
15977838f908SShiju Jose 	/* configure MAC common error interrupts */
15987838f908SShiju Jose 	hclge_cmd_setup_basic_desc(&desc, HCLGE_MAC_COMMON_INT_EN, false);
15997838f908SShiju Jose 	if (en)
16007838f908SShiju Jose 		desc.data[0] = cpu_to_le32(HCLGE_MAC_COMMON_ERR_INT_EN);
16017838f908SShiju Jose 
16027838f908SShiju Jose 	desc.data[1] = cpu_to_le32(HCLGE_MAC_COMMON_ERR_INT_EN_MASK);
16037838f908SShiju Jose 
16047838f908SShiju Jose 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
16057838f908SShiju Jose 	if (ret)
16067838f908SShiju Jose 		dev_err(dev,
16077838f908SShiju Jose 			"fail(%d) to configure MAC COMMON error intr\n", ret);
16087838f908SShiju Jose 
16097838f908SShiju Jose 	return ret;
16107838f908SShiju Jose }
16117838f908SShiju Jose 
hclge_config_mac_tnl_int(struct hclge_dev * hdev,bool en)1612a6345787SWeihang Li int hclge_config_mac_tnl_int(struct hclge_dev *hdev, bool en)
1613a6345787SWeihang Li {
1614a6345787SWeihang Li 	struct hclge_desc desc;
1615a6345787SWeihang Li 
1616a6345787SWeihang Li 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_MAC_TNL_INT_EN, false);
1617a6345787SWeihang Li 	if (en)
1618a6345787SWeihang Li 		desc.data[0] = cpu_to_le32(HCLGE_MAC_TNL_INT_EN);
1619a6345787SWeihang Li 	else
1620a6345787SWeihang Li 		desc.data[0] = 0;
1621a6345787SWeihang Li 
1622a6345787SWeihang Li 	desc.data[1] = cpu_to_le32(HCLGE_MAC_TNL_INT_EN_MASK);
1623a6345787SWeihang Li 
1624a6345787SWeihang Li 	return hclge_cmd_send(&hdev->hw, &desc, 1);
1625a6345787SWeihang Li }
1626a6345787SWeihang Li 
hclge_config_ppu_error_interrupts(struct hclge_dev * hdev,u32 cmd,bool en)1627f69b10b3SShiju Jose static int hclge_config_ppu_error_interrupts(struct hclge_dev *hdev, u32 cmd,
1628f69b10b3SShiju Jose 					     bool en)
1629f69b10b3SShiju Jose {
1630f69b10b3SShiju Jose 	struct device *dev = &hdev->pdev->dev;
1631f69b10b3SShiju Jose 	struct hclge_desc desc[2];
16329b2f3477SWeihang Li 	int desc_num = 1;
1633f69b10b3SShiju Jose 	int ret;
1634f69b10b3SShiju Jose 
1635f69b10b3SShiju Jose 	/* configure PPU error interrupts */
1636f69b10b3SShiju Jose 	if (cmd == HCLGE_PPU_MPF_ECC_INT_CMD) {
1637f69b10b3SShiju Jose 		hclge_cmd_setup_basic_desc(&desc[0], cmd, false);
1638d3c69a88SJie Wang 		desc[0].flag |= cpu_to_le16(HCLGE_COMM_CMD_FLAG_NEXT);
1639f69b10b3SShiju Jose 		hclge_cmd_setup_basic_desc(&desc[1], cmd, false);
1640f69b10b3SShiju Jose 		if (en) {
164182f7d057SGuojia Liao 			desc[0].data[0] =
164282f7d057SGuojia Liao 				cpu_to_le32(HCLGE_PPU_MPF_ABNORMAL_INT0_EN);
164382f7d057SGuojia Liao 			desc[0].data[1] =
164482f7d057SGuojia Liao 				cpu_to_le32(HCLGE_PPU_MPF_ABNORMAL_INT1_EN);
164582f7d057SGuojia Liao 			desc[1].data[3] =
164682f7d057SGuojia Liao 				cpu_to_le32(HCLGE_PPU_MPF_ABNORMAL_INT3_EN);
164782f7d057SGuojia Liao 			desc[1].data[4] =
164882f7d057SGuojia Liao 				cpu_to_le32(HCLGE_PPU_MPF_ABNORMAL_INT2_EN);
1649f69b10b3SShiju Jose 		}
1650f69b10b3SShiju Jose 
165182f7d057SGuojia Liao 		desc[1].data[0] =
165282f7d057SGuojia Liao 			cpu_to_le32(HCLGE_PPU_MPF_ABNORMAL_INT0_EN_MASK);
165382f7d057SGuojia Liao 		desc[1].data[1] =
165482f7d057SGuojia Liao 			cpu_to_le32(HCLGE_PPU_MPF_ABNORMAL_INT1_EN_MASK);
165582f7d057SGuojia Liao 		desc[1].data[2] =
165682f7d057SGuojia Liao 			cpu_to_le32(HCLGE_PPU_MPF_ABNORMAL_INT2_EN_MASK);
165782f7d057SGuojia Liao 		desc[1].data[3] |=
165882f7d057SGuojia Liao 			cpu_to_le32(HCLGE_PPU_MPF_ABNORMAL_INT3_EN_MASK);
16599b2f3477SWeihang Li 		desc_num = 2;
1660f69b10b3SShiju Jose 	} else if (cmd == HCLGE_PPU_MPF_OTHER_INT_CMD) {
1661f69b10b3SShiju Jose 		hclge_cmd_setup_basic_desc(&desc[0], cmd, false);
1662f69b10b3SShiju Jose 		if (en)
166382f7d057SGuojia Liao 			desc[0].data[0] =
166482f7d057SGuojia Liao 				cpu_to_le32(HCLGE_PPU_MPF_ABNORMAL_INT2_EN2);
1665f69b10b3SShiju Jose 
166682f7d057SGuojia Liao 		desc[0].data[2] =
166782f7d057SGuojia Liao 			cpu_to_le32(HCLGE_PPU_MPF_ABNORMAL_INT2_EN2_MASK);
1668f69b10b3SShiju Jose 	} else if (cmd == HCLGE_PPU_PF_OTHER_INT_CMD) {
1669f69b10b3SShiju Jose 		hclge_cmd_setup_basic_desc(&desc[0], cmd, false);
1670f69b10b3SShiju Jose 		if (en)
167182f7d057SGuojia Liao 			desc[0].data[0] =
167282f7d057SGuojia Liao 				cpu_to_le32(HCLGE_PPU_PF_ABNORMAL_INT_EN);
1673f69b10b3SShiju Jose 
167482f7d057SGuojia Liao 		desc[0].data[2] =
167582f7d057SGuojia Liao 			cpu_to_le32(HCLGE_PPU_PF_ABNORMAL_INT_EN_MASK);
1676f69b10b3SShiju Jose 	} else {
1677f69b10b3SShiju Jose 		dev_err(dev, "Invalid cmd to configure PPU error interrupts\n");
1678f69b10b3SShiju Jose 		return -EINVAL;
1679f69b10b3SShiju Jose 	}
1680f69b10b3SShiju Jose 
16819b2f3477SWeihang Li 	ret = hclge_cmd_send(&hdev->hw, &desc[0], desc_num);
1682f69b10b3SShiju Jose 
1683f69b10b3SShiju Jose 	return ret;
1684f69b10b3SShiju Jose }
1685f69b10b3SShiju Jose 
hclge_config_ppu_hw_err_int(struct hclge_dev * hdev,bool en)1686f69b10b3SShiju Jose static int hclge_config_ppu_hw_err_int(struct hclge_dev *hdev, bool en)
1687f69b10b3SShiju Jose {
1688f69b10b3SShiju Jose 	struct device *dev = &hdev->pdev->dev;
1689f69b10b3SShiju Jose 	int ret;
1690f69b10b3SShiju Jose 
1691f69b10b3SShiju Jose 	ret = hclge_config_ppu_error_interrupts(hdev, HCLGE_PPU_MPF_ECC_INT_CMD,
1692f69b10b3SShiju Jose 						en);
1693f69b10b3SShiju Jose 	if (ret) {
1694f69b10b3SShiju Jose 		dev_err(dev, "fail(%d) to configure PPU MPF ECC error intr\n",
1695f69b10b3SShiju Jose 			ret);
1696f69b10b3SShiju Jose 		return ret;
1697f69b10b3SShiju Jose 	}
1698f69b10b3SShiju Jose 
1699f69b10b3SShiju Jose 	ret = hclge_config_ppu_error_interrupts(hdev,
1700f69b10b3SShiju Jose 						HCLGE_PPU_MPF_OTHER_INT_CMD,
1701f69b10b3SShiju Jose 						en);
1702f69b10b3SShiju Jose 	if (ret) {
1703f69b10b3SShiju Jose 		dev_err(dev, "fail(%d) to configure PPU MPF other intr\n", ret);
1704f69b10b3SShiju Jose 		return ret;
1705f69b10b3SShiju Jose 	}
1706f69b10b3SShiju Jose 
1707f69b10b3SShiju Jose 	ret = hclge_config_ppu_error_interrupts(hdev,
1708f69b10b3SShiju Jose 						HCLGE_PPU_PF_OTHER_INT_CMD, en);
1709f69b10b3SShiju Jose 	if (ret)
1710f69b10b3SShiju Jose 		dev_err(dev, "fail(%d) to configure PPU PF error interrupts\n",
1711f69b10b3SShiju Jose 			ret);
1712f69b10b3SShiju Jose 	return ret;
1713f69b10b3SShiju Jose }
1714f69b10b3SShiju Jose 
hclge_config_ssu_hw_err_int(struct hclge_dev * hdev,bool en)1715c3529177SShiju Jose static int hclge_config_ssu_hw_err_int(struct hclge_dev *hdev, bool en)
1716c3529177SShiju Jose {
1717c3529177SShiju Jose 	struct device *dev = &hdev->pdev->dev;
1718c3529177SShiju Jose 	struct hclge_desc desc[2];
1719c3529177SShiju Jose 	int ret;
1720c3529177SShiju Jose 
1721c3529177SShiju Jose 	/* configure SSU ecc error interrupts */
1722c3529177SShiju Jose 	hclge_cmd_setup_basic_desc(&desc[0], HCLGE_SSU_ECC_INT_CMD, false);
1723d3c69a88SJie Wang 	desc[0].flag |= cpu_to_le16(HCLGE_COMM_CMD_FLAG_NEXT);
1724c3529177SShiju Jose 	hclge_cmd_setup_basic_desc(&desc[1], HCLGE_SSU_ECC_INT_CMD, false);
1725c3529177SShiju Jose 	if (en) {
1726c3529177SShiju Jose 		desc[0].data[0] = cpu_to_le32(HCLGE_SSU_1BIT_ECC_ERR_INT_EN);
1727c3529177SShiju Jose 		desc[0].data[1] =
1728c3529177SShiju Jose 			cpu_to_le32(HCLGE_SSU_MULTI_BIT_ECC_ERR_INT_EN);
1729c3529177SShiju Jose 		desc[0].data[4] = cpu_to_le32(HCLGE_SSU_BIT32_ECC_ERR_INT_EN);
1730c3529177SShiju Jose 	}
1731c3529177SShiju Jose 
1732c3529177SShiju Jose 	desc[1].data[0] = cpu_to_le32(HCLGE_SSU_1BIT_ECC_ERR_INT_EN_MASK);
1733c3529177SShiju Jose 	desc[1].data[1] = cpu_to_le32(HCLGE_SSU_MULTI_BIT_ECC_ERR_INT_EN_MASK);
1734c3529177SShiju Jose 	desc[1].data[2] = cpu_to_le32(HCLGE_SSU_BIT32_ECC_ERR_INT_EN_MASK);
1735c3529177SShiju Jose 
1736c3529177SShiju Jose 	ret = hclge_cmd_send(&hdev->hw, &desc[0], 2);
1737c3529177SShiju Jose 	if (ret) {
1738c3529177SShiju Jose 		dev_err(dev,
1739c3529177SShiju Jose 			"fail(%d) to configure SSU ECC error interrupt\n", ret);
1740c3529177SShiju Jose 		return ret;
1741c3529177SShiju Jose 	}
1742c3529177SShiju Jose 
1743c3529177SShiju Jose 	/* configure SSU common error interrupts */
1744c3529177SShiju Jose 	hclge_cmd_setup_basic_desc(&desc[0], HCLGE_SSU_COMMON_INT_CMD, false);
1745d3c69a88SJie Wang 	desc[0].flag |= cpu_to_le16(HCLGE_COMM_CMD_FLAG_NEXT);
1746c3529177SShiju Jose 	hclge_cmd_setup_basic_desc(&desc[1], HCLGE_SSU_COMMON_INT_CMD, false);
1747c3529177SShiju Jose 
1748c3529177SShiju Jose 	if (en) {
1749295ba232SGuangbin Huang 		if (hdev->ae_dev->dev_version >= HNAE3_DEVICE_VERSION_V2)
1750c3529177SShiju Jose 			desc[0].data[0] =
1751c3529177SShiju Jose 				cpu_to_le32(HCLGE_SSU_COMMON_INT_EN);
1752c3529177SShiju Jose 		else
1753c3529177SShiju Jose 			desc[0].data[0] =
1754c3529177SShiju Jose 				cpu_to_le32(HCLGE_SSU_COMMON_INT_EN & ~BIT(5));
1755c3529177SShiju Jose 		desc[0].data[1] = cpu_to_le32(HCLGE_SSU_PORT_BASED_ERR_INT_EN);
1756c3529177SShiju Jose 		desc[0].data[2] =
1757c3529177SShiju Jose 			cpu_to_le32(HCLGE_SSU_FIFO_OVERFLOW_ERR_INT_EN);
1758c3529177SShiju Jose 	}
1759c3529177SShiju Jose 
1760c3529177SShiju Jose 	desc[1].data[0] = cpu_to_le32(HCLGE_SSU_COMMON_INT_EN_MASK |
1761c3529177SShiju Jose 				HCLGE_SSU_PORT_BASED_ERR_INT_EN_MASK);
1762c3529177SShiju Jose 	desc[1].data[1] = cpu_to_le32(HCLGE_SSU_FIFO_OVERFLOW_ERR_INT_EN_MASK);
1763c3529177SShiju Jose 
1764c3529177SShiju Jose 	ret = hclge_cmd_send(&hdev->hw, &desc[0], 2);
1765c3529177SShiju Jose 	if (ret)
1766c3529177SShiju Jose 		dev_err(dev,
1767c3529177SShiju Jose 			"fail(%d) to configure SSU COMMON error intr\n", ret);
1768c3529177SShiju Jose 
1769c3529177SShiju Jose 	return ret;
1770c3529177SShiju Jose }
1771c3529177SShiju Jose 
1772987b4ae7SWeihang Li /* hclge_query_bd_num: query number of buffer descriptors
1773987b4ae7SWeihang Li  * @hdev: pointer to struct hclge_dev
1774987b4ae7SWeihang Li  * @is_ras: true for ras, false for msix
1775987b4ae7SWeihang Li  * @mpf_bd_num: number of main PF interrupt buffer descriptors
1776987b4ae7SWeihang Li  * @pf_bd_num: number of not main PF interrupt buffer descriptors
1777987b4ae7SWeihang Li  *
1778987b4ae7SWeihang Li  * This function querys number of mpf and pf buffer descriptors.
1779987b4ae7SWeihang Li  */
hclge_query_bd_num(struct hclge_dev * hdev,bool is_ras,u32 * mpf_bd_num,u32 * pf_bd_num)1780987b4ae7SWeihang Li static int hclge_query_bd_num(struct hclge_dev *hdev, bool is_ras,
1781cad8dfe8SPeng Li 			      u32 *mpf_bd_num, u32 *pf_bd_num)
1782987b4ae7SWeihang Li {
1783987b4ae7SWeihang Li 	struct device *dev = &hdev->pdev->dev;
1784987b4ae7SWeihang Li 	u32 mpf_min_bd_num, pf_min_bd_num;
1785987b4ae7SWeihang Li 	enum hclge_opcode_type opcode;
1786987b4ae7SWeihang Li 	struct hclge_desc desc_bd;
1787987b4ae7SWeihang Li 	int ret;
1788987b4ae7SWeihang Li 
1789987b4ae7SWeihang Li 	if (is_ras) {
1790987b4ae7SWeihang Li 		opcode = HCLGE_QUERY_RAS_INT_STS_BD_NUM;
1791987b4ae7SWeihang Li 		mpf_min_bd_num = HCLGE_MPF_RAS_INT_MIN_BD_NUM;
1792987b4ae7SWeihang Li 		pf_min_bd_num = HCLGE_PF_RAS_INT_MIN_BD_NUM;
1793987b4ae7SWeihang Li 	} else {
1794987b4ae7SWeihang Li 		opcode = HCLGE_QUERY_MSIX_INT_STS_BD_NUM;
1795987b4ae7SWeihang Li 		mpf_min_bd_num = HCLGE_MPF_MSIX_INT_MIN_BD_NUM;
1796987b4ae7SWeihang Li 		pf_min_bd_num = HCLGE_PF_MSIX_INT_MIN_BD_NUM;
1797987b4ae7SWeihang Li 	}
1798987b4ae7SWeihang Li 
1799987b4ae7SWeihang Li 	hclge_cmd_setup_basic_desc(&desc_bd, opcode, true);
1800987b4ae7SWeihang Li 	ret = hclge_cmd_send(&hdev->hw, &desc_bd, 1);
1801987b4ae7SWeihang Li 	if (ret) {
1802987b4ae7SWeihang Li 		dev_err(dev, "fail(%d) to query msix int status bd num\n",
1803987b4ae7SWeihang Li 			ret);
1804987b4ae7SWeihang Li 		return ret;
1805987b4ae7SWeihang Li 	}
1806987b4ae7SWeihang Li 
1807987b4ae7SWeihang Li 	*mpf_bd_num = le32_to_cpu(desc_bd.data[0]);
1808987b4ae7SWeihang Li 	*pf_bd_num = le32_to_cpu(desc_bd.data[1]);
1809987b4ae7SWeihang Li 	if (*mpf_bd_num < mpf_min_bd_num || *pf_bd_num < pf_min_bd_num) {
1810cad8dfe8SPeng Li 		dev_err(dev, "Invalid bd num: mpf(%u), pf(%u)\n",
1811987b4ae7SWeihang Li 			*mpf_bd_num, *pf_bd_num);
1812987b4ae7SWeihang Li 		return -EINVAL;
1813987b4ae7SWeihang Li 	}
1814987b4ae7SWeihang Li 
1815987b4ae7SWeihang Li 	return 0;
1816987b4ae7SWeihang Li }
1817987b4ae7SWeihang Li 
1818332fbf57SShiju Jose /* hclge_handle_mpf_ras_error: handle all main PF RAS errors
1819332fbf57SShiju Jose  * @hdev: pointer to struct hclge_dev
1820332fbf57SShiju Jose  * @desc: descriptor for describing the command
1821332fbf57SShiju Jose  * @num:  number of extended command structures
1822332fbf57SShiju Jose  *
1823332fbf57SShiju Jose  * This function handles all the main PF RAS errors in the
1824332fbf57SShiju Jose  * hw register/s using command.
1825332fbf57SShiju Jose  */
hclge_handle_mpf_ras_error(struct hclge_dev * hdev,struct hclge_desc * desc,int num)1826332fbf57SShiju Jose static int hclge_handle_mpf_ras_error(struct hclge_dev *hdev,
1827332fbf57SShiju Jose 				      struct hclge_desc *desc,
1828332fbf57SShiju Jose 				      int num)
1829332fbf57SShiju Jose {
1830332fbf57SShiju Jose 	struct hnae3_ae_dev *ae_dev = hdev->ae_dev;
1831332fbf57SShiju Jose 	struct device *dev = &hdev->pdev->dev;
1832332fbf57SShiju Jose 	__le32 *desc_data;
1833332fbf57SShiju Jose 	u32 status;
1834332fbf57SShiju Jose 	int ret;
1835332fbf57SShiju Jose 
1836332fbf57SShiju Jose 	/* query all main PF RAS errors */
1837332fbf57SShiju Jose 	hclge_cmd_setup_basic_desc(&desc[0], HCLGE_QUERY_CLEAR_MPF_RAS_INT,
1838332fbf57SShiju Jose 				   true);
1839332fbf57SShiju Jose 	ret = hclge_cmd_send(&hdev->hw, &desc[0], num);
1840332fbf57SShiju Jose 	if (ret) {
1841332fbf57SShiju Jose 		dev_err(dev, "query all mpf ras int cmd failed (%d)\n", ret);
1842332fbf57SShiju Jose 		return ret;
1843332fbf57SShiju Jose 	}
1844332fbf57SShiju Jose 
1845332fbf57SShiju Jose 	/* log HNS common errors */
1846332fbf57SShiju Jose 	status = le32_to_cpu(desc[0].data[0]);
1847a955d71dSShiju Jose 	if (status)
1848a955d71dSShiju Jose 		hclge_log_error(dev, "IMP_TCM_ECC_INT_STS",
1849a955d71dSShiju Jose 				&hclge_imp_tcm_ecc_int[0], status,
1850a955d71dSShiju Jose 				&ae_dev->hw_err_reset_req);
1851332fbf57SShiju Jose 
1852332fbf57SShiju Jose 	status = le32_to_cpu(desc[0].data[1]);
1853a955d71dSShiju Jose 	if (status)
1854a955d71dSShiju Jose 		hclge_log_error(dev, "CMDQ_MEM_ECC_INT_STS",
1855a955d71dSShiju Jose 				&hclge_cmdq_nic_mem_ecc_int[0], status,
1856a955d71dSShiju Jose 				&ae_dev->hw_err_reset_req);
1857332fbf57SShiju Jose 
1858123297b7SShiju Jose 	if ((le32_to_cpu(desc[0].data[2])) & BIT(0))
1859332fbf57SShiju Jose 		dev_warn(dev, "imp_rd_data_poison_err found\n");
1860332fbf57SShiju Jose 
1861332fbf57SShiju Jose 	status = le32_to_cpu(desc[0].data[3]);
1862a955d71dSShiju Jose 	if (status)
1863a955d71dSShiju Jose 		hclge_log_error(dev, "TQP_INT_ECC_INT_STS",
1864a955d71dSShiju Jose 				&hclge_tqp_int_ecc_int[0], status,
1865a955d71dSShiju Jose 				&ae_dev->hw_err_reset_req);
1866332fbf57SShiju Jose 
1867332fbf57SShiju Jose 	status = le32_to_cpu(desc[0].data[4]);
1868a955d71dSShiju Jose 	if (status)
1869a955d71dSShiju Jose 		hclge_log_error(dev, "MSIX_ECC_INT_STS",
1870a955d71dSShiju Jose 				&hclge_msix_sram_ecc_int[0], status,
1871a955d71dSShiju Jose 				&ae_dev->hw_err_reset_req);
1872332fbf57SShiju Jose 
1873c3529177SShiju Jose 	/* log SSU(Storage Switch Unit) errors */
1874c3529177SShiju Jose 	desc_data = (__le32 *)&desc[2];
1875c3529177SShiju Jose 	status = le32_to_cpu(*(desc_data + 2));
1876a955d71dSShiju Jose 	if (status)
1877a955d71dSShiju Jose 		hclge_log_error(dev, "SSU_ECC_MULTI_BIT_INT_0",
1878a955d71dSShiju Jose 				&hclge_ssu_mem_ecc_err_int[0], status,
1879a955d71dSShiju Jose 				&ae_dev->hw_err_reset_req);
1880c3529177SShiju Jose 
1881c3529177SShiju Jose 	status = le32_to_cpu(*(desc_data + 3)) & BIT(0);
1882c3529177SShiju Jose 	if (status) {
1883ac887be5SXiaofei Tan 		dev_err(dev, "SSU_ECC_MULTI_BIT_INT_1 ssu_mem32_ecc_mbit_err found [error status=0x%x]\n",
18843d69e59fSWeihang Li 			status);
1885123297b7SShiju Jose 		set_bit(HNAE3_GLOBAL_RESET, &ae_dev->hw_err_reset_req);
1886c3529177SShiju Jose 	}
1887c3529177SShiju Jose 
1888c3529177SShiju Jose 	status = le32_to_cpu(*(desc_data + 4)) & HCLGE_SSU_COMMON_ERR_INT_MASK;
1889a955d71dSShiju Jose 	if (status)
1890a955d71dSShiju Jose 		hclge_log_error(dev, "SSU_COMMON_ERR_INT",
1891a955d71dSShiju Jose 				&hclge_ssu_com_err_int[0], status,
1892a955d71dSShiju Jose 				&ae_dev->hw_err_reset_req);
1893c3529177SShiju Jose 
1894332fbf57SShiju Jose 	/* log IGU(Ingress Unit) errors */
1895332fbf57SShiju Jose 	desc_data = (__le32 *)&desc[3];
1896332fbf57SShiju Jose 	status = le32_to_cpu(*desc_data) & HCLGE_IGU_INT_MASK;
1897a955d71dSShiju Jose 	if (status)
1898a955d71dSShiju Jose 		hclge_log_error(dev, "IGU_INT_STS",
1899a955d71dSShiju Jose 				&hclge_igu_int[0], status,
1900a955d71dSShiju Jose 				&ae_dev->hw_err_reset_req);
1901332fbf57SShiju Jose 
1902332fbf57SShiju Jose 	/* log PPP(Programmable Packet Process) errors */
1903332fbf57SShiju Jose 	desc_data = (__le32 *)&desc[4];
1904332fbf57SShiju Jose 	status = le32_to_cpu(*(desc_data + 1));
1905a955d71dSShiju Jose 	if (status)
1906332fbf57SShiju Jose 		hclge_log_error(dev, "PPP_MPF_ABNORMAL_INT_ST1",
1907a955d71dSShiju Jose 				&hclge_ppp_mpf_abnormal_int_st1[0], status,
1908a955d71dSShiju Jose 				&ae_dev->hw_err_reset_req);
1909332fbf57SShiju Jose 
1910332fbf57SShiju Jose 	status = le32_to_cpu(*(desc_data + 3)) & HCLGE_PPP_MPF_INT_ST3_MASK;
1911a955d71dSShiju Jose 	if (status)
1912332fbf57SShiju Jose 		hclge_log_error(dev, "PPP_MPF_ABNORMAL_INT_ST3",
1913a955d71dSShiju Jose 				&hclge_ppp_mpf_abnormal_int_st3[0], status,
1914a955d71dSShiju Jose 				&ae_dev->hw_err_reset_req);
1915332fbf57SShiju Jose 
1916f69b10b3SShiju Jose 	/* log PPU(RCB) errors */
1917f69b10b3SShiju Jose 	desc_data = (__le32 *)&desc[5];
1918f69b10b3SShiju Jose 	status = le32_to_cpu(*(desc_data + 1));
1919f69b10b3SShiju Jose 	if (status) {
1920ac887be5SXiaofei Tan 		dev_err(dev,
1921ac887be5SXiaofei Tan 			"PPU_MPF_ABNORMAL_INT_ST1 rpu_rx_pkt_ecc_mbit_err found\n");
1922123297b7SShiju Jose 		set_bit(HNAE3_GLOBAL_RESET, &ae_dev->hw_err_reset_req);
1923f69b10b3SShiju Jose 	}
1924f69b10b3SShiju Jose 
1925f69b10b3SShiju Jose 	status = le32_to_cpu(*(desc_data + 2));
1926a955d71dSShiju Jose 	if (status)
1927f69b10b3SShiju Jose 		hclge_log_error(dev, "PPU_MPF_ABNORMAL_INT_ST2",
1928a955d71dSShiju Jose 				&hclge_ppu_mpf_abnormal_int_st2[0], status,
1929a955d71dSShiju Jose 				&ae_dev->hw_err_reset_req);
1930f69b10b3SShiju Jose 
1931f69b10b3SShiju Jose 	status = le32_to_cpu(*(desc_data + 3)) & HCLGE_PPU_MPF_INT_ST3_MASK;
1932a955d71dSShiju Jose 	if (status)
1933f69b10b3SShiju Jose 		hclge_log_error(dev, "PPU_MPF_ABNORMAL_INT_ST3",
1934a955d71dSShiju Jose 				&hclge_ppu_mpf_abnormal_int_st3[0], status,
1935a955d71dSShiju Jose 				&ae_dev->hw_err_reset_req);
1936f69b10b3SShiju Jose 
1937332fbf57SShiju Jose 	/* log TM(Traffic Manager) errors */
1938332fbf57SShiju Jose 	desc_data = (__le32 *)&desc[6];
1939332fbf57SShiju Jose 	status = le32_to_cpu(*desc_data);
1940a955d71dSShiju Jose 	if (status)
1941a955d71dSShiju Jose 		hclge_log_error(dev, "TM_SCH_RINT",
1942a955d71dSShiju Jose 				&hclge_tm_sch_rint[0], status,
1943a955d71dSShiju Jose 				&ae_dev->hw_err_reset_req);
1944332fbf57SShiju Jose 
1945332fbf57SShiju Jose 	/* log QCN(Quantized Congestion Control) errors */
1946332fbf57SShiju Jose 	desc_data = (__le32 *)&desc[7];
1947332fbf57SShiju Jose 	status = le32_to_cpu(*desc_data) & HCLGE_QCN_FIFO_INT_MASK;
1948a955d71dSShiju Jose 	if (status)
1949a955d71dSShiju Jose 		hclge_log_error(dev, "QCN_FIFO_RINT",
1950a955d71dSShiju Jose 				&hclge_qcn_fifo_rint[0], status,
1951a955d71dSShiju Jose 				&ae_dev->hw_err_reset_req);
1952332fbf57SShiju Jose 
1953332fbf57SShiju Jose 	status = le32_to_cpu(*(desc_data + 1)) & HCLGE_QCN_ECC_INT_MASK;
1954a955d71dSShiju Jose 	if (status)
1955a955d71dSShiju Jose 		hclge_log_error(dev, "QCN_ECC_RINT",
1956a955d71dSShiju Jose 				&hclge_qcn_ecc_rint[0], status,
1957a955d71dSShiju Jose 				&ae_dev->hw_err_reset_req);
1958332fbf57SShiju Jose 
1959332fbf57SShiju Jose 	/* log NCSI errors */
1960332fbf57SShiju Jose 	desc_data = (__le32 *)&desc[9];
1961332fbf57SShiju Jose 	status = le32_to_cpu(*desc_data) & HCLGE_NCSI_ECC_INT_MASK;
1962a955d71dSShiju Jose 	if (status)
1963a955d71dSShiju Jose 		hclge_log_error(dev, "NCSI_ECC_INT_RPT",
1964a955d71dSShiju Jose 				&hclge_ncsi_err_int[0], status,
1965a955d71dSShiju Jose 				&ae_dev->hw_err_reset_req);
1966332fbf57SShiju Jose 
1967332fbf57SShiju Jose 	/* clear all main PF RAS errors */
1968d3c69a88SJie Wang 	hclge_comm_cmd_reuse_desc(&desc[0], false);
1969332fbf57SShiju Jose 	ret = hclge_cmd_send(&hdev->hw, &desc[0], num);
1970332fbf57SShiju Jose 	if (ret)
1971332fbf57SShiju Jose 		dev_err(dev, "clear all mpf ras int cmd failed (%d)\n", ret);
1972332fbf57SShiju Jose 
1973332fbf57SShiju Jose 	return ret;
1974332fbf57SShiju Jose }
1975332fbf57SShiju Jose 
1976332fbf57SShiju Jose /* hclge_handle_pf_ras_error: handle all PF RAS errors
1977332fbf57SShiju Jose  * @hdev: pointer to struct hclge_dev
1978332fbf57SShiju Jose  * @desc: descriptor for describing the command
1979332fbf57SShiju Jose  * @num:  number of extended command structures
1980332fbf57SShiju Jose  *
1981332fbf57SShiju Jose  * This function handles all the PF RAS errors in the
19829c657cbcSPeng Li  * hw registers using command.
1983332fbf57SShiju Jose  */
hclge_handle_pf_ras_error(struct hclge_dev * hdev,struct hclge_desc * desc,int num)1984332fbf57SShiju Jose static int hclge_handle_pf_ras_error(struct hclge_dev *hdev,
1985332fbf57SShiju Jose 				     struct hclge_desc *desc,
1986332fbf57SShiju Jose 				     int num)
1987332fbf57SShiju Jose {
1988c3529177SShiju Jose 	struct hnae3_ae_dev *ae_dev = hdev->ae_dev;
1989332fbf57SShiju Jose 	struct device *dev = &hdev->pdev->dev;
1990332fbf57SShiju Jose 	__le32 *desc_data;
1991332fbf57SShiju Jose 	u32 status;
1992332fbf57SShiju Jose 	int ret;
1993332fbf57SShiju Jose 
1994332fbf57SShiju Jose 	/* query all PF RAS errors */
1995332fbf57SShiju Jose 	hclge_cmd_setup_basic_desc(&desc[0], HCLGE_QUERY_CLEAR_PF_RAS_INT,
1996332fbf57SShiju Jose 				   true);
1997332fbf57SShiju Jose 	ret = hclge_cmd_send(&hdev->hw, &desc[0], num);
1998332fbf57SShiju Jose 	if (ret) {
1999332fbf57SShiju Jose 		dev_err(dev, "query all pf ras int cmd failed (%d)\n", ret);
2000332fbf57SShiju Jose 		return ret;
2001332fbf57SShiju Jose 	}
2002332fbf57SShiju Jose 
2003c3529177SShiju Jose 	/* log SSU(Storage Switch Unit) errors */
2004c3529177SShiju Jose 	status = le32_to_cpu(desc[0].data[0]);
2005a955d71dSShiju Jose 	if (status)
2006a955d71dSShiju Jose 		hclge_log_error(dev, "SSU_PORT_BASED_ERR_INT",
2007a955d71dSShiju Jose 				&hclge_ssu_port_based_err_int[0], status,
2008a955d71dSShiju Jose 				&ae_dev->hw_err_reset_req);
2009c3529177SShiju Jose 
2010c3529177SShiju Jose 	status = le32_to_cpu(desc[0].data[1]);
2011a955d71dSShiju Jose 	if (status)
2012a955d71dSShiju Jose 		hclge_log_error(dev, "SSU_FIFO_OVERFLOW_INT",
2013a955d71dSShiju Jose 				&hclge_ssu_fifo_overflow_int[0], status,
2014a955d71dSShiju Jose 				&ae_dev->hw_err_reset_req);
2015c3529177SShiju Jose 
2016c3529177SShiju Jose 	status = le32_to_cpu(desc[0].data[2]);
2017a955d71dSShiju Jose 	if (status)
2018a955d71dSShiju Jose 		hclge_log_error(dev, "SSU_ETS_TCG_INT",
2019a955d71dSShiju Jose 				&hclge_ssu_ets_tcg_int[0], status,
2020a955d71dSShiju Jose 				&ae_dev->hw_err_reset_req);
2021c3529177SShiju Jose 
2022332fbf57SShiju Jose 	/* log IGU(Ingress Unit) EGU(Egress Unit) TNL errors */
2023332fbf57SShiju Jose 	desc_data = (__le32 *)&desc[1];
2024332fbf57SShiju Jose 	status = le32_to_cpu(*desc_data) & HCLGE_IGU_EGU_TNL_INT_MASK;
2025a955d71dSShiju Jose 	if (status)
2026a955d71dSShiju Jose 		hclge_log_error(dev, "IGU_EGU_TNL_INT_STS",
2027a955d71dSShiju Jose 				&hclge_igu_egu_tnl_int[0], status,
2028a955d71dSShiju Jose 				&ae_dev->hw_err_reset_req);
2029332fbf57SShiju Jose 
2030747fc3f3SWeihang Li 	/* log PPU(RCB) errors */
2031747fc3f3SWeihang Li 	desc_data = (__le32 *)&desc[3];
2032747fc3f3SWeihang Li 	status = le32_to_cpu(*desc_data) & HCLGE_PPU_PF_INT_RAS_MASK;
2033a83d2961SWeihang Li 	if (status) {
2034a955d71dSShiju Jose 		hclge_log_error(dev, "PPU_PF_ABNORMAL_INT_ST0",
2035a955d71dSShiju Jose 				&hclge_ppu_pf_abnormal_int[0], status,
2036a955d71dSShiju Jose 				&ae_dev->hw_err_reset_req);
2037a83d2961SWeihang Li 		hclge_report_hw_error(hdev, HNAE3_PPU_POISON_ERROR);
2038a83d2961SWeihang Li 	}
2039747fc3f3SWeihang Li 
2040332fbf57SShiju Jose 	/* clear all PF RAS errors */
2041d3c69a88SJie Wang 	hclge_comm_cmd_reuse_desc(&desc[0], false);
2042332fbf57SShiju Jose 	ret = hclge_cmd_send(&hdev->hw, &desc[0], num);
2043332fbf57SShiju Jose 	if (ret)
2044332fbf57SShiju Jose 		dev_err(dev, "clear all pf ras int cmd failed (%d)\n", ret);
2045332fbf57SShiju Jose 
2046332fbf57SShiju Jose 	return ret;
2047332fbf57SShiju Jose }
2048332fbf57SShiju Jose 
hclge_handle_all_ras_errors(struct hclge_dev * hdev)2049332fbf57SShiju Jose static int hclge_handle_all_ras_errors(struct hclge_dev *hdev)
2050332fbf57SShiju Jose {
2051332fbf57SShiju Jose 	u32 mpf_bd_num, pf_bd_num, bd_num;
2052332fbf57SShiju Jose 	struct hclge_desc *desc;
2053332fbf57SShiju Jose 	int ret;
2054332fbf57SShiju Jose 
2055332fbf57SShiju Jose 	/* query the number of registers in the RAS int status */
2056987b4ae7SWeihang Li 	ret = hclge_query_bd_num(hdev, true, &mpf_bd_num, &pf_bd_num);
2057987b4ae7SWeihang Li 	if (ret)
2058332fbf57SShiju Jose 		return ret;
2059332fbf57SShiju Jose 
2060987b4ae7SWeihang Li 	bd_num = max_t(u32, mpf_bd_num, pf_bd_num);
2061332fbf57SShiju Jose 	desc = kcalloc(bd_num, sizeof(struct hclge_desc), GFP_KERNEL);
2062332fbf57SShiju Jose 	if (!desc)
2063332fbf57SShiju Jose 		return -ENOMEM;
2064332fbf57SShiju Jose 
2065332fbf57SShiju Jose 	/* handle all main PF RAS errors */
2066332fbf57SShiju Jose 	ret = hclge_handle_mpf_ras_error(hdev, desc, mpf_bd_num);
2067332fbf57SShiju Jose 	if (ret) {
2068332fbf57SShiju Jose 		kfree(desc);
2069332fbf57SShiju Jose 		return ret;
2070332fbf57SShiju Jose 	}
2071332fbf57SShiju Jose 	memset(desc, 0, bd_num * sizeof(struct hclge_desc));
2072332fbf57SShiju Jose 
2073332fbf57SShiju Jose 	/* handle all PF RAS errors */
2074332fbf57SShiju Jose 	ret = hclge_handle_pf_ras_error(hdev, desc, pf_bd_num);
2075332fbf57SShiju Jose 	kfree(desc);
2076332fbf57SShiju Jose 
2077332fbf57SShiju Jose 	return ret;
2078332fbf57SShiju Jose }
2079332fbf57SShiju Jose 
hclge_log_rocee_axi_error(struct hclge_dev * hdev)2080238882c8SXiaofei Tan static int hclge_log_rocee_axi_error(struct hclge_dev *hdev)
2081238882c8SXiaofei Tan {
2082238882c8SXiaofei Tan 	struct device *dev = &hdev->pdev->dev;
2083238882c8SXiaofei Tan 	struct hclge_desc desc[3];
2084238882c8SXiaofei Tan 	int ret;
2085238882c8SXiaofei Tan 
2086238882c8SXiaofei Tan 	hclge_cmd_setup_basic_desc(&desc[0], HCLGE_QUERY_ROCEE_AXI_RAS_INFO_CMD,
2087238882c8SXiaofei Tan 				   true);
2088238882c8SXiaofei Tan 	hclge_cmd_setup_basic_desc(&desc[1], HCLGE_QUERY_ROCEE_AXI_RAS_INFO_CMD,
2089238882c8SXiaofei Tan 				   true);
2090238882c8SXiaofei Tan 	hclge_cmd_setup_basic_desc(&desc[2], HCLGE_QUERY_ROCEE_AXI_RAS_INFO_CMD,
2091238882c8SXiaofei Tan 				   true);
2092d3c69a88SJie Wang 	desc[0].flag |= cpu_to_le16(HCLGE_COMM_CMD_FLAG_NEXT);
2093d3c69a88SJie Wang 	desc[1].flag |= cpu_to_le16(HCLGE_COMM_CMD_FLAG_NEXT);
2094238882c8SXiaofei Tan 
2095238882c8SXiaofei Tan 	ret = hclge_cmd_send(&hdev->hw, &desc[0], 3);
2096238882c8SXiaofei Tan 	if (ret) {
2097238882c8SXiaofei Tan 		dev_err(dev, "failed(%d) to query ROCEE AXI error sts\n", ret);
2098238882c8SXiaofei Tan 		return ret;
2099238882c8SXiaofei Tan 	}
2100238882c8SXiaofei Tan 
2101ac887be5SXiaofei Tan 	dev_err(dev, "AXI1: %08X %08X %08X %08X %08X %08X\n",
2102238882c8SXiaofei Tan 		le32_to_cpu(desc[0].data[0]), le32_to_cpu(desc[0].data[1]),
2103238882c8SXiaofei Tan 		le32_to_cpu(desc[0].data[2]), le32_to_cpu(desc[0].data[3]),
2104238882c8SXiaofei Tan 		le32_to_cpu(desc[0].data[4]), le32_to_cpu(desc[0].data[5]));
2105ac887be5SXiaofei Tan 	dev_err(dev, "AXI2: %08X %08X %08X %08X %08X %08X\n",
2106238882c8SXiaofei Tan 		le32_to_cpu(desc[1].data[0]), le32_to_cpu(desc[1].data[1]),
2107238882c8SXiaofei Tan 		le32_to_cpu(desc[1].data[2]), le32_to_cpu(desc[1].data[3]),
2108238882c8SXiaofei Tan 		le32_to_cpu(desc[1].data[4]), le32_to_cpu(desc[1].data[5]));
2109ac887be5SXiaofei Tan 	dev_err(dev, "AXI3: %08X %08X %08X %08X\n",
2110238882c8SXiaofei Tan 		le32_to_cpu(desc[2].data[0]), le32_to_cpu(desc[2].data[1]),
2111238882c8SXiaofei Tan 		le32_to_cpu(desc[2].data[2]), le32_to_cpu(desc[2].data[3]));
2112238882c8SXiaofei Tan 
2113238882c8SXiaofei Tan 	return 0;
2114238882c8SXiaofei Tan }
2115238882c8SXiaofei Tan 
hclge_log_rocee_ecc_error(struct hclge_dev * hdev)2116238882c8SXiaofei Tan static int hclge_log_rocee_ecc_error(struct hclge_dev *hdev)
2117238882c8SXiaofei Tan {
2118238882c8SXiaofei Tan 	struct device *dev = &hdev->pdev->dev;
2119238882c8SXiaofei Tan 	struct hclge_desc desc[2];
2120238882c8SXiaofei Tan 	int ret;
2121238882c8SXiaofei Tan 
2122238882c8SXiaofei Tan 	ret = hclge_cmd_query_error(hdev, &desc[0],
2123238882c8SXiaofei Tan 				    HCLGE_QUERY_ROCEE_ECC_RAS_INFO_CMD,
2124d3c69a88SJie Wang 				    HCLGE_COMM_CMD_FLAG_NEXT);
2125238882c8SXiaofei Tan 	if (ret) {
2126238882c8SXiaofei Tan 		dev_err(dev, "failed(%d) to query ROCEE ECC error sts\n", ret);
2127238882c8SXiaofei Tan 		return ret;
2128238882c8SXiaofei Tan 	}
2129238882c8SXiaofei Tan 
2130ac887be5SXiaofei Tan 	dev_err(dev, "ECC1: %08X %08X %08X %08X %08X %08X\n",
2131238882c8SXiaofei Tan 		le32_to_cpu(desc[0].data[0]), le32_to_cpu(desc[0].data[1]),
2132238882c8SXiaofei Tan 		le32_to_cpu(desc[0].data[2]), le32_to_cpu(desc[0].data[3]),
2133238882c8SXiaofei Tan 		le32_to_cpu(desc[0].data[4]), le32_to_cpu(desc[0].data[5]));
2134ac887be5SXiaofei Tan 	dev_err(dev, "ECC2: %08X %08X %08X\n", le32_to_cpu(desc[1].data[0]),
2135238882c8SXiaofei Tan 		le32_to_cpu(desc[1].data[1]), le32_to_cpu(desc[1].data[2]));
2136238882c8SXiaofei Tan 
2137238882c8SXiaofei Tan 	return 0;
2138238882c8SXiaofei Tan }
2139238882c8SXiaofei Tan 
hclge_log_rocee_ovf_error(struct hclge_dev * hdev)2140630ba007SShiju Jose static int hclge_log_rocee_ovf_error(struct hclge_dev *hdev)
2141630ba007SShiju Jose {
2142630ba007SShiju Jose 	struct device *dev = &hdev->pdev->dev;
2143630ba007SShiju Jose 	struct hclge_desc desc[2];
2144630ba007SShiju Jose 	int ret;
2145630ba007SShiju Jose 
2146630ba007SShiju Jose 	/* read overflow error status */
21479b2f3477SWeihang Li 	ret = hclge_cmd_query_error(hdev, &desc[0], HCLGE_ROCEE_PF_RAS_INT_CMD,
2148dbae56a3SWeihang Li 				    0);
2149630ba007SShiju Jose 	if (ret) {
2150630ba007SShiju Jose 		dev_err(dev, "failed(%d) to query ROCEE OVF error sts\n", ret);
2151630ba007SShiju Jose 		return ret;
2152630ba007SShiju Jose 	}
2153630ba007SShiju Jose 
2154630ba007SShiju Jose 	/* log overflow error */
2155630ba007SShiju Jose 	if (le32_to_cpu(desc[0].data[0]) & HCLGE_ROCEE_OVF_ERR_INT_MASK) {
2156630ba007SShiju Jose 		const struct hclge_hw_error *err;
2157630ba007SShiju Jose 		u32 err_sts;
2158630ba007SShiju Jose 
2159630ba007SShiju Jose 		err = &hclge_rocee_qmm_ovf_err_int[0];
2160630ba007SShiju Jose 		err_sts = HCLGE_ROCEE_OVF_ERR_TYPE_MASK &
2161630ba007SShiju Jose 			  le32_to_cpu(desc[0].data[0]);
2162630ba007SShiju Jose 		while (err->msg) {
2163630ba007SShiju Jose 			if (err->int_msk == err_sts) {
2164ac887be5SXiaofei Tan 				dev_err(dev, "%s [error status=0x%x] found\n",
2165630ba007SShiju Jose 					err->msg,
2166630ba007SShiju Jose 					le32_to_cpu(desc[0].data[0]));
2167630ba007SShiju Jose 				break;
2168630ba007SShiju Jose 			}
2169630ba007SShiju Jose 			err++;
2170630ba007SShiju Jose 		}
2171630ba007SShiju Jose 	}
2172630ba007SShiju Jose 
2173630ba007SShiju Jose 	if (le32_to_cpu(desc[0].data[1]) & HCLGE_ROCEE_OVF_ERR_INT_MASK) {
2174ac887be5SXiaofei Tan 		dev_err(dev, "ROCEE TSP OVF [error status=0x%x] found\n",
2175630ba007SShiju Jose 			le32_to_cpu(desc[0].data[1]));
2176630ba007SShiju Jose 	}
2177630ba007SShiju Jose 
2178630ba007SShiju Jose 	if (le32_to_cpu(desc[0].data[2]) & HCLGE_ROCEE_OVF_ERR_INT_MASK) {
2179ac887be5SXiaofei Tan 		dev_err(dev, "ROCEE SCC OVF [error status=0x%x] found\n",
2180630ba007SShiju Jose 			le32_to_cpu(desc[0].data[2]));
2181630ba007SShiju Jose 	}
2182630ba007SShiju Jose 
2183630ba007SShiju Jose 	return 0;
2184630ba007SShiju Jose }
2185630ba007SShiju Jose 
2186eb4c2ccbSShiju Jose static enum hnae3_reset_type
hclge_log_and_clear_rocee_ras_error(struct hclge_dev * hdev)2187eb4c2ccbSShiju Jose hclge_log_and_clear_rocee_ras_error(struct hclge_dev *hdev)
2188630ba007SShiju Jose {
2189eb4c2ccbSShiju Jose 	enum hnae3_reset_type reset_type = HNAE3_NONE_RESET;
2190630ba007SShiju Jose 	struct device *dev = &hdev->pdev->dev;
2191630ba007SShiju Jose 	struct hclge_desc desc[2];
2192630ba007SShiju Jose 	unsigned int status;
2193630ba007SShiju Jose 	int ret;
2194630ba007SShiju Jose 
2195630ba007SShiju Jose 	/* read RAS error interrupt status */
2196630ba007SShiju Jose 	ret = hclge_cmd_query_error(hdev, &desc[0],
2197dbae56a3SWeihang Li 				    HCLGE_QUERY_CLEAR_ROCEE_RAS_INT, 0);
2198630ba007SShiju Jose 	if (ret) {
2199630ba007SShiju Jose 		dev_err(dev, "failed(%d) to query ROCEE RAS INT SRC\n", ret);
2200630ba007SShiju Jose 		/* reset everything for now */
2201eb4c2ccbSShiju Jose 		return HNAE3_GLOBAL_RESET;
2202630ba007SShiju Jose 	}
2203630ba007SShiju Jose 
2204630ba007SShiju Jose 	status = le32_to_cpu(desc[0].data[0]);
2205238882c8SXiaofei Tan 	if (status & HCLGE_ROCEE_AXI_ERR_INT_MASK) {
2206238882c8SXiaofei Tan 		if (status & HCLGE_ROCEE_RERR_INT_MASK)
2207ac887be5SXiaofei Tan 			dev_err(dev, "ROCEE RAS AXI rresp error\n");
2208630ba007SShiju Jose 
2209238882c8SXiaofei Tan 		if (status & HCLGE_ROCEE_BERR_INT_MASK)
2210ac887be5SXiaofei Tan 			dev_err(dev, "ROCEE RAS AXI bresp error\n");
2211238882c8SXiaofei Tan 
2212eb4c2ccbSShiju Jose 		reset_type = HNAE3_FUNC_RESET;
2213238882c8SXiaofei Tan 
22146cd131ddSYufeng Mo 		hclge_report_hw_error(hdev, HNAE3_ROCEE_AXI_RESP_ERROR);
22156cd131ddSYufeng Mo 
2216238882c8SXiaofei Tan 		ret = hclge_log_rocee_axi_error(hdev);
2217238882c8SXiaofei Tan 		if (ret)
2218238882c8SXiaofei Tan 			return HNAE3_GLOBAL_RESET;
2219eb4c2ccbSShiju Jose 	}
2220630ba007SShiju Jose 
2221630ba007SShiju Jose 	if (status & HCLGE_ROCEE_ECC_INT_MASK) {
2222ac887be5SXiaofei Tan 		dev_err(dev, "ROCEE RAS 2bit ECC error\n");
2223630ba007SShiju Jose 		reset_type = HNAE3_GLOBAL_RESET;
2224238882c8SXiaofei Tan 
2225238882c8SXiaofei Tan 		ret = hclge_log_rocee_ecc_error(hdev);
2226238882c8SXiaofei Tan 		if (ret)
2227238882c8SXiaofei Tan 			return HNAE3_GLOBAL_RESET;
2228630ba007SShiju Jose 	}
2229630ba007SShiju Jose 
2230630ba007SShiju Jose 	if (status & HCLGE_ROCEE_OVF_INT_MASK) {
2231630ba007SShiju Jose 		ret = hclge_log_rocee_ovf_error(hdev);
2232630ba007SShiju Jose 		if (ret) {
2233630ba007SShiju Jose 			dev_err(dev, "failed(%d) to process ovf error\n", ret);
2234630ba007SShiju Jose 			/* reset everything for now */
2235eb4c2ccbSShiju Jose 			return HNAE3_GLOBAL_RESET;
2236630ba007SShiju Jose 		}
2237630ba007SShiju Jose 	}
2238630ba007SShiju Jose 
2239630ba007SShiju Jose 	/* clear error status */
2240d3c69a88SJie Wang 	hclge_comm_cmd_reuse_desc(&desc[0], false);
2241630ba007SShiju Jose 	ret = hclge_cmd_send(&hdev->hw, &desc[0], 1);
2242630ba007SShiju Jose 	if (ret) {
2243630ba007SShiju Jose 		dev_err(dev, "failed(%d) to clear ROCEE RAS error\n", ret);
2244630ba007SShiju Jose 		/* reset everything for now */
2245eb4c2ccbSShiju Jose 		return HNAE3_GLOBAL_RESET;
2246630ba007SShiju Jose 	}
2247630ba007SShiju Jose 
2248eb4c2ccbSShiju Jose 	return reset_type;
2249630ba007SShiju Jose }
2250630ba007SShiju Jose 
hclge_config_rocee_ras_interrupt(struct hclge_dev * hdev,bool en)225100ea6e5fSWeihang Li int hclge_config_rocee_ras_interrupt(struct hclge_dev *hdev, bool en)
2252630ba007SShiju Jose {
2253630ba007SShiju Jose 	struct device *dev = &hdev->pdev->dev;
2254630ba007SShiju Jose 	struct hclge_desc desc;
2255630ba007SShiju Jose 	int ret;
2256630ba007SShiju Jose 
2257295ba232SGuangbin Huang 	if (hdev->ae_dev->dev_version < HNAE3_DEVICE_VERSION_V2 ||
2258295ba232SGuangbin Huang 	    !hnae3_dev_roce_supported(hdev))
2259630ba007SShiju Jose 		return 0;
2260630ba007SShiju Jose 
2261630ba007SShiju Jose 	hclge_cmd_setup_basic_desc(&desc, HCLGE_CONFIG_ROCEE_RAS_INT_EN, false);
2262630ba007SShiju Jose 	if (en) {
2263630ba007SShiju Jose 		/* enable ROCEE hw error interrupts */
2264630ba007SShiju Jose 		desc.data[0] = cpu_to_le32(HCLGE_ROCEE_RAS_NFE_INT_EN);
2265630ba007SShiju Jose 		desc.data[1] = cpu_to_le32(HCLGE_ROCEE_RAS_CE_INT_EN);
2266630ba007SShiju Jose 
2267630ba007SShiju Jose 		hclge_log_and_clear_rocee_ras_error(hdev);
2268630ba007SShiju Jose 	}
2269630ba007SShiju Jose 	desc.data[2] = cpu_to_le32(HCLGE_ROCEE_RAS_NFE_INT_EN_MASK);
2270630ba007SShiju Jose 	desc.data[3] = cpu_to_le32(HCLGE_ROCEE_RAS_CE_INT_EN_MASK);
2271630ba007SShiju Jose 
2272630ba007SShiju Jose 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
2273630ba007SShiju Jose 	if (ret)
2274630ba007SShiju Jose 		dev_err(dev, "failed(%d) to config ROCEE RAS interrupt\n", ret);
2275630ba007SShiju Jose 
2276630ba007SShiju Jose 	return ret;
2277630ba007SShiju Jose }
2278630ba007SShiju Jose 
hclge_handle_rocee_ras_error(struct hnae3_ae_dev * ae_dev)2279eb4c2ccbSShiju Jose static void hclge_handle_rocee_ras_error(struct hnae3_ae_dev *ae_dev)
2280630ba007SShiju Jose {
2281630ba007SShiju Jose 	struct hclge_dev *hdev = ae_dev->priv;
2282cdd332acSGuojia Liao 	enum hnae3_reset_type reset_type;
2283630ba007SShiju Jose 
22849b56d9a5SGuangbin Huang 	if (test_bit(HCLGE_STATE_RST_HANDLING, &hdev->state))
2285eb4c2ccbSShiju Jose 		return;
2286630ba007SShiju Jose 
2287eb4c2ccbSShiju Jose 	reset_type = hclge_log_and_clear_rocee_ras_error(hdev);
2288eb4c2ccbSShiju Jose 	if (reset_type != HNAE3_NONE_RESET)
2289123297b7SShiju Jose 		set_bit(reset_type, &ae_dev->hw_err_reset_req);
2290630ba007SShiju Jose }
2291630ba007SShiju Jose 
22925a9f0eacSShiju Jose static const struct hclge_hw_blk hw_blk[] = {
2293fe0f7d69SShiju Jose 	{
229460fe9ff9SJiaran Zhang 		.msk = BIT(0),
229560fe9ff9SJiaran Zhang 		.name = "IGU_EGU",
229698da4027SShiju Jose 		.config_err_int = hclge_config_igu_egu_hw_err_int,
229760fe9ff9SJiaran Zhang 	}, {
229860fe9ff9SJiaran Zhang 		.msk = BIT(1),
229960fe9ff9SJiaran Zhang 		.name = "PPP",
230098da4027SShiju Jose 		.config_err_int = hclge_config_ppp_hw_err_int,
230160fe9ff9SJiaran Zhang 	}, {
230260fe9ff9SJiaran Zhang 		.msk = BIT(2),
230360fe9ff9SJiaran Zhang 		.name = "SSU",
2304c3529177SShiju Jose 		.config_err_int = hclge_config_ssu_hw_err_int,
230560fe9ff9SJiaran Zhang 	}, {
230660fe9ff9SJiaran Zhang 		.msk = BIT(3),
230760fe9ff9SJiaran Zhang 		.name = "PPU",
2308f69b10b3SShiju Jose 		.config_err_int = hclge_config_ppu_hw_err_int,
230960fe9ff9SJiaran Zhang 	}, {
231060fe9ff9SJiaran Zhang 		.msk = BIT(4),
231160fe9ff9SJiaran Zhang 		.name = "TM",
231298da4027SShiju Jose 		.config_err_int = hclge_config_tm_hw_err_int,
231360fe9ff9SJiaran Zhang 	}, {
231460fe9ff9SJiaran Zhang 		.msk = BIT(5),
231560fe9ff9SJiaran Zhang 		.name = "COMMON",
231698da4027SShiju Jose 		.config_err_int = hclge_config_common_hw_err_int,
231760fe9ff9SJiaran Zhang 	}, {
231860fe9ff9SJiaran Zhang 		.msk = BIT(8),
231960fe9ff9SJiaran Zhang 		.name = "MAC",
23207838f908SShiju Jose 		.config_err_int = hclge_config_mac_err_int,
232160fe9ff9SJiaran Zhang 	}, {
232260fe9ff9SJiaran Zhang 		/* sentinel */
232360fe9ff9SJiaran Zhang 	}
23245a9f0eacSShiju Jose };
23255a9f0eacSShiju Jose 
hclge_config_all_msix_error(struct hclge_dev * hdev,bool enable)232617f59244SYufeng Mo static void hclge_config_all_msix_error(struct hclge_dev *hdev, bool enable)
232717f59244SYufeng Mo {
232817f59244SYufeng Mo 	u32 reg_val;
232917f59244SYufeng Mo 
233017f59244SYufeng Mo 	reg_val = hclge_read_dev(&hdev->hw, HCLGE_PF_OTHER_INT_REG);
233117f59244SYufeng Mo 
233217f59244SYufeng Mo 	if (enable)
233317f59244SYufeng Mo 		reg_val |= BIT(HCLGE_VECTOR0_ALL_MSIX_ERR_B);
233417f59244SYufeng Mo 	else
233517f59244SYufeng Mo 		reg_val &= ~BIT(HCLGE_VECTOR0_ALL_MSIX_ERR_B);
233617f59244SYufeng Mo 
233717f59244SYufeng Mo 	hclge_write_dev(&hdev->hw, HCLGE_PF_OTHER_INT_REG, reg_val);
233817f59244SYufeng Mo }
233917f59244SYufeng Mo 
hclge_config_nic_hw_error(struct hclge_dev * hdev,bool state)234000ea6e5fSWeihang Li int hclge_config_nic_hw_error(struct hclge_dev *hdev, bool state)
234199714195SShiju Jose {
2342481a626aSShiju Jose 	const struct hclge_hw_blk *module = hw_blk;
234399714195SShiju Jose 	int ret = 0;
234499714195SShiju Jose 
234517f59244SYufeng Mo 	hclge_config_all_msix_error(hdev, state);
234617f59244SYufeng Mo 
2347481a626aSShiju Jose 	while (module->name) {
2348481a626aSShiju Jose 		if (module->config_err_int) {
2349481a626aSShiju Jose 			ret = module->config_err_int(hdev, state);
235098da4027SShiju Jose 			if (ret)
235199714195SShiju Jose 				return ret;
2352481a626aSShiju Jose 		}
2353481a626aSShiju Jose 		module++;
235499714195SShiju Jose 	}
235599714195SShiju Jose 
235699714195SShiju Jose 	return ret;
235799714195SShiju Jose }
235899714195SShiju Jose 
hclge_handle_hw_ras_error(struct hnae3_ae_dev * ae_dev)2359381c356eSShiju Jose pci_ers_result_t hclge_handle_hw_ras_error(struct hnae3_ae_dev *ae_dev)
23605a9f0eacSShiju Jose {
23615a9f0eacSShiju Jose 	struct hclge_dev *hdev = ae_dev->priv;
23625a9f0eacSShiju Jose 	struct device *dev = &hdev->pdev->dev;
2363332fbf57SShiju Jose 	u32 status;
23645a9f0eacSShiju Jose 
2365e4193e24SShiju Jose 	if (!test_bit(HCLGE_STATE_SERVICE_INITED, &hdev->state)) {
2366e4193e24SShiju Jose 		dev_err(dev,
2367e4193e24SShiju Jose 			"Can't recover - RAS error reported during dev init\n");
2368e4193e24SShiju Jose 		return PCI_ERS_RESULT_NONE;
2369e4193e24SShiju Jose 	}
2370e4193e24SShiju Jose 
2371332fbf57SShiju Jose 	status = hclge_read_dev(&hdev->hw, HCLGE_RAS_PF_OTHER_INT_STS_REG);
2372123297b7SShiju Jose 	if (status & HCLGE_RAS_REG_NFE_MASK ||
2373123297b7SShiju Jose 	    status & HCLGE_RAS_REG_ROCEE_ERR_MASK)
2374123297b7SShiju Jose 		ae_dev->hw_err_reset_req = 0;
23752253db16SWeihang Li 	else
23762253db16SWeihang Li 		goto out;
2377123297b7SShiju Jose 
2378332fbf57SShiju Jose 	/* Handling Non-fatal HNS RAS errors */
2379332fbf57SShiju Jose 	if (status & HCLGE_RAS_REG_NFE_MASK) {
2380ac887be5SXiaofei Tan 		dev_err(dev,
2381332fbf57SShiju Jose 			"HNS Non-Fatal RAS error(status=0x%x) identified\n",
2382332fbf57SShiju Jose 			status);
2383332fbf57SShiju Jose 		hclge_handle_all_ras_errors(hdev);
238469b51bbbSShiju Jose 	}
2385332fbf57SShiju Jose 
23862253db16SWeihang Li 	/* Handling Non-fatal Rocee RAS errors */
2387295ba232SGuangbin Huang 	if (hdev->ae_dev->dev_version >= HNAE3_DEVICE_VERSION_V2 &&
23882253db16SWeihang Li 	    status & HCLGE_RAS_REG_ROCEE_ERR_MASK) {
2389ac887be5SXiaofei Tan 		dev_err(dev, "ROCEE Non-Fatal RAS error identified\n");
2390630ba007SShiju Jose 		hclge_handle_rocee_ras_error(ae_dev);
2391630ba007SShiju Jose 	}
2392630ba007SShiju Jose 
23939d5e67d1SWeihang Li 	if (ae_dev->hw_err_reset_req)
2394630ba007SShiju Jose 		return PCI_ERS_RESULT_NEED_RESET;
2395630ba007SShiju Jose 
23962253db16SWeihang Li out:
2397332fbf57SShiju Jose 	return PCI_ERS_RESULT_RECOVERED;
2398332fbf57SShiju Jose }
2399f6162d44SSalil Mehta 
hclge_clear_hw_msix_error(struct hclge_dev * hdev,struct hclge_desc * desc,bool is_mpf,u32 bd_num)2400e4193e24SShiju Jose static int hclge_clear_hw_msix_error(struct hclge_dev *hdev,
2401e4193e24SShiju Jose 				     struct hclge_desc *desc, bool is_mpf,
2402e4193e24SShiju Jose 				     u32 bd_num)
2403e4193e24SShiju Jose {
2404e4193e24SShiju Jose 	if (is_mpf)
2405e4193e24SShiju Jose 		desc[0].opcode =
2406e4193e24SShiju Jose 			cpu_to_le16(HCLGE_QUERY_CLEAR_ALL_MPF_MSIX_INT);
2407e4193e24SShiju Jose 	else
2408e4193e24SShiju Jose 		desc[0].opcode = cpu_to_le16(HCLGE_QUERY_CLEAR_ALL_PF_MSIX_INT);
2409e4193e24SShiju Jose 
2410d3c69a88SJie Wang 	desc[0].flag = cpu_to_le16(HCLGE_COMM_CMD_FLAG_NO_INTR |
2411d3c69a88SJie Wang 				   HCLGE_COMM_CMD_FLAG_IN);
2412e4193e24SShiju Jose 
2413e4193e24SShiju Jose 	return hclge_cmd_send(&hdev->hw, &desc[0], bd_num);
2414e4193e24SShiju Jose }
2415e4193e24SShiju Jose 
24160cd86182SWeihang Li /* hclge_query_8bd_info: query information about over_8bd_nfe_err
24170cd86182SWeihang Li  * @hdev: pointer to struct hclge_dev
24180cd86182SWeihang Li  * @vf_id: Index of the virtual function with error
24190cd86182SWeihang Li  * @q_id: Physical index of the queue with error
24200cd86182SWeihang Li  *
24210cd86182SWeihang Li  * This function get specific index of queue and function which causes
24220cd86182SWeihang Li  * over_8bd_nfe_err by using command. If vf_id is 0, it means error is
24230cd86182SWeihang Li  * caused by PF instead of VF.
24240cd86182SWeihang Li  */
hclge_query_over_8bd_err_info(struct hclge_dev * hdev,u16 * vf_id,u16 * q_id)24250cd86182SWeihang Li static int hclge_query_over_8bd_err_info(struct hclge_dev *hdev, u16 *vf_id,
24260cd86182SWeihang Li 					 u16 *q_id)
24270cd86182SWeihang Li {
24280cd86182SWeihang Li 	struct hclge_query_ppu_pf_other_int_dfx_cmd *req;
24290cd86182SWeihang Li 	struct hclge_desc desc;
24300cd86182SWeihang Li 	int ret;
24310cd86182SWeihang Li 
24320cd86182SWeihang Li 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_PPU_PF_OTHER_INT_DFX, true);
24330cd86182SWeihang Li 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
24340cd86182SWeihang Li 	if (ret)
24350cd86182SWeihang Li 		return ret;
24360cd86182SWeihang Li 
24370cd86182SWeihang Li 	req = (struct hclge_query_ppu_pf_other_int_dfx_cmd *)desc.data;
24380cd86182SWeihang Li 	*vf_id = le16_to_cpu(req->over_8bd_no_fe_vf_id);
24390cd86182SWeihang Li 	*q_id = le16_to_cpu(req->over_8bd_no_fe_qid);
24400cd86182SWeihang Li 
24410cd86182SWeihang Li 	return 0;
24420cd86182SWeihang Li }
24430cd86182SWeihang Li 
24440cd86182SWeihang Li /* hclge_handle_over_8bd_err: handle MSI-X error named over_8bd_nfe_err
24450cd86182SWeihang Li  * @hdev: pointer to struct hclge_dev
24460cd86182SWeihang Li  * @reset_requests: reset level that we need to trigger later
24470cd86182SWeihang Li  *
24480cd86182SWeihang Li  * over_8bd_nfe_err is a special MSI-X because it may caused by a VF, in
24490cd86182SWeihang Li  * that case, we need to trigger VF reset. Otherwise, a PF reset is needed.
24500cd86182SWeihang Li  */
hclge_handle_over_8bd_err(struct hclge_dev * hdev,unsigned long * reset_requests)24510cd86182SWeihang Li static void hclge_handle_over_8bd_err(struct hclge_dev *hdev,
24520cd86182SWeihang Li 				      unsigned long *reset_requests)
24530cd86182SWeihang Li {
24540cd86182SWeihang Li 	struct device *dev = &hdev->pdev->dev;
24550cd86182SWeihang Li 	u16 vf_id;
24560cd86182SWeihang Li 	u16 q_id;
24570cd86182SWeihang Li 	int ret;
24580cd86182SWeihang Li 
24590cd86182SWeihang Li 	ret = hclge_query_over_8bd_err_info(hdev, &vf_id, &q_id);
24600cd86182SWeihang Li 	if (ret) {
24610cd86182SWeihang Li 		dev_err(dev, "fail(%d) to query over_8bd_no_fe info\n",
24620cd86182SWeihang Li 			ret);
24630cd86182SWeihang Li 		return;
24640cd86182SWeihang Li 	}
24650cd86182SWeihang Li 
2466311c0aaaSJiaran Zhang 	dev_err(dev, "PPU_PF_ABNORMAL_INT_ST over_8bd_no_fe found, vport(%u), queue_id(%u)\n",
24670cd86182SWeihang Li 		vf_id, q_id);
24680cd86182SWeihang Li 
24690cd86182SWeihang Li 	if (vf_id) {
24700cd86182SWeihang Li 		if (vf_id >= hdev->num_alloc_vport) {
2471311c0aaaSJiaran Zhang 			dev_err(dev, "invalid vport(%u)\n", vf_id);
24720cd86182SWeihang Li 			return;
24730cd86182SWeihang Li 		}
24740cd86182SWeihang Li 
24750cd86182SWeihang Li 		/* If we need to trigger other reset whose level is higher
24760cd86182SWeihang Li 		 * than HNAE3_VF_FUNC_RESET, no need to trigger a VF reset
24770cd86182SWeihang Li 		 * here.
24780cd86182SWeihang Li 		 */
24790cd86182SWeihang Li 		if (*reset_requests != 0)
24800cd86182SWeihang Li 			return;
24810cd86182SWeihang Li 
24820cd86182SWeihang Li 		ret = hclge_inform_reset_assert_to_vf(&hdev->vport[vf_id]);
24830cd86182SWeihang Li 		if (ret)
2484311c0aaaSJiaran Zhang 			dev_err(dev, "inform reset to vport(%u) failed %d!\n",
2485311c0aaaSJiaran Zhang 				vf_id, ret);
24860cd86182SWeihang Li 	} else {
24870cd86182SWeihang Li 		set_bit(HNAE3_FUNC_RESET, reset_requests);
24880cd86182SWeihang Li 	}
24890cd86182SWeihang Li }
24900cd86182SWeihang Li 
24919e0254ddSWeihang Li /* hclge_handle_mpf_msix_error: handle all main PF MSI-X errors
24929e0254ddSWeihang Li  * @hdev: pointer to struct hclge_dev
24939e0254ddSWeihang Li  * @desc: descriptor for describing the command
24949e0254ddSWeihang Li  * @mpf_bd_num: number of extended command structures
24959e0254ddSWeihang Li  * @reset_requests: record of the reset level that we need
24969e0254ddSWeihang Li  *
24979e0254ddSWeihang Li  * This function handles all the main PF MSI-X errors in the hw register/s
24989e0254ddSWeihang Li  * using command.
24999e0254ddSWeihang Li  */
hclge_handle_mpf_msix_error(struct hclge_dev * hdev,struct hclge_desc * desc,int mpf_bd_num,unsigned long * reset_requests)25009e0254ddSWeihang Li static int hclge_handle_mpf_msix_error(struct hclge_dev *hdev,
25019e0254ddSWeihang Li 				       struct hclge_desc *desc,
25029e0254ddSWeihang Li 				       int mpf_bd_num,
2503f6162d44SSalil Mehta 				       unsigned long *reset_requests)
2504f6162d44SSalil Mehta {
2505f6162d44SSalil Mehta 	struct device *dev = &hdev->pdev->dev;
25067838f908SShiju Jose 	__le32 *desc_data;
25077838f908SShiju Jose 	u32 status;
2508c41e672dSWeihang Li 	int ret;
2509f6162d44SSalil Mehta 	/* query all main PF MSIx errors */
2510f6162d44SSalil Mehta 	hclge_cmd_setup_basic_desc(&desc[0], HCLGE_QUERY_CLEAR_ALL_MPF_MSIX_INT,
2511f6162d44SSalil Mehta 				   true);
2512f6162d44SSalil Mehta 	ret = hclge_cmd_send(&hdev->hw, &desc[0], mpf_bd_num);
2513f6162d44SSalil Mehta 	if (ret) {
25149e0254ddSWeihang Li 		dev_err(dev, "query all mpf msix int cmd failed (%d)\n", ret);
25159e0254ddSWeihang Li 		return ret;
2516f6162d44SSalil Mehta 	}
2517f6162d44SSalil Mehta 
25187838f908SShiju Jose 	/* log MAC errors */
25197838f908SShiju Jose 	desc_data = (__le32 *)&desc[1];
25207838f908SShiju Jose 	status = le32_to_cpu(*desc_data);
2521a955d71dSShiju Jose 	if (status)
2522a955d71dSShiju Jose 		hclge_log_error(dev, "MAC_AFIFO_TNL_INT_R",
2523a955d71dSShiju Jose 				&hclge_mac_afifo_tnl_int[0], status,
2524a955d71dSShiju Jose 				reset_requests);
25257838f908SShiju Jose 
2526747fc3f3SWeihang Li 	/* log PPU(RCB) MPF errors */
2527f69b10b3SShiju Jose 	desc_data = (__le32 *)&desc[5];
2528f69b10b3SShiju Jose 	status = le32_to_cpu(*(desc_data + 2)) &
2529f69b10b3SShiju Jose 			HCLGE_PPU_MPF_INT_ST2_MSIX_MASK;
2530a955d71dSShiju Jose 	if (status)
2531ac887be5SXiaofei Tan 		dev_err(dev, "PPU_MPF_ABNORMAL_INT_ST2 rx_q_search_miss found [dfx status=0x%x\n]",
25329f65e5efSWeihang Li 			status);
2533f69b10b3SShiju Jose 
2534f6162d44SSalil Mehta 	/* clear all main PF MSIx errors */
2535e4193e24SShiju Jose 	ret = hclge_clear_hw_msix_error(hdev, desc, true, mpf_bd_num);
25369e0254ddSWeihang Li 	if (ret)
25379e0254ddSWeihang Li 		dev_err(dev, "clear all mpf msix int cmd failed (%d)\n", ret);
25389e0254ddSWeihang Li 
25399e0254ddSWeihang Li 	return ret;
2540f6162d44SSalil Mehta }
2541f6162d44SSalil Mehta 
25429e0254ddSWeihang Li /* hclge_handle_pf_msix_error: handle all PF MSI-X errors
25439e0254ddSWeihang Li  * @hdev: pointer to struct hclge_dev
25449e0254ddSWeihang Li  * @desc: descriptor for describing the command
25459e0254ddSWeihang Li  * @mpf_bd_num: number of extended command structures
25469e0254ddSWeihang Li  * @reset_requests: record of the reset level that we need
25479e0254ddSWeihang Li  *
25489e0254ddSWeihang Li  * This function handles all the PF MSI-X errors in the hw register/s using
25499e0254ddSWeihang Li  * command.
25509e0254ddSWeihang Li  */
hclge_handle_pf_msix_error(struct hclge_dev * hdev,struct hclge_desc * desc,int pf_bd_num,unsigned long * reset_requests)25519e0254ddSWeihang Li static int hclge_handle_pf_msix_error(struct hclge_dev *hdev,
25529e0254ddSWeihang Li 				      struct hclge_desc *desc,
25539e0254ddSWeihang Li 				      int pf_bd_num,
25549e0254ddSWeihang Li 				      unsigned long *reset_requests)
25559e0254ddSWeihang Li {
25569e0254ddSWeihang Li 	struct device *dev = &hdev->pdev->dev;
25579e0254ddSWeihang Li 	__le32 *desc_data;
25589e0254ddSWeihang Li 	u32 status;
25599e0254ddSWeihang Li 	int ret;
25609e0254ddSWeihang Li 
2561f6162d44SSalil Mehta 	/* query all PF MSIx errors */
2562f6162d44SSalil Mehta 	hclge_cmd_setup_basic_desc(&desc[0], HCLGE_QUERY_CLEAR_ALL_PF_MSIX_INT,
2563f6162d44SSalil Mehta 				   true);
2564f6162d44SSalil Mehta 	ret = hclge_cmd_send(&hdev->hw, &desc[0], pf_bd_num);
2565f6162d44SSalil Mehta 	if (ret) {
25669e0254ddSWeihang Li 		dev_err(dev, "query all pf msix int cmd failed (%d)\n", ret);
25679e0254ddSWeihang Li 		return ret;
2568f6162d44SSalil Mehta 	}
2569f6162d44SSalil Mehta 
2570c3529177SShiju Jose 	/* log SSU PF errors */
2571c3529177SShiju Jose 	status = le32_to_cpu(desc[0].data[0]) & HCLGE_SSU_PORT_INT_MSIX_MASK;
2572a955d71dSShiju Jose 	if (status)
2573a955d71dSShiju Jose 		hclge_log_error(dev, "SSU_PORT_BASED_ERR_INT",
2574c41e672dSWeihang Li 				&hclge_ssu_port_based_pf_int[0],
2575a955d71dSShiju Jose 				status, reset_requests);
2576c3529177SShiju Jose 
25778fc9d3e3SShiju Jose 	/* read and log PPP PF errors */
25788fc9d3e3SShiju Jose 	desc_data = (__le32 *)&desc[2];
25798fc9d3e3SShiju Jose 	status = le32_to_cpu(*desc_data);
2580a955d71dSShiju Jose 	if (status)
2581a955d71dSShiju Jose 		hclge_log_error(dev, "PPP_PF_ABNORMAL_INT_ST0",
2582c41e672dSWeihang Li 				&hclge_ppp_pf_abnormal_int[0],
2583a955d71dSShiju Jose 				status, reset_requests);
25848fc9d3e3SShiju Jose 
2585747fc3f3SWeihang Li 	/* log PPU(RCB) PF errors */
2586f69b10b3SShiju Jose 	desc_data = (__le32 *)&desc[3];
2587f69b10b3SShiju Jose 	status = le32_to_cpu(*desc_data) & HCLGE_PPU_PF_INT_MSIX_MASK;
2588a955d71dSShiju Jose 	if (status)
2589a955d71dSShiju Jose 		hclge_log_error(dev, "PPU_PF_ABNORMAL_INT_ST",
2590c41e672dSWeihang Li 				&hclge_ppu_pf_abnormal_int[0],
2591a955d71dSShiju Jose 				status, reset_requests);
2592f69b10b3SShiju Jose 
25930cd86182SWeihang Li 	status = le32_to_cpu(*desc_data) & HCLGE_PPU_PF_OVER_8BD_ERR_MASK;
25940cd86182SWeihang Li 	if (status)
25950cd86182SWeihang Li 		hclge_handle_over_8bd_err(hdev, reset_requests);
25960cd86182SWeihang Li 
2597f6162d44SSalil Mehta 	/* clear all PF MSIx errors */
2598e4193e24SShiju Jose 	ret = hclge_clear_hw_msix_error(hdev, desc, false, pf_bd_num);
25999e0254ddSWeihang Li 	if (ret)
2600e4193e24SShiju Jose 		dev_err(dev, "clear all pf msix int cmd failed (%d)\n", ret);
26019e0254ddSWeihang Li 
26029e0254ddSWeihang Li 	return ret;
2603f6162d44SSalil Mehta }
2604f6162d44SSalil Mehta 
hclge_handle_all_hw_msix_error(struct hclge_dev * hdev,unsigned long * reset_requests)26059e0254ddSWeihang Li static int hclge_handle_all_hw_msix_error(struct hclge_dev *hdev,
26069e0254ddSWeihang Li 					  unsigned long *reset_requests)
26079e0254ddSWeihang Li {
26089e0254ddSWeihang Li 	u32 mpf_bd_num, pf_bd_num, bd_num;
26099e0254ddSWeihang Li 	struct hclge_desc *desc;
26109e0254ddSWeihang Li 	int ret;
26119e0254ddSWeihang Li 
26129e0254ddSWeihang Li 	/* query the number of bds for the MSIx int status */
2613987b4ae7SWeihang Li 	ret = hclge_query_bd_num(hdev, false, &mpf_bd_num, &pf_bd_num);
2614987b4ae7SWeihang Li 	if (ret)
2615b4b9bd92SWeihang Li 		goto out;
26169e0254ddSWeihang Li 
26179e0254ddSWeihang Li 	bd_num = max_t(u32, mpf_bd_num, pf_bd_num);
26189e0254ddSWeihang Li 	desc = kcalloc(bd_num, sizeof(struct hclge_desc), GFP_KERNEL);
261960df7e91SHuazhong Tan 	if (!desc)
262060df7e91SHuazhong Tan 		return -ENOMEM;
26219e0254ddSWeihang Li 
26229e0254ddSWeihang Li 	ret = hclge_handle_mpf_msix_error(hdev, desc, mpf_bd_num,
26239e0254ddSWeihang Li 					  reset_requests);
26249e0254ddSWeihang Li 	if (ret)
26259e0254ddSWeihang Li 		goto msi_error;
26269e0254ddSWeihang Li 
26279e0254ddSWeihang Li 	memset(desc, 0, bd_num * sizeof(struct hclge_desc));
26289e0254ddSWeihang Li 	ret = hclge_handle_pf_msix_error(hdev, desc, pf_bd_num, reset_requests);
26299e0254ddSWeihang Li 	if (ret)
26309e0254ddSWeihang Li 		goto msi_error;
26319e0254ddSWeihang Li 
26322e2deee7SJiaran Zhang 	ret = hclge_handle_mac_tnl(hdev);
2633a6345787SWeihang Li 
2634f6162d44SSalil Mehta msi_error:
2635f6162d44SSalil Mehta 	kfree(desc);
2636f6162d44SSalil Mehta out:
2637f6162d44SSalil Mehta 	return ret;
2638f6162d44SSalil Mehta }
2639e4193e24SShiju Jose 
hclge_handle_hw_msix_error(struct hclge_dev * hdev,unsigned long * reset_requests)2640e4193e24SShiju Jose int hclge_handle_hw_msix_error(struct hclge_dev *hdev,
2641e4193e24SShiju Jose 			       unsigned long *reset_requests)
2642e4193e24SShiju Jose {
2643e4193e24SShiju Jose 	struct device *dev = &hdev->pdev->dev;
2644e4193e24SShiju Jose 
2645e4193e24SShiju Jose 	if (!test_bit(HCLGE_STATE_SERVICE_INITED, &hdev->state)) {
2646e4193e24SShiju Jose 		dev_err(dev,
2647d991452dSJiaran Zhang 			"failed to handle msix error during dev init\n");
2648d991452dSJiaran Zhang 		return -EAGAIN;
2649e4193e24SShiju Jose 	}
2650e4193e24SShiju Jose 
2651e4193e24SShiju Jose 	return hclge_handle_all_hw_msix_error(hdev, reset_requests);
2652e4193e24SShiju Jose }
2653e4193e24SShiju Jose 
hclge_handle_mac_tnl(struct hclge_dev * hdev)26542e2deee7SJiaran Zhang int hclge_handle_mac_tnl(struct hclge_dev *hdev)
26552e2deee7SJiaran Zhang {
26562e2deee7SJiaran Zhang 	struct hclge_mac_tnl_stats mac_tnl_stats;
26572e2deee7SJiaran Zhang 	struct device *dev = &hdev->pdev->dev;
26582e2deee7SJiaran Zhang 	struct hclge_desc desc;
26592e2deee7SJiaran Zhang 	u32 status;
26602e2deee7SJiaran Zhang 	int ret;
26612e2deee7SJiaran Zhang 
26622e2deee7SJiaran Zhang 	/* query and clear mac tnl interruptions */
26632e2deee7SJiaran Zhang 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_QUERY_MAC_TNL_INT, true);
26642e2deee7SJiaran Zhang 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
26652e2deee7SJiaran Zhang 	if (ret) {
26662e2deee7SJiaran Zhang 		dev_err(dev, "failed to query mac tnl int, ret = %d.\n", ret);
26672e2deee7SJiaran Zhang 		return ret;
26682e2deee7SJiaran Zhang 	}
26692e2deee7SJiaran Zhang 
26702e2deee7SJiaran Zhang 	status = le32_to_cpu(desc.data[0]);
26712e2deee7SJiaran Zhang 	if (status) {
26722e2deee7SJiaran Zhang 		/* When mac tnl interrupt occurs, we record current time and
26732e2deee7SJiaran Zhang 		 * register status here in a fifo, then clear the status. So
26742e2deee7SJiaran Zhang 		 * that if link status changes suddenly at some time, we can
26752e2deee7SJiaran Zhang 		 * query them by debugfs.
26762e2deee7SJiaran Zhang 		 */
26772e2deee7SJiaran Zhang 		mac_tnl_stats.time = local_clock();
26782e2deee7SJiaran Zhang 		mac_tnl_stats.status = status;
26792e2deee7SJiaran Zhang 		kfifo_put(&hdev->mac_tnl_log, mac_tnl_stats);
26802e2deee7SJiaran Zhang 		ret = hclge_clear_mac_tnl_int(hdev);
26812e2deee7SJiaran Zhang 		if (ret)
26822e2deee7SJiaran Zhang 			dev_err(dev, "failed to clear mac tnl int, ret = %d.\n",
26832e2deee7SJiaran Zhang 				ret);
26842e2deee7SJiaran Zhang 	}
26852e2deee7SJiaran Zhang 
26862e2deee7SJiaran Zhang 	return ret;
26872e2deee7SJiaran Zhang }
26882e2deee7SJiaran Zhang 
hclge_handle_all_hns_hw_errors(struct hnae3_ae_dev * ae_dev)2689e4193e24SShiju Jose void hclge_handle_all_hns_hw_errors(struct hnae3_ae_dev *ae_dev)
2690e4193e24SShiju Jose {
2691e4193e24SShiju Jose 	struct hclge_dev *hdev = ae_dev->priv;
2692e4193e24SShiju Jose 	struct device *dev = &hdev->pdev->dev;
2693e4193e24SShiju Jose 	u32 mpf_bd_num, pf_bd_num, bd_num;
2694e4193e24SShiju Jose 	struct hclge_desc *desc;
2695e4193e24SShiju Jose 	u32 status;
2696e4193e24SShiju Jose 	int ret;
2697e4193e24SShiju Jose 
2698e4193e24SShiju Jose 	ae_dev->hw_err_reset_req = 0;
2699e4193e24SShiju Jose 	status = hclge_read_dev(&hdev->hw, HCLGE_RAS_PF_OTHER_INT_STS_REG);
2700e4193e24SShiju Jose 
2701e4193e24SShiju Jose 	/* query the number of bds for the MSIx int status */
2702987b4ae7SWeihang Li 	ret = hclge_query_bd_num(hdev, false, &mpf_bd_num, &pf_bd_num);
2703987b4ae7SWeihang Li 	if (ret)
2704e4193e24SShiju Jose 		return;
2705e4193e24SShiju Jose 
2706e4193e24SShiju Jose 	bd_num = max_t(u32, mpf_bd_num, pf_bd_num);
2707e4193e24SShiju Jose 	desc = kcalloc(bd_num, sizeof(struct hclge_desc), GFP_KERNEL);
2708e4193e24SShiju Jose 	if (!desc)
2709e4193e24SShiju Jose 		return;
2710e4193e24SShiju Jose 
2711e4193e24SShiju Jose 	/* Clear HNS hw errors reported through msix  */
2712e4193e24SShiju Jose 	memset(&desc[0].data[0], 0xFF, mpf_bd_num * sizeof(struct hclge_desc) -
2713e4193e24SShiju Jose 	       HCLGE_DESC_NO_DATA_LEN);
2714e4193e24SShiju Jose 	ret = hclge_clear_hw_msix_error(hdev, desc, true, mpf_bd_num);
2715e4193e24SShiju Jose 	if (ret) {
2716e4193e24SShiju Jose 		dev_err(dev, "fail(%d) to clear mpf msix int during init\n",
2717e4193e24SShiju Jose 			ret);
2718e4193e24SShiju Jose 		goto msi_error;
2719e4193e24SShiju Jose 	}
2720e4193e24SShiju Jose 
2721e4193e24SShiju Jose 	memset(&desc[0].data[0], 0xFF, pf_bd_num * sizeof(struct hclge_desc) -
2722e4193e24SShiju Jose 	       HCLGE_DESC_NO_DATA_LEN);
2723e4193e24SShiju Jose 	ret = hclge_clear_hw_msix_error(hdev, desc, false, pf_bd_num);
2724e4193e24SShiju Jose 	if (ret) {
2725e4193e24SShiju Jose 		dev_err(dev, "fail(%d) to clear pf msix int during init\n",
2726e4193e24SShiju Jose 			ret);
2727e4193e24SShiju Jose 		goto msi_error;
2728e4193e24SShiju Jose 	}
2729e4193e24SShiju Jose 
2730e4193e24SShiju Jose 	/* Handle Non-fatal HNS RAS errors */
2731e4193e24SShiju Jose 	if (status & HCLGE_RAS_REG_NFE_MASK) {
2732ac887be5SXiaofei Tan 		dev_err(dev, "HNS hw error(RAS) identified during init\n");
2733e4193e24SShiju Jose 		hclge_handle_all_ras_errors(hdev);
2734e4193e24SShiju Jose 	}
2735e4193e24SShiju Jose 
2736e4193e24SShiju Jose msi_error:
2737e4193e24SShiju Jose 	kfree(desc);
2738e4193e24SShiju Jose }
27392e2deee7SJiaran Zhang 
hclge_find_error_source(struct hclge_dev * hdev)27401c360a4aSJiaran Zhang bool hclge_find_error_source(struct hclge_dev *hdev)
27411c360a4aSJiaran Zhang {
27421c360a4aSJiaran Zhang 	u32 msix_src_flag, hw_err_src_flag;
27431c360a4aSJiaran Zhang 
27441c360a4aSJiaran Zhang 	msix_src_flag = hclge_read_dev(&hdev->hw, HCLGE_MISC_VECTOR_INT_STS) &
27451c360a4aSJiaran Zhang 			HCLGE_VECTOR0_REG_MSIX_MASK;
27461c360a4aSJiaran Zhang 
27471c360a4aSJiaran Zhang 	hw_err_src_flag = hclge_read_dev(&hdev->hw,
27481c360a4aSJiaran Zhang 					 HCLGE_RAS_PF_OTHER_INT_STS_REG) &
27491c360a4aSJiaran Zhang 			  HCLGE_RAS_REG_ERR_MASK;
27501c360a4aSJiaran Zhang 
27511c360a4aSJiaran Zhang 	return msix_src_flag || hw_err_src_flag;
27521c360a4aSJiaran Zhang }
27531c360a4aSJiaran Zhang 
hclge_handle_occurred_error(struct hclge_dev * hdev)27541c360a4aSJiaran Zhang void hclge_handle_occurred_error(struct hclge_dev *hdev)
27551c360a4aSJiaran Zhang {
27561c360a4aSJiaran Zhang 	struct hnae3_ae_dev *ae_dev = pci_get_drvdata(hdev->pdev);
27571c360a4aSJiaran Zhang 
27581c360a4aSJiaran Zhang 	if (hclge_find_error_source(hdev))
27591c360a4aSJiaran Zhang 		hclge_handle_error_info_log(ae_dev);
27601c360a4aSJiaran Zhang }
27611c360a4aSJiaran Zhang 
27622e2deee7SJiaran Zhang static void
hclge_handle_error_type_reg_log(struct device * dev,struct hclge_mod_err_info * mod_info,struct hclge_type_reg_err_info * type_reg_info)27632e2deee7SJiaran Zhang hclge_handle_error_type_reg_log(struct device *dev,
27642e2deee7SJiaran Zhang 				struct hclge_mod_err_info *mod_info,
27652e2deee7SJiaran Zhang 				struct hclge_type_reg_err_info *type_reg_info)
27662e2deee7SJiaran Zhang {
27672e2deee7SJiaran Zhang #define HCLGE_ERR_TYPE_MASK 0x7F
27682e2deee7SJiaran Zhang #define HCLGE_ERR_TYPE_IS_RAS_OFFSET 7
27692e2deee7SJiaran Zhang 
27702e2deee7SJiaran Zhang 	u8 mod_id, total_module, type_id, total_type, i, is_ras;
27718a95e360SJiaran Zhang 	u8 index_module = MODULE_NONE;
27728a95e360SJiaran Zhang 	u8 index_type = NONE_ERROR;
27732e2deee7SJiaran Zhang 
27742e2deee7SJiaran Zhang 	mod_id = mod_info->mod_id;
27752e2deee7SJiaran Zhang 	type_id = type_reg_info->type_id & HCLGE_ERR_TYPE_MASK;
27762e2deee7SJiaran Zhang 	is_ras = type_reg_info->type_id >> HCLGE_ERR_TYPE_IS_RAS_OFFSET;
27772e2deee7SJiaran Zhang 
27782e2deee7SJiaran Zhang 	total_module = ARRAY_SIZE(hclge_hw_module_id_st);
27792e2deee7SJiaran Zhang 	total_type = ARRAY_SIZE(hclge_hw_type_id_st);
27802e2deee7SJiaran Zhang 
27818a95e360SJiaran Zhang 	for (i = 0; i < total_module; i++) {
27828a95e360SJiaran Zhang 		if (mod_id == hclge_hw_module_id_st[i].module_id) {
27838a95e360SJiaran Zhang 			index_module = i;
27848a95e360SJiaran Zhang 			break;
27858a95e360SJiaran Zhang 		}
27868a95e360SJiaran Zhang 	}
27878a95e360SJiaran Zhang 
27888a95e360SJiaran Zhang 	for (i = 0; i < total_type; i++) {
27898a95e360SJiaran Zhang 		if (type_id == hclge_hw_type_id_st[i].type_id) {
27908a95e360SJiaran Zhang 			index_type = i;
27918a95e360SJiaran Zhang 			break;
27928a95e360SJiaran Zhang 		}
27938a95e360SJiaran Zhang 	}
27948a95e360SJiaran Zhang 
27958a95e360SJiaran Zhang 	if (index_module != MODULE_NONE && index_type != NONE_ERROR)
27962e2deee7SJiaran Zhang 		dev_err(dev,
27972e2deee7SJiaran Zhang 			"found %s %s, is %s error.\n",
27988a95e360SJiaran Zhang 			hclge_hw_module_id_st[index_module].msg,
27998a95e360SJiaran Zhang 			hclge_hw_type_id_st[index_type].msg,
28002e2deee7SJiaran Zhang 			is_ras ? "ras" : "msix");
28012e2deee7SJiaran Zhang 	else
28022e2deee7SJiaran Zhang 		dev_err(dev,
28032e2deee7SJiaran Zhang 			"unknown module[%u] or type[%u].\n", mod_id, type_id);
28042e2deee7SJiaran Zhang 
28052e2deee7SJiaran Zhang 	dev_err(dev, "reg_value:\n");
28062e2deee7SJiaran Zhang 	for (i = 0; i < type_reg_info->reg_num; i++)
28072e2deee7SJiaran Zhang 		dev_err(dev, "0x%08x\n", type_reg_info->hclge_reg[i]);
28082e2deee7SJiaran Zhang }
28092e2deee7SJiaran Zhang 
hclge_handle_error_module_log(struct hnae3_ae_dev * ae_dev,const u32 * buf,u32 buf_size)28102e2deee7SJiaran Zhang static void hclge_handle_error_module_log(struct hnae3_ae_dev *ae_dev,
28112e2deee7SJiaran Zhang 					  const u32 *buf, u32 buf_size)
28122e2deee7SJiaran Zhang {
28132e2deee7SJiaran Zhang 	struct hclge_type_reg_err_info *type_reg_info;
28142e2deee7SJiaran Zhang 	struct hclge_dev *hdev = ae_dev->priv;
28152e2deee7SJiaran Zhang 	struct device *dev = &hdev->pdev->dev;
28162e2deee7SJiaran Zhang 	struct hclge_mod_err_info *mod_info;
28172e2deee7SJiaran Zhang 	struct hclge_sum_err_info *sum_info;
28182e2deee7SJiaran Zhang 	u8 mod_num, err_num, i;
28192e2deee7SJiaran Zhang 	u32 offset = 0;
28202e2deee7SJiaran Zhang 
28212e2deee7SJiaran Zhang 	sum_info = (struct hclge_sum_err_info *)&buf[offset++];
28222e2deee7SJiaran Zhang 	if (sum_info->reset_type &&
28232e2deee7SJiaran Zhang 	    sum_info->reset_type != HNAE3_NONE_RESET)
28242e2deee7SJiaran Zhang 		set_bit(sum_info->reset_type, &ae_dev->hw_err_reset_req);
28252e2deee7SJiaran Zhang 	mod_num = sum_info->mod_num;
28262e2deee7SJiaran Zhang 
28272e2deee7SJiaran Zhang 	while (mod_num--) {
28282e2deee7SJiaran Zhang 		if (offset >= buf_size) {
28292e2deee7SJiaran Zhang 			dev_err(dev, "The offset(%u) exceeds buf's size(%u).\n",
28302e2deee7SJiaran Zhang 				offset, buf_size);
28312e2deee7SJiaran Zhang 			return;
28322e2deee7SJiaran Zhang 		}
28332e2deee7SJiaran Zhang 		mod_info = (struct hclge_mod_err_info *)&buf[offset++];
28342e2deee7SJiaran Zhang 		err_num = mod_info->err_num;
28352e2deee7SJiaran Zhang 
28362e2deee7SJiaran Zhang 		for (i = 0; i < err_num; i++) {
28372e2deee7SJiaran Zhang 			if (offset >= buf_size) {
28382e2deee7SJiaran Zhang 				dev_err(dev,
28392e2deee7SJiaran Zhang 					"The offset(%u) exceeds buf size(%u).\n",
28402e2deee7SJiaran Zhang 					offset, buf_size);
28412e2deee7SJiaran Zhang 				return;
28422e2deee7SJiaran Zhang 			}
28432e2deee7SJiaran Zhang 
28442e2deee7SJiaran Zhang 			type_reg_info = (struct hclge_type_reg_err_info *)
28452e2deee7SJiaran Zhang 					    &buf[offset++];
28462e2deee7SJiaran Zhang 			hclge_handle_error_type_reg_log(dev, mod_info,
28472e2deee7SJiaran Zhang 							type_reg_info);
28482e2deee7SJiaran Zhang 
28492e2deee7SJiaran Zhang 			offset += type_reg_info->reg_num;
28502e2deee7SJiaran Zhang 		}
28512e2deee7SJiaran Zhang 	}
28522e2deee7SJiaran Zhang }
28532e2deee7SJiaran Zhang 
hclge_query_all_err_bd_num(struct hclge_dev * hdev,u32 * bd_num)28542e2deee7SJiaran Zhang static int hclge_query_all_err_bd_num(struct hclge_dev *hdev, u32 *bd_num)
28552e2deee7SJiaran Zhang {
28562e2deee7SJiaran Zhang 	struct device *dev = &hdev->pdev->dev;
28572e2deee7SJiaran Zhang 	struct hclge_desc desc_bd;
28582e2deee7SJiaran Zhang 	int ret;
28592e2deee7SJiaran Zhang 
28602e2deee7SJiaran Zhang 	hclge_cmd_setup_basic_desc(&desc_bd, HCLGE_QUERY_ALL_ERR_BD_NUM, true);
28612e2deee7SJiaran Zhang 	ret = hclge_cmd_send(&hdev->hw, &desc_bd, 1);
28622e2deee7SJiaran Zhang 	if (ret) {
28632e2deee7SJiaran Zhang 		dev_err(dev, "failed to query error bd_num, ret = %d.\n", ret);
28642e2deee7SJiaran Zhang 		return ret;
28652e2deee7SJiaran Zhang 	}
28662e2deee7SJiaran Zhang 
28672e2deee7SJiaran Zhang 	*bd_num = le32_to_cpu(desc_bd.data[0]);
28682e2deee7SJiaran Zhang 	if (!(*bd_num)) {
28692e2deee7SJiaran Zhang 		dev_err(dev, "The value of bd_num is 0!\n");
28702e2deee7SJiaran Zhang 		return -EINVAL;
28712e2deee7SJiaran Zhang 	}
28722e2deee7SJiaran Zhang 
28732e2deee7SJiaran Zhang 	return 0;
28742e2deee7SJiaran Zhang }
28752e2deee7SJiaran Zhang 
hclge_query_all_err_info(struct hclge_dev * hdev,struct hclge_desc * desc,u32 bd_num)28762e2deee7SJiaran Zhang static int hclge_query_all_err_info(struct hclge_dev *hdev,
28772e2deee7SJiaran Zhang 				    struct hclge_desc *desc, u32 bd_num)
28782e2deee7SJiaran Zhang {
28792e2deee7SJiaran Zhang 	struct device *dev = &hdev->pdev->dev;
28802e2deee7SJiaran Zhang 	int ret;
28812e2deee7SJiaran Zhang 
28822e2deee7SJiaran Zhang 	hclge_cmd_setup_basic_desc(desc, HCLGE_QUERY_ALL_ERR_INFO, true);
28832e2deee7SJiaran Zhang 	ret = hclge_cmd_send(&hdev->hw, desc, bd_num);
28842e2deee7SJiaran Zhang 	if (ret)
28852e2deee7SJiaran Zhang 		dev_err(dev, "failed to query error info, ret = %d.\n", ret);
28862e2deee7SJiaran Zhang 
28872e2deee7SJiaran Zhang 	return ret;
28882e2deee7SJiaran Zhang }
28892e2deee7SJiaran Zhang 
hclge_handle_error_info_log(struct hnae3_ae_dev * ae_dev)28902e2deee7SJiaran Zhang int hclge_handle_error_info_log(struct hnae3_ae_dev *ae_dev)
28912e2deee7SJiaran Zhang {
28922e2deee7SJiaran Zhang 	u32 bd_num, desc_len, buf_len, buf_size, i;
28932e2deee7SJiaran Zhang 	struct hclge_dev *hdev = ae_dev->priv;
28942e2deee7SJiaran Zhang 	struct hclge_desc *desc;
28952e2deee7SJiaran Zhang 	__le32 *desc_data;
28962e2deee7SJiaran Zhang 	u32 *buf;
28972e2deee7SJiaran Zhang 	int ret;
28982e2deee7SJiaran Zhang 
28992e2deee7SJiaran Zhang 	ret = hclge_query_all_err_bd_num(hdev, &bd_num);
29002e2deee7SJiaran Zhang 	if (ret)
29012e2deee7SJiaran Zhang 		goto out;
29022e2deee7SJiaran Zhang 
29032e2deee7SJiaran Zhang 	desc_len = bd_num * sizeof(struct hclge_desc);
29042e2deee7SJiaran Zhang 	desc = kzalloc(desc_len, GFP_KERNEL);
29052e2deee7SJiaran Zhang 	if (!desc) {
29062e2deee7SJiaran Zhang 		ret = -ENOMEM;
29072e2deee7SJiaran Zhang 		goto out;
29082e2deee7SJiaran Zhang 	}
29092e2deee7SJiaran Zhang 
29102e2deee7SJiaran Zhang 	ret = hclge_query_all_err_info(hdev, desc, bd_num);
29112e2deee7SJiaran Zhang 	if (ret)
29122e2deee7SJiaran Zhang 		goto err_desc;
29132e2deee7SJiaran Zhang 
29142e2deee7SJiaran Zhang 	buf_len = bd_num * sizeof(struct hclge_desc) - HCLGE_DESC_NO_DATA_LEN;
29152e2deee7SJiaran Zhang 	buf_size = buf_len / sizeof(u32);
29162e2deee7SJiaran Zhang 
29172e2deee7SJiaran Zhang 	desc_data = kzalloc(buf_len, GFP_KERNEL);
2918b40d7af7SChristophe JAILLET 	if (!desc_data) {
2919b40d7af7SChristophe JAILLET 		ret = -ENOMEM;
2920b40d7af7SChristophe JAILLET 		goto err_desc;
2921b40d7af7SChristophe JAILLET 	}
29222e2deee7SJiaran Zhang 
29232e2deee7SJiaran Zhang 	buf = kzalloc(buf_len, GFP_KERNEL);
29242e2deee7SJiaran Zhang 	if (!buf) {
29252e2deee7SJiaran Zhang 		ret = -ENOMEM;
29262e2deee7SJiaran Zhang 		goto err_buf_alloc;
29272e2deee7SJiaran Zhang 	}
29282e2deee7SJiaran Zhang 
29292e2deee7SJiaran Zhang 	memcpy(desc_data, &desc[0].data[0], buf_len);
29302e2deee7SJiaran Zhang 	for (i = 0; i < buf_size; i++)
29312e2deee7SJiaran Zhang 		buf[i] = le32_to_cpu(desc_data[i]);
29322e2deee7SJiaran Zhang 
29332e2deee7SJiaran Zhang 	hclge_handle_error_module_log(ae_dev, buf, buf_size);
29342e2deee7SJiaran Zhang 	kfree(buf);
29352e2deee7SJiaran Zhang 
29362e2deee7SJiaran Zhang err_buf_alloc:
29372e2deee7SJiaran Zhang 	kfree(desc_data);
29382e2deee7SJiaran Zhang err_desc:
29392e2deee7SJiaran Zhang 	kfree(desc);
29402e2deee7SJiaran Zhang out:
29412e2deee7SJiaran Zhang 	return ret;
29422e2deee7SJiaran Zhang }
2943