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(>->uc.huc.fw) ? 0 :
> - HUC_LOADING_AGENT_GUC;
> + u32 huc_agent = xe_uc_fw_is_available(>->uc.huc.fw) ? HUC_LOADING_AGENT_GUC : 0;
> u32 mask;
> int err;
>
next prev 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