[Intel-gfx] [PATCH 2/4] drm/i915/tgl: Define MOCS entries for Tigerlake

Daniele Ceraolo Spurio daniele.ceraolospurio at intel.com
Fri Jul 26 20:17:06 UTC 2019



On 7/26/19 12:31 PM, Lucas De Marchi wrote:
> On Fri, Jul 26, 2019 at 11:38:16AM -0700, Daniele Ceraolo Spurio wrote:
>>
>>
>> On 7/25/19 5:12 PM, Lucas De Marchi wrote:
>>> From: Tomasz Lis <tomasz.lis at intel.com>
>>>
>>> The MOCS table is published as part of bspec, and versioned. Entries
>>> are supposed to never be modified, but new ones can be added. Adding
>>> entries increases table version. The patch includes version 1 entries.
>>>
>>> Two of the 3 legacy entries used for gen9 are no longer expected to 
>>> work.
>>> Although we are changing the gen11 table, those changes are supposed to
>>> be backward compatible since we are only touching previously undefined
>>> entries.
>>>
>>> v2: Add the missing entries in 49-51 range and replace "HW reserved"
>>>     terminology to what it actually is: L1 is implicitly enabled 
>>> (from Daniele)
>>>
>>> Cc: Joonas Lahtinen <joonas.lahtinen at linux.intel.com>
>>> Cc: Mika Kuoppala <mika.kuoppala at intel.com>
>>> Cc: Daniele Ceraolo Spurio <daniele.ceraolospurio at intel.com>
>>> Signed-off-by: Tomasz Lis <tomasz.lis at intel.com>
>>> Signed-off-by: Lucas De Marchi <lucas.demarchi at intel.com>
>>> ---
>>>  drivers/gpu/drm/i915/gt/intel_mocs.c | 37 +++++++++++++++++++++++++---
>>>  1 file changed, 34 insertions(+), 3 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/i915/gt/intel_mocs.c 
>>> b/drivers/gpu/drm/i915/gt/intel_mocs.c
>>> index 290a5e9b90b9..ca370c7487f9 100644
>>> --- a/drivers/gpu/drm/i915/gt/intel_mocs.c
>>> +++ b/drivers/gpu/drm/i915/gt/intel_mocs.c
>>> @@ -62,6 +62,10 @@ struct drm_i915_mocs_table {
>>>  #define GEN11_NUM_MOCS_ENTRIES    64  /* 63-64 are reserved, but 
>>> configured. */
>>>  /* (e)LLC caching options */
>>> +/*
>>> + * Note: LE_0_PAGETABLE works only up to Gen11; for newer gens it means
>>> + * the same as LE_UC
>>> + */
>>>  #define LE_0_PAGETABLE        _LE_CACHEABILITY(0)
>>>  #define LE_1_UC            _LE_CACHEABILITY(1)
>>>  #define LE_2_WT            _LE_CACHEABILITY(2)
>>> @@ -100,8 +104,9 @@ struct drm_i915_mocs_table {
>>>   * of bspec.
>>>   *
>>>   * Entries not part of the following tables are undefined as far as
>>> - * userspace is concerned and shouldn't be relied upon.  For the time
>>> - * being they will be initialized to PTE.
>>> + * userspace is concerned and shouldn't be relied upon.  For Gen < 12
>>> + * they will be initialized to PTE. Gen >= 12 onwards don't have a 
>>> setting for
>>> + * PTE. We use the same value, but that actually means Uncached.
>>>   *
>>>   * The last two entries are reserved by the hardware. For ICL+ they
>>>   * should be initialized according to bspec and never used, for older
>>> @@ -137,11 +142,13 @@ static const struct drm_i915_mocs_entry 
>>> broxton_mocs_table[] = {
>>>  };
>>>  #define GEN11_MOCS_ENTRIES \
>>> -    /* Base - Uncached (Deprecated) */ \
>>> +    /* Gen11: Base - Uncached (Deprecated) */ \
>>> +    /* Gen12+: Base - Error (Reserved for Non-Use) */ \
>>>      MOCS_ENTRY(I915_MOCS_UNCACHED, \
>>>             LE_1_UC | LE_TC_1_LLC, \
>>>             L3_1_UC), \
>>>      /* Base - L3 + LeCC:PAT (Deprecated) */ \
>>> +    /* Gen12+: Base - Reserved */ \
>>>      MOCS_ENTRY(I915_MOCS_PTE, \
>>>             LE_0_PAGETABLE | LE_TC_1_LLC, \
>>>             L3_3_WB), \
>>
>>
>> I've double-checked the specs and noticed that they now say that MOCS 
>> 0 and 1 should be set to all zeros for Gen12 (possibly just to 
>> highlight the fact that they're deprecated/reserved). These are not 
>> supposes to be used so programming them to different values shouldn't 
>> matter, but it might be worth sticking to the specs and add a separate 
>> Gen12 table.
> 
> I noticed that too, but while implementing the IGT tests. These are 0,
> but they are RO, it doesn't matter what we write on them.
> 
> I could add a comment here and change the IGT test to check they are in
> fact 0 (rather than setting them as unused). Would this cover your
> concern? I feel reluctant to add a big table like this per platform if
> there's a wayto avoid it.
> 

Yes, that works for me.

Daniele

> 
>>
>> I've confirmed all the other entries in the gen11 table are kept the 
>> same in the TGL one, and the ones added below match the table as well.
>>
>>> @@ -233,6 +240,30 @@ static const struct drm_i915_mocs_entry 
>>> broxton_mocs_table[] = {
>>>      MOCS_ENTRY(23, \
>>>             LE_3_WB | LE_TC_1_LLC | LE_LRUM(3) | LE_RSC(1) | 
>>> LE_SCC(7), \
>>>             L3_3_WB), \
>>> +    /* Gen12+: Implicitly enable L1 - HDC:L1 + L3 + LLC */ \
>>> +    MOCS_ENTRY(48, \
>>> +           LE_3_WB | LE_TC_1_LLC | LE_LRUM(3), \
>>> +           L3_3_WB), \
>>> +    /* Gen12+: Implicitly enable L1 - HDC:L1 + L3 */ \
>>> +    MOCS_ENTRY(49, \
>>> +           LE_1_UC | LE_TC_1_LLC, \
>>> +           L3_3_WB), \
>>> +    /* Gen12+: Implicitly enable L1 - HDC:L1 + LLC */ \
>>> +    MOCS_ENTRY(50, \
>>> +           LE_3_WB | LE_TC_1_LLC | LE_LRUM(3), \
>>> +           L3_1_UC), \
>>> +    /* Gen12+: Implicitly enable L1 - HDC:L1 */ \
>>> +    MOCS_ENTRY(51, \
>>> +           LE_1_UC | LE_TC_1_LLC, \
>>> +           L3_1_UC), \
>>> +    /* Gen12+: HW Reserved - HW Special Case (CCS) */ \
>>
>> Entries 60 and 61 are not reserved for HW usage but are special cases 
>> that trigger implicit behaviors. I'd drop the "HW Reserved" tag and 
>> leave just "HW Special Case"
> 
> ok
> 
> thanks
> Lucas De Marchi
> 
>>
>> Daniele
>>
>>> +    MOCS_ENTRY(60, \
>>> +           LE_3_WB | LE_TC_1_LLC | LE_LRUM(3), \
>>> +           L3_1_UC), \
>>> +    /* Gen12+: HW Reserved - HW Special Case (Displayable) */ \
>>> +    MOCS_ENTRY(61, \
>>> +           LE_1_UC | LE_TC_1_LLC | LE_SCF(1), \
>>> +           L3_3_WB), \
>>>      /* HW Reserved - SW program but never use */ \
>>>      MOCS_ENTRY(62, \
>>>             LE_3_WB | LE_TC_1_LLC | LE_LRUM(3), \
>>>


More information about the Intel-gfx mailing list