Lines Matching +full:exit +full:- +full:latency +full:- +full:us
1 // SPDX-License-Identifier: GPL-2.0
3 * cpuidle-pseries - idle state cpuidle driver.
48 dev->poll_time_limit = false; in snooze_loop()
59 dev->poll_time_limit = true; in snooze_loop()
81 * were soft-disabled in check_and_cede_processor()
95 * "ibm,get-systems-parameter" RTAS call with the token
101 * table with all the parameters to ibm,get-system-parameters.
102 * CEDE_LATENCY_TOKEN corresponds to the token value for Cede Latency
108 * If the platform supports the cede latency settings information system
112 * a. The first byte is the length “N” of each cede latency setting record minus
115 * b. For each supported cede latency setting a cede latency setting record
118 * -----------------------------
121 * -----------------------------
122 * | Cede Latency | 1 Byte |
124 * -----------------------------
126 * | latency in | 8 Bytes |
127 * | tb-ticks | |
128 * -----------------------------
132 * -----------------------------
134 * This version has cede latency record size = 10.
140 * ibm,get-systems-parameter RTAS call when made with
144 * call. The data is in big-endian.
175 ret = rtas_call(rtas_token("ibm,get-system-parameter"), 3, 1, in parse_cede_parameters()
186 xcede_record_size = payload->record_size + 1; in parse_cede_parameters()
189 pr_err("xcede: Expected record-size %lu. Observed size %u.\n", in parse_cede_parameters()
191 return -EINVAL; in parse_cede_parameters()
201 total_xcede_records_size = payload_size - 2; in parse_cede_parameters()
205 struct xcede_latency_record *record = &payload->records[i]; in parse_cede_parameters()
206 u64 latency_ticks = be64_to_cpu(record->latency_ticks); in parse_cede_parameters()
207 u8 wake_on_irqs = record->wake_on_irqs; in parse_cede_parameters()
208 u8 hint = record->hint; in parse_cede_parameters()
210 pr_info("xcede: Record %d : hint = %u, latency = 0x%llx tb ticks, Wake-on-irq = %u\n", in parse_cede_parameters()
227 get_lppaca()->donate_dedicated_cpu = 1; in dedicated_cede_loop()
228 old_latency_hint = get_lppaca()->cede_latency_hint; in dedicated_cede_loop()
229 get_lppaca()->cede_latency_hint = cede_latency_hint[index]; in dedicated_cede_loop()
235 get_lppaca()->donate_dedicated_cpu = 0; in dedicated_cede_loop()
236 get_lppaca()->cede_latency_hint = old_latency_hint; in dedicated_cede_loop()
335 drv->state_count = 0; in pseries_cpuidle_driver_init()
342 drv->states[drv->state_count] = /* structure copy */ in pseries_cpuidle_driver_init()
345 drv->state_count += 1; in pseries_cpuidle_driver_init()
367 * does not advertise CEDE(0) exit latency values, it does in fixup_cede0_latency()
368 * advertise the latency values of the extended CEDE states. in fixup_cede0_latency()
369 * We use the lowest advertised exit latency value as a proxy in fixup_cede0_latency()
370 * for the exit latency of CEDE(0). in fixup_cede0_latency()
373 struct xcede_latency_record *record = &payload->records[i]; in fixup_cede0_latency()
374 u8 hint = record->hint; in fixup_cede0_latency()
375 u64 latency_tb = be64_to_cpu(record->latency_ticks); in fixup_cede0_latency()
379 * We expect the exit latency of an extended CEDE in fixup_cede0_latency()
380 * state to be non-zero, it to since it takes at least in fixup_cede0_latency()
385 * So we consider only non-zero value for performing in fixup_cede0_latency()
386 * the fixup of CEDE(0) latency. in fixup_cede0_latency()
389 pr_warn("cpuidle: Skipping xcede record %d [hint=%d]. Exit latency = 0us\n", in fixup_cede0_latency()
401 pr_info("cpuidle: Fixed up CEDE exit latency to %llu us\n", in fixup_cede0_latency()
415 return -ENODEV; in pseries_idle_probe()
423 * Use firmware provided latency values in pseries_idle_probe()
431 * provided latency values. On such platforms, in pseries_idle_probe()
433 * of 10us. in pseries_idle_probe()
441 return -ENODEV; in pseries_idle_probe()