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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, 26 Feb 2014, Jesse Barnes <jbarnes@xxxxxxxxxxxxxxxx> wrote:
> On Mon, 13 Jan 2014 16:25:21 +0530
> akash.goel@xxxxxxxxx wrote:
>
>> From: Akash Goel <akash.goel@xxxxxxxxx>
>> 
>> 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@xxxxxxxxx>
>> ---
>>  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@xxxxxxxxxxxxxxxx>
> Tested-by: Arjan van de Ven <arjan@xxxxxxxxxxxxxxx>

Pushed to -fixes, thanks for the patch, review, and testing.

Jani.


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

-- 
Jani Nikula, Intel Open Source Technology Center
_______________________________________________
Intel-gfx mailing list
Intel-gfx@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/intel-gfx




[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux