On Mon, 13 Jan 2014 16:25:21 +0530
akash.g...@intel.com wrote:

> From: Akash Goel <akash.g...@intel.com>
> 
> There is a conflict seen when requesting the kernel to reserve
> the physical space used for the stolen area. This is because
> some BIOS are wrapping the stolen area in the root PCI bus, but have
> an off-by-one error. As a workaround we retry the reservation with an
> offset of 1 instead of 0.
> 
> v2: updated commit message & the comment in source file (Daniel)
> 
> Signed-off-by: Akash Goel <akash.g...@intel.com>
> ---
>  drivers/gpu/drm/i915/i915_gem_stolen.c | 20 +++++++++++++++++---
>  1 file changed, 17 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_gem_stolen.c 
> b/drivers/gpu/drm/i915/i915_gem_stolen.c
> index 1a24e84..114a806 100644
> --- a/drivers/gpu/drm/i915/i915_gem_stolen.c
> +++ b/drivers/gpu/drm/i915/i915_gem_stolen.c
> @@ -82,9 +82,23 @@ static unsigned long i915_stolen_to_physical(struct 
> drm_device *dev)
>       r = devm_request_mem_region(dev->dev, base, dev_priv->gtt.stolen_size,
>                                   "Graphics Stolen Memory");
>       if (r == NULL) {
> -             DRM_ERROR("conflict detected with stolen region: [0x%08x - 
> 0x%08x]\n",
> -                       base, base + (uint32_t)dev_priv->gtt.stolen_size);
> -             base = 0;
> +             /*
> +              * One more attempt but this time requesting region from
> +              * base + 1, as we have seen that this resolves the region
> +              * conflict with the PCI Bus.
> +              * This is a BIOS w/a: Some BIOS wrap stolen in the root
> +              * PCI bus, but have an off-by-one error. Hence retry the
> +              * reservation starting from 1 instead of 0.
> +              */
> +             r = devm_request_mem_region(dev->dev, base + 1,
> +                                         dev_priv->gtt.stolen_size - 1,
> +                                         "Graphics Stolen Memory");
> +             if (r == NULL) {
> +                     DRM_ERROR("conflict detected with stolen region:"\
> +                               "[0x%08x - 0x%08x]\n",
> +                               base, base + 
> (uint32_t)dev_priv->gtt.stolen_size);
> +                     base = 0;
> +             }
>       }
>  
>       return base;

Reviewed-by: Jesse Barnes <jbar...@virtuousgeek.org>
Tested-by: Arjan van de Ven <ar...@linux.intel.com>

Thanks,
-- 
Jesse Barnes, Intel Open Source Technology Center
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to