[Intel-gfx] [PATCH v2 3/5] drm/i915/tgl: Define MOCS entries for Tigerlake
Daniele Ceraolo Spurio
daniele.ceraolospurio at intel.com
Mon Jul 29 22:20:32 UTC 2019
On 7/29/19 2:19 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)
> v3: Use a different table for Tiger Lake since entries 0 and 1 are not
> the same (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>
Reviewed-by: Daniele Ceraolo Spurio <daniele.ceraolospurio at intel.com>
Daniele
> ---
> drivers/gpu/drm/i915/gt/intel_mocs.c | 68 +++++++++++++++++++++++-----
> 1 file changed, 57 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/gt/intel_mocs.c b/drivers/gpu/drm/i915/gt/intel_mocs.c
> index 290a5e9b90b9..c511e6983072 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 and will be initialized to an invalid value.
> *
> * The last two entries are reserved by the hardware. For ICL+ they
> * should be initialized according to bspec and never used, for older
> @@ -137,14 +142,7 @@ static const struct drm_i915_mocs_entry broxton_mocs_table[] = {
> };
>
> #define GEN11_MOCS_ENTRIES \
> - /* Base - Uncached (Deprecated) */ \
> - MOCS_ENTRY(I915_MOCS_UNCACHED, \
> - LE_1_UC | LE_TC_1_LLC, \
> - L3_1_UC), \
> - /* Base - L3 + LeCC:PAT (Deprecated) */ \
> - MOCS_ENTRY(I915_MOCS_PTE, \
> - LE_0_PAGETABLE | LE_TC_1_LLC, \
> - L3_3_WB), \
> + /* Entries 0 and 1 are defined per-platform */ \
> /* Base - L3 + LLC */ \
> MOCS_ENTRY(2, \
> LE_3_WB | LE_TC_1_LLC | LE_LRUM(3), \
> @@ -242,7 +240,50 @@ static const struct drm_i915_mocs_entry broxton_mocs_table[] = {
> LE_3_WB | LE_TC_1_LLC | LE_LRUM(3), \
> L3_1_UC)
>
> +static const struct drm_i915_mocs_entry tigerlake_mocs_table[] = {
> + /* Base - Error (Reserved for Non-Use) */
> + MOCS_ENTRY(0, 0x0, 0x0),
> + /* Base - Reserved */
> + MOCS_ENTRY(1, 0x0, 0x0),
> +
> + GEN11_MOCS_ENTRIES,
> +
> + /* Implicitly enable L1 - HDC:L1 + L3 + LLC */
> + MOCS_ENTRY(48,
> + LE_3_WB | LE_TC_1_LLC | LE_LRUM(3),
> + L3_3_WB),
> + /* Implicitly enable L1 - HDC:L1 + L3 */
> + MOCS_ENTRY(49,
> + LE_1_UC | LE_TC_1_LLC,
> + L3_3_WB),
> + /* Implicitly enable L1 - HDC:L1 + LLC */
> + MOCS_ENTRY(50,
> + LE_3_WB | LE_TC_1_LLC | LE_LRUM(3),
> + L3_1_UC),
> + /* Implicitly enable L1 - HDC:L1 */
> + MOCS_ENTRY(51,
> + LE_1_UC | LE_TC_1_LLC,
> + L3_1_UC),
> + /* HW Special Case (CCS) */
> + MOCS_ENTRY(60,
> + LE_3_WB | LE_TC_1_LLC | LE_LRUM(3),
> + L3_1_UC),
> + /* HW Special Case (Displayable) */
> + MOCS_ENTRY(61,
> + LE_1_UC | LE_TC_1_LLC | LE_SCF(1),
> + L3_3_WB),
> +};
> +
> static const struct drm_i915_mocs_entry icelake_mocs_table[] = {
> + /* Base - Uncached (Deprecated) */
> + MOCS_ENTRY(I915_MOCS_UNCACHED,
> + LE_1_UC | LE_TC_1_LLC,
> + L3_1_UC),
> + /* Base - L3 + LeCC:PAT (Deprecated) */
> + MOCS_ENTRY(I915_MOCS_PTE,
> + LE_0_PAGETABLE | LE_TC_1_LLC,
> + L3_3_WB),
> +
> GEN11_MOCS_ENTRIES
> };
>
> @@ -264,7 +305,12 @@ static bool get_mocs_settings(struct intel_gt *gt,
> struct drm_i915_private *i915 = gt->i915;
> bool result = false;
>
> - if (INTEL_GEN(i915) >= 11) {
> + if (INTEL_GEN(i915) >= 12) {
> + table->size = ARRAY_SIZE(tigerlake_mocs_table);
> + table->table = tigerlake_mocs_table;
> + table->n_entries = GEN11_NUM_MOCS_ENTRIES;
> + result = true;
> + } else if (IS_GEN(i915, 11)) {
> table->size = ARRAY_SIZE(icelake_mocs_table);
> table->table = icelake_mocs_table;
> table->n_entries = GEN11_NUM_MOCS_ENTRIES;
>
More information about the Intel-gfx
mailing list