Lines Matching refs:pr

125 static void lapic_timer_check_state(int state, struct acpi_processor *pr,
128 struct acpi_processor_power *pwr = &pr->power;
131 if (cpu_has(&cpu_data(pr->id), X86_FEATURE_ARAT))
145 pr->power.timer_broadcast_on_state = state;
150 struct acpi_processor *pr = arg;
152 if (pr->power.timer_broadcast_on_state < INT_MAX)
158 static void lapic_timer_propagate_broadcast(struct acpi_processor *pr)
160 smp_call_function_single(pr->id, __lapic_timer_propagate_broadcast,
161 (void *)pr, 1);
165 static bool lapic_timer_needs_broadcast(struct acpi_processor *pr,
168 return cx - pr->power.states >= pr->power.timer_broadcast_on_state;
173 static void lapic_timer_check_state(int state, struct acpi_processor *pr,
175 static void lapic_timer_propagate_broadcast(struct acpi_processor *pr) { }
177 static bool lapic_timer_needs_broadcast(struct acpi_processor *pr,
211 static int acpi_processor_get_power_info_fadt(struct acpi_processor *pr)
214 if (!pr->pblk)
218 pr->power.states[ACPI_STATE_C2].type = ACPI_STATE_C2;
219 pr->power.states[ACPI_STATE_C3].type = ACPI_STATE_C3;
232 pr->power.states[ACPI_STATE_C2].address = pr->pblk + 4;
233 pr->power.states[ACPI_STATE_C3].address = pr->pblk + 5;
236 pr->power.states[ACPI_STATE_C2].latency = acpi_gbl_FADT.c2_latency;
237 pr->power.states[ACPI_STATE_C3].latency = acpi_gbl_FADT.c3_latency;
244 acpi_handle_debug(pr->handle, "C2 latency too large [%d]\n",
247 pr->power.states[ACPI_STATE_C2].address = 0;
255 acpi_handle_debug(pr->handle, "C3 latency too large [%d]\n",
258 pr->power.states[ACPI_STATE_C3].address = 0;
261 acpi_handle_debug(pr->handle, "lvl2[0x%08x] lvl3[0x%08x]\n",
262 pr->power.states[ACPI_STATE_C2].address,
263 pr->power.states[ACPI_STATE_C3].address);
265 snprintf(pr->power.states[ACPI_STATE_C2].desc,
267 pr->power.states[ACPI_STATE_C2].address);
268 snprintf(pr->power.states[ACPI_STATE_C3].desc,
270 pr->power.states[ACPI_STATE_C3].address);
275 static int acpi_processor_get_power_info_default(struct acpi_processor *pr)
277 if (!pr->power.states[ACPI_STATE_C1].valid) {
280 pr->power.states[ACPI_STATE_C1].type = ACPI_STATE_C1;
281 pr->power.states[ACPI_STATE_C1].valid = 1;
282 pr->power.states[ACPI_STATE_C1].entry_method = ACPI_CSTATE_HALT;
284 snprintf(pr->power.states[ACPI_STATE_C1].desc,
288 pr->power.states[ACPI_STATE_C0].valid = 1;
292 static int acpi_processor_get_power_info_cst(struct acpi_processor *pr)
299 ret = acpi_processor_evaluate_cst(pr->handle, pr->id, &pr->power);
303 if (!pr->power.count)
306 pr->flags.has_cst = 1;
310 static void acpi_processor_power_verify_c3(struct acpi_processor *pr,
328 acpi_handle_debug(pr->handle,
336 acpi_processor_power_init_bm_check(&(pr->flags), pr->id);
337 bm_check_flag = pr->flags.bm_check;
338 bm_control_flag = pr->flags.bm_control;
340 pr->flags.bm_check = bm_check_flag;
341 pr->flags.bm_control = bm_control_flag;
344 if (pr->flags.bm_check) {
345 if (!pr->flags.bm_control) {
346 if (pr->flags.has_cst != 1) {
348 acpi_handle_debug(pr->handle,
353 acpi_handle_debug(pr->handle,
363 acpi_handle_debug(pr->handle,
410 static int acpi_processor_power_verify(struct acpi_processor *pr)
418 pr->power.timer_broadcast_on_state = INT_MAX;
421 struct acpi_processor_cx *cx = &pr->power.states[i];
435 acpi_processor_power_verify_c3(pr, cx);
445 lapic_timer_check_state(i, pr, cx);
452 sort(&pr->power.states[1], max_cstate,
458 lapic_timer_propagate_broadcast(pr);
463 static int acpi_processor_get_cstate_info(struct acpi_processor *pr)
473 memset(pr->power.states, 0, sizeof(pr->power.states));
475 result = acpi_processor_get_power_info_cst(pr);
477 result = acpi_processor_get_power_info_fadt(pr);
482 acpi_processor_get_power_info_default(pr);
484 pr->power.count = acpi_processor_power_verify(pr);
491 if (pr->power.states[i].valid) {
492 pr->power.count = i;
493 pr->flags.power = 1;
606 static __always_inline bool acpi_idle_fallback_to_c1(struct acpi_processor *pr)
608 return IS_ENABLED(CONFIG_HOTPLUG_CPU) && !pr->flags.has_cst &&
618 * @pr: Target processor
623 struct acpi_processor *pr,
639 bool dis_bm = pr->flags.bm_control;
687 struct acpi_processor *pr;
689 pr = __this_cpu_read(processors);
690 if (unlikely(!pr))
694 if (cx->type == ACPI_STATE_C3 && pr->flags.bm_check)
695 return acpi_idle_enter_bm(drv, pr, cx, index);
698 if (acpi_idle_fallback_to_c1(pr) && num_online_cpus() > 1) {
718 struct acpi_processor *pr = __this_cpu_read(processors);
720 if (unlikely(!pr))
723 if (pr->flags.bm_check) {
728 acpi_idle_enter_bm(drv, pr, cx, index);
741 static int acpi_processor_setup_cpuidle_cx(struct acpi_processor *pr,
753 cx = &pr->power.states[i];
760 if (lapic_timer_needs_broadcast(pr, cx))
765 if (pr->flags.bm_check)
780 static int acpi_processor_setup_cstates(struct acpi_processor *pr)
798 cx = &pr->power.states[i];
824 if (cx->type != ACPI_STATE_C1 && !acpi_idle_fallback_to_c1(pr))
862 static int acpi_processor_get_cstate_info(struct acpi_processor *pr)
867 static int acpi_processor_setup_cpuidle_cx(struct acpi_processor *pr,
873 static int acpi_processor_setup_cstates(struct acpi_processor *pr)
1054 static int flatten_lpi_states(struct acpi_processor *pr,
1075 flpi = &pr->power.lpi_states[flat_state_cnt];
1104 static int acpi_processor_get_lpi_info(struct acpi_processor *pr)
1108 acpi_handle handle = pr->handle, pr_ahandle;
1113 ret = acpi_processor_ffh_lpi_probe(pr->id);
1126 handle = pr->handle;
1130 flatten_lpi_states(pr, prev, NULL);
1152 flatten_lpi_states(pr, curr, prev);
1159 pr->power.count = flat_state_cnt;
1161 for (i = 0; i < pr->power.count; i++)
1162 pr->power.lpi_states[i].index = i;
1165 pr->flags.has_lpi = 1;
1166 pr->flags.power = 1;
1187 struct acpi_processor *pr;
1190 pr = __this_cpu_read(processors);
1192 if (unlikely(!pr))
1195 lpi = &pr->power.lpi_states[index];
1202 static int acpi_processor_setup_lpi_states(struct acpi_processor *pr)
1209 if (!pr->flags.has_lpi)
1212 for (i = 0; i < pr->power.count && i < CPUIDLE_STATE_MAX; i++) {
1213 lpi = &pr->power.lpi_states[i];
1236 * @pr: the ACPI processor
1238 static int acpi_processor_setup_cpuidle_states(struct acpi_processor *pr)
1243 if (!pr->flags.power_setup_done || !pr->flags.power)
1252 if (pr->flags.has_lpi)
1253 return acpi_processor_setup_lpi_states(pr);
1255 return acpi_processor_setup_cstates(pr);
1262 * @pr: the ACPI processor
1265 static int acpi_processor_setup_cpuidle_dev(struct acpi_processor *pr,
1268 if (!pr->flags.power_setup_done || !pr->flags.power || !dev)
1271 dev->cpu = pr->id;
1272 if (pr->flags.has_lpi)
1273 return acpi_processor_ffh_lpi_probe(pr->id);
1275 return acpi_processor_setup_cpuidle_cx(pr, dev);
1278 static int acpi_processor_get_power_info(struct acpi_processor *pr)
1282 ret = acpi_processor_get_lpi_info(pr);
1284 ret = acpi_processor_get_cstate_info(pr);
1289 int acpi_processor_hotplug(struct acpi_processor *pr)
1297 if (!pr->flags.power_setup_done)
1300 dev = per_cpu(acpi_cpuidle_device, pr->id);
1303 ret = acpi_processor_get_power_info(pr);
1304 if (!ret && pr->flags.power) {
1305 acpi_processor_setup_cpuidle_dev(pr, dev);
1313 int acpi_processor_power_state_has_changed(struct acpi_processor *pr)
1322 if (!pr->flags.power_setup_done)
1331 if (pr->id == 0 && cpuidle_get_driver() == &acpi_idle_driver) {
1347 acpi_processor_get_power_info(pr);
1348 acpi_processor_setup_cpuidle_states(pr);
1371 int acpi_processor_power_init(struct acpi_processor *pr)
1381 if (!acpi_processor_get_power_info(pr))
1382 pr->flags.power_setup_done = 1;
1389 if (pr->flags.power) {
1392 acpi_processor_setup_cpuidle_states(pr);
1403 per_cpu(acpi_cpuidle_device, pr->id) = dev;
1405 acpi_processor_setup_cpuidle_dev(pr, dev);
1421 int acpi_processor_power_exit(struct acpi_processor *pr)
1423 struct cpuidle_device *dev = per_cpu(acpi_cpuidle_device, pr->id);
1428 if (pr->flags.power) {
1437 pr->flags.power_setup_done = 0;