[Intel-gfx] [PATCH v2 2/2] drm/i915/gtt: Avoid using addresses in non-canonical form.
Chris Wilson
chris at chris-wilson.co.uk
Tue Sep 15 13:03:17 PDT 2015
On Tue, Sep 15, 2015 at 08:04:27PM +0200, MichaĆ Winiarski wrote:
> According to bspec, some parts of HW expect the addresses to be in
> a canonical form where bits [63:48] == [47].
> If we're using 32b addressing, we never need to handle such high
> addresses, but since we've recently added 48b address space support,
> lets satisfy the HW by converting the address prior to
> alloc/insert/clear.
Ah, that makes sense - it is only the PDE (et al) that you are setting,
right?
> if (USES_FULL_48BIT_PPGTT(vm->dev))
> - return gen8_alloc_va_range_4lvl(vm, &ppgtt->pml4, start, length);
> + return gen8_alloc_va_range_4lvl(vm, &ppgtt->pml4,
> + gen8_canonical_addr(start),
> + length);
> else
> return gen8_alloc_va_range_3lvl(vm, &ppgtt->pdp, start, length);
Whilst we cannot have the high bit set if !48b, if we just
start = gen8_canonical_addr(start);
and used the same start for both paths here, that feels more organized -
or have I misunderstand where the high bits needs to be set? In which
case please add a comment.
-Chris
--
Chris Wilson, Intel Open Source Technology Centre
More information about the Intel-gfx
mailing list