Commit 0ae4ae91 authored by Mikko Perttunen's avatar Mikko Perttunen Committed by Thierry Reding
Browse files

gpu: host1x: Use RESTART_W to skip timed out jobs on Tegra186+



When MLOCK enforcement is enabled, the 0-word write currently done
is rejected by the hardware outside of an MLOCK region. As such,
on these chips, which also have the newer, more convenient RESTART_W
opcode, use that instead to skip over the timed out job.

Signed-off-by: default avatarMikko Perttunen <mperttunen@nvidia.com>
Signed-off-by: default avatarThierry Reding <treding@nvidia.com>
parent a94b8a77
Loading
Loading
Loading
Loading
+17 −2
Original line number Diff line number Diff line
@@ -457,10 +457,25 @@ void host1x_cdma_update_sync_queue(struct host1x_cdma *cdma,
				 * to offset 0xbad. This does nothing but
				 * has a easily detected signature in debug
				 * traces.
				 *
				 * On systems with MLOCK enforcement enabled,
				 * the above 0 word writes would fall foul of
				 * the enforcement. As such, in the first slot
				 * put a RESTART_W opcode to the beginning
				 * of the next job. We don't use this for older
				 * chips since those only support the RESTART
				 * opcode with inconvenient alignment requirements.
				 */
				if (i == 0 && host1x->info->has_wide_gather) {
					unsigned int next_job = (job->first_get/8 + job->num_slots)
						% HOST1X_PUSHBUFFER_SLOTS;
					mapped[2*slot+0] = (0xd << 28) | (next_job * 2);
					mapped[2*slot+1] = 0x0;
				} else {
					mapped[2*slot+0] = 0x1bad0000;
					mapped[2*slot+1] = 0x1bad0000;
				}
			}

			job->cancelled = true;
		}