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 >
