[Intel-gfx] [PATCH 1/8] drm/i915/mtl: Define MOCS and PAT tables for MTL

Matt Roper matthew.d.roper at intel.com
Tue Apr 11 19:28:47 UTC 2023


On Mon, Apr 10, 2023 at 08:55:16PM -0700, Yang, Fei wrote:
...
>    >> diff --git a/drivers/gpu/drm/i915/gt/intel_gtt.h
> 
>    >> b/drivers/gpu/drm/i915/gt/intel_gtt.h
> 
>    >> index 69ce55f517f5..b632167eaf2e 100644
> 
>    >> --- a/drivers/gpu/drm/i915/gt/intel_gtt.h
> 
>    >> +++ b/drivers/gpu/drm/i915/gt/intel_gtt.h
> 
>    >> @@ -88,9 +88,18 @@ typedef u64 gen8_pte_t;
> 
>    >>  #define BYT_PTE_SNOOPED_BY_CPU_CACHES             REG_BIT(2)
> 
>    >>  #define BYT_PTE_WRITEABLE                            REG_BIT(1)
> 
>    >> 
> 
>    >> +#define GEN12_PPGTT_PTE_PAT3    BIT_ULL(62)
> 
>    >>  #define GEN12_PPGTT_PTE_LM          BIT_ULL(11)
> 
>    >> +#define GEN12_PPGTT_PTE_PAT2    BIT_ULL(7)
> 
>    >> +#define GEN12_PPGTT_PTE_NC      BIT_ULL(5)
> 
>    >> +#define GEN12_PPGTT_PTE_PAT1    BIT_ULL(4)
> 
>    >> +#define GEN12_PPGTT_PTE_PAT0    BIT_ULL(3)
> 
>> 
>    > Which bspec page is this from?  The PPGTT descriptions in
> 
>    > the bspec are kind of hard to track down.
> 
>     
> 
>    [9]https://gfxspecs.intel.com/Predator/Home/Index/53521

The bspec tagging is a bit bizarre in this area, but I don't believe
this page is intended to apply to MTL.  Note that this page is inside a
section specifically listed as "57b VA Support" --- i.e., this general
section is for platforms like PVC rather than MTL.  MTL only has 48b
virtual address space (bspec 55416), so I think one of the pages in the
48b sections is what we should be referencing instead.

If they screwed up and put MTL-specific details only on a PVC-specific
page of the bspec, we should probably file a bspec issue about that to
get it fixed.

> 
>    PAT_Index[2:0] = {PAT, PCD, PWT} = BIT(7, 4, 3)
> 
>    PAT_Index[3] = BIT(62)
> 
>    PAT_Index[4] = BIT(61)
> 
>     
> 
>    > But if these only apply to MTL, why are they labelled as "GEN12?"
> 
>     
> 
>    These apply to GEN12plus.

That's not what your patch is doing; you're using them in a function
that only gets called on MTL.  So the question is whether these
definitions truly applied to older platforms like TGL/RKL/ADL/etc too
(and we need to go back and fix that code), or whether they're
Xe_LPG-specific, in which case the "GEN12_" prefix is incorrect.

Also, handling the MTL-specific PTE encoding later in the series, after
the transition from cache_level to PAT index, might be best since then
you can just implement it correctly at the time the code is introduced;
no need to add the cache_level implementation first (which can't even
use all the bits) just to come back a few patches later and replace it
all with PAT code.

> 
>     
> 
>    >> 
> 
>    >> -#define GEN12_GGTT_PTE_LM           BIT_ULL(1)
> 
>    >> +#define GEN12_GGTT_PTE_LM                         BIT_ULL(1)
> 
>    >> +#define MTL_GGTT_PTE_PAT0                          BIT_ULL(52)
> 
>    >> +#define MTL_GGTT_PTE_PAT1                          BIT_ULL(53)
> 
>    >> +#define GEN12_GGTT_PTE_ADDR_MASK       GENMASK_ULL(45, 12)
> 
>    >> +#define MTL_GGTT_PTE_PAT_MASK                              
>    GENMASK_ULL(53, 52)
> 
>    >> 
> 
>    >>  #define GEN12_PDE_64K BIT(6)
> 
>    >>  #define GEN12_PTE_PS64 BIT(8)
> 
>    >> @@ -147,6 +156,15 @@ typedef u64 gen8_pte_t;  #define GEN8_PDE_IPS_64K
> 
>    >> BIT(11)
> 
>    >>  #define GEN8_PDE_PS_2M   BIT(7)
> 
>    >> 
> 
>    >> +#define MTL_PPAT_L4_CACHE_POLICY_MASK             REG_GENMASK(3, 2)
> 
>    >> +#define MTL_PAT_INDEX_COH_MODE_MASK              REG_GENMASK(1, 0)
> 
>    >> +#define MTL_PPAT_L4_3_UC              
>    REG_FIELD_PREP(MTL_PPAT_L4_CACHE_POLICY_MASK, 3)
> 
>    >> +#define MTL_PPAT_L4_1_WT              
>    REG_FIELD_PREP(MTL_PPAT_L4_CACHE_POLICY_MASK, 1)
> 
>    >> +#define MTL_PPAT_L4_0_WB              
>    REG_FIELD_PREP(MTL_PPAT_L4_CACHE_POLICY_MASK, 0)
> 
>    >> +#define MTL_3_COH_2W     REG_FIELD_PREP(MTL_PAT_INDEX_COH_MODE_MASK,
>    3)
> 
>    >> +#define MTL_2_COH_1W     REG_FIELD_PREP(MTL_PAT_INDEX_COH_MODE_MASK,
>    2)
> 
>    >> +#define MTL_0_COH_NON   REG_FIELD_PREP(MTL_PAT_INDEX_COH_MODE_MASK, 0)
> 
>> 
>    >The values for these definitions don't seem to be aligned.
> 
>     
> 
>    These are aligned with
>    [10]https://gfxspecs.intel.com/Predator/Home/Index/45101

I mean spacing aligned.  If your tabstops are set to 8, then the values
don't line up visually.


Matt

-- 
Matt Roper
Graphics Software Engineer
Linux GPU Platform Enablement
Intel Corporation


More information about the dri-devel mailing list