Commit 01158da7 authored by Michal Wajdeczko's avatar Michal Wajdeczko Committed by Chris Wilson

drm/i915/uc: Stop sanitizing enable_guc modparam

As we already track GuC/HuC uses by other means than modparam
there is no point in sanitizing it. Just scan modparam for
major discrepancies between what was requested vs actual.

v2: rebased, reworded info messages
v3: oops
Signed-off-by: default avatarMichal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Link: https://patchwork.freedesktop.org/patch/msgid/20190801132840.33176-1-michal.wajdeczko@intel.com
parent 724df646
...@@ -55,78 +55,42 @@ static int __intel_uc_reset_hw(struct intel_uc *uc) ...@@ -55,78 +55,42 @@ static int __intel_uc_reset_hw(struct intel_uc *uc)
return ret; return ret;
} }
static int __get_platform_enable_guc(struct intel_uc *uc) static void __confirm_options(struct intel_uc *uc)
{ {
struct intel_uc_fw *guc_fw = &uc->guc.fw; DRM_DEBUG_DRIVER("enable_guc=%d (guc:%s submission:%s huc:%s)\n",
struct intel_uc_fw *huc_fw = &uc->huc.fw;
int enable_guc = 0;
if (!HAS_GT_UC(uc_to_gt(uc)->i915))
return 0;
/* We don't want to enable GuC/HuC on pre-Gen11 by default */
if (INTEL_GEN(uc_to_gt(uc)->i915) < 11)
return 0;
if (intel_uc_fw_supported(guc_fw) && intel_uc_fw_supported(huc_fw))
enable_guc |= ENABLE_GUC_LOAD_HUC;
return enable_guc;
}
/**
* sanitize_options_early - sanitize uC related modparam options
* @uc: the intel_uc structure
*
* In case of "enable_guc" option this function will attempt to modify
* it only if it was initially set to "auto(-1)". Default value for this
* modparam varies between platforms and it is hardcoded in driver code.
* Any other modparam value is only monitored against availability of the
* related hardware or firmware definitions.
*/
static void sanitize_options_early(struct intel_uc *uc)
{
struct intel_uc_fw *guc_fw = &uc->guc.fw;
struct intel_uc_fw *huc_fw = &uc->huc.fw;
/* A negative value means "use platform default" */
if (i915_modparams.enable_guc < 0)
i915_modparams.enable_guc = __get_platform_enable_guc(uc);
DRM_DEBUG_DRIVER("enable_guc=%d (submission:%s huc:%s)\n",
i915_modparams.enable_guc, i915_modparams.enable_guc,
yesno(intel_uc_supports_guc(uc)),
yesno(intel_uc_supports_guc_submission(uc)), yesno(intel_uc_supports_guc_submission(uc)),
yesno(intel_uc_supports_huc(uc))); yesno(intel_uc_supports_huc(uc)));
/* Verify GuC firmware availability */ if (i915_modparams.enable_guc == -1)
if (intel_uc_supports_guc(uc) && !intel_uc_fw_supported(guc_fw)) { return;
DRM_WARN("Incompatible option detected: enable_guc=%d, "
"but GuC is not supported!\n",
i915_modparams.enable_guc);
DRM_INFO("Disabling GuC/HuC loading!\n");
i915_modparams.enable_guc = 0;
}
/* Verify HuC firmware availability */ if (i915_modparams.enable_guc == 0) {
if (intel_uc_supports_huc(uc) && !intel_uc_fw_supported(huc_fw)) { GEM_BUG_ON(intel_uc_supports_guc(uc));
DRM_WARN("Incompatible option detected: enable_guc=%d, " GEM_BUG_ON(intel_uc_supports_guc_submission(uc));
"but HuC is not supported!\n", GEM_BUG_ON(intel_uc_supports_huc(uc));
i915_modparams.enable_guc); return;
DRM_INFO("Disabling HuC loading!\n");
i915_modparams.enable_guc &= ~ENABLE_GUC_LOAD_HUC;
} }
/* XXX: GuC submission is unavailable for now */ if (!intel_uc_supports_guc(uc))
if (intel_uc_supports_guc_submission(uc)) { DRM_INFO("Incompatible option enable_guc=%d - %s\n",
DRM_INFO("Incompatible option detected: enable_guc=%d, " i915_modparams.enable_guc, "GuC is not supported!");
"but GuC submission is not supported!\n",
i915_modparams.enable_guc); if (i915_modparams.enable_guc & ENABLE_GUC_LOAD_HUC &&
DRM_INFO("Switching to non-GuC submission mode!\n"); !intel_uc_supports_huc(uc))
i915_modparams.enable_guc &= ~ENABLE_GUC_SUBMISSION; DRM_INFO("Incompatible option enable_guc=%d - %s\n",
} i915_modparams.enable_guc, "HuC is not supported!");
if (i915_modparams.enable_guc & ENABLE_GUC_SUBMISSION &&
!intel_uc_supports_guc_submission(uc))
DRM_INFO("Incompatible option enable_guc=%d - %s\n",
i915_modparams.enable_guc, "GuC submission is N/A");
/* Make sure that sanitization was done */ if (i915_modparams.enable_guc & ~(ENABLE_GUC_SUBMISSION |
GEM_BUG_ON(i915_modparams.enable_guc < 0); ENABLE_GUC_LOAD_HUC))
DRM_INFO("Incompatible option enable_guc=%d - %s\n",
i915_modparams.enable_guc, "undocumented flag");
} }
void intel_uc_init_early(struct intel_uc *uc) void intel_uc_init_early(struct intel_uc *uc)
...@@ -134,7 +98,7 @@ void intel_uc_init_early(struct intel_uc *uc) ...@@ -134,7 +98,7 @@ void intel_uc_init_early(struct intel_uc *uc)
intel_guc_init_early(&uc->guc); intel_guc_init_early(&uc->guc);
intel_huc_init_early(&uc->huc); intel_huc_init_early(&uc->huc);
sanitize_options_early(uc); __confirm_options(uc);
} }
void intel_uc_driver_late_release(struct intel_uc *uc) void intel_uc_driver_late_release(struct intel_uc *uc)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment