Please drop this. Removing the check changes nothing, so the PTE check
isn't the cause. Sorry for the noise.

On Tue, Sep 15, 2026 at 9:59 PM Activate Windows <[email protected]>
wrote:

> 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