Lines Matching +full:max +full:- +full:freq

1 // SPDX-License-Identifier: MIT
26 static int slpc_set_min_freq(struct intel_guc_slpc *slpc, u32 freq) in slpc_set_min_freq() argument
30 ret = intel_guc_slpc_set_min_freq(slpc, freq); in slpc_set_min_freq()
32 pr_err("Could not set min frequency to [%u]\n", freq); in slpc_set_min_freq()
39 static int slpc_set_max_freq(struct intel_guc_slpc *slpc, u32 freq) in slpc_set_max_freq() argument
43 ret = intel_guc_slpc_set_max_freq(slpc, freq); in slpc_set_max_freq()
46 freq); in slpc_set_max_freq()
53 static int slpc_set_freq(struct intel_gt *gt, u32 freq) in slpc_set_freq() argument
56 struct intel_guc_slpc *slpc = &gt_to_guc(gt)->slpc; in slpc_set_freq()
58 err = slpc_set_max_freq(slpc, freq); in slpc_set_freq()
60 pr_err("Unable to update max freq"); in slpc_set_freq()
64 err = slpc_set_min_freq(slpc, freq); in slpc_set_freq()
66 pr_err("Unable to update min freq"); in slpc_set_freq()
73 static int slpc_restore_freq(struct intel_guc_slpc *slpc, u32 min, u32 max) in slpc_restore_freq() argument
77 err = slpc_set_max_freq(slpc, max); in slpc_restore_freq()
79 pr_err("Unable to restore max freq"); in slpc_restore_freq()
85 pr_err("Unable to restore min freq"); in slpc_restore_freq()
91 pr_err("Unable to restore efficient freq"); in slpc_restore_freq()
98 static u64 measure_power_at_freq(struct intel_gt *gt, int *freq, u64 *power) in measure_power_at_freq() argument
102 err = slpc_set_freq(gt, *freq); in measure_power_at_freq()
105 *freq = intel_rps_read_actual_frequency(&gt->rps); in measure_power_at_freq()
106 *power = measure_power(&gt->rps, freq); in measure_power_at_freq()
118 /* Go from max to min in 5 steps */ in vary_max_freq()
119 step = (slpc->rp0_freq - slpc->min_freq) / NUM_STEPS; in vary_max_freq()
120 *max_act_freq = slpc->min_freq; in vary_max_freq()
121 for (max_freq = slpc->rp0_freq; max_freq > slpc->min_freq; in vary_max_freq()
122 max_freq -= step) { in vary_max_freq()
129 /* GuC requests freq in multiples of 50/3 MHz */ in vary_max_freq()
133 err = -EINVAL; in vary_max_freq()
154 /* Go from min to max in 5 steps */ in vary_min_freq()
155 step = (slpc->rp0_freq - slpc->min_freq) / NUM_STEPS; in vary_min_freq()
156 *max_act_freq = slpc->min_freq; in vary_min_freq()
157 for (min_freq = slpc->min_freq; min_freq < slpc->rp0_freq; in vary_min_freq()
165 /* GuC requests freq in multiples of 50/3 MHz */ in vary_min_freq()
166 if (req_freq < (min_freq - FREQUENCY_REQ_UNIT)) { in vary_min_freq()
168 min_freq - FREQUENCY_REQ_UNIT); in vary_min_freq()
169 err = -EINVAL; in vary_min_freq()
185 struct intel_guc_slpc *slpc = &gt_to_guc(gt)->slpc; in slpc_power()
188 int freq; in slpc_power() member
189 } min, max; in slpc_power() local
197 if (!librapl_supported(gt->i915)) in slpc_power()
200 min.freq = slpc->min_freq; in slpc_power()
201 err = measure_power_at_freq(gt, &min.freq, &min.power); in slpc_power()
206 max.freq = slpc->rp0_freq; in slpc_power()
207 err = measure_power_at_freq(gt, &max.freq, &max.power); in slpc_power()
212 pr_info("%s: min:%llumW @ %uMHz, max:%llumW @ %uMHz\n", in slpc_power()
213 engine->name, in slpc_power()
214 min.power, min.freq, in slpc_power()
215 max.power, max.freq); in slpc_power()
217 if (10 * min.freq >= 9 * max.freq) { in slpc_power()
219 min.freq, max.freq); in slpc_power()
222 if (11 * min.power > 10 * max.power) { in slpc_power()
224 engine->name); in slpc_power()
225 err = -EINVAL; in slpc_power()
228 /* Restore min/max frequencies */ in slpc_power()
229 slpc_set_max_freq(slpc, slpc->rp0_freq); in slpc_power()
230 slpc_set_min_freq(slpc, slpc->min_freq); in slpc_power()
241 err = slpc_set_min_freq(slpc, slpc->rp0_freq); in max_granted_freq()
246 if (*max_act_freq != slpc->rp0_freq) { in max_granted_freq()
248 perf_limit_reasons = intel_uncore_read(gt->uncore, in max_granted_freq()
253 pr_err("Pcode did not grant max freq\n"); in max_granted_freq()
254 err = -EINVAL; in max_granted_freq()
265 struct intel_guc_slpc *slpc = &gt_to_guc(gt)->slpc; in run_test()
266 struct intel_rps *rps = &gt->rps; in run_test()
274 if (!intel_uc_uses_guc_slpc(&gt->uc)) in run_test()
277 if (slpc->min_freq == slpc->rp0_freq) { in run_test()
278 pr_err("Min/Max are fused to the same value\n"); in run_test()
279 return -EINVAL; in run_test()
283 return -ENOMEM; in run_test()
286 pr_err("Could not get SLPC max freq\n"); in run_test()
287 return -EIO; in run_test()
291 pr_err("Could not get SLPC min freq\n"); in run_test()
292 return -EIO; in run_test()
297 * range of RPn-RP0. in run_test()
299 err = slpc_set_min_freq(slpc, slpc->min_freq); in run_test()
301 pr_err("Unable to update min freq!"); in run_test()
310 pr_err("Unable to turn off efficient freq!"); in run_test()
326 engine->kernel_context, in run_test()
338 engine->name); in run_test()
341 intel_gt_set_wedged(engine->gt); in run_test()
342 err = -EIO; in run_test()
358 if (gt->type != GT_MEDIA && (engine->class == VIDEO_DECODE_CLASS || in run_test()
359 engine->class == VIDEO_ENHANCEMENT_CLASS)) { in run_test()
375 pr_info("Max actual frequency for %s was %d\n", in run_test()
376 engine->name, max_act_freq); in run_test()
379 if (max_act_freq <= slpc->min_freq) { in run_test()
380 pr_err("Actual freq did not rise above min\n"); in run_test()
382 intel_uncore_read(gt->uncore, in run_test()
384 err = -EINVAL; in run_test()
395 /* Restore min/max/efficient frequencies */ in run_test()
398 if (igt_flush_test(gt->i915)) in run_test()
399 err = -EIO; in run_test()
477 thread->result = run_test(thread->gt, TILE_INTERACTION); in slpc_spinner_thread()
489 return -ENOMEM; in live_slpc_tile_interaction()
492 threads[i].worker = kthread_create_worker(0, "igt/slpc_parallel:%d", gt->info.id); in live_slpc_tile_interaction()
513 pr_err("%s GT %d failed ", __func__, gt->info.id); in live_slpc_tile_interaction()