Commit 56e0f78e authored by Chris Wilson's avatar Chris Wilson
Browse files

drm/i915/gt: Use caller provided forcewake for intel_mocs_init_engine



During post-reset resume, we call intel_mocs_init_engine to reinitialise
the MOCS registers. Suprisingly, especially when enhanced by lockdep,
the acquisition of the forcewake lock around each register write takes a
substantial portion of the reset time. We don't need to use the
individual forcewake here as we can assume that the caller is holding a
blanket forcewake for the reset&resume and the resume is serialised.

Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190703155225.9501-2-chris@chris-wilson.co.uk
parent b7dc9395
Loading
Loading
Loading
Loading
+9 −6
Original line number Diff line number Diff line
@@ -346,6 +346,9 @@ void intel_mocs_init_engine(struct intel_engine_cs *engine)
	unsigned int index;
	u32 unused_value;

	/* Called under a blanket forcewake */
	assert_forcewakes_active(uncore, FORCEWAKE_ALL);

	if (!get_mocs_settings(gt, &table))
		return;

@@ -355,14 +358,14 @@ void intel_mocs_init_engine(struct intel_engine_cs *engine)
	for (index = 0; index < table.size; index++) {
		u32 value = get_entry_control(&table, index);

		intel_uncore_write(uncore,
		intel_uncore_write_fw(uncore,
				      mocs_register(engine->id, index),
				      value);
	}

	/* All remaining entries are also unused */
	for (; index < table.n_entries; index++)
		intel_uncore_write(uncore,
		intel_uncore_write_fw(uncore,
				      mocs_register(engine->id, index),
				      unused_value);
}