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 >> >
