On 17/03/2022 18:56, Alan Previn wrote:
Update GuC ADS size allocation to include space for the lists of error state capture register descriptors. Then, populate GuC ADS with the lists of registers we want GuC to report back to host on engine reset events. This list should include global, engine-class and engine-instance registers for every engine-class type on the current hardware. Ensure we allocate a persistent store for the register lists that are populated into ADS so that we don't need to allocate memory during GT resets when GuC is reloaded and ADS population happens again. NOTE: Start with a sample static table of register lists to layout the framework before adding real registers in subsequent patch. This static register tables are a different format from the ADS populated list. Signed-off-by: Alan Previn <alan.previn.teres.alexis@xxxxxxxxx> Reviewed-by: Matthew Brost <matthew.brost@xxxxxxxxx> --- drivers/gpu/drm/i915/Makefile | 1 + drivers/gpu/drm/i915/gt/uc/guc_capture_fwif.h | 91 +++++ drivers/gpu/drm/i915/gt/uc/intel_guc.c | 13 +- drivers/gpu/drm/i915/gt/uc/intel_guc.h | 9 +- drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c | 127 +++++- .../gpu/drm/i915/gt/uc/intel_guc_capture.c | 374 ++++++++++++++++++ .../gpu/drm/i915/gt/uc/intel_guc_capture.h | 22 ++ drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h | 8 + 8 files changed, 628 insertions(+), 17 deletions(-) create mode 100644 drivers/gpu/drm/i915/gt/uc/guc_capture_fwif.h create mode 100644 drivers/gpu/drm/i915/gt/uc/intel_guc_capture.c create mode 100644 drivers/gpu/drm/i915/gt/uc/intel_guc_capture.h
[snip]
+ +static int +guc_capture_list_init(struct intel_guc *guc, u32 owner, u32 type, u32 classid, + struct guc_mmio_reg *ptr, u16 num_entries) +{ + u32 i = 0; + struct drm_i915_private *i915 = guc_to_gt(guc)->i915; + const struct __guc_mmio_reg_descr_group *reglists = guc->capture->reglists; + const struct __guc_mmio_reg_descr_group *match; + + if (!reglists) + return -ENODEV; + + match = guc_capture_get_one_list(reglists, owner, type, classid); + if (match) { + for (i = 0; i < num_entries && i < match->num_regs; ++i) { + ptr[i].offset = match->list[i].reg.reg; + ptr[i].value = 0xDEADF00D; + ptr[i].flags = match->list[i].flags; + ptr[i].mask = match->list[i].mask; + } + return 0; + } + + guc_capture_warn_with_list_info(i915, "Missing register list init", owner, type, + classid);
I got a lot of these when booting on DG1 today (drm-tip): [ 4.396554] i915 0000:03:00.0: [drm:intel_wopcm_init [i915]] Calculated GuC WOPCM [592K, 1420K) [ 4.396681] i915 0000:03:00.0: [drm:i915_init_ggtt [i915]] clearing unused GTT space: [0, fee00000] [ 4.412408] i915 0000:00:02.0: [drm] fb0: i915drmfb frame buffer device [ 4.505766] MCR Steering: Default steering: sliceid=0x0, subsliceid=0x0 [ 4.505771] [drm:wa_init_finish [i915]] Initialized 6 GT workarounds on global [ 4.506300] [drm:wa_init_finish [i915]] Initialized 6 engine workarounds on rcs'0 [ 4.506413] [drm:wa_init_finish [i915]] Initialized 3 whitelist workarounds on rcs'0 [ 4.506490] [drm:wa_init_finish [i915]] Initialized 6 context workarounds on rcs'0 [ 4.506712] [drm:wa_init_finish [i915]] Initialized 1 engine workarounds on bcs'0 [ 4.506787] [drm:wa_init_finish [i915]] Initialized 1 whitelist workarounds on bcs'0 [ 4.506845] [drm:wa_init_finish [i915]] Initialized 1 context workarounds on bcs'0 [ 4.506972] [drm:wa_init_finish [i915]] Initialized 1 engine workarounds on vcs'0 [ 4.507026] [drm:wa_init_finish [i915]] Initialized 1 whitelist workarounds on vcs'0 [ 4.507160] [drm:wa_init_finish [i915]] Initialized 1 engine workarounds on vcs'2 [ 4.507217] [drm:wa_init_finish [i915]] Initialized 1 whitelist workarounds on vcs'2 [ 4.507330] [drm:wa_init_finish [i915]] Initialized 1 engine workarounds on vecs'0 [ 4.507385] [drm:wa_init_finish [i915]] Initialized 1 whitelist workarounds on vecs'0 [ 4.508752] [drm:intel_guc_log_create [i915]] guc_log_level=5 (enabled, verbose:yes, verbosity:3) [ 4.508999] i915 0000:03:00.0: [drm:intel_guc_ads_create [i915]] Used 4 KB for temporary ADS regset [ 4.509082] i915 0000:03:00.0: [drm:guc_capture_warn_with_list_info [i915]] GuC-capture: Missing register list size for PF Class-Registers on Video-Engine [ 4.509152] i915 0000:03:00.0: [drm:guc_capture_warn_with_list_info [i915]] GuC-capture: Missing register list size for PF Class-Registers on Blitter-Engine [ 4.509219] i915 0000:03:00.0: [drm:guc_capture_warn_with_list_info [i915]] GuC-capture: Missing register list size for VF Class-Registers on Render-Engine [ 4.509283] i915 0000:03:00.0: [drm:guc_capture_warn_with_list_info [i915]] GuC-capture: Missing register list size for VF Instance-Registers on Render-Engine [ 4.509347] i915 0000:03:00.0: [drm:guc_capture_warn_with_list_info [i915]] GuC-capture: Missing register list size for VF Class-Registers on Video-Engine [ 4.509408] i915 0000:03:00.0: [drm:guc_capture_warn_with_list_info [i915]] GuC-capture: Missing register list size for VF Instance-Registers on Video-Engine [ 4.509472] i915 0000:03:00.0: [drm:guc_capture_warn_with_list_info [i915]] GuC-capture: Missing register list size for VF Class-Registers on VideoEnhance-Engine [ 4.509531] i915 0000:03:00.0: [drm:guc_capture_warn_with_list_info [i915]] GuC-capture: Missing register list size for VF Instance-Registers on VideoEnhance-Engine [ 4.509600] i915 0000:03:00.0: [drm:guc_capture_warn_with_list_info [i915]] GuC-capture: Missing register list size for VF Class-Registers on Blitter-Engine [ 4.509665] i915 0000:03:00.0: [drm:guc_capture_warn_with_list_info [i915]] GuC-capture: Missing register list size for VF Instance-Registers on Blitter-Engine [ 4.509730] i915 0000:03:00.0: [drm:guc_capture_warn_with_list_info [i915]] GuC-capture: Missing register list size for VF Global-Registers. [ 4.514938] i915 0000:03:00.0: [drm:guc_capture_warn_with_list_info [i915]] GuC-capture: Missing register list size for PF Class-Registers on Video-Engine [ 4.515079] i915 0000:03:00.0: [drm:guc_capture_warn_with_list_info [i915]] GuC-capture: Missing register list size for PF Class-Registers on Blitter-Engine [ 4.515279] i915 0000:03:00.0: [drm:guc_capture_warn_with_list_info [i915]] GuC-capture: Missing register list size for VF Class-Registers on Render-Engine [ 4.515374] i915 0000:03:00.0: [drm:guc_capture_warn_with_list_info [i915]] GuC-capture: Missing register list size for VF Instance-Registers on Render-Engine [ 4.515471] i915 0000:03:00.0: [drm:guc_capture_warn_with_list_info [i915]] GuC-capture: Missing register list size for VF Class-Registers on Video-Engine [ 4.515559] i915 0000:03:00.0: [drm:guc_capture_warn_with_list_info [i915]] GuC-capture: Missing register list size for VF Instance-Registers on Video-Engine [ 4.515657] i915 0000:03:00.0: [drm:guc_capture_warn_with_list_info [i915]] GuC-capture: Missing register list size for VF Class-Registers on VideoEnhance-Engine [ 4.515742] i915 0000:03:00.0: [drm:guc_capture_warn_with_list_info [i915]] GuC-capture: Missing register list size for VF Instance-Registers on VideoEnhance-Engine [ 4.515815] i915 0000:03:00.0: [drm:guc_capture_warn_with_list_info [i915]] GuC-capture: Missing register list size for VF Class-Registers on Blitter-Engine [ 4.515883] i915 0000:03:00.0: [drm:guc_capture_warn_with_list_info [i915]] GuC-capture: Missing register list size for VF Instance-Registers on Blitter-Engine [ 4.516049] i915 0000:03:00.0: [drm:guc_capture_warn_with_list_info [i915]] GuC-capture: Missing register list size for VF Global-Registers. [ 4.519482] [drm:intel_guc_init [i915]] param[ 0] = 0x16304f [ 4.519617] [drm:intel_guc_init [i915]] param[ 1] = 0x40000 [ 4.519707] [drm:intel_guc_init [i915]] param[ 2] = 0x4 [ 4.519841] [drm:intel_guc_init [i915]] param[ 3] = 0x3 [ 4.519969] [drm:intel_guc_init [i915]] param[ 4] = 0xac8 [ 4.520093] [drm:intel_guc_init [i915]] param[ 5] = 0x49050001 [ 4.520221] [drm:intel_guc_init [i915]] param[ 6] = 0x0 [ 4.520350] [drm:intel_guc_init [i915]] param[ 7] = 0x0 [ 4.520468] [drm:intel_guc_init [i915]] param[ 8] = 0x0 [ 4.520581] [drm:intel_guc_init [i915]] param[ 9] = 0x0 [ 4.520665] [drm:intel_guc_init [i915]] param[10] = 0x0 [ 4.520733] [drm:intel_guc_init [i915]] param[11] = 0x0 [ 4.520816] [drm:intel_guc_init [i915]] param[12] = 0x0 [ 4.520883] [drm:intel_guc_init [i915]] param[13] = 0x0 [ 4.521296] i915 0000:03:00.0: [drm] GuC firmware i915/dg1_guc_69.0.3.bin version 69.0 [ 4.521298] i915 0000:03:00.0: [drm] HuC firmware i915/dg1_huc_7.9.3.bin version 7.9 [ 4.521818] i915 0000:03:00.0: [drm:guc_capture_warn_with_list_info [i915]] GuC-capture: Missing register list size for PF Class-Registers on Video-Engine [ 4.521921] i915 0000:03:00.0: [drm:guc_capture_warn_with_list_info [i915]] GuC-capture: Missing register list size for PF Class-Registers on Blitter-Engine [ 4.522086] i915 0000:03:00.0: [drm:guc_capture_warn_with_list_info [i915]] GuC-capture: Missing register list size for VF Class-Registers on Render-Engine [ 4.522151] i915 0000:03:00.0: [drm:guc_capture_warn_with_list_info [i915]] GuC-capture: Missing register list size for VF Instance-Registers on Render-Engine [ 4.522221] i915 0000:03:00.0: [drm:guc_capture_warn_with_list_info [i915]] GuC-capture: Missing register list size for VF Class-Registers on Video-Engine [ 4.522289] i915 0000:03:00.0: [drm:guc_capture_warn_with_list_info [i915]] GuC-capture: Missing register list size for VF Instance-Registers on Video-Engine [ 4.522359] i915 0000:03:00.0: [drm:guc_capture_warn_with_list_info [i915]] GuC-capture: Missing register list size for VF Class-Registers on VideoEnhance-Engine [ 4.522419] i915 0000:03:00.0: [drm:guc_capture_warn_with_list_info [i915]] GuC-capture: Missing register list size for VF Instance-Registers on VideoEnhance-Engine [ 4.522486] i915 0000:03:00.0: [drm:guc_capture_warn_with_list_info [i915]] GuC-capture: Missing register list size for VF Class-Registers on Blitter-Engine [ 4.522544] i915 0000:03:00.0: [drm:guc_capture_warn_with_list_info [i915]] GuC-capture: Missing register list size for VF Instance-Registers on Blitter-Engine [ 4.522692] i915 0000:03:00.0: [drm:guc_capture_warn_with_list_info [i915]] GuC-capture: Missing register list size for VF Global-Registers. [ 4.527029] i915 0000:03:00.0: [drm:guc_enable_communication [i915]] GuC communication enabled [ 4.527887] i915 0000:03:00.0: [drm] HuC authenticated [ 4.528364] i915 0000:03:00.0: [drm] GuC submission enabled [ 4.528366] i915 0000:03:00.0: [drm] GuC SLPC enabled [ 4.529157] i915 0000:03:00.0: [drm] GuC RC: enabled What is it about? Regards, Tvrtko