gem_storedw_batches_loop: Fix for BDW

Existing code was trying to be too clever and wasn't properly emitting
the high dword, or the correct length.

Signed-off-by: Ben Widawsky <ben@bwidawsk.net>
This commit is contained in:
Ben Widawsky 2014-01-13 06:28:45 -08:00
parent fee27cf822
commit 1552aa2112

View File

@ -60,8 +60,6 @@ store_dword_loop(int divider, unsigned flags)
cmd = MI_STORE_DWORD_IMM; cmd = MI_STORE_DWORD_IMM;
if (!has_ppgtt) if (!has_ppgtt)
cmd |= MI_MEM_VIRTUAL; cmd |= MI_MEM_VIRTUAL;
if (intel_gen(drm_intel_bufmgr_gem_get_devid(bufmgr)) >= 8)
((uint8_t *)&cmd)[0] = 1;
for (i = 0; i < SLOW_QUICK(0x80000, 4); i++) { for (i = 0; i < SLOW_QUICK(0x80000, 4); i++) {
int j = 0; int j = 0;
@ -76,13 +74,14 @@ store_dword_loop(int divider, unsigned flags)
buf = cmd_bo->virtual; buf = cmd_bo->virtual;
buf[j++] = cmd; buf[j++] = cmd;
cmd_address_offset = j * 4;
if (intel_gen(drm_intel_bufmgr_gem_get_devid(bufmgr)) >= 8) { if (intel_gen(drm_intel_bufmgr_gem_get_devid(bufmgr)) >= 8) {
buf[j++] = target_bo->offset; buf[j++] = target_bo->offset;
buf[j++] = 0;
} else { } else {
buf[j++] = 0; buf[j++] = 0;
buf[j++] = target_bo->offset; buf[j++] = target_bo->offset;
} }
cmd_address_offset = (j -1) * 4;
assert(j > 0); assert(j > 0);
buf[j++] = 0x42000000 + val; buf[j++] = 0x42000000 + val;