HECI1_FWSTS1_CURRENT_STATE_RESET;
 }
 
-static u32 gsc_uc_get_fw_status(struct intel_uncore *uncore)
+static u32 gsc_uc_get_fw_status(struct intel_uncore *uncore, bool needs_wakeref)
 {
        intel_wakeref_t wakeref;
        u32 fw_status = 0;
 
-       with_intel_runtime_pm(uncore->rpm, wakeref)
-               fw_status = intel_uncore_read(uncore, HECI_FWSTS(MTL_GSC_HECI1_BASE, 1));
+       if (needs_wakeref)
+               wakeref = intel_runtime_pm_get(uncore->rpm);
 
+       fw_status = intel_uncore_read(uncore, HECI_FWSTS(MTL_GSC_HECI1_BASE, 1));
+
+       if (needs_wakeref)
+               intel_runtime_pm_put(uncore->rpm, wakeref);
        return fw_status;
 }
 
-bool intel_gsc_uc_fw_proxy_init_done(struct intel_gsc_uc *gsc)
+bool intel_gsc_uc_fw_proxy_init_done(struct intel_gsc_uc *gsc, bool needs_wakeref)
 {
        return REG_FIELD_GET(HECI1_FWSTS1_CURRENT_STATE,
-                            gsc_uc_get_fw_status(gsc_uc_to_gt(gsc)->uncore)) ==
+                            gsc_uc_get_fw_status(gsc_uc_to_gt(gsc)->uncore,
+                                                 needs_wakeref)) ==
               HECI1_FWSTS1_PROXY_STATE_NORMAL;
 }
 
 bool intel_gsc_uc_fw_init_done(struct intel_gsc_uc *gsc)
 {
-       return gsc_uc_get_fw_status(gsc_uc_to_gt(gsc)->uncore) &
+       return gsc_uc_get_fw_status(gsc_uc_to_gt(gsc)->uncore, false) &
               HECI1_FWSTS1_INIT_COMPLETE;
 }
 
 
 int intel_gsc_fw_get_binary_info(struct intel_uc_fw *gsc_fw, const void *data, size_t size);
 int intel_gsc_uc_fw_upload(struct intel_gsc_uc *gsc);
 bool intel_gsc_uc_fw_init_done(struct intel_gsc_uc *gsc);
-bool intel_gsc_uc_fw_proxy_init_done(struct intel_gsc_uc *gsc);
+bool intel_gsc_uc_fw_proxy_init_done(struct intel_gsc_uc *gsc, bool needs_wakeref);
 
 #endif
 
                         * complete the request handling cleanly, so we need to check the
                         * status register to check if the proxy init was actually successful
                         */
-                       if (intel_gsc_uc_fw_proxy_init_done(gsc)) {
+                       if (intel_gsc_uc_fw_proxy_init_done(gsc, false)) {
                                drm_dbg(>->i915->drm, "GSC Proxy initialized\n");
                                intel_uc_fw_change_status(&gsc->fw, INTEL_UC_FIRMWARE_RUNNING);
                        } else {
 
         * are out of order) will suffice.
         */
        if (intel_huc_is_authenticated(&pxp->ctrl_gt->uc.huc, INTEL_HUC_AUTH_BY_GSC) &&
-           intel_gsc_uc_fw_proxy_init_done(&pxp->ctrl_gt->uc.gsc))
+           intel_gsc_uc_fw_proxy_init_done(&pxp->ctrl_gt->uc.gsc, true))
                return true;
 
        return false;