Lines Matching +full:exit +full:- +full:latency +full:- +full:us
1 // SPDX-License-Identifier: GPL-2.0
3 * cpuidle-pseries - idle state cpuidle driver.
78 * were soft-disabled in check_and_cede_processor()
92 * "ibm,get-systems-parameter" RTAS call with the token
98 * table with all the parameters to ibm,get-system-parameters.
99 * CEDE_LATENCY_TOKEN corresponds to the token value for Cede Latency
105 * If the platform supports the cede latency settings information system
109 * a. The first byte is the length “N” of each cede latency setting record minus
112 * b. For each supported cede latency setting a cede latency setting record
115 * -----------------------------
118 * -----------------------------
119 * | Cede Latency | 1 Byte |
121 * -----------------------------
123 * | latency in | 8 Bytes |
124 * | tb-ticks | |
125 * -----------------------------
129 * -----------------------------
131 * This version has cede latency record size = 10.
137 * ibm,get-systems-parameter RTAS call when made with
141 * call. The data is in big-endian.
172 ret = rtas_call(rtas_token("ibm,get-system-parameter"), 3, 1, in parse_cede_parameters()
183 xcede_record_size = payload->record_size + 1; in parse_cede_parameters()
186 pr_err("xcede: Expected record-size %lu. Observed size %u.\n", in parse_cede_parameters()
188 return -EINVAL; in parse_cede_parameters()
198 total_xcede_records_size = payload_size - 2; in parse_cede_parameters()
202 struct xcede_latency_record *record = &payload->records[i]; in parse_cede_parameters()
203 u64 latency_ticks = be64_to_cpu(record->latency_ticks); in parse_cede_parameters()
204 u8 wake_on_irqs = record->wake_on_irqs; in parse_cede_parameters()
205 u8 hint = record->hint; in parse_cede_parameters()
207 pr_info("xcede: Record %d : hint = %u, latency = 0x%llx tb ticks, Wake-on-irq = %u\n", in parse_cede_parameters()
224 get_lppaca()->donate_dedicated_cpu = 1; in dedicated_cede_loop()
225 old_latency_hint = get_lppaca()->cede_latency_hint; in dedicated_cede_loop()
226 get_lppaca()->cede_latency_hint = cede_latency_hint[index]; in dedicated_cede_loop()
232 get_lppaca()->donate_dedicated_cpu = 0; in dedicated_cede_loop()
233 get_lppaca()->cede_latency_hint = old_latency_hint; in dedicated_cede_loop()
330 drv->state_count = 0; in pseries_cpuidle_driver_init()
337 drv->states[drv->state_count] = /* structure copy */ in pseries_cpuidle_driver_init()
340 drv->state_count += 1; in pseries_cpuidle_driver_init()
362 * does not advertise CEDE(0) exit latency values, it does in fixup_cede0_latency()
363 * advertise the latency values of the extended CEDE states. in fixup_cede0_latency()
364 * We use the lowest advertised exit latency value as a proxy in fixup_cede0_latency()
365 * for the exit latency of CEDE(0). in fixup_cede0_latency()
368 struct xcede_latency_record *record = &payload->records[i]; in fixup_cede0_latency()
369 u8 hint = record->hint; in fixup_cede0_latency()
370 u64 latency_tb = be64_to_cpu(record->latency_ticks); in fixup_cede0_latency()
374 * We expect the exit latency of an extended CEDE in fixup_cede0_latency()
375 * state to be non-zero, it to since it takes at least in fixup_cede0_latency()
380 * So we consider only non-zero value for performing in fixup_cede0_latency()
381 * the fixup of CEDE(0) latency. in fixup_cede0_latency()
384 pr_warn("cpuidle: Skipping xcede record %d [hint=%d]. Exit latency = 0us\n", in fixup_cede0_latency()
396 pr_info("cpuidle: Fixed up CEDE exit latency to %llu us\n", in fixup_cede0_latency()
410 return -ENODEV; in pseries_idle_probe()
419 if (lppaca_shared_proc(local_paca->lppaca_ptr)) { in pseries_idle_probe()
424 * Use firmware provided latency values in pseries_idle_probe()
432 * provided latency values. On such platforms, in pseries_idle_probe()
434 * of 10us. in pseries_idle_probe()
442 return -ENODEV; in pseries_idle_probe()