[Intel-xe] [PATCH v3 19/20] drm/xe/guc: Move GuC power control init to "post-hwconfig"
Matthew Brost
matthew.brost at intel.com
Mon Nov 20 13:30:38 UTC 2023
On Tue, Nov 14, 2023 at 02:02:30PM +0100, Michał Winiarski wrote:
> SLPC is not used at "hwconfig" stage. Move the initialization of data
> structures used for SLPC to a later point in probe.
> Also - move the xe_guc_pc_init_early to happen just prior to initial
> "hwconfig" load.
>
> Signed-off-by: Michał Winiarski <michal.winiarski at intel.com>
Reviewed-by: Matthew Brost <matthew.brost at intel.com>
> ---
> drivers/gpu/drm/xe/xe_gt.c | 3 ---
> drivers/gpu/drm/xe/xe_guc.c | 25 +++++++++++++++++++------
> 2 files changed, 19 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_gt.c b/drivers/gpu/drm/xe/xe_gt.c
> index d0962e0cc27e9..73665e4e66f22 100644
> --- a/drivers/gpu/drm/xe/xe_gt.c
> +++ b/drivers/gpu/drm/xe/xe_gt.c
> @@ -348,9 +348,6 @@ static int gt_fw_domain_init(struct xe_gt *gt)
> if (err)
> goto err_force_wake;
>
> - /* Raise GT freq to speed up HuC/GuC load */
> - xe_guc_pc_init_early(>->uc.guc.pc);
> -
> err = xe_uc_init_hwconfig(>->uc);
> if (err)
> goto err_force_wake;
> diff --git a/drivers/gpu/drm/xe/xe_guc.c b/drivers/gpu/drm/xe/xe_guc.c
> index 3f430d5bc1051..e04b04be32b7d 100644
> --- a/drivers/gpu/drm/xe/xe_guc.c
> +++ b/drivers/gpu/drm/xe/xe_guc.c
> @@ -246,11 +246,19 @@ static void guc_fini(struct drm_device *drm, void *arg)
> struct xe_guc *guc = arg;
>
> xe_force_wake_get(gt_to_fw(guc_to_gt(guc)), XE_FORCEWAKE_ALL);
> - xe_guc_pc_fini(&guc->pc);
> xe_uc_fini_hw(&guc_to_gt(guc)->uc);
> xe_force_wake_put(gt_to_fw(guc_to_gt(guc)), XE_FORCEWAKE_ALL);
> }
>
> +static void guc_fini_post_hwconfig(struct drm_device *drm, void *arg)
> +{
> + struct xe_guc *guc = arg;
> +
> + xe_force_wake_get(gt_to_fw(guc_to_gt(guc)), XE_FORCEWAKE_ALL);
> + xe_guc_pc_fini(&guc->pc);
> + xe_force_wake_put(gt_to_fw(guc_to_gt(guc)), XE_FORCEWAKE_ALL);
> +}
> +
> static int __guc_bo_reinit(struct xe_guc *guc, struct xe_bo **src)
> {
> struct xe_tile *tile = gt_to_tile(guc_to_gt(guc));
> @@ -316,11 +324,7 @@ int xe_guc_init(struct xe_guc *guc)
> if (ret)
> goto out;
>
> - ret = xe_guc_pc_init(&guc->pc);
> - if (ret)
> - goto out;
> -
> - ret = drmm_add_action_or_reset(>_to_xe(gt)->drm, guc_fini, guc);
> + ret = drmm_add_action_or_reset(&xe->drm, guc_fini, guc);
> if (ret)
> goto out;
>
> @@ -348,6 +352,7 @@ int xe_guc_init(struct xe_guc *guc)
> */
> int xe_guc_init_post_hwconfig(struct xe_guc *guc)
> {
> + struct xe_gt *gt = guc_to_gt(guc);
> int ret;
>
> ret = xe_guc_realloc_post_hwconfig(guc);
> @@ -356,6 +361,11 @@ int xe_guc_init_post_hwconfig(struct xe_guc *guc)
>
> guc_init_params_post_hwconfig(guc);
>
> + ret = xe_guc_pc_init(&guc->pc);
> + if (ret)
> + return ret;
> + ret = drmm_add_action_or_reset(>_to_xe(gt)->drm, guc_fini_post_hwconfig, guc);
> +
> return xe_guc_ads_init_post_hwconfig(&guc->ads);
> }
>
> @@ -566,6 +576,9 @@ int xe_guc_min_load_for_hwconfig(struct xe_guc *guc)
>
> xe_guc_ads_populate_minimal(&guc->ads);
>
> + /* Raise GT freq to speed up HuC/GuC load */
> + xe_guc_pc_init_early(&guc->pc);
> +
> ret = __xe_guc_upload(guc);
> if (ret)
> return ret;
> --
> 2.42.1
>
More information about the Intel-xe
mailing list