Thank you.
Follow-up: reading 0d5d5d0c2c72, the check assumes GRAPHICS_VERx100(xe) >=
1270 stands in for "MTL+ with LMEMBAR". On the PTL I hit this on, the
initial plane is rejected.

I'm working out whether the BIOS PTE actually lacks XE_GGTT_PTE_DM there --
I'll follow up with a proper v2. I don't have the machine in front of me
for a few days.

On Tue, Sep 15, 2026 at 4:40 PM Jani Nikula <[email protected]>
wrote:

> 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