Commit 202c98e7 authored by Daniele Ceraolo Spurio's avatar Daniele Ceraolo Spurio Committed by Chris Wilson
Browse files

drm/i915/guc: Apply new uC status tracking to GuC submission as well



To be able to differentiate the before and after of our commitment to
GuC submission, which will be used in follow-up patches to early set-up
the submission structures.

v2: move functions to guc_submission.h (Michal)

Signed-off-by: default avatarDaniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
Reviewed-by: default avatarJohn Harrison <John.C.Harrison@Intel.com>
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Link: https://patchwork.freedesktop.org/patch/msgid/20200218223327.11058-7-daniele.ceraolospurio@intel.com
parent bfe5a40a
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -207,7 +207,7 @@ static u32 guc_ctl_feature_flags(struct intel_guc *guc)
{
	u32 flags = 0;

	if (!intel_guc_is_submission_supported(guc))
	if (!intel_guc_submission_is_used(guc))
		flags |= GUC_CTL_DISABLE_SCHEDULER;

	return flags;
@@ -217,7 +217,7 @@ static u32 guc_ctl_ctxinfo_flags(struct intel_guc *guc)
{
	u32 flags = 0;

	if (intel_guc_is_submission_supported(guc)) {
	if (intel_guc_submission_is_used(guc)) {
		u32 ctxnum, base;

		base = intel_guc_ggtt_offset(guc, guc->stage_desc_pool);
@@ -348,7 +348,7 @@ int intel_guc_init(struct intel_guc *guc)
	if (ret)
		goto err_ads;

	if (intel_guc_is_submission_supported(guc)) {
	if (intel_guc_submission_is_used(guc)) {
		/*
		 * This is stuff we need to have available at fw load time
		 * if we are planning to enable submission later
@@ -389,7 +389,7 @@ void intel_guc_fini(struct intel_guc *guc)

	i915_ggtt_disable_guc(gt->ggtt);

	if (intel_guc_is_submission_supported(guc))
	if (intel_guc_submission_is_used(guc))
		intel_guc_submission_fini(guc);

	intel_guc_ct_fini(&guc->ct);
@@ -544,7 +544,7 @@ int intel_guc_suspend(struct intel_guc *guc)
	 * If GuC communication is enabled but submission is not supported,
	 * we do not need to suspend the GuC.
	 */
	if (!intel_guc_submission_is_enabled(guc))
	if (!intel_guc_submission_is_used(guc) || !intel_guc_is_ready(guc))
		return 0;

	/*
@@ -609,7 +609,7 @@ int intel_guc_resume(struct intel_guc *guc)
	 * we do not need to resume the GuC but we do need to enable the
	 * GuC communication on resume (above).
	 */
	if (!intel_guc_submission_is_enabled(guc))
	if (!intel_guc_submission_is_used(guc) || !intel_guc_is_ready(guc))
		return 0;

	return intel_guc_send(guc, action, ARRAY_SIZE(action));
+1 −6
Original line number Diff line number Diff line
@@ -39,7 +39,7 @@ struct intel_guc {
		void (*disable)(struct intel_guc *guc);
	} interrupts;

	bool submission_supported;
	bool submission_selected;

	struct i915_vma *ads_vma;
	struct __guc_ads_blob *ads_blob;
@@ -173,11 +173,6 @@ static inline int intel_guc_sanitize(struct intel_guc *guc)
	return 0;
}

static inline bool intel_guc_is_submission_supported(struct intel_guc *guc)
{
	return guc->submission_supported;
}

static inline void intel_guc_enable_msg(struct intel_guc *guc, u32 mask)
{
	spin_lock_irq(&guc->irq_lock);
+3 −6
Original line number Diff line number Diff line
@@ -660,12 +660,9 @@ void intel_guc_submission_disable(struct intel_guc *guc)
	guc_proc_desc_fini(guc);
}

static bool __guc_submission_support(struct intel_guc *guc)
static bool __guc_submission_selected(struct intel_guc *guc)
{
	/* XXX: GuC submission is unavailable for now */
	return false;

	if (!intel_guc_is_supported(guc))
	if (!intel_guc_submission_is_supported(guc))
		return false;

	return i915_modparams.enable_guc & ENABLE_GUC_SUBMISSION;
@@ -673,7 +670,7 @@ static bool __guc_submission_support(struct intel_guc *guc)

void intel_guc_submission_init_early(struct intel_guc *guc)
{
	guc->submission_supported = __guc_submission_support(guc);
	guc->submission_selected = __guc_submission_selected(guc);
}

bool intel_engine_in_guc_submission_mode(const struct intel_engine_cs *engine)
+18 −1
Original line number Diff line number Diff line
@@ -8,7 +8,8 @@

#include <linux/types.h>

struct intel_guc;
#include "intel_guc.h"

struct intel_engine_cs;

void intel_guc_submission_init_early(struct intel_guc *guc);
@@ -20,4 +21,20 @@ int intel_guc_preempt_work_create(struct intel_guc *guc);
void intel_guc_preempt_work_destroy(struct intel_guc *guc);
bool intel_engine_in_guc_submission_mode(const struct intel_engine_cs *engine);

static inline bool intel_guc_submission_is_supported(struct intel_guc *guc)
{
	/* XXX: GuC submission is unavailable for now */
	return false;
}

static inline bool intel_guc_submission_is_wanted(struct intel_guc *guc)
{
	return guc->submission_selected;
}

static inline bool intel_guc_submission_is_used(struct intel_guc *guc)
{
	return intel_guc_is_used(guc) && intel_guc_submission_is_wanted(guc);
}

#endif
+7 −7
Original line number Diff line number Diff line
@@ -49,7 +49,7 @@ static void __confirm_options(struct intel_uc *uc)
			     "enable_guc=%d (guc:%s submission:%s huc:%s)\n",
			     i915_modparams.enable_guc,
			     yesno(intel_uc_wants_guc(uc)),
			     yesno(intel_uc_uses_guc_submission(uc)),
			     yesno(intel_uc_wants_guc_submission(uc)),
			     yesno(intel_uc_wants_huc(uc)));

	if (i915_modparams.enable_guc == -1)
@@ -57,7 +57,7 @@ static void __confirm_options(struct intel_uc *uc)

	if (i915_modparams.enable_guc == 0) {
		GEM_BUG_ON(intel_uc_wants_guc(uc));
		GEM_BUG_ON(intel_uc_uses_guc_submission(uc));
		GEM_BUG_ON(intel_uc_wants_guc_submission(uc));
		GEM_BUG_ON(intel_uc_wants_huc(uc));
		return;
	}
@@ -285,7 +285,7 @@ static void __uc_init(struct intel_uc *uc)
		return;

	/* XXX: GuC submission is unavailable for now */
	GEM_BUG_ON(intel_uc_supports_guc_submission(uc));
	GEM_BUG_ON(intel_uc_uses_guc_submission(uc));

	ret = intel_guc_init(guc);
	if (ret) {
@@ -410,7 +410,7 @@ static int __uc_init_hw(struct intel_uc *uc)
	if (!intel_uc_fw_is_available(&guc->fw)) {
		ret = __uc_check_hw(uc) ||
		      intel_uc_fw_is_overridden(&guc->fw) ||
		      intel_uc_supports_guc_submission(uc) ?
		      intel_uc_wants_guc_submission(uc) ?
		      intel_uc_fw_status_to_error(guc->fw.status) : 0;
		goto err_out;
	}
@@ -462,14 +462,14 @@ static int __uc_init_hw(struct intel_uc *uc)
	if (ret)
		goto err_communication;

	if (intel_uc_supports_guc_submission(uc))
	if (intel_uc_uses_guc_submission(uc))
		intel_guc_submission_enable(guc);

	dev_info(i915->drm.dev, "%s firmware %s version %u.%u %s:%s\n",
		 intel_uc_fw_type_repr(INTEL_UC_FW_TYPE_GUC), guc->fw.path,
		 guc->fw.major_ver_found, guc->fw.minor_ver_found,
		 "submission",
		 enableddisabled(intel_uc_supports_guc_submission(uc)));
		 enableddisabled(intel_uc_uses_guc_submission(uc)));

	if (intel_uc_uses_huc(uc)) {
		dev_info(i915->drm.dev, "%s firmware %s version %u.%u %s:%s\n",
@@ -511,7 +511,7 @@ static void __uc_fini_hw(struct intel_uc *uc)
	if (!intel_guc_is_fw_running(guc))
		return;

	if (intel_uc_supports_guc_submission(uc))
	if (intel_uc_uses_guc_submission(uc))
		intel_guc_submission_disable(guc);

	if (guc_communication_enabled(guc))
Loading