public inbox for igt-dev@lists.freedesktop.org
 help / color / mirror / Atom feed
From: "Kalamarz, Lukasz" <lukasz.kalamarz@intel.com>
To: "igt-dev@lists.freedesktop.org" <igt-dev@lists.freedesktop.org>,
	"Kumar Valsan, Prathap" <prathap.kumar.valsan@intel.com>
Cc: "De Marchi, Lucas" <lucas.demarchi@intel.com>
Subject: Re: [igt-dev] [PATCH i-g-t v5] i915/gem_mocs_settings: Add mocs table for icelake
Date: Wed, 13 Mar 2019 13:58:59 +0000	[thread overview]
Message-ID: <be1fd64dfd5a9dc5580202ed6d09afced38a7c97.camel@intel.com> (raw)
In-Reply-To: <20190312151425.3939-1-prathap.kumar.valsan@intel.com>

On Tue, 2019-03-12 at 11:14 -0400, Prathap Kumar Valsan wrote:
> From: "Kumar Valsan, Prathap" <prathap.kumar.valsan@intel.com>
> 
> This patch adds mocs table for icelake with expected L3 and eDRAM
> control values.
> 
> Signed-off-by: Kumar Valsan, Prathap <prathap.kumar.valsan@intel.com>
> ---

Chris and Tomek suggested creating negative scenario, that will verify
setting dirty mocs values instead of skipping for gen11+. But if they
will agree that this is not a blocker, then 
Signed-off-by: Lukasz Kalamarz <lukasz.kalamarz@intel.com>

