Commit b743bb06 authored by Akash Goel's avatar Akash Goel Committed by Jiri Slaby

drm/i915: Resolving the memory region conflict for Stolen area

commit 3617dc96 upstream.

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: default avatarAkash Goel <akash.goel@intel.com>
Reviewed-by: default avatarJesse Barnes <jbarnes@virtuousgeek.org>
Tested-by: default avatarArjan van de Ven <arjan@linux.intel.com>
Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
Signed-off-by: default avatarJiri Slaby <jslaby@suse.cz>
parent b3959c77
...@@ -125,11 +125,24 @@ static unsigned long i915_stolen_to_physical(struct drm_device *dev) ...@@ -125,11 +125,24 @@ static unsigned long i915_stolen_to_physical(struct drm_device *dev)
*/ */
r = devm_request_mem_region(dev->dev, base, dev_priv->gtt.stolen_size, r = devm_request_mem_region(dev->dev, base, dev_priv->gtt.stolen_size,
"Graphics Stolen Memory"); "Graphics Stolen Memory");
if (r == NULL) {
/*
* 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) { if (r == NULL) {
DRM_ERROR("conflict detected with stolen region: [0x%08x - 0x%08x]\n", DRM_ERROR("conflict detected with stolen region: [0x%08x - 0x%08x]\n",
base, base + (uint32_t)dev_priv->gtt.stolen_size); base, base + (uint32_t)dev_priv->gtt.stolen_size);
base = 0; base = 0;
} }
}
return base; return base;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment