On Thu, 27 Feb 2014 11:01:08 +0200 Jani Nikula <jani.nik...@linux.intel.com> wrote:
> On Thu, 27 Feb 2014, Jani Nikula <jani.nik...@linux.intel.com> wrote: > > On Wed, 26 Feb 2014, Jesse Barnes <jbar...@virtuousgeek.org> wrote: > >> 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> > > > > 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. Note I think we should do this at the x86 quirk level as well since otherwise the kernel may put MMIO space on top of our stolen range. -- Jesse Barnes, Intel Open Source Technology Center _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/intel-gfx