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
_______________________________________________
Intel-gfx mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/intel-gfx