mirror of
				https://github.com/tiagovignatti/intel-gpu-tools.git
				synced 2025-11-03 19:47:15 +00:00 
			
		
		
		
	igt: Fix use MI_STORE_DATA_IMM on gen3
For the older gen, MI_STORE_DATA_IMM is a privileged command so we need to set the "secure" batch flag, and we also need to instruct the command to use the GTT virtual address. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
		
							parent
							
								
									4a3a826342
								
							
						
					
					
						commit
						fbb0f636bd
					
				@ -45,10 +45,10 @@ struct shadow {
 | 
			
		||||
	uint32_t handle;
 | 
			
		||||
	struct drm_i915_gem_relocation_entry reloc;
 | 
			
		||||
};
 | 
			
		||||
int gen;
 | 
			
		||||
 | 
			
		||||
static void setup(int fd, struct shadow *shadow)
 | 
			
		||||
{
 | 
			
		||||
	int gen = intel_gen(intel_get_drm_devid(fd));
 | 
			
		||||
	uint32_t *cpu;
 | 
			
		||||
	int i = 0;
 | 
			
		||||
 | 
			
		||||
@ -66,6 +66,7 @@ static void setup(int fd, struct shadow *shadow)
 | 
			
		||||
		cpu[i++] = BATCH_SIZE - sizeof(uint32_t);
 | 
			
		||||
	} else {
 | 
			
		||||
		cpu[i-1]--;
 | 
			
		||||
		cpu[i-1] |= 1 << 22;
 | 
			
		||||
		cpu[i++] = BATCH_SIZE - sizeof(uint32_t);
 | 
			
		||||
	}
 | 
			
		||||
	cpu[i++] = MI_BATCH_BUFFER_END;
 | 
			
		||||
@ -98,6 +99,8 @@ static uint32_t new_batch(int fd, struct shadow *shadow)
 | 
			
		||||
	memset(&execbuf, 0, sizeof(execbuf));
 | 
			
		||||
	execbuf.buffers_ptr = (uintptr_t)gem_exec;
 | 
			
		||||
	execbuf.buffer_count = 2;
 | 
			
		||||
	if (gen < 4)
 | 
			
		||||
		execbuf.flags |= I915_EXEC_SECURE;
 | 
			
		||||
 | 
			
		||||
	gem_execbuf(fd, &execbuf);
 | 
			
		||||
 | 
			
		||||
@ -129,7 +132,8 @@ igt_simple_main
 | 
			
		||||
 | 
			
		||||
	igt_skip_on_simulation();
 | 
			
		||||
 | 
			
		||||
	fd = drm_open_driver(DRIVER_INTEL);
 | 
			
		||||
	fd = drm_open_driver_master(DRIVER_INTEL);
 | 
			
		||||
	gen = intel_gen(intel_get_drm_devid(fd));
 | 
			
		||||
	setup(fd, &shadow);
 | 
			
		||||
 | 
			
		||||
	count = gem_aperture_size(fd) / BATCH_SIZE;
 | 
			
		||||
 | 
			
		||||
@ -100,6 +100,8 @@ static void run_test(int fd, unsigned ring, unsigned flags)
 | 
			
		||||
	execbuf.buffers_ptr = (uintptr_t)obj;
 | 
			
		||||
	execbuf.buffer_count = 2;
 | 
			
		||||
	execbuf.flags = ring | (1 << 11);
 | 
			
		||||
	if (gen < 4)
 | 
			
		||||
		execbuf.flags |= I915_EXEC_SECURE;
 | 
			
		||||
 | 
			
		||||
	memset(obj, 0, sizeof(obj));
 | 
			
		||||
	obj[0].handle = gem_create(fd, 4096);
 | 
			
		||||
@ -121,8 +123,8 @@ static void run_test(int fd, unsigned ring, unsigned flags)
 | 
			
		||||
		uint64_t offset;
 | 
			
		||||
 | 
			
		||||
		reloc[i].target_handle = obj[0].handle;
 | 
			
		||||
		reloc[i].offset = (b - batch + 1) * sizeof(*batch);
 | 
			
		||||
		reloc[i].presumed_offset = obj[0].offset;
 | 
			
		||||
		reloc[i].offset = (b - batch + 1) * sizeof(*batch);
 | 
			
		||||
		reloc[i].delta = i * sizeof(uint32_t);
 | 
			
		||||
		reloc[i].read_domains = I915_GEM_DOMAIN_INSTRUCTION;
 | 
			
		||||
		reloc[i].write_domain = I915_GEM_DOMAIN_INSTRUCTION;
 | 
			
		||||
@ -137,6 +139,8 @@ static void run_test(int fd, unsigned ring, unsigned flags)
 | 
			
		||||
			*b++ = offset;
 | 
			
		||||
			reloc[i].offset += sizeof(*batch);
 | 
			
		||||
		} else {
 | 
			
		||||
			b[-1] -= 1;
 | 
			
		||||
			b[-1] |= 1 << 22;
 | 
			
		||||
			*b++ = offset;
 | 
			
		||||
		}
 | 
			
		||||
		*b++ = i;
 | 
			
		||||
@ -144,6 +148,7 @@ static void run_test(int fd, unsigned ring, unsigned flags)
 | 
			
		||||
	*b++ = MI_BATCH_BUFFER_END;
 | 
			
		||||
	munmap(batch, 16*1024+4096);
 | 
			
		||||
	gem_execbuf(fd, &execbuf);
 | 
			
		||||
	check_bo(fd, obj[0].handle);
 | 
			
		||||
 | 
			
		||||
	memset(&hang, 0, sizeof(hang));
 | 
			
		||||
	if (flags & HANG)
 | 
			
		||||
@ -215,7 +220,7 @@ igt_main
 | 
			
		||||
	igt_skip_on_simulation();
 | 
			
		||||
 | 
			
		||||
	igt_fixture
 | 
			
		||||
		fd = drm_open_driver(DRIVER_INTEL);
 | 
			
		||||
		fd = drm_open_driver_master(DRIVER_INTEL);
 | 
			
		||||
 | 
			
		||||
	for (mode = modes; mode->prefix; mode++) {
 | 
			
		||||
		for (ring = rings; ring->name; ring++) {
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user