[Intel-gfx] [PATCH 2/8] drm/i915: Introduce i915_gem_object_create_stolen_for_preallocated

Ben Widawsky ben at bwidawsk.net
Thu Feb 7 19:13:12 CET 2013


On Thu, Feb 07, 2013 at 02:32:58PM +0000, Chris Wilson wrote:
> On Wed, Feb 06, 2013 at 09:09:34PM -0800, Ben Widawsky wrote:
> > On Wed, Feb 06, 2013 at 11:10:22AM +0000, Chris Wilson wrote:
> > > Wrap a preallocated region of stolen memory within an ordinary GEM
> > > object, for example the BIOS framebuffer.
> > > 
> > > Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> > > ---
> > >  drivers/gpu/drm/i915/i915_drv.h        |    5 +++
> > >  drivers/gpu/drm/i915/i915_gem_stolen.c |   65 ++++++++++++++++++++++++++++++++
> > >  2 files changed, 70 insertions(+)
> > > 
> > > diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> > > index 08c5def..fd8a495 100644
> > > --- a/drivers/gpu/drm/i915/i915_drv.h
> > > +++ b/drivers/gpu/drm/i915/i915_drv.h
> > > @@ -1720,6 +1720,11 @@ void i915_gem_stolen_cleanup_compression(struct drm_device *dev);
> > >  void i915_gem_cleanup_stolen(struct drm_device *dev);
> > >  struct drm_i915_gem_object *
> > >  i915_gem_object_create_stolen(struct drm_device *dev, u32 size);
> > > +struct drm_i915_gem_object *
> > > +i915_gem_object_create_stolen_for_preallocated(struct drm_device *dev,
> > > +					       u32 stolen_offset,
> > > +					       u32 gtt_offset,
> > > +					       u32 size);
> > 
> > Can we default to u64 for things from now on. Not that I know anything,
> > or anything. At least gtt_offset.
> 
> We could. Do we envison getting more than 4GiB of stolen memory? Do you
> worry that the BIOS may not use a 1:1 mapping?

I suppose we can always change it later actually, so nevermind. I
wouldn't have envisioned the stolen size would grow as large as it has
today, so I am not the right person to ask anyway.

> 
> > > +	/* To simplify the initialisation sequence between KMS and GTT,
> > > +	 * we allow construction of the stolen object prior to
> > > +	 * setting up the GTT space. The actual reservation will occur
> > > +	 * later.
> > > +	 */
> > > +	if (drm_mm_initialized(&dev_priv->mm.gtt_space)) {
> > > +		obj->gtt_space = drm_mm_create_block(&dev_priv->mm.gtt_space,
> > > +						     gtt_offset, size,
> > > +						     false);
> > > +		if (obj->gtt_space == NULL) {
> > > +			DRM_DEBUG_KMS("failed to allocate stolen GTT space\n");
> > > +			drm_gem_object_unreference(&obj->base);
> > > +			return NULL;
> > > +		}
> > > +	} else
> > > +		obj->gtt_space = I915_GTT_RESERVED;
> > 
> > Could you explain how/why we'd do this before the mm is initialized.
> 
> It's all due to having to wrap the BIOS structures prior to us
> initialising the mm. If we don't, we overwrite those objects whilst
> setting up the GTT. Note that the display is currently scaning out from
> those objects...
> -Chris

For some reason, I thought the code that had already landed took care of
this by not initializing those PTEs. My bad.

-- 
Ben Widawsky, Intel Open Source Technology Center



More information about the Intel-gfx mailing list