@@ -302,25 +302,48 @@ static void gen6_check_faults(struct intel_gt *gt)
302302{
303303 struct intel_engine_cs * engine ;
304304 enum intel_engine_id id ;
305- unsigned long fault ;
306305
307306 for_each_engine (engine , gt , id ) {
307+ u32 fault ;
308+
308309 fault = GEN6_RING_FAULT_REG_READ (engine );
310+
309311 if (fault & RING_FAULT_VALID ) {
310312 gt_dbg (gt , "Unexpected fault\n"
311- "\tAddr: 0x%08lx \n"
313+ "\tAddr: 0x%08x \n"
312314 "\tAddress space: %s\n"
313- "\tSource ID: %ld \n"
314- "\tType: %ld \n" ,
315- fault & PAGE_MASK ,
315+ "\tSource ID: %d \n"
316+ "\tType: %d \n" ,
317+ fault & RING_FAULT_VADDR_MASK ,
316318 fault & RING_FAULT_GTTSEL_MASK ?
317319 "GGTT" : "PPGTT" ,
318- RING_FAULT_SRCID ( fault ),
319- RING_FAULT_FAULT_TYPE ( fault ));
320+ REG_FIELD_GET ( RING_FAULT_SRCID_MASK , fault ),
321+ REG_FIELD_GET ( RING_FAULT_FAULT_TYPE_MASK , fault ));
320322 }
321323 }
322324}
323325
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+
324347static void xehp_check_faults (struct intel_gt * gt )
325348{
326349 u32 fault ;
@@ -333,28 +356,10 @@ static void xehp_check_faults(struct intel_gt *gt)
333356 * toward the primary instance.
334357 */
335358 fault = intel_gt_mcr_read_any (gt , XEHP_RING_FAULT_REG );
336- if (fault & RING_FAULT_VALID ) {
337- u32 fault_data0 , fault_data1 ;
338- u64 fault_addr ;
339-
340- fault_data0 = intel_gt_mcr_read_any (gt , XEHP_FAULT_TLB_DATA0 );
341- fault_data1 = intel_gt_mcr_read_any (gt , XEHP_FAULT_TLB_DATA1 );
342-
343- fault_addr = ((u64 )(fault_data1 & FAULT_VA_HIGH_BITS ) << 44 ) |
344- ((u64 )fault_data0 << 12 );
345-
346- gt_dbg (gt , "Unexpected fault\n"
347- "\tAddr: 0x%08x_%08x\n"
348- "\tAddress space: %s\n"
349- "\tEngine ID: %d\n"
350- "\tSource ID: %d\n"
351- "\tType: %d\n" ,
352- upper_32_bits (fault_addr ), lower_32_bits (fault_addr ),
353- fault_data1 & FAULT_GTT_SEL ? "GGTT" : "PPGTT" ,
354- GEN8_RING_FAULT_ENGINE_ID (fault ),
355- RING_FAULT_SRCID (fault ),
356- RING_FAULT_FAULT_TYPE (fault ));
357- }
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 ));
358363}
359364
360365static void gen8_check_faults (struct intel_gt * gt )
@@ -374,28 +379,10 @@ static void gen8_check_faults(struct intel_gt *gt)
374379 }
375380
376381 fault = intel_uncore_read (uncore , fault_reg );
377- if (fault & RING_FAULT_VALID ) {
378- u32 fault_data0 , fault_data1 ;
379- u64 fault_addr ;
380-
381- fault_data0 = intel_uncore_read (uncore , fault_data0_reg );
382- fault_data1 = intel_uncore_read (uncore , fault_data1_reg );
383-
384- fault_addr = ((u64 )(fault_data1 & FAULT_VA_HIGH_BITS ) << 44 ) |
385- ((u64 )fault_data0 << 12 );
386-
387- gt_dbg (gt , "Unexpected fault\n"
388- "\tAddr: 0x%08x_%08x\n"
389- "\tAddress space: %s\n"
390- "\tEngine ID: %d\n"
391- "\tSource ID: %d\n"
392- "\tType: %d\n" ,
393- upper_32_bits (fault_addr ), lower_32_bits (fault_addr ),
394- fault_data1 & FAULT_GTT_SEL ? "GGTT" : "PPGTT" ,
395- GEN8_RING_FAULT_ENGINE_ID (fault ),
396- RING_FAULT_SRCID (fault ),
397- RING_FAULT_FAULT_TYPE (fault ));
398- }
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 ));
399386}
400387
401388void intel_gt_check_and_clear_faults (struct intel_gt * gt )
0 commit comments