[Intel-gfx] [PATCH 2/7] drm/i915: Resolving the memory region conflict for Stolen area

Jani Nikula jani.nikula at linux.intel.com
Thu Feb 27 10:01:08 CET 2014


On Thu, 27 Feb 2014, Jani Nikula <jani.nikula at linux.intel.com> wrote:
> On Wed, 26 Feb 2014, Jesse Barnes <jbarnes at virtuousgeek.org> wrote:
>> On Mon, 13 Jan 2014 16:25:21 +0530
>> akash.goel at intel.com wrote:
>>
>>> From: Akash Goel <akash.goel at 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.goel at 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 <jbarnes at virtuousgeek.org>
>> Tested-by: Arjan van de Ven <arjan at linux.intel.com>
>
> Pushed to -fixes, thanks for the patch, review, and testing.

Oh, forgot to add that I fixed the DRM_ERROR string split up that
checkpatch complained about while applying.


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

-- 
Jani Nikula, Intel Open Source Technology Center



More information about the Intel-gfx mailing list