diff options
-rw-r--r-- | drivers/gpu/drm/i915/intel_lrc.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c index 43957bb37a42..37c94a54efcb 100644 --- a/drivers/gpu/drm/i915/intel_lrc.c +++ b/drivers/gpu/drm/i915/intel_lrc.c | |||
@@ -424,7 +424,8 @@ static u64 execlists_update_context(struct i915_request *rq) | |||
424 | 424 | ||
425 | reg_state[CTX_RING_TAIL+1] = intel_ring_set_tail(rq->ring, rq->tail); | 425 | reg_state[CTX_RING_TAIL+1] = intel_ring_set_tail(rq->ring, rq->tail); |
426 | 426 | ||
427 | /* True 32b PPGTT with dynamic page allocation: update PDP | 427 | /* |
428 | * True 32b PPGTT with dynamic page allocation: update PDP | ||
428 | * registers and point the unallocated PDPs to scratch page. | 429 | * registers and point the unallocated PDPs to scratch page. |
429 | * PML4 is allocated during ppgtt init, so this is not needed | 430 | * PML4 is allocated during ppgtt init, so this is not needed |
430 | * in 48-bit mode. | 431 | * in 48-bit mode. |
@@ -432,6 +433,17 @@ static u64 execlists_update_context(struct i915_request *rq) | |||
432 | if (ppgtt && !i915_vm_is_48bit(&ppgtt->vm)) | 433 | if (ppgtt && !i915_vm_is_48bit(&ppgtt->vm)) |
433 | execlists_update_context_pdps(ppgtt, reg_state); | 434 | execlists_update_context_pdps(ppgtt, reg_state); |
434 | 435 | ||
436 | /* | ||
437 | * Make sure the context image is complete before we submit it to HW. | ||
438 | * | ||
439 | * Ostensibly, writes (including the WCB) should be flushed prior to | ||
440 | * an uncached write such as our mmio register access, the empirical | ||
441 | * evidence (esp. on Braswell) suggests that the WC write into memory | ||
442 | * may not be visible to the HW prior to the completion of the UC | ||
443 | * register write and that we may begin execution from the context | ||
444 | * before its image is complete leading to invalid PD chasing. | ||
445 | */ | ||
446 | wmb(); | ||
435 | return ce->lrc_desc; | 447 | return ce->lrc_desc; |
436 | } | 448 | } |
437 | 449 | ||