]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/xe: GSM size should be constant on most platforms
authorMatt Roper <matthew.d.roper@intel.com>
Thu, 5 Jun 2025 22:53:53 +0000 (15:53 -0700)
committerMatt Roper <matthew.d.roper@intel.com>
Mon, 9 Jun 2025 16:03:33 +0000 (09:03 -0700)
On old Intel platforms, the size of the GSM (i.e., the stolen memory
that holds the GGTT page table entries) could vary, so the driver needed
to read the actual size from the PCI config space.  However from Xe_HP
onward, the GSM is now always guaranteed to be exactly 8MB (which
translates to a 4GB GGTT address space); this is always true regardless
of what the platform's much larger PPGTT address space is.

The bspec doesn't document the PCI config space as being a valid way to
query the size of the GSM after Xe_LP platforms, although so far it
still seems to be giving us proper values for Xe_HP, Xe2, and Xe3.
However we suspect that the config space will stop providing correct
values on some upcoming platforms, so we should stop relying on it.
Instead just use the hardcoded 8MB value as documented elsewhere in the
bspec.

Bspec: 49636, 67090, 50589
Reviewed-by: Gustavo Sousa <gustavo.sousa@intel.com>
Link: https://lore.kernel.org/r/20250605225352.2333981-2-matthew.d.roper@intel.com
Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
drivers/gpu/drm/xe/xe_ggtt.c

index be22909592747a0dc4a99b164f0dcf2e1649ffbc..7b11fa1356f0b950cb89fb3d46e0c933d8bd072c 100644 (file)
@@ -256,7 +256,7 @@ int xe_ggtt_init_early(struct xe_ggtt *ggtt)
        unsigned int gsm_size;
        int err;
 
-       if (IS_SRIOV_VF(xe))
+       if (IS_SRIOV_VF(xe) || GRAPHICS_VERx100(xe) >= 1250)
                gsm_size = SZ_8M; /* GGTT is expected to be 4GiB */
        else
                gsm_size = probe_gsm_size(pdev);