[Intel-gfx] [PATCH 2/4] drm/i915/tgl: Define MOCS entries for Tigerlake
Lucas De Marchi
lucas.demarchi at intel.com
Fri Jul 26 19:31:04 UTC 2019
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.
>
>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