Intel-XE Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: John Harrison <john.c.harrison@intel.com>
To: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>,
	<intel-xe@lists.freedesktop.org>
Subject: Re: [Intel-xe] [PATCH 1/2] drm/xe/uc: Fix uC status tracking
Date: Mon, 11 Sep 2023 16:54:28 -0700	[thread overview]
Message-ID: <ba6018b2-ba65-99be-ab77-2b1b2b663fca@intel.com> (raw)
In-Reply-To: <20230802212646.838717-1-daniele.ceraolospurio@intel.com>

On 8/2/2023 14:26, Daniele Ceraolo Spurio wrote:
> The current uC status tracking has a few issues:
>
> 1) the HuC is moved to "disabled" instead of "not supported"
>
> 2) the status is left uninitialized instead of "disabled" when the
>     modparam is used to disable support
>
> 3) due to #1, a number of checks are done against "disabled" instead of
>     the appropriate status.
>
> Address all of those by making sure to follow the appropriate state
> transition and checking against the required state.
>
> Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
> Cc: John Harrison <John.C.Harrison@Intel.com>
> Cc: Matthew Brost <matthew.brost@intel.com>
> ---
>   drivers/gpu/drm/xe/xe_guc.c   |  3 +++
>   drivers/gpu/drm/xe/xe_huc.c   | 15 +++++++--------
>   drivers/gpu/drm/xe/xe_uc.c    | 10 +++++++---
>   drivers/gpu/drm/xe/xe_uc_fw.c | 14 ++++++++------
>   drivers/gpu/drm/xe/xe_wopcm.c |  3 +--
>   5 files changed, 26 insertions(+), 19 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_guc.c b/drivers/gpu/drm/xe/xe_guc.c
> index 2493c5859948..7cef5dcf571e 100644
> --- a/drivers/gpu/drm/xe/xe_guc.c
> +++ b/drivers/gpu/drm/xe/xe_guc.c
> @@ -228,6 +228,9 @@ int xe_guc_init(struct xe_guc *guc)
>   	if (ret)
>   		goto out;
>   
> +	if (!xe_uc_fw_is_enabled(&guc->fw))
> +		return 0;
> +
>   	ret = xe_guc_log_init(&guc->log);
>   	if (ret)
>   		goto out;
> diff --git a/drivers/gpu/drm/xe/xe_huc.c b/drivers/gpu/drm/xe/xe_huc.c
> index 177cda14864e..35e2fdd07f69 100644
> --- a/drivers/gpu/drm/xe/xe_huc.c
> +++ b/drivers/gpu/drm/xe/xe_huc.c
> @@ -42,22 +42,21 @@ int xe_huc_init(struct xe_huc *huc)
>   	if (ret)
>   		goto out;
>   
> +	if (!xe_uc_fw_is_enabled(&huc->fw))
> +		return 0;
> +
>   	xe_uc_fw_change_status(&huc->fw, XE_UC_FIRMWARE_LOADABLE);
>   
>   	return 0;
>   
>   out:
> -	if (xe_uc_fw_is_disabled(&huc->fw)) {
> -		drm_info(&xe->drm, "HuC disabled\n");
> -		return 0;
> -	}
>   	drm_err(&xe->drm, "HuC init failed with %d", ret);
>   	return ret;
>   }
>   
>   int xe_huc_upload(struct xe_huc *huc)
>   {
> -	if (xe_uc_fw_is_disabled(&huc->fw))
> +	if (!xe_uc_fw_is_loadable(&huc->fw))
>   		return 0;
>   	return xe_uc_fw_upload(&huc->fw, 0, HUC_UKERNEL);
>   }
> @@ -69,7 +68,7 @@ int xe_huc_auth(struct xe_huc *huc)
>   	struct xe_guc *guc = huc_to_guc(huc);
>   	int ret;
>   
> -	if (xe_uc_fw_is_disabled(&huc->fw))
> +	if (!xe_uc_fw_is_loadable(&huc->fw))
>   		return 0;
>   
>   	XE_WARN_ON(xe_uc_fw_is_running(&huc->fw));
> @@ -106,7 +105,7 @@ int xe_huc_auth(struct xe_huc *huc)
>   
>   void xe_huc_sanitize(struct xe_huc *huc)
>   {
> -	if (xe_uc_fw_is_disabled(&huc->fw))
> +	if (!xe_uc_fw_is_loadable(&huc->fw))
>   		return;
>   	xe_uc_fw_change_status(&huc->fw, XE_UC_FIRMWARE_LOADABLE);
>   }
> @@ -118,7 +117,7 @@ void xe_huc_print_info(struct xe_huc *huc, struct drm_printer *p)
>   
>   	xe_uc_fw_print(&huc->fw, p);
>   
> -	if (xe_uc_fw_is_disabled(&huc->fw))
> +	if (!xe_uc_fw_is_enabled(&huc->fw))
>   		return;
>   
>   	err = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
> diff --git a/drivers/gpu/drm/xe/xe_uc.c b/drivers/gpu/drm/xe/xe_uc.c
> index addd6f2681b9..368e4feb57db 100644
> --- a/drivers/gpu/drm/xe/xe_uc.c
> +++ b/drivers/gpu/drm/xe/xe_uc.c
> @@ -31,9 +31,10 @@ int xe_uc_init(struct xe_uc *uc)
>   {
>   	int ret;
>   
> -	/* GuC submission not enabled, nothing to do */
> -	if (!xe_device_guc_submission_enabled(uc_to_xe(uc)))
> -		return 0;
> +	/*
> +	 * We call the GuC/HuC init functions even if GuC submission is off to
> +	 * correctly move our tracking of the FW state to "disabled".
> +	 */
>   
>   	ret = xe_guc_init(&uc->guc);
>   	if (ret)
> @@ -43,6 +44,9 @@ int xe_uc_init(struct xe_uc *uc)
>   	if (ret)
>   		goto err;
>   
> +	if (!xe_device_guc_submission_enabled(uc_to_xe(uc)))
> +		return 0;
> +
>   	ret = xe_wopcm_init(&uc->wopcm);
>   	if (ret)
>   		goto err;
> diff --git a/drivers/gpu/drm/xe/xe_uc_fw.c b/drivers/gpu/drm/xe/xe_uc_fw.c
> index 2e70dd4880f6..fd53ef9e5c99 100644
> --- a/drivers/gpu/drm/xe/xe_uc_fw.c
> +++ b/drivers/gpu/drm/xe/xe_uc_fw.c
> @@ -339,17 +339,19 @@ int xe_uc_fw_init(struct xe_uc_fw *uc_fw)
>   	XE_WARN_ON(uc_fw->path);
>   
>   	uc_fw_auto_select(xe, uc_fw);
> -	xe_uc_fw_change_status(uc_fw, uc_fw->path ? *uc_fw->path ?
> +	xe_uc_fw_change_status(uc_fw, uc_fw->path ?
>   			       XE_UC_FIRMWARE_SELECTED :
> -			       XE_UC_FIRMWARE_DISABLED :
>   			       XE_UC_FIRMWARE_NOT_SUPPORTED);
>   
> -	/* Transform no huc in the list into firmware disabled */
> -	if (uc_fw->type == XE_UC_FW_TYPE_HUC && !xe_uc_fw_is_supported(uc_fw)) {
> +	if (!xe_uc_fw_is_supported(uc_fw))
> +		return 0;
> +
> +	if (!xe_device_guc_submission_enabled(xe)) {
This is generic code for all firmware types. So why specifically check 
for GuC submission? Can't we still load the HuC even with GuC submission 
disabled?

John.

>   		xe_uc_fw_change_status(uc_fw, XE_UC_FIRMWARE_DISABLED);
> -		err = -ENOPKG;
> -		return err;
> +		drm_dbg(&xe->drm, "%s disabled", xe_uc_fw_type_repr(uc_fw->type));
> +		return 0;
>   	}
> +
>   	err = request_firmware(&fw, uc_fw->path, dev);
>   	if (err)
>   		goto fail;
> diff --git a/drivers/gpu/drm/xe/xe_wopcm.c b/drivers/gpu/drm/xe/xe_wopcm.c
> index 9a85bcc18830..bf85d4fa56cc 100644
> --- a/drivers/gpu/drm/xe/xe_wopcm.c
> +++ b/drivers/gpu/drm/xe/xe_wopcm.c
> @@ -139,8 +139,7 @@ static int __wopcm_init_regs(struct xe_device *xe, struct xe_gt *gt,
>   {
>   	u32 base = wopcm->guc.base;
>   	u32 size = wopcm->guc.size;
> -	u32 huc_agent = xe_uc_fw_is_disabled(&gt->uc.huc.fw) ? 0 :
> -		HUC_LOADING_AGENT_GUC;
> +	u32 huc_agent = xe_uc_fw_is_available(&gt->uc.huc.fw) ? HUC_LOADING_AGENT_GUC : 0;
>   	u32 mask;
>   	int err;
>   


  parent reply	other threads:[~2023-09-11 23:54 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-08-02 21:26 [Intel-xe] [PATCH 1/2] drm/xe/uc: Fix uC status tracking Daniele Ceraolo Spurio
2023-08-02 21:26 ` [Intel-xe] [PATCH 2/2] drm/xe/uc: Add GuC/HuC firmware path overrides Daniele Ceraolo Spurio
     [not found]   ` <5ca76588-9822-cc1e-3c91-5f14918312ea@intel.com>
2023-09-12  0:10     ` Daniele Ceraolo Spurio
2023-09-12  0:16       ` John Harrison
2023-09-12  0:22         ` Daniele Ceraolo Spurio
2023-09-12  0:30           ` John Harrison
2023-08-02 21:29 ` [Intel-xe] ✓ CI.Patch_applied: success for series starting with [1/2] drm/xe/uc: Fix uC status tracking Patchwork
2023-08-02 21:29 ` [Intel-xe] ✗ CI.checkpatch: warning " Patchwork
2023-08-02 21:31 ` [Intel-xe] ✓ CI.KUnit: success " Patchwork
2023-08-02 21:34 ` [Intel-xe] ✓ CI.Build: " Patchwork
2023-08-02 21:35 ` [Intel-xe] ✓ CI.Hooks: " Patchwork
2023-08-02 21:36 ` [Intel-xe] ✓ CI.checksparse: " Patchwork
2023-08-02 22:10 ` [Intel-xe] ○ CI.BAT: info " Patchwork
2023-09-11 23:54 ` John Harrison [this message]
2023-09-12  0:03   ` [Intel-xe] [PATCH 1/2] " Daniele Ceraolo Spurio
2023-09-12  0:12     ` John Harrison
2023-09-12  0:33       ` John Harrison
  -- strict thread matches above, loose matches on Subject: below --
2023-07-31 18:56 Daniele Ceraolo Spurio

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ba6018b2-ba65-99be-ab77-2b1b2b663fca@intel.com \
    --to=john.c.harrison@intel.com \
    --cc=daniele.ceraolospurio@intel.com \
    --cc=intel-xe@lists.freedesktop.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox