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

Reply via email to