On Tue, 15 Sep 2026, Andrew Zhou <[email protected]> wrote:
> Pantherlake integrated graphics can have the XE_GGTT_PTEDM bit set in
> the BIOS-initialised framebuffer PTE. The validation rejects this and
> fails to create the initial framebuffer, resulting in static.
>
> Remove the too-strict validation. Since this was the only caller of
> need_pte_local() outside the DGFX path, the helper is now
> unconditionally true there; fold the check and drop the dead
> need_pte_local() and has_lmembar() helpers.
>
> Signed-off-by: Andrew Zhou <[email protected]>
> Tested-by: Andrew Zhou <[email protected]>
> Tested-on: Intel Core Ultra X7 358H, integrated graphics, B0 stepping
This is basically a revert of 0d5d5d0c2c72 ("drm/xe: Check the PTE local
memory bit for initial FB in stolen"). You'd do well to dig a bit of git
blame and see what changed, why, and by whom.
Cc: Ville, Maarten, Matthew
BR,
Jani.
> ---
> v1 -> v2:
> - Drop need_pte_local() and has_lmembar(), now dead after removing the
> iGPU validation (sashiko)
> ---
> drivers/gpu/drm/xe/display/xe_initial_plane.c | 20 +------------------
> 1 file changed, 1 insertion(+), 19 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/display/xe_initial_plane.c
> b/drivers/gpu/drm/xe/display/xe_initial_plane.c
> index 0f86b7303..3484b3033 100644
> --- a/drivers/gpu/drm/xe/display/xe_initial_plane.c
> +++ b/drivers/gpu/drm/xe/display/xe_initial_plane.c
> @@ -27,16 +27,6 @@ static bool is_pte_local(u64 pte)
> return pte & XE_GGTT_PTE_DM;
> }
>
> -static bool has_lmembar(struct xe_device *xe)
> -{
> - return GRAPHICS_VERx100(xe) >= 1270;
> -}
> -
> -static bool need_pte_local(struct xe_device *xe)
> -{
> - return IS_DGFX(xe) || has_lmembar(xe);
> -}
> -
> static struct xe_bo *
> initial_plane_bo(struct xe_device *xe,
> struct intel_initial_plane_config *plane_config)
> @@ -60,7 +50,7 @@ initial_plane_bo(struct xe_device *xe,
> if (IS_DGFX(xe)) {
> u64 pte = xe_ggtt_read_pte(tile0->mem.ggtt, base);
>
> - if (is_pte_local(pte) != need_pte_local(xe)) {
> + if (!is_pte_local(pte)) {
> drm_err(&xe->drm, "Initial plane PTE has bad local
> memory bit\n");
> return NULL;
> }
> @@ -85,7 +75,6 @@ initial_plane_bo(struct xe_device *xe,
> &phys_base);
> } else {
> struct ttm_resource_manager *stolen;
> - u64 pte;
>
> stolen = ttm_manager_type(&xe->ttm, XE_PL_STOLEN);
> if (!stolen) {
> @@ -93,13 +82,6 @@ initial_plane_bo(struct xe_device *xe,
> return NULL;
> }
>
> - pte = xe_ggtt_read_pte(tile0->mem.ggtt, base);
> -
> - if (is_pte_local(pte) != need_pte_local(xe)) {
> - drm_err(&xe->drm, "Initial plane PTE has bad local
> memory bit\n");
> - return NULL;
> - }
> -
> phys_base = base;
> flags |= XE_BO_FLAG_STOLEN;
--
Jani Nikula, Intel