From d78a4778195079e0b2820550efeecb7b25fa764a Mon Sep 17 00:00:00 2001 From: Matt Roper Date: Thu, 1 Jun 2023 14:52:39 -0700 Subject: [PATCH] drm/xe: Invalidate TLB on all affected GTs during GGTT updates The GGTT is part of the tile and is shared by the primary and media GTs on platforms with a standalone media architecture. However each of these GTs has its own TLBs caching the page table lookups, and each needs to be invalidated separately. Reviewed-by: Nirmoy Das Link: https://lore.kernel.org/r/20230601215244.678611-27-matthew.d.roper@intel.com Signed-off-by: Matt Roper Signed-off-by: Rodrigo Vivi --- drivers/gpu/drm/xe/xe_ggtt.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/xe/xe_ggtt.c b/drivers/gpu/drm/xe/xe_ggtt.c index 8d3638826860b..d672494961131 100644 --- a/drivers/gpu/drm/xe/xe_ggtt.c +++ b/drivers/gpu/drm/xe/xe_ggtt.c @@ -190,13 +190,10 @@ err: #define PVC_GUC_TLB_INV_DESC1 XE_REG(0xcf80) #define PVC_GUC_TLB_INV_DESC1_INVALIDATE REG_BIT(6) -void xe_ggtt_invalidate(struct xe_ggtt *ggtt) +static void ggtt_invalidate_gt_tlb(struct xe_gt *gt) { - /* - * TODO: Loop over each GT in tile once media GT support is - * re-added - */ - struct xe_gt *gt = ggtt->tile->primary_gt; + if (!gt) + return; /* TODO: vfunc for GuC vs. non-GuC */ @@ -221,6 +218,13 @@ void xe_ggtt_invalidate(struct xe_ggtt *ggtt) } } +void xe_ggtt_invalidate(struct xe_ggtt *ggtt) +{ + /* Each GT in a tile has its own TLB to cache GGTT lookups */ + ggtt_invalidate_gt_tlb(ggtt->tile->primary_gt); + ggtt_invalidate_gt_tlb(ggtt->tile->media_gt); +} + void xe_ggtt_printk(struct xe_ggtt *ggtt, const char *prefix) { u64 addr, scratch_pte; -- 2.30.2