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

Chris Wilson chris at chris-wilson.co.uk
Thu Feb 7 15:32:58 CET 2013


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?

> > +	/* 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

-- 
Chris Wilson, Intel Open Source Technology Centre



More information about the Intel-gfx mailing list