mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-05 06:18:45 -04:00
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 <nirmoy.das@intel.com> Link: https://lore.kernel.org/r/20230601215244.678611-27-matthew.d.roper@intel.com Signed-off-by: Matt Roper <matthew.d.roper@intel.com> Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
This commit is contained in:
@@ -190,13 +190,10 @@ int xe_ggtt_init(struct xe_ggtt *ggtt)
|
||||
#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;
|
||||
|
||||
Reference in New Issue
Block a user