drm/xe: Use ttm_uncached for BO with NEEDS_UC flag
authorMichal Wajdeczko <michal.wajdeczko@intel.com>
Tue, 18 Jun 2024 10:49:47 +0000 (12:49 +0200)
committerMichal Wajdeczko <michal.wajdeczko@intel.com>
Wed, 19 Jun 2024 11:45:16 +0000 (13:45 +0200)
We should honor requested uncached mode also at the TTM layer.
Otherwise, we risk losing updates to the memory based interrupts
source or status vectors, as those require uncached memory.

Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Cc: Matt Roper <matthew.d.roper@intel.com>
Acked-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Reviewed-by: Matt Roper <matthew.d.roper@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240618104947.729-1-michal.wajdeczko@intel.com
drivers/gpu/drm/xe/xe_bo.c

index 74294f1b05bc3222e83f02e7d51733ece4673393..65c696966e96c476cb2e25c5132a11fabad2f2c9 100644 (file)
@@ -378,6 +378,15 @@ static struct ttm_tt *xe_ttm_tt_create(struct ttm_buffer_object *ttm_bo,
            (xe->info.graphics_verx100 >= 1270 && bo->flags & XE_BO_FLAG_PAGETABLE))
                caching = ttm_write_combined;
 
+       if (bo->flags & XE_BO_FLAG_NEEDS_UC) {
+               /*
+                * Valid only for internally-created buffers only, for
+                * which cpu_caching is never initialized.
+                */
+               xe_assert(xe, bo->cpu_caching == 0);
+               caching = ttm_uncached;
+       }
+
        err = ttm_tt_init(&tt->ttm, &bo->ttm, page_flags, caching, extra_pages);
        if (err) {
                kfree(tt);