File tree Expand file tree Collapse file tree 1 file changed +13
-1
lines changed Expand file tree Collapse file tree 1 file changed +13
-1
lines changed Original file line number Diff line number Diff line change @@ -380,14 +380,26 @@ static u64 execlists_update_context(struct i915_request *rq)
380380
381381 reg_state [CTX_RING_TAIL + 1 ] = intel_ring_set_tail (rq -> ring , rq -> tail );
382382
383- /* True 32b PPGTT with dynamic page allocation: update PDP
383+ /*
384+ * True 32b PPGTT with dynamic page allocation: update PDP
384385 * registers and point the unallocated PDPs to scratch page.
385386 * PML4 is allocated during ppgtt init, so this is not needed
386387 * in 48-bit mode.
387388 */
388389 if (!i915_vm_is_48bit (& ppgtt -> vm ))
389390 execlists_update_context_pdps (ppgtt , reg_state );
390391
392+ /*
393+ * Make sure the context image is complete before we submit it to HW.
394+ *
395+ * Ostensibly, writes (including the WCB) should be flushed prior to
396+ * an uncached write such as our mmio register access, the empirical
397+ * evidence (esp. on Braswell) suggests that the WC write into memory
398+ * may not be visible to the HW prior to the completion of the UC
399+ * register write and that we may begin execution from the context
400+ * before its image is complete leading to invalid PD chasing.
401+ */
402+ wmb ();
391403 return ce -> lrc_desc ;
392404}
393405
You can’t perform that action at this time.
0 commit comments