@@ -323,6 +323,27 @@ static void gen6_check_faults(struct intel_gt *gt)
323
323
}
324
324
}
325
325
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
+
326
347
static void xehp_check_faults (struct intel_gt * gt )
327
348
{
328
349
u32 fault ;
@@ -335,28 +356,10 @@ static void xehp_check_faults(struct intel_gt *gt)
335
356
* toward the primary instance.
336
357
*/
337
358
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 ));
360
363
}
361
364
362
365
static void gen8_check_faults (struct intel_gt * gt )
@@ -376,28 +379,10 @@ static void gen8_check_faults(struct intel_gt *gt)
376
379
}
377
380
378
381
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 ));
401
386
}
402
387
403
388
void intel_gt_check_and_clear_faults (struct intel_gt * gt )
0 commit comments