summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/xe/xe_ggtt.c
diff options
context:
space:
mode:
authorMatthew Brost <matthew.brost@intel.com>2023-01-30 21:55:35 +0300
committerRodrigo Vivi <rodrigo.vivi@intel.com>2023-12-20 02:27:47 +0300
commitda3799c975726572066f1c6bc6a6f65cb1f01c84 (patch)
treeb8f629bd61cfaa8cf0fa04db1d1b9bcc25c3c0a2 /drivers/gpu/drm/xe/xe_ggtt.c
parent74a8b2c6e2d6f17fcd9977de298eff20a46b0af7 (diff)
downloadlinux-da3799c975726572066f1c6bc6a6f65cb1f01c84.tar.xz
drm/xe: Use GuC to do GGTT invalidations for the GuC firmware
Only the GuC should be issuing TLB invalidations if it is enabled. Part of this patch is sanitize the device on driver unload to ensure we do not send GuC based TLB invalidations during driver unload. Signed-off-by: Matthew Brost <matthew.brost@intel.com> Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com> Reviewed-by: Niranjana Vishwanathapura <niranjana.vishwanathapura@intel.com>
Diffstat (limited to 'drivers/gpu/drm/xe/xe_ggtt.c')
-rw-r--r--drivers/gpu/drm/xe/xe_ggtt.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/drivers/gpu/drm/xe/xe_ggtt.c b/drivers/gpu/drm/xe/xe_ggtt.c
index baa080cd1133..20450ed8400b 100644
--- a/drivers/gpu/drm/xe/xe_ggtt.c
+++ b/drivers/gpu/drm/xe/xe_ggtt.c
@@ -13,6 +13,7 @@
#include "xe_device.h"
#include "xe_bo.h"
#include "xe_gt.h"
+#include "xe_gt_tlb_invalidation.h"
#include "xe_map.h"
#include "xe_mmio.h"
#include "xe_wopcm.h"
@@ -200,10 +201,17 @@ void xe_ggtt_invalidate(struct xe_gt *gt)
* therefore flushing WC buffers. Is that really true here?
*/
xe_mmio_write32(gt, GFX_FLSH_CNTL_GEN6.reg, GFX_FLSH_CNTL_EN);
- if (xe_device_guc_submission_enabled(gt_to_xe(gt))) {
+
+ if (gt->uc.guc.submission_state.enabled) {
+ int seqno;
+
+ seqno = xe_gt_tlb_invalidation_guc(gt);
+ XE_WARN_ON(seqno <= 0);
+ if (seqno > 0)
+ xe_gt_tlb_invalidation_wait(gt, seqno);
+ } else if (xe_device_guc_submission_enabled(gt_to_xe(gt))) {
struct xe_device *xe = gt_to_xe(gt);
- /* TODO: also use vfunc here */
if (xe->info.platform == XE_PVC) {
xe_mmio_write32(gt, PVC_GUC_TLB_INV_DESC1.reg,
PVC_GUC_TLB_INV_DESC1_INVALIDATE);