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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.