On Tue, Dec 19, 2023 at 02:01:15AM +0200, Ville Syrjälä wrote: > On Mon, Dec 18, 2023 at 02:00:10PM +0100, Andrzej Hajda wrote: > > On 15.12.2023 11:59, Ville Syrjala wrote: > > > From: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > > > > > > On MTL the stolen region starts at offset 8MiB from the start of > > > LMEMBAR. The dma addresses are thus also offset by 8MiB. However the > > > mm_node/etc. is zero based, and i915_pages_create_for_stolen() will > > > add the appropriate region.start into the sg dma address. So when > > > we do the readout we need to convert the dma address read from > > > the PTE to be zero based as well. > > > > > > Note that currently we don't take this path on MTL, but we should > > > and thus this needs to be fixed. For lmem this works correctly > > > already as the lmem region.start==0. > > > > > > While at it let's also make sure the address points to somewhere within > > > the memory region. We don't need to check the size as > > > i915_gem_object_create_region_at() should later fail if the object size > > > exceeds the region size. > > > > > > Cc: Paz Zcharya <pazz@xxxxxxxxxxxx> > > > Signed-off-by: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > > > --- > > > drivers/gpu/drm/i915/display/intel_plane_initial.c | 8 +++++--- > > > 1 file changed, 5 insertions(+), 3 deletions(-) > > > > > > diff --git a/drivers/gpu/drm/i915/display/intel_plane_initial.c b/drivers/gpu/drm/i915/display/intel_plane_initial.c > > > index ffc92b18fcf5..db594ccf0323 100644 > > > --- a/drivers/gpu/drm/i915/display/intel_plane_initial.c > > > +++ b/drivers/gpu/drm/i915/display/intel_plane_initial.c > > > @@ -79,16 +79,18 @@ initial_plane_vma(struct drm_i915_private *i915, > > > * We don't currently expect this to ever be placed in the > > > * stolen portion. > > > */ > > > - if (phys_base >= resource_size(&mem->region)) { > > > + if (phys_base < mem->region.start || phys_base > mem->region.end) { > > > > Maybe better: > > phys_base + fb_size > mem->region.end" ? > > Btw it seems redundant with later checks in > > i915_gem_object_create_region_at. > > IMO at this moment we need only check if "phys_base -= > > mem->region.start" makes sense. > > Yeah, I guess that alone would be sufficient. I left out the size > check exactly because I knew it would fail later, and making an > accurate check here (with page size rounding and whatnot) would > be tedious. But this should also be true when the start offset > is past the end of the region as well, so yeah I suppose I can > just drop the second check. After further pondering I think I'm leaning towards keeping this as is, just to give a slightly more obvious debug message. > > > > > > Regards > > Andrzej > > > > > > > drm_err(&i915->drm, > > > - "Initial plane programming using invalid range, phys_base=%pa\n", > > > - &phys_base); > > > + "Initial plane programming using invalid range, phys_base=%pa (%s [%pa-%pa])\n", > > > + &phys_base, mem->region.name, &mem->region.start, &mem->region.end); > > > return NULL; > > > } > > > > > > drm_dbg(&i915->drm, > > > "Using phys_base=%pa, based on initial plane programming\n", > > > &phys_base); > > > + > > > + phys_base -= mem->region.start; > > > } else { > > > phys_base = base; > > > mem = i915->mm.stolen_region; > > -- > Ville Syrjälä > Intel -- Ville Syrjälä Intel