Hi Dave & Daniel, Here goes the first drm-intel-gt-next PR for v6.6. We have a fix for infinite GPU wait race condition found by CI, then improved tweakability of RPS algo and fixes to GuC SLPC for tuning the frequency behavior of the system. OA report zeroing fix, Aux CCS invalidation fix on Gen12 and addition of missing W/A for TGL, RKL, DG1, DG2 and ADL. Then some Meteorlake enabling patches and the usual amount of debugging and code structure improvements, static checker fixes and fixes for potential UAF and error handling paths. Regards, Joonas PS. Hoping to backmerge drm-next early next week to bring in some drm-intel-gt-next dependencies before the final PR. drm-intel-gt-next-2023-08-04: Driver Changes: - Avoid infinite GPU waits by avoiding premature release of request's reusable memory (Chris, Janusz) - Expose RPS thresholds in sysfs (Tvrtko) - Apply GuC SLPC min frequency softlimit correctly (Vinay) - Restore SLPC efficient freq earlier (Vinay) - Consider OA buffer boundary when zeroing out reports (Umesh) - Extend Wa_14015795083 to TGL, RKL, DG1 and ADL (Matt R) - Fix context workarounds with non-masked regs on MTL/DG2 (Lucas) - Enable the CCS_FLUSH bit in the pipe control and in the CS for MTL+ (Andi) - Update MTL workarounds 14018778641, 22016122933 (Tejas, Zhanjun) - Ensure memory quiesced before AUX CCS invalidation (Jonathan) - Add a gsc_info debugfs (Daniele) - Invalidate the TLBs on each GT on multi-GT device (Chris) - Fix a VMA UAF for multi-gt platform (Nirmoy) - Do not use stolen on MTL due to HW bug (Nirmoy) - Check HuC and GuC version compatibility on MTL (Daniele) - Dump perf_limit_reasons for slow GuC init debug (Vinay) - Replace kmap() with kmap_local_page() (Sumitra, Ira) - Add sentinel to xehp_oa_b_counters for KASAN (Andrzej) - Add the gen12_needs_ccs_aux_inv helper (Andi) - Fixes and updates for GSC memory allocation (Daniele) - Fix one wrong caching mode enum usage (Tvrtko) - Fixes for GSC wakeref (Alan) - Static checker fixes (Harshit, Arnd, Dan, Cristophe, David, Andi) - Rename flags with bit_group_X according to the datasheet (Andi) - Use direct alias for i915 in requests (Andrzej) - Replace i915->gt0 with to_gt(i915) (Andi) - Use the i915_vma_flush_writes helper (Tvrtko) - Selftest improvements (Alan) - Remove dead code (Tvrtko) The following changes since commit 24335848e543dc95c9e2ffa0108d879ffefd0442: drm/i915/gsc: Fix error code in intel_gsc_uc_heci_cmd_submit_nonpriv() (2023-06-08 02:11:04 +0200) are available in the Git repository at: git://anongit.freedesktop.org/drm/drm-intel tags/drm-intel-gt-next-2023-08-04 for you to fetch changes up to 28e671114fb0f28f334fac8d0a6b9c395c7b0498: drm/i915/guc/slpc: Restore efficient freq earlier (2023-08-02 11:08:02 -0700) ---------------------------------------------------------------- Driver Changes: - Avoid infinite GPU waits by avoidin premature release of request's reusable memory (Chris, Janusz) - Expose RPS thresholds in sysfs (Tvrtko) - Apply GuC SLPC min frequency softlimit correctly (Vinay) - Restore SLPC efficient freq earlier (Vinay) - Consider OA buffer boundary when zeroing out reports (Umesh) - Extend Wa_14015795083 to TGL, RKL, DG1 and ADL (Matt R) - Fix context workarounds with non-masked regs on MTL/DG2 (Lucas) - Enable the CCS_FLUSH bit in the pipe control and in the CS for MTL+ (Andi) - Update MTL workarounds 14018778641, 22016122933 (Tejas, Zhanjun) - Ensure memory quiesced before AUX CCS invalidation (Jonathan) - Add a gsc_info debugfs (Daniele) - Invalidate the TLBs on each GT on multi-GT device (Chris) - Fix a VMA UAF for multi-gt platform (Nirmoy) - Do not use stolen on MTL due to HW bug (Nirmoy) - Check HuC and GuC version compatibility on MTL (Daniele) - Dump perf_limit_reasons for slow GuC init debug (Vinay) - Replace kmap() with kmap_local_page() (Sumitra, Ira) - Add sentinel to xehp_oa_b_counters for KASAN (Andrzej) - Add the gen12_needs_ccs_aux_inv helper (Andi) - Fixes and updates for GSC memory allocation (Daniele) - Fix one wrong caching mode enum usage (Tvrtko) - Fixes for GSC wakeref (Alan) - Static checker fixes (Harshit, Arnd, Dan, Cristophe, David, Andi) - Rename flags with bit_group_X according to the datasheet (Andi) - Use direct alias for i915 in requests (Andrzej) - Replace i915->gt0 with to_gt(i915) (Andi) - Use the i915_vma_flush_writes helper (Tvrtko) - Selftest improvements (Alan) - Remove dead code (Tvrtko) ---------------------------------------------------------------- Alan Previn (3): drm/i915/gsc: take a wakeref for the proxy-init-completion check drm/i915/gsc: Fix intel_gsc_uc_fw_proxy_init_done with directed wakerefs drm/i915/selftest/gsc: Ensure GSC Proxy init completes before selftests Andi Shyti (8): drm/i915: Replace i915->gt0 with to_gt(i915) drm/i915/gt: Cleanup aux invalidation registers drm/i915: Add the gen12_needs_ccs_aux_inv helper drm/i915/gt: Rename flags with bit_group_X according to the datasheet drm/i915/gt: Enable the CCS_FLUSH bit in the pipe control and in the CS drm/i915/gt: Support aux invalidation on all engines i915/drm/gt: Move the gt defines in the gt directory drm/i915: Remove unnecessary include Andrzej Hajda (2): drm/i915/perf: add sentinel to xehp_oa_b_counters drm/i915: use direct alias for i915 in requests Arnd Bergmann (1): drm/i915: make i915_drm_client_fdinfo() reference conditional again Chris Wilson (2): drm/i915/gt: Move TLB invalidation to its own file drm/i915: Invalidate the TLBs on each GT Christophe JAILLET (1): drm/i915: Fix an error handling path in igt_write_huge() Dan Carpenter (1): drm/i915: Fix a NULL vs IS_ERR() bug Daniele Ceraolo Spurio (5): drm/i915/gsc: fixes and updates for GSC memory allocation drm/i915/mtl/gsc: extract release and security versions from the gsc binary drm/i915/mtl/gsc: query the GSC FW for its compatibility version drm/i915/mtl/gsc: Add a gsc_info debugfs drm/i915/huc: check HuC and GuC version compatibility on MTL David Reaver (1): drm/i915/huc: fix intel_huc.c doc bulleted list format error Harshit Mogalapalli (1): drm/i915/huc: Fix missing error code in intel_huc_init() Janusz Krzysztofik (1): drm/i915: Fix premature release of request's reusable memory Jonathan Cavitt (2): drm/i915/gt: Ensure memory quiesced before invalidation drm/i915/gt: Poll aux invalidation register bit on invalidation Lucas De Marchi (7): drm/i915/gt: Move wal_get_fw_for_rmw() drm/i915/gt: Clear all bits from GEN12_FF_MODE2 drm/i915/gt: Fix context workarounds with non-masked regs drm/i915/gt: Drop read from GEN8_L3CNTLREG in ICL workaround drm/i915/gt: Enable read back on XEHP_FF_MODE2 drm/i915/gt: Remove bogus comment on IVB_FBC_RT_BASE_UPPER drm/i915/gt: Also check set bits in clr_set() Matt Roper (1): drm/i915: Extend Wa_14015795083 platforms Nirmoy Das (2): drm/i915: Fix a VMA UAF for multi-gt platform drm/i915/gt: Do not use stolen on MTL Sumitra Sharma (1): drm/i915: Replace kmap() with kmap_local_page() Tejas Upadhyay (1): drm/i915/mtl: Update workaround 14018778641 Tvrtko Ursulin (8): drm/i915: Remove some dead "code" drm/i915: Remove dead code from gen8_pte_encode drm/i915: Fix one wrong caching mode enum usage drm/i915: Move setting of rps thresholds to init drm/i915: Record default rps threshold values drm/i915: Add helpers for managing rps thresholds drm/i915: Expose RPS thresholds in sysfs drm/i915: Use the i915_vma_flush_writes helper Umesh Nerlige Ramappa (1): drm/i915/perf: Consider OA buffer boundary when zeroing out reports Vinay Belgaumkar (3): drm/i915/guc/slpc: Apply min softlimit correctly drm/i915/guc: Dump perf_limit_reasons for debug drm/i915/guc/slpc: Restore efficient freq earlier Zhanjun Dong (1): drm/i915/mtl: Update cache coherency setting for context structure drivers/gpu/drm/i915/Makefile | 4 +- drivers/gpu/drm/i915/gem/i915_gem_domain.c | 6 +- drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c | 25 +- drivers/gpu/drm/i915/gem/i915_gem_mman.c | 4 +- drivers/gpu/drm/i915/gem/i915_gem_object_types.h | 4 +- drivers/gpu/drm/i915/gem/i915_gem_pages.c | 15 +- drivers/gpu/drm/i915/gem/i915_gem_stolen.c | 2 +- drivers/gpu/drm/i915/gem/selftests/huge_pages.c | 6 +- drivers/gpu/drm/i915/gt/gen2_engine_cs.c | 2 +- drivers/gpu/drm/i915/gt/gen8_engine_cs.c | 152 +++++---- drivers/gpu/drm/i915/gt/gen8_engine_cs.h | 21 +- drivers/gpu/drm/i915/gt/gen8_ppgtt.c | 3 - drivers/gpu/drm/i915/gt/intel_engine_cs.c | 1 + .../gpu/drm/i915/gt/intel_execlists_submission.c | 2 +- drivers/gpu/drm/i915/gt/intel_gpu_commands.h | 2 + drivers/gpu/drm/i915/gt/intel_gt.c | 144 +-------- drivers/gpu/drm/i915/gt/intel_gt.h | 12 - drivers/gpu/drm/i915/gt/intel_gt_defines.h | 11 + drivers/gpu/drm/i915/gt/intel_gt_regs.h | 16 +- drivers/gpu/drm/i915/gt/intel_gt_sysfs_pm.c | 108 +++++++ drivers/gpu/drm/i915/gt/intel_gt_types.h | 3 + drivers/gpu/drm/i915/gt/intel_gtt.c | 2 +- drivers/gpu/drm/i915/gt/intel_lrc.c | 26 +- drivers/gpu/drm/i915/gt/intel_migrate.c | 10 +- drivers/gpu/drm/i915/gt/intel_ppgtt.c | 4 +- drivers/gpu/drm/i915/gt/intel_region_lmem.c | 2 +- drivers/gpu/drm/i915/gt/intel_reset.c | 3 - drivers/gpu/drm/i915/gt/intel_ring_submission.c | 2 +- drivers/gpu/drm/i915/gt/intel_rps.c | 83 ++++- drivers/gpu/drm/i915/gt/intel_rps.h | 4 + drivers/gpu/drm/i915/gt/intel_tlb.c | 159 ++++++++++ drivers/gpu/drm/i915/gt/intel_tlb.h | 29 ++ drivers/gpu/drm/i915/gt/intel_workarounds.c | 148 ++++----- drivers/gpu/drm/i915/gt/selftest_engine_cs.c | 2 +- drivers/gpu/drm/i915/gt/selftest_mocs.c | 2 +- drivers/gpu/drm/i915/gt/selftest_rc6.c | 2 +- drivers/gpu/drm/i915/gt/selftest_timeline.c | 4 +- drivers/gpu/drm/i915/gt/selftest_tlb.c | 3 +- .../gpu/drm/i915/gt/uc/intel_gsc_binary_headers.h | 75 ++++- drivers/gpu/drm/i915/gt/uc/intel_gsc_fw.c | 340 ++++++++++++++++++--- drivers/gpu/drm/i915/gt/uc/intel_gsc_fw.h | 5 +- drivers/gpu/drm/i915/gt/uc/intel_gsc_uc.c | 139 ++++++++- drivers/gpu/drm/i915/gt/uc/intel_gsc_uc.h | 21 ++ drivers/gpu/drm/i915/gt/uc/intel_gsc_uc_debugfs.c | 39 +++ drivers/gpu/drm/i915/gt/uc/intel_gsc_uc_debugfs.h | 14 + .../drm/i915/gt/uc/intel_gsc_uc_heci_cmd_submit.h | 1 + drivers/gpu/drm/i915/gt/uc/intel_guc_fw.c | 8 +- drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.c | 24 +- drivers/gpu/drm/i915/gt/uc/intel_huc.c | 9 +- drivers/gpu/drm/i915/gt/uc/intel_huc_fw.c | 13 +- drivers/gpu/drm/i915/gt/uc/intel_uc_debugfs.c | 2 + drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c | 126 ++++++-- drivers/gpu/drm/i915/gt/uc/intel_uc_fw.h | 4 + drivers/gpu/drm/i915/gvt/scheduler.c | 2 +- drivers/gpu/drm/i915/i915_active.c | 99 ++++-- drivers/gpu/drm/i915/i915_driver.c | 2 +- drivers/gpu/drm/i915/i915_drm_client.h | 2 - drivers/gpu/drm/i915/i915_drv.h | 1 - drivers/gpu/drm/i915/i915_gpu_error.c | 4 +- drivers/gpu/drm/i915/i915_perf.c | 14 +- drivers/gpu/drm/i915/i915_reg.h | 26 +- drivers/gpu/drm/i915/i915_request.c | 13 +- drivers/gpu/drm/i915/i915_trace.h | 10 +- drivers/gpu/drm/i915/i915_vma.c | 15 +- drivers/gpu/drm/i915/pxp/intel_pxp.c | 8 +- drivers/gpu/drm/i915/pxp/intel_pxp_gsccs.c | 2 +- drivers/gpu/drm/i915/selftests/i915_perf.c | 2 +- drivers/gpu/drm/i915/selftests/i915_selftest.c | 31 ++ drivers/gpu/drm/i915/selftests/igt_spinner.c | 14 +- drivers/gpu/drm/i915/selftests/mock_gem_device.c | 2 +- 70 files changed, 1553 insertions(+), 542 deletions(-) create mode 100644 drivers/gpu/drm/i915/gt/intel_gt_defines.h create mode 100644 drivers/gpu/drm/i915/gt/intel_tlb.c create mode 100644 drivers/gpu/drm/i915/gt/intel_tlb.h create mode 100644 drivers/gpu/drm/i915/gt/uc/intel_gsc_uc_debugfs.c create mode 100644 drivers/gpu/drm/i915/gt/uc/intel_gsc_uc_debugfs.h