GGTT invalidation issues
https://lore.kernel.org/all/Y9hw0sSC58B32yPg@mdroper-desk1.amr.corp.intel.com/
GFX_FLSH_CNTL_GEN6.reg not present in newer platforms. and MTL Media GT not invalidated.
+void xe_ggtt_invalidate(struct xe_gt *gt)
+{
- /* TODO: vfunc for GuC vs. non-GuC */
- /* TODO: i915 makes comments about this being uncached and
- therefore flushing WC buffers. Is that really true here?
- */
- xe_mmio_write32(gt, GFX_FLSH_CNTL_GEN6.reg, GFX_FLSH_CNTL_EN);
This register went away in Xe_HP; we shouldn't be trying to write it on
newer platforms. I'm not sure if there's an equivalent register located
somewhere else now or not.
and
+void xe_ggtt_map_bo(struct xe_ggtt *ggtt, struct xe_bo *bo)
+{
- u64 start = bo->ggtt_node.start;
- u64 offset, pte;
- for (offset = 0; offset < bo->size; offset += GEN8_PAGE_SIZE) {
pte = xe_ggtt_pte_encode(bo, offset);
xe_ggtt_set_pte(ggtt, start + offset, pte);
- }
- xe_ggtt_invalidate(ggtt->gt);
The GGTT is shared by two GTs on a platform like MTL; we only seem to be
invalidating the GuC's TLB for the primary GT here and are overlooking
the media GT.