> Changes in v5:
> - As mocs table is global, test need not write
>   mocs table. Below jira has the discussion. 
>   https://jira.devtools.intel.com/browse/VLK-1567
> Changes in v4:
> - L3 control registers are global in icelake.
>   Test validates that dirty writes from userspace
>   to L3 control registers are being dropped. 
> Changes in v3:
> - There are holes in the mocs table(Lucas Pointed out).
>   In icelake index 16 and 17 are reserved.
>   So test shouldn't be checking them.
> Changes in v2:
> - Cleaned up the code based on review
>   comments from Lucas and Chris
>  tests/i915/gem_mocs_settings.c | 103 ++++++++++++++++++++++++-------
> --
>  1 file changed, 75 insertions(+), 28 deletions(-)
> 
> diff --git a/tests/i915/gem_mocs_settings.c
> b/tests/i915/gem_mocs_settings.c
> index 5b3b6bc1..901cef38 100644
> --- a/tests/i915/gem_mocs_settings.c
> +++ b/tests/i915/gem_mocs_settings.c
> @@ -32,7 +32,9 @@
>  #include "igt_perf.h"
>  #include "igt_sysfs.h"
>  
> -#define MAX_NUMBER_MOCS_REGISTERS	(64)
> +#define GEN9_NUM_MOCS_ENTRIES   62  /* 62 out of 64 - 63 & 64 are
> reserved. */
> +#define GEN11_NUM_MOCS_ENTRIES  64  /* 63-64 are reserved, but
> configured. */
> +
>  enum {
>  	NONE,
>  	RESET,
> @@ -61,10 +63,13 @@ static const char * const test_modes[] = {
>  #define GEN9_MFX1_MOCS_0	(0xcA00)	/* Media 1 MOCS base
> register*/
>  #define GEN9_VEBOX_MOCS_0	(0xcB00)	/* Video MOCS base register*/
>  #define GEN9_BLT_MOCS_0		(0xcc00)	/* Blitter MOCS base
> register*/
> +#define ICELAKE_MOCS_PTE	{0x00000004, 0x0030, 0x1}
> +#define MOCS_PTE		{0x00000038, 0x0030, 0x1}
>  
>  struct mocs_entry {
>  	uint32_t	control_value;
>  	uint16_t	l3cc_value;
> +	uint8_t 	used;
>  };
>  
>  struct mocs_table {
> @@ -73,35 +78,59 @@ struct mocs_table {
>  };
>  
>  /* The first entries in the MOCS tables are defined by uABI */
> -static const struct mocs_entry skylake_mocs_table[] = {
> -	{ 0x00000009, 0x0010 },
> -	{ 0x00000038, 0x0030 },
> -	{ 0x0000003b, 0x0030 },
> +static const struct mocs_entry
> icelake_mocs_table[GEN11_NUM_MOCS_ENTRIES] = {
> +	[0]  = { 0x00000005, 0x0010, 0x1},
> +	[1]  = ICELAKE_MOCS_PTE,
> +	[2]  = { 0x00000037, 0x0030, 0x1},
> +	[3]  = { 0x00000005, 0x0010, 0x1},
> +	[4]  = { 0x00000005, 0x0030, 0x1},
> +	[5]  = { 0x00000037, 0x0010, 0x1},
> +	[6]  = { 0x00000017, 0x0010, 0x1},
> +	[7]  = { 0x00000017, 0x0030, 0x1},
> +	[8]  = { 0x00000027, 0x0010, 0x1},
> +	[9]  = { 0x00000027, 0x0030, 0x1},
> +	[10] = { 0x00000077, 0x0010, 0x1},
> +	[11] = { 0x00000077, 0x0030, 0x1},
> +	[12] = { 0x00000057, 0x0010, 0x1},
> +	[13] = { 0x00000057, 0x0030, 0x1},
> +	[14] = { 0x00000067, 0x0010, 0x1},
> +	[15] = { 0x00000067, 0x0030, 0x1},
> +	[18] = { 0x00060037, 0x0030, 0x1},
> +	[19] = { 0x00000737, 0x0030, 0x1},
> +	[20] = { 0x00000337, 0x0030, 0x1},
> +	[21] = { 0x00000137, 0x0030, 0x1},
> +	[22] = { 0x000003b7, 0x0030, 0x1},
> +	[23] = { 0x000007b7, 0x0030, 0x1},
> +	[24 ... 61] = ICELAKE_MOCS_PTE,
> +	[62] = { 0x00000037, 0x0010, 0x1},
> +	[63] = { 0x00000037, 0x0010, 0x1},
> +};
> +
> +
> +static const struct mocs_entry
> skylake_mocs_table[GEN9_NUM_MOCS_ENTRIES] = {
> +	[0] = { 0x00000009, 0x0010, 0x1},
> +	[1] = MOCS_PTE,
> +	[2] = { 0x0000003b, 0x0030, 0x1},
> +	[3 ... GEN9_NUM_MOCS_ENTRIES - 1] = MOCS_PTE,
>  };
>  
> -static const struct mocs_entry dirty_skylake_mocs_table[] = {
> -	{ 0x00003FFF, 0x003F }, /* no snoop bit */
> -	{ 0x00003FFF, 0x003F },
> -	{ 0x00003FFF, 0x003F },
> +static const struct mocs_entry
> dirty_skylake_mocs_table[GEN9_NUM_MOCS_ENTRIES] = {
> +	[0 ... GEN9_NUM_MOCS_ENTRIES - 1] = { 0x00003FFF, 0x003F, 0x1
> },
>  };
>  
> -static const struct mocs_entry broxton_mocs_table[] = {
> -	{ 0x00000009, 0x0010 },
> -	{ 0x00000038, 0x0030 },
> -	{ 0x00000039, 0x0030 },
> +static const struct mocs_entry
> broxton_mocs_table[GEN9_NUM_MOCS_ENTRIES] = {
> +	[0] = { 0x00000009, 0x0010, 0x1},
> +	[1] = MOCS_PTE,
> +	[2] = { 0x00000039, 0x0030, 0x1},
> +	[3 ... GEN9_NUM_MOCS_ENTRIES - 1] = MOCS_PTE,
>  };
>  
> -static const struct mocs_entry dirty_broxton_mocs_table[] = {
> -	{ 0x00007FFF, 0x003F },
> -	{ 0x00007FFF, 0x003F },
> -	{ 0x00007FFF, 0x003F },
> +static const struct mocs_entry
> dirty_broxton_mocs_table[GEN9_NUM_MOCS_ENTRIES] = {
> +	[0 ... GEN9_NUM_MOCS_ENTRIES - 1] = { 0x00007FFF, 0x003F, 0x1
> },
>  };
>  
> -static const uint32_t write_values[] = {
> -	0xFFFFFFFF,
> -	0xFFFFFFFF,
> -	0xFFFFFFFF,
> -	0xFFFFFFFF
> +static const uint32_t write_values[GEN9_NUM_MOCS_ENTRIES] = {
> +	[0 ... GEN9_NUM_MOCS_ENTRIES - 1] = 0xFFFFFFFF,
>  };
>  
>  static bool get_mocs_settings(int fd, struct mocs_table *table, bool
> dirty)
> @@ -127,6 +156,10 @@ static bool get_mocs_settings(int fd, struct
> mocs_table *table, bool dirty)
>  			table->table = broxton_mocs_table;
>  		}
>  		result = true;
> +	} else if (IS_ICELAKE(devid)) {
> +		table->size  = ARRAY_SIZE(icelake_mocs_table);
> +		table->table = icelake_mocs_table;
> +		result = true;
>  	}
>  
>  	return result;
> @@ -283,9 +316,12 @@ static void check_control_registers(int fd,
>  	read_regs = gem_mmap__cpu(fd, dst_handle, 0, 4096, PROT_READ);
>  
>  	gem_set_domain(fd, dst_handle, I915_GEM_DOMAIN_CPU, 0);
> -	for (int index = 0; index < table.size; index++)
> +	for (int index = 0; index < table.size; index++) {
> +		if (!table.table[index].used)
> +			continue;
>  		igt_assert_eq_u32(read_regs[index],
>  				  table.table[index].control_value);
> +	}
>  
>  	munmap(read_regs, 4096);
>  	gem_close(fd, dst_handle);
> @@ -315,10 +351,14 @@ static void check_l3cc_registers(int fd,
>  	gem_set_domain(fd, dst_handle, I915_GEM_DOMAIN_CPU, 0);
>  
>  	for (index = 0; index < table.size / 2; index++) {
> -		igt_assert_eq_u32(read_regs[index] & 0xffff,
> -				  table.table[index * 2].l3cc_value);
> -		igt_assert_eq_u32(read_regs[index] >> 16,
> -				  table.table[index * 2 +
> 1].l3cc_value);
> +		if (table.table[index * 2].used) {
> +			igt_assert_eq_u32(read_regs[index] & 0xffff,
> +					  table.table[index *
> 2].l3cc_value);
> +		}
> +		if (table.table[index * 2 + 1].used) {
> +			igt_assert_eq_u32(read_regs[index] >> 16,
> +					  table.table[index * 2 +
> 1].l3cc_value);
> +		}
>  	}
>  
>  	if (table.size & 1)
> @@ -380,7 +420,7 @@ static void write_dirty_mocs(int fd, unsigned
> engine, uint32_t ctx_id)
>  
>  	if (engine == I915_EXEC_RENDER)
>  		write_registers(fd, ctx_id, GEN9_LNCFCMOCS0,
> -				write_values, ARRAY_SIZE(write_values),
> +				write_values,
> ARRAY_SIZE(write_values)/2,
>  				engine);
>  }
>  
> @@ -390,6 +430,13 @@ static void run_test(int fd, unsigned engine,
> unsigned flags, unsigned mode)
>  	uint32_t ctx_clean_id;
>  	uint32_t ctx_dirty_id;
>  
> +	/* As mocs is global for GEN11+, trying to dirtying the mocs
> +	 * and testing context save and restore of mocs between
> contexts
> +	 * is bound to fail.
> +	 */
> +	if (flags & MOCS_DIRTY_VALUES)
> +		igt_skip_on(intel_gen(intel_get_drm_devid(fd)) >= 11);
> +
>  	gem_require_ring(fd, engine);
>  
>  	/* Skip if we don't know where the registers are for this
> engine */
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

  reply	other threads:[~2019-03-13 13:59 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-02-15 21:46 [igt-dev] [PATCH i-g-t] i915/gem_mocs_settings: Add mocs table for icelake Prathap Kumar Valsan via igt-dev
2019-02-15 22:48 ` [igt-dev] ✓ Fi.CI.BAT: success for i915/gem_mocs_settings: Add mocs table for icelake (rev3) Patchwork
2019-02-16  6:07 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
2019-02-20  8:33 ` [igt-dev] [PATCH i-g-t] i915/gem_mocs_settings: Add mocs table for icelake Szwichtenberg, Radoslaw
2019-02-21 22:48 ` Lucas De Marchi
2019-02-21 23:42   ` Chris Wilson
2019-02-22 17:49     ` Lucas De Marchi
2019-02-22 14:05 ` [igt-dev] ✗ Fi.CI.BAT: failure for i915/gem_mocs_settings: Add mocs table for icelake (rev4) Patchwork
2019-02-22 14:17 ` [igt-dev] [PATCH i-g-t v2] i915/gem_mocs_settings: Add mocs table for icelake Prathap Kumar Valsan
2019-02-22 15:17   ` Lis, Tomasz
2019-02-22 15:21     ` Chris Wilson
2019-02-22 21:32       ` Kumar Valsan, Prathap
2019-02-22 21:48         ` Chris Wilson
2019-02-25 13:17           ` Lis, Tomasz
2019-02-25  0:26     ` Kumar Valsan, Prathap
2019-02-22 21:16 ` [igt-dev] ✗ Fi.CI.BAT: failure for i915/gem_mocs_settings: Add mocs table for icelake (rev5) Patchwork
2019-02-22 21:20 ` [igt-dev] [PATCH i-g-t v3] i915/gem_mocs_settings: Add mocs table for icelake Prathap Kumar Valsan
2019-03-04 20:27 ` [igt-dev] [PATCH i-g-t v4] " Prathap Kumar Valsan
2019-03-04 20:37   ` Kumar Valsan, Prathap
2019-03-04 21:01 ` [igt-dev] ✓ Fi.CI.BAT: success for i915/gem_mocs_settings: Add mocs table for icelake (rev6) Patchwork
2019-03-05  2:11 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
2019-03-12 15:14 ` [igt-dev] [PATCH i-g-t v5] i915/gem_mocs_settings: Add mocs table for icelake Prathap Kumar Valsan
2019-03-13 13:58   ` Kalamarz, Lukasz [this message]
2019-03-14  9:18     ` Chris Wilson
2019-03-14 11:03       ` Kalamarz, Lukasz
2019-03-13 12:12 ` [igt-dev] ✗ Fi.CI.BAT: failure for i915/gem_mocs_settings: Add mocs table for icelake (rev7) Patchwork
2019-03-14  0:12 ` [igt-dev] [PATCH i-g-t v5] i915/gem_mocs_settings: Add mocs table for icelake Prathap Kumar Valsan
2019-03-14  0:47 ` [igt-dev] ✗ Fi.CI.BAT: failure for i915/gem_mocs_settings: Add mocs table for icelake (rev8) Patchwork
2019-03-14 17:28 ` [igt-dev] [PATCH i-g-t v6] i915/gem_mocs_settings: Add mocs table for icelake Prathap Kumar Valsan
2019-03-15  8:46   ` Chris Wilson
2019-03-15 19:28     ` Kumar Valsan, Prathap
2019-03-15 21:11       ` Chris Wilson
2019-03-14 18:07 ` [igt-dev] ✓ Fi.CI.BAT: success for i915/gem_mocs_settings: Add mocs table for icelake (rev9) Patchwork
2019-03-15  2:54 ` [igt-dev] ✗ Fi.CI.IGT: failure " Patchwork
2019-03-15 19:15 ` [igt-dev] [PATCH i-g-t v7] i915/gem_mocs_settings: Add mocs table for icelake Prathap Kumar Valsan
2019-03-18 13:10   ` Kumar Valsan, Prathap
2019-03-18 13:06     ` Chris Wilson
2019-03-18 13:31       ` Kumar Valsan, Prathap
2019-03-18 13:27   ` Chris Wilson
2019-03-18 10:21 ` [igt-dev] ✓ Fi.CI.BAT: success for i915/gem_mocs_settings: Add mocs table for icelake (rev11) Patchwork
2019-03-18 12:37 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=be1fd64dfd5a9dc5580202ed6d09afced38a7c97.camel@intel.com \
    --to=lukasz.kalamarz@intel.com \
    --cc=igt-dev@lists.freedesktop.org \
    --cc=lucas.demarchi@intel.com \
    --cc=prathap.kumar.valsan@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox