[Intel-gfx] [PATCH] drm/i915/uc: Add function to define defaults for GuC/HuC enable
John Harrison
john.c.harrison at intel.com
Thu Jan 14 21:39:42 UTC 2021
On 1/13/2021 14:07, John.C.Harrison at Intel.com wrote:
> From: John Harrison <John.C.Harrison at Intel.com>
>
> There is a module parameter for controlling what GuC/HuC features are
> enabled. Setting to -1 means 'use the default'. However, the default
> was not well defined, out of date and needs to be different across
> platforms.
>
> The default is now to disable both GuC and HuC on legacy platforms
> where legacy means TGL/RKL and anything prior to Gen12. For new
> platforms, the default is to load HuC but not GuC as GuC submission
> has not yet landed.
Daniele pointed out that the above wording is somewhat inaccurate. GuC
is still loaded (in order to do HuC authentication). Better wording
would be:
The default is now to disable both GuC and HuC on legacy platforms
where legacy means TGL/RKL and anything prior to Gen12. For new
platforms, the default is to load HuC but not enable GuC submission
as that has not landed yet.
John.
> Signed-off-by: John Harrison <John.C.Harrison at Intel.com>
> Reviewed-by: Daniele Ceraolo Spurio <daniele.ceraolospurio at intel.com>
> ---
> drivers/gpu/drm/i915/gt/uc/intel_uc.c | 31 ++++++++++++++++++++----
> drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c | 7 +-----
> drivers/gpu/drm/i915/i915_params.h | 1 +
> 3 files changed, 28 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_uc.c b/drivers/gpu/drm/i915/gt/uc/intel_uc.c
> index 6a0452815c41..6abb8f2dc33d 100644
> --- a/drivers/gpu/drm/i915/gt/uc/intel_uc.c
> +++ b/drivers/gpu/drm/i915/gt/uc/intel_uc.c
> @@ -15,6 +15,29 @@
> static const struct intel_uc_ops uc_ops_off;
> static const struct intel_uc_ops uc_ops_on;
>
> +static void uc_expand_default_options(struct intel_uc *uc)
> +{
> + struct drm_i915_private *i915 = uc_to_gt(uc)->i915;
> +
> + if (i915->params.enable_guc != -1)
> + return;
> +
> + /* Don't enable GuC/HuC on pre-Gen12 */
> + if (INTEL_GEN(i915) < 12) {
> + i915->params.enable_guc = 0;
> + return;
> + }
> +
> + /* Don't enable GuC/HuC on older Gen12 platforms */
> + if (IS_TIGERLAKE(i915) || IS_ROCKETLAKE(i915)) {
> + i915->params.enable_guc = 0;
> + return;
> + }
> +
> + /* Default: enable HuC authentication only */
> + i915->params.enable_guc = ENABLE_GUC_LOAD_HUC;
> +}
> +
> /* Reset GuC providing us with fresh state for both GuC and HuC.
> */
> static int __intel_uc_reset_hw(struct intel_uc *uc)
> @@ -52,9 +75,6 @@ static void __confirm_options(struct intel_uc *uc)
> yesno(intel_uc_wants_guc_submission(uc)),
> yesno(intel_uc_wants_huc(uc)));
>
> - if (i915->params.enable_guc == -1)
> - return;
> -
> if (i915->params.enable_guc == 0) {
> GEM_BUG_ON(intel_uc_wants_guc(uc));
> GEM_BUG_ON(intel_uc_wants_guc_submission(uc));
> @@ -79,8 +99,7 @@ static void __confirm_options(struct intel_uc *uc)
> "Incompatible option enable_guc=%d - %s\n",
> i915->params.enable_guc, "GuC submission is N/A");
>
> - if (i915->params.enable_guc & ~(ENABLE_GUC_SUBMISSION |
> - ENABLE_GUC_LOAD_HUC))
> + if (i915->params.enable_guc & ~ENABLE_GUC_MASK)
> drm_info(&i915->drm,
> "Incompatible option enable_guc=%d - %s\n",
> i915->params.enable_guc, "undocumented flag");
> @@ -88,6 +107,8 @@ static void __confirm_options(struct intel_uc *uc)
>
> void intel_uc_init_early(struct intel_uc *uc)
> {
> + uc_expand_default_options(uc);
> +
> intel_guc_init_early(&uc->guc);
> intel_huc_init_early(&uc->huc);
>
> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c b/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c
> index 602f1a0bc587..67b06fde1225 100644
> --- a/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c
> +++ b/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c
> @@ -152,16 +152,11 @@ __uc_fw_auto_select(struct drm_i915_private *i915, struct intel_uc_fw *uc_fw)
> uc_fw->path = NULL;
> }
> }
> -
> - /* We don't want to enable GuC/HuC on pre-Gen11 by default */
> - if (i915->params.enable_guc == -1 && p < INTEL_ICELAKE)
> - uc_fw->path = NULL;
> }
>
> static const char *__override_guc_firmware_path(struct drm_i915_private *i915)
> {
> - if (i915->params.enable_guc & (ENABLE_GUC_SUBMISSION |
> - ENABLE_GUC_LOAD_HUC))
> + if (i915->params.enable_guc & ENABLE_GUC_MASK)
> return i915->params.guc_firmware_path;
> return "";
> }
> diff --git a/drivers/gpu/drm/i915/i915_params.h b/drivers/gpu/drm/i915/i915_params.h
> index 330c03e2b4f7..f031966af5b7 100644
> --- a/drivers/gpu/drm/i915/i915_params.h
> +++ b/drivers/gpu/drm/i915/i915_params.h
> @@ -32,6 +32,7 @@ struct drm_printer;
>
> #define ENABLE_GUC_SUBMISSION BIT(0)
> #define ENABLE_GUC_LOAD_HUC BIT(1)
> +#define ENABLE_GUC_MASK GENMASK(1, 0)
>
> /*
> * Invoke param, a function-like macro, for each i915 param, with arguments:
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/intel-gfx/attachments/20210114/22ceb85a/attachment-0001.htm>
More information about the Intel-gfx
mailing list