@@ -323,6 +323,27 @@ static void gen6_check_faults(struct intel_gt *gt)
323323 }
324324}
325325
326+ static void gen8_report_fault (struct intel_gt * gt , u32 fault ,
327+ u32 fault_data0 , u32 fault_data1 )
328+ {
329+ u64 fault_addr ;
330+
331+ fault_addr = ((u64 )(fault_data1 & FAULT_VA_HIGH_BITS ) << 44 ) |
332+ ((u64 )fault_data0 << 12 );
333+
334+ gt_dbg (gt , "Unexpected fault\n"
335+ "\tAddr: 0x%08x_%08x\n"
336+ "\tAddress space: %s\n"
337+ "\tEngine ID: %d\n"
338+ "\tSource ID: %d\n"
339+ "\tType: %d\n" ,
340+ upper_32_bits (fault_addr ), lower_32_bits (fault_addr ),
341+ fault_data1 & FAULT_GTT_SEL ? "GGTT" : "PPGTT" ,
342+ REG_FIELD_GET (RING_FAULT_ENGINE_ID_MASK , fault ),
343+ REG_FIELD_GET (RING_FAULT_SRCID_MASK , fault ),
344+ REG_FIELD_GET (RING_FAULT_FAULT_TYPE_MASK , fault ));
345+ }
346+
326347static void xehp_check_faults (struct intel_gt * gt )
327348{
328349 u32 fault ;
@@ -335,28 +356,10 @@ static void xehp_check_faults(struct intel_gt *gt)
335356 * toward the primary instance.
336357 */
337358 fault = intel_gt_mcr_read_any (gt , XEHP_RING_FAULT_REG );
338- if (fault & RING_FAULT_VALID ) {
339- u32 fault_data0 , fault_data1 ;
340- u64 fault_addr ;
341-
342- fault_data0 = intel_gt_mcr_read_any (gt , XEHP_FAULT_TLB_DATA0 );
343- fault_data1 = intel_gt_mcr_read_any (gt , XEHP_FAULT_TLB_DATA1 );
344-
345- fault_addr = ((u64 )(fault_data1 & FAULT_VA_HIGH_BITS ) << 44 ) |
346- ((u64 )fault_data0 << 12 );
347-
348- gt_dbg (gt , "Unexpected fault\n"
349- "\tAddr: 0x%08x_%08x\n"
350- "\tAddress space: %s\n"
351- "\tEngine ID: %d\n"
352- "\tSource ID: %d\n"
353- "\tType: %d\n" ,
354- upper_32_bits (fault_addr ), lower_32_bits (fault_addr ),
355- fault_data1 & FAULT_GTT_SEL ? "GGTT" : "PPGTT" ,
356- REG_FIELD_GET (RING_FAULT_ENGINE_ID_MASK , fault ),
357- REG_FIELD_GET (RING_FAULT_SRCID_MASK , fault ),
358- REG_FIELD_GET (RING_FAULT_FAULT_TYPE_MASK , fault ));
359- }
359+ if (fault & RING_FAULT_VALID )
360+ gen8_report_fault (gt , fault ,
361+ intel_gt_mcr_read_any (gt , XEHP_FAULT_TLB_DATA0 ),
362+ intel_gt_mcr_read_any (gt , XEHP_FAULT_TLB_DATA1 ));
360363}
361364
362365static void gen8_check_faults (struct intel_gt * gt )
@@ -376,28 +379,10 @@ static void gen8_check_faults(struct intel_gt *gt)
376379 }
377380
378381 fault = intel_uncore_read (uncore , fault_reg );
379- if (fault & RING_FAULT_VALID ) {
380- u32 fault_data0 , fault_data1 ;
381- u64 fault_addr ;
382-
383- fault_data0 = intel_uncore_read (uncore , fault_data0_reg );
384- fault_data1 = intel_uncore_read (uncore , fault_data1_reg );
385-
386- fault_addr = ((u64 )(fault_data1 & FAULT_VA_HIGH_BITS ) << 44 ) |
387- ((u64 )fault_data0 << 12 );
388-
389- gt_dbg (gt , "Unexpected fault\n"
390- "\tAddr: 0x%08x_%08x\n"
391- "\tAddress space: %s\n"
392- "\tEngine ID: %d\n"
393- "\tSource ID: %d\n"
394- "\tType: %d\n" ,
395- upper_32_bits (fault_addr ), lower_32_bits (fault_addr ),
396- fault_data1 & FAULT_GTT_SEL ? "GGTT" : "PPGTT" ,
397- REG_FIELD_GET (RING_FAULT_ENGINE_ID_MASK , fault ),
398- REG_FIELD_GET (RING_FAULT_SRCID_MASK , fault ),
399- REG_FIELD_GET (RING_FAULT_FAULT_TYPE_MASK , fault ));
400- }
382+ if (fault & RING_FAULT_VALID )
383+ gen8_report_fault (gt , fault ,
384+ intel_uncore_read (uncore , fault_data0_reg ),
385+ intel_uncore_read (uncore , fault_data1_reg ));
401386}
402387
403388void intel_gt_check_and_clear_faults (struct intel_gt * gt )
0 commit comments