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

Reply via email to