Skip to content

Commit 5e3e23b

Browse files
vsyrjalaAndi Shyti
authored andcommitted
drm/i915: Extract gen8_report_fault()
gen8_check_faults() and xehp_check_faults() are nearly identical. Refactor the common bits into gen8_report_fault(). Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Reviewed-by: Andi Shyti <andi.shyti@linux.intel.com> Signed-off-by: Andi Shyti <andi.shyti@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20250211231941.22769-7-ville.syrjala@linux.intel.com
1 parent 50c8299 commit 5e3e23b

File tree

1 file changed

+29
-44
lines changed

1 file changed

+29
-44
lines changed

drivers/gpu/drm/i915/gt/intel_gt.c

Lines changed: 29 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
326347
static 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

362365
static 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

403388
void intel_gt_check_and_clear_faults(struct intel_gt *gt)

0 commit comments

Comments
 (0)