Lines Matching refs:pr

130 static void lapic_timer_check_state(int state, struct acpi_processor *pr,  in lapic_timer_check_state()  argument
133 struct acpi_processor_power *pwr = &pr->power; in lapic_timer_check_state()
136 if (cpu_has(&cpu_data(pr->id), X86_FEATURE_ARAT)) in lapic_timer_check_state()
150 pr->power.timer_broadcast_on_state = state; in lapic_timer_check_state()
155 struct acpi_processor *pr = (struct acpi_processor *) arg; in __lapic_timer_propagate_broadcast() local
157 if (pr->power.timer_broadcast_on_state < INT_MAX) in __lapic_timer_propagate_broadcast()
163 static void lapic_timer_propagate_broadcast(struct acpi_processor *pr) in lapic_timer_propagate_broadcast() argument
165 smp_call_function_single(pr->id, __lapic_timer_propagate_broadcast, in lapic_timer_propagate_broadcast()
166 (void *)pr, 1); in lapic_timer_propagate_broadcast()
170 static void lapic_timer_state_broadcast(struct acpi_processor *pr, in lapic_timer_state_broadcast() argument
174 int state = cx - pr->power.states; in lapic_timer_state_broadcast()
176 if (state >= pr->power.timer_broadcast_on_state) { in lapic_timer_state_broadcast()
186 static void lapic_timer_check_state(int state, struct acpi_processor *pr, in lapic_timer_check_state() argument
188 static void lapic_timer_propagate_broadcast(struct acpi_processor *pr) { } in lapic_timer_propagate_broadcast() argument
189 static void lapic_timer_state_broadcast(struct acpi_processor *pr, in lapic_timer_state_broadcast() argument
257 static int acpi_processor_get_power_info_fadt(struct acpi_processor *pr) in acpi_processor_get_power_info_fadt() argument
260 if (!pr->pblk) in acpi_processor_get_power_info_fadt()
264 pr->power.states[ACPI_STATE_C2].type = ACPI_STATE_C2; in acpi_processor_get_power_info_fadt()
265 pr->power.states[ACPI_STATE_C3].type = ACPI_STATE_C3; in acpi_processor_get_power_info_fadt()
278 pr->power.states[ACPI_STATE_C2].address = pr->pblk + 4; in acpi_processor_get_power_info_fadt()
279 pr->power.states[ACPI_STATE_C3].address = pr->pblk + 5; in acpi_processor_get_power_info_fadt()
282 pr->power.states[ACPI_STATE_C2].latency = acpi_gbl_FADT.c2_latency; in acpi_processor_get_power_info_fadt()
283 pr->power.states[ACPI_STATE_C3].latency = acpi_gbl_FADT.c3_latency; in acpi_processor_get_power_info_fadt()
293 pr->power.states[ACPI_STATE_C2].address = 0; in acpi_processor_get_power_info_fadt()
304 pr->power.states[ACPI_STATE_C3].address = 0; in acpi_processor_get_power_info_fadt()
309 pr->power.states[ACPI_STATE_C2].address, in acpi_processor_get_power_info_fadt()
310 pr->power.states[ACPI_STATE_C3].address)); in acpi_processor_get_power_info_fadt()
315 static int acpi_processor_get_power_info_default(struct acpi_processor *pr) in acpi_processor_get_power_info_default() argument
317 if (!pr->power.states[ACPI_STATE_C1].valid) { in acpi_processor_get_power_info_default()
320 pr->power.states[ACPI_STATE_C1].type = ACPI_STATE_C1; in acpi_processor_get_power_info_default()
321 pr->power.states[ACPI_STATE_C1].valid = 1; in acpi_processor_get_power_info_default()
322 pr->power.states[ACPI_STATE_C1].entry_method = ACPI_CSTATE_HALT; in acpi_processor_get_power_info_default()
325 pr->power.states[ACPI_STATE_C0].valid = 1; in acpi_processor_get_power_info_default()
329 static int acpi_processor_get_power_info_cst(struct acpi_processor *pr) in acpi_processor_get_power_info_cst() argument
344 status = acpi_evaluate_object(pr->handle, "_CST", NULL, &buffer); in acpi_processor_get_power_info_cst()
369 pr->flags.has_cst = 1; in acpi_processor_get_power_info_cst()
416 (pr->id, &cx, reg) == 0) { in acpi_processor_get_power_info_cst()
465 memcpy(&(pr->power.states[current_count]), &cx, sizeof(cx)); in acpi_processor_get_power_info_cst()
494 static void acpi_processor_power_verify_c3(struct acpi_processor *pr, in acpi_processor_power_verify_c3() argument
520 acpi_processor_power_init_bm_check(&(pr->flags), pr->id); in acpi_processor_power_verify_c3()
521 bm_check_flag = pr->flags.bm_check; in acpi_processor_power_verify_c3()
522 bm_control_flag = pr->flags.bm_control; in acpi_processor_power_verify_c3()
524 pr->flags.bm_check = bm_check_flag; in acpi_processor_power_verify_c3()
525 pr->flags.bm_control = bm_control_flag; in acpi_processor_power_verify_c3()
528 if (pr->flags.bm_check) { in acpi_processor_power_verify_c3()
529 if (!pr->flags.bm_control) { in acpi_processor_power_verify_c3()
530 if (pr->flags.has_cst != 1) { in acpi_processor_power_verify_c3()
575 static int acpi_processor_power_verify(struct acpi_processor *pr) in acpi_processor_power_verify() argument
580 pr->power.timer_broadcast_on_state = INT_MAX; in acpi_processor_power_verify()
583 struct acpi_processor_cx *cx = &pr->power.states[i]; in acpi_processor_power_verify()
597 acpi_processor_power_verify_c3(pr, cx); in acpi_processor_power_verify()
603 lapic_timer_check_state(i, pr, cx); in acpi_processor_power_verify()
608 lapic_timer_propagate_broadcast(pr); in acpi_processor_power_verify()
613 static int acpi_processor_get_power_info(struct acpi_processor *pr) in acpi_processor_get_power_info() argument
623 memset(pr->power.states, 0, sizeof(pr->power.states)); in acpi_processor_get_power_info()
625 result = acpi_processor_get_power_info_cst(pr); in acpi_processor_get_power_info()
627 result = acpi_processor_get_power_info_fadt(pr); in acpi_processor_get_power_info()
632 acpi_processor_get_power_info_default(pr); in acpi_processor_get_power_info()
634 pr->power.count = acpi_processor_power_verify(pr); in acpi_processor_get_power_info()
641 if (pr->power.states[i].valid) { in acpi_processor_get_power_info()
642 pr->power.count = i; in acpi_processor_get_power_info()
643 if (pr->power.states[i].type >= ACPI_STATE_C2) in acpi_processor_get_power_info()
644 pr->flags.power = 1; in acpi_processor_get_power_info()
727 static bool acpi_idle_fallback_to_c1(struct acpi_processor *pr) in acpi_idle_fallback_to_c1() argument
729 return IS_ENABLED(CONFIG_HOTPLUG_CPU) && !pr->flags.has_cst && in acpi_idle_fallback_to_c1()
742 static void acpi_idle_enter_bm(struct acpi_processor *pr, in acpi_idle_enter_bm() argument
752 lapic_timer_state_broadcast(pr, cx, 1); in acpi_idle_enter_bm()
763 if (pr->flags.bm_control) { in acpi_idle_enter_bm()
775 if (pr->flags.bm_control) { in acpi_idle_enter_bm()
783 lapic_timer_state_broadcast(pr, cx, 0); in acpi_idle_enter_bm()
790 struct acpi_processor *pr; in acpi_idle_enter() local
792 pr = __this_cpu_read(processors); in acpi_idle_enter()
793 if (unlikely(!pr)) in acpi_idle_enter()
797 if (acpi_idle_fallback_to_c1(pr) && num_online_cpus() > 1) { in acpi_idle_enter()
800 } else if (cx->type == ACPI_STATE_C3 && pr->flags.bm_check) { in acpi_idle_enter()
802 acpi_idle_enter_bm(pr, cx, true); in acpi_idle_enter()
814 lapic_timer_state_broadcast(pr, cx, 1); in acpi_idle_enter()
821 lapic_timer_state_broadcast(pr, cx, 0); in acpi_idle_enter()
832 struct acpi_processor *pr = __this_cpu_read(processors); in acpi_idle_enter_freeze() local
834 if (unlikely(!pr)) in acpi_idle_enter_freeze()
837 if (pr->flags.bm_check) { in acpi_idle_enter_freeze()
838 acpi_idle_enter_bm(pr, cx, false); in acpi_idle_enter_freeze()
859 static int acpi_processor_setup_cpuidle_cx(struct acpi_processor *pr, in acpi_processor_setup_cpuidle_cx() argument
865 if (!pr->flags.power_setup_done) in acpi_processor_setup_cpuidle_cx()
868 if (pr->flags.power == 0) { in acpi_processor_setup_cpuidle_cx()
875 dev->cpu = pr->id; in acpi_processor_setup_cpuidle_cx()
881 cx = &pr->power.states[i]; in acpi_processor_setup_cpuidle_cx()
905 static int acpi_processor_setup_cpuidle_states(struct acpi_processor *pr) in acpi_processor_setup_cpuidle_states() argument
912 if (!pr->flags.power_setup_done) in acpi_processor_setup_cpuidle_states()
915 if (pr->flags.power == 0) in acpi_processor_setup_cpuidle_states()
928 cx = &pr->power.states[i]; in acpi_processor_setup_cpuidle_states()
952 if (cx->type != ACPI_STATE_C1 && !acpi_idle_fallback_to_c1(pr)) in acpi_processor_setup_cpuidle_states()
968 int acpi_processor_hotplug(struct acpi_processor *pr) in acpi_processor_hotplug() argument
979 if (!pr->flags.power_setup_done) in acpi_processor_hotplug()
982 dev = per_cpu(acpi_cpuidle_device, pr->id); in acpi_processor_hotplug()
985 acpi_processor_get_power_info(pr); in acpi_processor_hotplug()
986 if (pr->flags.power) { in acpi_processor_hotplug()
987 acpi_processor_setup_cpuidle_cx(pr, dev); in acpi_processor_hotplug()
995 int acpi_processor_cst_has_changed(struct acpi_processor *pr) in acpi_processor_cst_has_changed() argument
1007 if (!pr->flags.power_setup_done) in acpi_processor_cst_has_changed()
1016 if (pr->id == 0 && cpuidle_get_driver() == &acpi_idle_driver) { in acpi_processor_cst_has_changed()
1032 acpi_processor_get_power_info(pr); in acpi_processor_cst_has_changed()
1033 acpi_processor_setup_cpuidle_states(pr); in acpi_processor_cst_has_changed()
1056 int acpi_processor_power_init(struct acpi_processor *pr) in acpi_processor_power_init() argument
1085 acpi_processor_get_power_info(pr); in acpi_processor_power_init()
1086 pr->flags.power_setup_done = 1; in acpi_processor_power_init()
1093 if (pr->flags.power) { in acpi_processor_power_init()
1096 acpi_processor_setup_cpuidle_states(pr); in acpi_processor_power_init()
1107 per_cpu(acpi_cpuidle_device, pr->id) = dev; in acpi_processor_power_init()
1109 acpi_processor_setup_cpuidle_cx(pr, dev); in acpi_processor_power_init()
1125 int acpi_processor_power_exit(struct acpi_processor *pr) in acpi_processor_power_exit() argument
1127 struct cpuidle_device *dev = per_cpu(acpi_cpuidle_device, pr->id); in acpi_processor_power_exit()
1132 if (pr->flags.power) { in acpi_processor_power_exit()
1139 pr->flags.power_setup_done = 0; in acpi_processor_power_exit()