[PATCH v4 2/2] drm/xe/guc: Request max GT freq during resume
Rodrigo Vivi
rodrigo.vivi at intel.com
Mon Jun 17 18:20:31 UTC 2024
On Mon, Jun 17, 2024 at 01:10:51AM -0700, Vinay Belgaumkar wrote:
> We already request max freq in the load path, moving it
> to __xe_guc_upload will ensure this speeds up GuC load in
> the resume path as well.
>
> v2: Rename xe_guc_pc_init_early since we now call it per
> GuC load (Michal W)
>
> v3: Keep pc_init_early() and init RPx values there (Rodrigo)
thanks
Reviewed-by: Rodrigo Vivi <rodrigo.vivi at intel.com>
>
> Cc: Rodrigo Vivi <rodrigo.vivi at intel.com>
> Signed-off-by: Vinay Belgaumkar <vinay.belgaumkar at intel.com>
> ---
> drivers/gpu/drm/xe/xe_guc.c | 4 +++-
> drivers/gpu/drm/xe/xe_guc_pc.c | 15 +++++++++++++--
> drivers/gpu/drm/xe/xe_guc_pc.h | 1 +
> 3 files changed, 17 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_guc.c b/drivers/gpu/drm/xe/xe_guc.c
> index 0e1a5674ef13..178a0fe59107 100644
> --- a/drivers/gpu/drm/xe/xe_guc.c
> +++ b/drivers/gpu/drm/xe/xe_guc.c
> @@ -699,6 +699,9 @@ static int __xe_guc_upload(struct xe_guc *guc)
> {
> int ret;
>
> + /* Raise GT freq to speed up HuC/GuC load */
> + xe_guc_pc_raise_unslice(&guc->pc);
> +
> guc_write_params(guc);
> guc_prepare_xfer(guc);
>
> @@ -784,7 +787,6 @@ 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);
> diff --git a/drivers/gpu/drm/xe/xe_guc_pc.c b/drivers/gpu/drm/xe/xe_guc_pc.c
> index d9194328b495..1775183662a4 100644
> --- a/drivers/gpu/drm/xe/xe_guc_pc.c
> +++ b/drivers/gpu/drm/xe/xe_guc_pc.c
> @@ -688,17 +688,28 @@ static u32 pc_max_freq_cap(struct xe_guc_pc *pc)
> }
>
> /**
> - * xe_guc_pc_init_early - Initialize RPx values and request a higher GT
> + * xe_guc_pc_raise_unslice - Initialize RPx values and request a higher GT
> * frequency to allow faster GuC load times
> * @pc: Xe_GuC_PC instance
> */
> +void xe_guc_pc_raise_unslice(struct xe_guc_pc *pc)
> +{
> + struct xe_gt *gt = pc_to_gt(pc);
> +
> + xe_force_wake_assert_held(gt_to_fw(gt), XE_FW_GT);
> + pc_set_cur_freq(pc, pc_max_freq_cap(pc));
> +}
> +
> +/**
> + * xe_guc_pc_init_early - Initialize RPx values
> + * @pc: Xe_GuC_PC instance
> + */
> void xe_guc_pc_init_early(struct xe_guc_pc *pc)
> {
> struct xe_gt *gt = pc_to_gt(pc);
>
> xe_force_wake_assert_held(gt_to_fw(gt), XE_FW_GT);
> pc_init_fused_rp_values(pc);
> - pc_set_cur_freq(pc, pc_max_freq_cap(pc));
> }
>
> static int pc_adjust_freq_bounds(struct xe_guc_pc *pc)
> diff --git a/drivers/gpu/drm/xe/xe_guc_pc.h b/drivers/gpu/drm/xe/xe_guc_pc.h
> index 7ba875c3613b..3b4103f59b19 100644
> --- a/drivers/gpu/drm/xe/xe_guc_pc.h
> +++ b/drivers/gpu/drm/xe/xe_guc_pc.h
> @@ -31,5 +31,6 @@ u64 xe_guc_pc_rc6_residency(struct xe_guc_pc *pc);
> u64 xe_guc_pc_mc6_residency(struct xe_guc_pc *pc);
> void xe_guc_pc_init_early(struct xe_guc_pc *pc);
> int xe_guc_pc_restore_stashed_freq(struct xe_guc_pc *pc);
> +void xe_guc_pc_raise_unslice(struct xe_guc_pc *pc);
>
> #endif /* _XE_GUC_PC_H_ */
> --
> 2.38.1
>
More information about the Intel-xe
mailing list