drm/i915: Make sure dsm_size has correct granularity
authorNirmoy Das <nirmoy.das@intel.com>
Thu, 2 Feb 2023 18:02:43 +0000 (19:02 +0100)
committerLucas De Marchi <lucas.demarchi@intel.com>
Fri, 3 Feb 2023 23:53:19 +0000 (15:53 -0800)
DSM granularity is 1MB so make sure we stick to that.

The address set by firmware in GEN12_DSMBASE in driver initialization
doesn't mean "anything above that and until end of lmem is part of DSM".
In fact, there may be a few KB that is not part of DSM on the end of
lmem. How large is that space is platform-dependent, but since it's
always less than the DSM granularity, it can be simplified by simply
aligning the size down.

v2: replace "1 * SZ_1M" with SZ_1M (Andrzej).
v3: reword commit message to explain why the round down is needed
    (Lucas)

Cc: Matthew Auld <matthew.auld@intel.com>
Suggested-by: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Nirmoy Das <nirmoy.das@intel.com>
Reviewed-by: Andrzej Hajda <andrzej.hajda@intel.com>
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230202180243.23637-1-nirmoy.das@intel.com
drivers/gpu/drm/i915/gem/i915_gem_stolen.c

index bc9521078807340ad20bba08d378dd66d17bf958..7ab9e98bcbd21d2257cd46e4449da4e7b828c5a1 100644 (file)
@@ -913,7 +913,7 @@ i915_gem_stolen_lmem_setup(struct drm_i915_private *i915, u16 type,
                dsm_base = intel_uncore_read64(uncore, GEN12_DSMBASE) & GEN12_BDSM_MASK;
                if (WARN_ON(lmem_size < dsm_base))
                        return ERR_PTR(-ENODEV);
-               dsm_size = lmem_size - dsm_base;
+               dsm_size = ALIGN_DOWN(lmem_size - dsm_base, SZ_1M);
        }
 
        io_size = dsm_size;