drm/xe/migrate: retain CCS aux state for vram -> vram
authorMatthew Auld <matthew.auld@intel.com>
Thu, 25 May 2023 11:45:43 +0000 (12:45 +0100)
committerRodrigo Vivi <rodrigo.vivi@intel.com>
Tue, 19 Dec 2023 23:34:04 +0000 (18:34 -0500)
There is no mention that migrate_copy() will skip copying the CCS aux
state for all types of vram -> vram transfers.  Currently we don't need
such a facility but might be surprising if we ever do.

v2: (Lucas):
  - s/lmem/vram/ in the commit message
  - Tidy up the code a bit; use one emit_copy_ccs()
v3:
  - Reword the commit message

Signed-off-by: Matthew Auld <matthew.auld@intel.com>
Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Acked-by: Nirmoy Das <nirmoy.das@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
drivers/gpu/drm/xe/xe_migrate.c

index 7d0a235..9a67628 100644 (file)
@@ -552,11 +552,19 @@ static u32 xe_migrate_ccs_copy(struct xe_migrate *m,
 
        if (xe_device_has_flat_ccs(gt_to_xe(gt)) && !copy_ccs && dst_is_vram) {
                /*
-                * If the bo doesn't have any CCS metadata attached, we still
-                * need to clear it for security reasons.
+                * If the src is already in vram, then it should already
+                * have been cleared by us, or has been populated by the
+                * user. Make sure we copy the CCS aux state as-is.
+                *
+                * Otherwise if the bo doesn't have any CCS metadata attached,
+                * we still need to clear it for security reasons.
                 */
-               emit_copy_ccs(gt, bb, dst_ofs, true, m->cleared_vram_ofs, false,
-                             dst_size);
+               u64 ccs_src_ofs =  src_is_vram ? src_ofs : m->cleared_vram_ofs;
+
+               emit_copy_ccs(gt, bb,
+                             dst_ofs, true,
+                             ccs_src_ofs, src_is_vram, dst_size);
+
                flush_flags = MI_FLUSH_DW_CCS;
        } else if (copy_ccs) {
                if (!src_is_vram)