@@ -313,8 +313,7 @@ struct hisi_qm_hw_ops {
313
313
u8 cmd , u16 index , u8 priority );
314
314
u32 (* get_irq_num )(struct hisi_qm * qm );
315
315
int (* debug_init )(struct hisi_qm * qm );
316
- void (* hw_error_init )(struct hisi_qm * qm , u32 ce , u32 nfe , u32 fe ,
317
- u32 msi );
316
+ void (* hw_error_init )(struct hisi_qm * qm , u32 ce , u32 nfe , u32 fe );
318
317
void (* hw_error_uninit )(struct hisi_qm * qm );
319
318
pci_ers_result_t (* hw_error_handle )(struct hisi_qm * qm );
320
319
};
@@ -707,26 +706,6 @@ static irqreturn_t qm_aeq_irq(int irq, void *data)
707
706
708
707
static irqreturn_t qm_abnormal_irq (int irq , void * data )
709
708
{
710
- const struct hisi_qm_hw_error * err = qm_hw_error ;
711
- struct hisi_qm * qm = data ;
712
- struct device * dev = & qm -> pdev -> dev ;
713
- u32 error_status , tmp ;
714
-
715
- /* read err sts */
716
- tmp = readl (qm -> io_base + QM_ABNORMAL_INT_STATUS );
717
- error_status = qm -> msi_mask & tmp ;
718
-
719
- while (err -> msg ) {
720
- if (err -> int_msk & error_status )
721
- dev_err (dev , "%s [error status=0x%x] found\n" ,
722
- err -> msg , err -> int_msk );
723
-
724
- err ++ ;
725
- }
726
-
727
- /* clear err sts */
728
- writel (error_status , qm -> io_base + QM_ABNORMAL_INT_SOURCE );
729
-
730
709
return IRQ_HANDLED ;
731
710
}
732
711
@@ -1116,38 +1095,28 @@ static int qm_create_debugfs_file(struct hisi_qm *qm, enum qm_debug_file index)
1116
1095
return 0 ;
1117
1096
}
1118
1097
1119
- static void qm_hw_error_init_v1 (struct hisi_qm * qm , u32 ce , u32 nfe , u32 fe ,
1120
- u32 msi )
1098
+ static void qm_hw_error_init_v1 (struct hisi_qm * qm , u32 ce , u32 nfe , u32 fe )
1121
1099
{
1122
1100
writel (QM_ABNORMAL_INT_MASK_VALUE , qm -> io_base + QM_ABNORMAL_INT_MASK );
1123
1101
}
1124
1102
1125
- static void qm_hw_error_init_v2 (struct hisi_qm * qm , u32 ce , u32 nfe , u32 fe ,
1126
- u32 msi )
1103
+ static void qm_hw_error_init_v2 (struct hisi_qm * qm , u32 ce , u32 nfe , u32 fe )
1127
1104
{
1128
- u32 irq_enable = ce | nfe | fe | msi ;
1105
+ u32 irq_enable = ce | nfe | fe ;
1129
1106
u32 irq_unmask = ~irq_enable ;
1130
- u32 error_status ;
1131
1107
1132
1108
qm -> error_mask = ce | nfe | fe ;
1133
- qm -> msi_mask = msi ;
1134
1109
1135
1110
/* clear QM hw residual error source */
1136
- error_status = readl (qm -> io_base + QM_ABNORMAL_INT_STATUS );
1137
- if (error_status ) {
1138
- error_status &= qm -> error_mask ;
1139
- writel (error_status , qm -> io_base + QM_ABNORMAL_INT_SOURCE );
1140
- }
1111
+ writel (QM_ABNORMAL_INT_SOURCE_CLR ,
1112
+ qm -> io_base + QM_ABNORMAL_INT_SOURCE );
1141
1113
1142
1114
/* configure error type */
1143
1115
writel (ce , qm -> io_base + QM_RAS_CE_ENABLE );
1144
1116
writel (QM_RAS_CE_TIMES_PER_IRQ , qm -> io_base + QM_RAS_CE_THRESHOLD );
1145
1117
writel (nfe , qm -> io_base + QM_RAS_NFE_ENABLE );
1146
1118
writel (fe , qm -> io_base + QM_RAS_FE_ENABLE );
1147
1119
1148
- /* use RAS irq default, so only set QM_RAS_MSI_INT_SEL for MSI */
1149
- writel (msi , qm -> io_base + QM_RAS_MSI_INT_SEL );
1150
-
1151
1120
irq_unmask &= readl (qm -> io_base + QM_ABNORMAL_INT_MASK );
1152
1121
writel (irq_unmask , qm -> io_base + QM_ABNORMAL_INT_MASK );
1153
1122
}
@@ -1207,9 +1176,11 @@ static pci_ers_result_t qm_hw_error_handle_v2(struct hisi_qm *qm)
1207
1176
qm -> err_status .is_qm_ecc_mbit = true;
1208
1177
1209
1178
qm_log_hw_error (qm , error_status );
1210
-
1211
- /* clear err sts */
1212
- writel (error_status , qm -> io_base + QM_ABNORMAL_INT_SOURCE );
1179
+ if (error_status == QM_DB_RANDOM_INVALID ) {
1180
+ writel (error_status , qm -> io_base +
1181
+ QM_ABNORMAL_INT_SOURCE );
1182
+ return PCI_ERS_RESULT_RECOVERED ;
1183
+ }
1213
1184
1214
1185
return PCI_ERS_RESULT_NEED_RESET ;
1215
1186
}
@@ -2476,8 +2447,7 @@ static void qm_hw_error_init(struct hisi_qm *qm)
2476
2447
return ;
2477
2448
}
2478
2449
2479
- qm -> ops -> hw_error_init (qm , err_info -> ce , err_info -> nfe ,
2480
- err_info -> fe , err_info -> msi );
2450
+ qm -> ops -> hw_error_init (qm , err_info -> ce , err_info -> nfe , err_info -> fe );
2481
2451
}
2482
2452
2483
2453
static void qm_hw_error_uninit (struct hisi_qm * qm )
0 commit comments