1dff0fc49SVinay Belgaumkar /* SPDX-License-Identifier: MIT */
2dff0fc49SVinay Belgaumkar /*
3dff0fc49SVinay Belgaumkar * Copyright © 2021 Intel Corporation
4dff0fc49SVinay Belgaumkar */
5dff0fc49SVinay Belgaumkar
6dff0fc49SVinay Belgaumkar #ifndef _INTEL_GUC_SLPC_H_
7dff0fc49SVinay Belgaumkar #define _INTEL_GUC_SLPC_H_
8dff0fc49SVinay Belgaumkar
9dff0fc49SVinay Belgaumkar #include "intel_guc_submission.h"
10dff0fc49SVinay Belgaumkar #include "intel_guc_slpc_types.h"
11dff0fc49SVinay Belgaumkar
1237d52e44SVinay Belgaumkar #define SLPC_MAX_FREQ_MHZ 4250
1337d52e44SVinay Belgaumkar
14899a0fd7SVinay Belgaumkar struct intel_gt;
15f1928ac2SVinay Belgaumkar struct drm_printer;
16f1928ac2SVinay Belgaumkar
intel_guc_slpc_is_supported(struct intel_guc * guc)17dff0fc49SVinay Belgaumkar static inline bool intel_guc_slpc_is_supported(struct intel_guc *guc)
18dff0fc49SVinay Belgaumkar {
19dff0fc49SVinay Belgaumkar return guc->slpc.supported;
20dff0fc49SVinay Belgaumkar }
21dff0fc49SVinay Belgaumkar
intel_guc_slpc_is_wanted(struct intel_guc * guc)22dff0fc49SVinay Belgaumkar static inline bool intel_guc_slpc_is_wanted(struct intel_guc *guc)
23dff0fc49SVinay Belgaumkar {
24dff0fc49SVinay Belgaumkar return guc->slpc.selected;
25dff0fc49SVinay Belgaumkar }
26dff0fc49SVinay Belgaumkar
intel_guc_slpc_is_used(struct intel_guc * guc)27dff0fc49SVinay Belgaumkar static inline bool intel_guc_slpc_is_used(struct intel_guc *guc)
28dff0fc49SVinay Belgaumkar {
29dff0fc49SVinay Belgaumkar return intel_guc_submission_is_used(guc) && intel_guc_slpc_is_wanted(guc);
30dff0fc49SVinay Belgaumkar }
31dff0fc49SVinay Belgaumkar
32dff0fc49SVinay Belgaumkar void intel_guc_slpc_init_early(struct intel_guc_slpc *slpc);
33dff0fc49SVinay Belgaumkar
34dff0fc49SVinay Belgaumkar int intel_guc_slpc_init(struct intel_guc_slpc *slpc);
35dff0fc49SVinay Belgaumkar int intel_guc_slpc_enable(struct intel_guc_slpc *slpc);
36dff0fc49SVinay Belgaumkar void intel_guc_slpc_fini(struct intel_guc_slpc *slpc);
37d41f6f82SVinay Belgaumkar int intel_guc_slpc_set_max_freq(struct intel_guc_slpc *slpc, u32 val);
38d41f6f82SVinay Belgaumkar int intel_guc_slpc_set_min_freq(struct intel_guc_slpc *slpc, u32 val);
391448d5c4SVinay Belgaumkar int intel_guc_slpc_set_boost_freq(struct intel_guc_slpc *slpc, u32 val);
40c279bec1SVinay Belgaumkar int intel_guc_slpc_get_max_freq(struct intel_guc_slpc *slpc, u32 *val);
41c279bec1SVinay Belgaumkar int intel_guc_slpc_get_min_freq(struct intel_guc_slpc *slpc, u32 *val);
42f1928ac2SVinay Belgaumkar int intel_guc_slpc_print_info(struct intel_guc_slpc *slpc, struct drm_printer *p);
4326be7cd8SAshutosh Dixit int intel_guc_slpc_set_media_ratio_mode(struct intel_guc_slpc *slpc, u32 val);
44899a0fd7SVinay Belgaumkar void intel_guc_pm_intrmsk_enable(struct intel_gt *gt);
45292e4fb0SVinay Belgaumkar void intel_guc_slpc_boost(struct intel_guc_slpc *slpc);
46493043feSVinay Belgaumkar void intel_guc_slpc_dec_waiters(struct intel_guc_slpc *slpc);
4755f9720dSVinay Belgaumkar int intel_guc_slpc_set_ignore_eff_freq(struct intel_guc_slpc *slpc, bool val);
48cec82816SVinay Belgaumkar int intel_guc_slpc_set_strategy(struct intel_guc_slpc *slpc, u32 val);
49*4a82ceb0SVinay Belgaumkar int intel_guc_slpc_set_power_profile(struct intel_guc_slpc *slpc, u32 val);
50dff0fc49SVinay Belgaumkar
51dff0fc49SVinay Belgaumkar #endif
52