[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