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 slpc_measure_power(struct intel_rps *rps, int *freq) in slpc_measure_power() argument
106 *freq = (*freq + intel_rps_read_actual_frequency(rps)) / 2; in slpc_measure_power()
113 static u64 measure_power_at_freq(struct intel_gt *gt, int *freq, u64 *power) in measure_power_at_freq() argument
117 err = slpc_set_freq(gt, *freq); in measure_power_at_freq()
120 *freq = intel_rps_read_actual_frequency(&gt->rps); in measure_power_at_freq()
121 *power = slpc_measure_power(&gt->rps, freq); in measure_power_at_freq()
133 /* Go from max to min in 5 steps */ in vary_max_freq()
134 step = (slpc->rp0_freq - slpc->min_freq) / NUM_STEPS; in vary_max_freq()
135 *max_act_freq = slpc->min_freq; in vary_max_freq()
136 for (max_freq = slpc->rp0_freq; max_freq > slpc->min_freq; in vary_max_freq()
137 max_freq -= step) { in vary_max_freq()
144 /* GuC requests freq in multiples of 50/3 MHz */ in vary_max_freq()
148 err = -EINVAL; in vary_max_freq()
169 /* Go from min to max in 5 steps */ in vary_min_freq()
170 step = (slpc->rp0_freq - slpc->min_freq) / NUM_STEPS; in vary_min_freq()
171 *max_act_freq = slpc->min_freq; in vary_min_freq()
172 for (min_freq = slpc->min_freq; min_freq < slpc->rp0_freq; in vary_min_freq()
180 /* GuC requests freq in multiples of 50/3 MHz */ in vary_min_freq()
181 if (req_freq < (min_freq - FREQUENCY_REQ_UNIT)) { in vary_min_freq()
183 min_freq - FREQUENCY_REQ_UNIT); in vary_min_freq()
184 err = -EINVAL; in vary_min_freq()
200 struct intel_guc_slpc *slpc = &gt_to_guc(gt)->slpc; in slpc_power()
203 int freq; in slpc_power() member
204 } min, max; in slpc_power() local
212 if (!librapl_supported(gt->i915)) in slpc_power()
215 min.freq = slpc->min_freq; in slpc_power()
216 err = measure_power_at_freq(gt, &min.freq, &min.power); in slpc_power()
221 max.freq = slpc->rp0_freq; in slpc_power()
222 err = measure_power_at_freq(gt, &max.freq, &max.power); in slpc_power()
227 pr_info("%s: min:%llumW @ %uMHz, max:%llumW @ %uMHz\n", in slpc_power()
228 engine->name, in slpc_power()
229 min.power, min.freq, in slpc_power()
230 max.power, max.freq); in slpc_power()
232 if (10 * min.freq >= 9 * max.freq) { in slpc_power()
234 min.freq, max.freq); in slpc_power()
237 if (11 * min.power > 10 * max.power) { in slpc_power()
239 engine->name); in slpc_power()
240 err = -EINVAL; in slpc_power()
243 /* Restore min/max frequencies */ in slpc_power()
244 slpc_set_max_freq(slpc, slpc->rp0_freq); in slpc_power()
245 slpc_set_min_freq(slpc, slpc->min_freq); in slpc_power()
256 err = slpc_set_min_freq(slpc, slpc->rp0_freq); in max_granted_freq()
261 if (*max_act_freq != slpc->rp0_freq) { in max_granted_freq()
263 perf_limit_reasons = intel_uncore_read(gt->uncore, in max_granted_freq()
268 pr_err("Pcode did not grant max freq\n"); in max_granted_freq()
269 err = -EINVAL; in max_granted_freq()
280 struct intel_guc_slpc *slpc = &gt_to_guc(gt)->slpc; in run_test()
281 struct intel_rps *rps = &gt->rps; in run_test()
289 if (!intel_uc_uses_guc_slpc(&gt->uc)) in run_test()
292 if (slpc->min_freq == slpc->rp0_freq) { in run_test()
293 pr_err("Min/Max are fused to the same value\n"); in run_test()
294 return -EINVAL; in run_test()
298 return -ENOMEM; in run_test()
301 pr_err("Could not get SLPC max freq\n"); in run_test()
302 return -EIO; in run_test()
306 pr_err("Could not get SLPC min freq\n"); in run_test()
307 return -EIO; in run_test()
312 * range of RPn-RP0. in run_test()
314 err = slpc_set_min_freq(slpc, slpc->min_freq); in run_test()
316 pr_err("Unable to update min freq!"); in run_test()
325 pr_err("Unable to turn off efficient freq!"); in run_test()
341 engine->kernel_context, in run_test()
353 engine->name); in run_test()
356 intel_gt_set_wedged(engine->gt); in run_test()
357 err = -EIO; in run_test()
373 if (gt->type != GT_MEDIA && (engine->class == VIDEO_DECODE_CLASS || in run_test()
374 engine->class == VIDEO_ENHANCEMENT_CLASS)) { in run_test()
390 pr_info("Max actual frequency for %s was %d\n", in run_test()
391 engine->name, max_act_freq); in run_test()
394 if (max_act_freq <= slpc->min_freq) { in run_test()
395 pr_err("Actual freq did not rise above min\n"); in run_test()
397 intel_uncore_read(gt->uncore, in run_test()
399 err = -EINVAL; in run_test()
410 /* Restore min/max/efficient frequencies */ in run_test()
413 if (igt_flush_test(gt->i915)) in run_test()
414 err = -EIO; in run_test()
492 thread->result = run_test(thread->gt, TILE_INTERACTION); in slpc_spinner_thread()
504 return -ENOMEM; in live_slpc_tile_interaction()
507 threads[i].worker = kthread_run_worker(0, "igt/slpc_parallel:%d", gt->info.id); in live_slpc_tile_interaction()
528 pr_err("%s GT %d failed ", __func__, gt->info.id); in live_slpc_tile_interaction()