]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
drm/xe/guc: Request max GT freq during resume
authorVinay Belgaumkar <vinay.belgaumkar@intel.com>
Thu, 20 Jun 2024 22:49:28 +0000 (15:49 -0700)
committerRodrigo Vivi <rodrigo.vivi@intel.com>
Wed, 26 Jun 2024 22:23:45 +0000 (18:23 -0400)
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)

Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Signed-off-by: Vinay Belgaumkar <vinay.belgaumkar@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240620224928.3986377-3-vinay.belgaumkar@intel.com
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
drivers/gpu/drm/xe/xe_guc.c
drivers/gpu/drm/xe/xe_guc_pc.c
drivers/gpu/drm/xe/xe_guc_pc.h

index 02c028d0e91b9c45133830cfea80d92251ebfa9a..172b65a50e31ca0df9a0ad860665fe7da231dbf6 100644 (file)
@@ -702,6 +702,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);
 
@@ -787,7 +790,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);
index edf4a29a2aa313120671cdce7f52b81ee5ba1713..d88f5e960fbd320209b8045464245d07ac7d9220 100644 (file)
@@ -710,17 +710,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)
index 55fdb55ab68829e80ed7d8d653dba286028d62d4..efda432fadfc8e10207d3c3d804ac1fc3706d6aa 100644 (file)
@@ -33,5 +33,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_ */