• Home
  • Raw
  • Download

Lines Matching refs:pr

124 static void lapic_timer_check_state(int state, struct acpi_processor *pr,  in lapic_timer_check_state()  argument
127 struct acpi_processor_power *pwr = &pr->power; in lapic_timer_check_state()
130 if (cpu_has(&cpu_data(pr->id), X86_FEATURE_ARAT)) in lapic_timer_check_state()
144 pr->power.timer_broadcast_on_state = state; in lapic_timer_check_state()
149 struct acpi_processor *pr = (struct acpi_processor *) arg; in __lapic_timer_propagate_broadcast() local
151 if (pr->power.timer_broadcast_on_state < INT_MAX) in __lapic_timer_propagate_broadcast()
157 static void lapic_timer_propagate_broadcast(struct acpi_processor *pr) in lapic_timer_propagate_broadcast() argument
159 smp_call_function_single(pr->id, __lapic_timer_propagate_broadcast, in lapic_timer_propagate_broadcast()
160 (void *)pr, 1); in lapic_timer_propagate_broadcast()
164 static void lapic_timer_state_broadcast(struct acpi_processor *pr, in lapic_timer_state_broadcast() argument
168 int state = cx - pr->power.states; in lapic_timer_state_broadcast()
170 if (state >= pr->power.timer_broadcast_on_state) { in lapic_timer_state_broadcast()
180 static void lapic_timer_check_state(int state, struct acpi_processor *pr, in lapic_timer_check_state() argument
182 static void lapic_timer_propagate_broadcast(struct acpi_processor *pr) { } in lapic_timer_propagate_broadcast() argument
183 static void lapic_timer_state_broadcast(struct acpi_processor *pr, in lapic_timer_state_broadcast() argument
218 static int acpi_processor_get_power_info_fadt(struct acpi_processor *pr) in acpi_processor_get_power_info_fadt() argument
221 if (!pr->pblk) in acpi_processor_get_power_info_fadt()
225 pr->power.states[ACPI_STATE_C2].type = ACPI_STATE_C2; in acpi_processor_get_power_info_fadt()
226 pr->power.states[ACPI_STATE_C3].type = ACPI_STATE_C3; in acpi_processor_get_power_info_fadt()
239 pr->power.states[ACPI_STATE_C2].address = pr->pblk + 4; in acpi_processor_get_power_info_fadt()
240 pr->power.states[ACPI_STATE_C3].address = pr->pblk + 5; in acpi_processor_get_power_info_fadt()
243 pr->power.states[ACPI_STATE_C2].latency = acpi_gbl_FADT.c2_latency; in acpi_processor_get_power_info_fadt()
244 pr->power.states[ACPI_STATE_C3].latency = acpi_gbl_FADT.c3_latency; in acpi_processor_get_power_info_fadt()
254 pr->power.states[ACPI_STATE_C2].address = 0; in acpi_processor_get_power_info_fadt()
265 pr->power.states[ACPI_STATE_C3].address = 0; in acpi_processor_get_power_info_fadt()
270 pr->power.states[ACPI_STATE_C2].address, in acpi_processor_get_power_info_fadt()
271 pr->power.states[ACPI_STATE_C3].address)); in acpi_processor_get_power_info_fadt()
273 snprintf(pr->power.states[ACPI_STATE_C2].desc, in acpi_processor_get_power_info_fadt()
275 pr->power.states[ACPI_STATE_C2].address); in acpi_processor_get_power_info_fadt()
276 snprintf(pr->power.states[ACPI_STATE_C3].desc, in acpi_processor_get_power_info_fadt()
278 pr->power.states[ACPI_STATE_C3].address); in acpi_processor_get_power_info_fadt()
283 static int acpi_processor_get_power_info_default(struct acpi_processor *pr) in acpi_processor_get_power_info_default() argument
285 if (!pr->power.states[ACPI_STATE_C1].valid) { in acpi_processor_get_power_info_default()
288 pr->power.states[ACPI_STATE_C1].type = ACPI_STATE_C1; in acpi_processor_get_power_info_default()
289 pr->power.states[ACPI_STATE_C1].valid = 1; in acpi_processor_get_power_info_default()
290 pr->power.states[ACPI_STATE_C1].entry_method = ACPI_CSTATE_HALT; in acpi_processor_get_power_info_default()
292 snprintf(pr->power.states[ACPI_STATE_C1].desc, in acpi_processor_get_power_info_default()
296 pr->power.states[ACPI_STATE_C0].valid = 1; in acpi_processor_get_power_info_default()
300 static int acpi_processor_get_power_info_cst(struct acpi_processor *pr) in acpi_processor_get_power_info_cst() argument
314 status = acpi_evaluate_object(pr->handle, "_CST", NULL, &buffer); in acpi_processor_get_power_info_cst()
339 pr->flags.has_cst = 1; in acpi_processor_get_power_info_cst()
386 (pr->id, &cx, reg) == 0) { in acpi_processor_get_power_info_cst()
435 memcpy(&(pr->power.states[current_count]), &cx, sizeof(cx)); in acpi_processor_get_power_info_cst()
462 static void acpi_processor_power_verify_c3(struct acpi_processor *pr, in acpi_processor_power_verify_c3() argument
488 acpi_processor_power_init_bm_check(&(pr->flags), pr->id); in acpi_processor_power_verify_c3()
489 bm_check_flag = pr->flags.bm_check; in acpi_processor_power_verify_c3()
490 bm_control_flag = pr->flags.bm_control; in acpi_processor_power_verify_c3()
492 pr->flags.bm_check = bm_check_flag; in acpi_processor_power_verify_c3()
493 pr->flags.bm_control = bm_control_flag; in acpi_processor_power_verify_c3()
496 if (pr->flags.bm_check) { in acpi_processor_power_verify_c3()
497 if (!pr->flags.bm_control) { in acpi_processor_power_verify_c3()
498 if (pr->flags.has_cst != 1) { in acpi_processor_power_verify_c3()
543 static int acpi_processor_power_verify(struct acpi_processor *pr) in acpi_processor_power_verify() argument
548 pr->power.timer_broadcast_on_state = INT_MAX; in acpi_processor_power_verify()
551 struct acpi_processor_cx *cx = &pr->power.states[i]; in acpi_processor_power_verify()
565 acpi_processor_power_verify_c3(pr, cx); in acpi_processor_power_verify()
571 lapic_timer_check_state(i, pr, cx); in acpi_processor_power_verify()
576 lapic_timer_propagate_broadcast(pr); in acpi_processor_power_verify()
581 static int acpi_processor_get_cstate_info(struct acpi_processor *pr) in acpi_processor_get_cstate_info() argument
591 memset(pr->power.states, 0, sizeof(pr->power.states)); in acpi_processor_get_cstate_info()
593 result = acpi_processor_get_power_info_cst(pr); in acpi_processor_get_cstate_info()
595 result = acpi_processor_get_power_info_fadt(pr); in acpi_processor_get_cstate_info()
600 acpi_processor_get_power_info_default(pr); in acpi_processor_get_cstate_info()
602 pr->power.count = acpi_processor_power_verify(pr); in acpi_processor_get_cstate_info()
609 if (pr->power.states[i].valid) { in acpi_processor_get_cstate_info()
610 pr->power.count = i; in acpi_processor_get_cstate_info()
611 if (pr->power.states[i].type >= ACPI_STATE_C2) in acpi_processor_get_cstate_info()
612 pr->flags.power = 1; in acpi_processor_get_cstate_info()
695 static bool acpi_idle_fallback_to_c1(struct acpi_processor *pr) in acpi_idle_fallback_to_c1() argument
697 return IS_ENABLED(CONFIG_HOTPLUG_CPU) && !pr->flags.has_cst && in acpi_idle_fallback_to_c1()
710 static void acpi_idle_enter_bm(struct acpi_processor *pr, in acpi_idle_enter_bm() argument
720 lapic_timer_state_broadcast(pr, cx, 1); in acpi_idle_enter_bm()
731 if (pr->flags.bm_control) { in acpi_idle_enter_bm()
743 if (pr->flags.bm_control) { in acpi_idle_enter_bm()
751 lapic_timer_state_broadcast(pr, cx, 0); in acpi_idle_enter_bm()
758 struct acpi_processor *pr; in acpi_idle_enter() local
760 pr = __this_cpu_read(processors); in acpi_idle_enter()
761 if (unlikely(!pr)) in acpi_idle_enter()
765 if (acpi_idle_fallback_to_c1(pr) && num_online_cpus() > 1) { in acpi_idle_enter()
768 } else if (cx->type == ACPI_STATE_C3 && pr->flags.bm_check) { in acpi_idle_enter()
770 acpi_idle_enter_bm(pr, cx, true); in acpi_idle_enter()
782 lapic_timer_state_broadcast(pr, cx, 1); in acpi_idle_enter()
789 lapic_timer_state_broadcast(pr, cx, 0); in acpi_idle_enter()
800 struct acpi_processor *pr = __this_cpu_read(processors); in acpi_idle_enter_s2idle() local
802 if (unlikely(!pr)) in acpi_idle_enter_s2idle()
805 if (pr->flags.bm_check) { in acpi_idle_enter_s2idle()
806 acpi_idle_enter_bm(pr, cx, false); in acpi_idle_enter_s2idle()
815 static int acpi_processor_setup_cpuidle_cx(struct acpi_processor *pr, in acpi_processor_setup_cpuidle_cx() argument
825 cx = &pr->power.states[i]; in acpi_processor_setup_cpuidle_cx()
843 static int acpi_processor_setup_cstates(struct acpi_processor *pr) in acpi_processor_setup_cstates() argument
861 cx = &pr->power.states[i]; in acpi_processor_setup_cstates()
885 if (cx->type != ACPI_STATE_C1 && !acpi_idle_fallback_to_c1(pr)) in acpi_processor_setup_cstates()
927 static int acpi_processor_get_cstate_info(struct acpi_processor *pr) in acpi_processor_get_cstate_info() argument
932 static int acpi_processor_setup_cpuidle_cx(struct acpi_processor *pr, in acpi_processor_setup_cpuidle_cx() argument
938 static int acpi_processor_setup_cstates(struct acpi_processor *pr) in acpi_processor_setup_cstates() argument
1119 static int flatten_lpi_states(struct acpi_processor *pr, in flatten_lpi_states() argument
1140 flpi = &pr->power.lpi_states[flat_state_cnt]; in flatten_lpi_states()
1164 static int acpi_processor_get_lpi_info(struct acpi_processor *pr) in acpi_processor_get_lpi_info() argument
1168 acpi_handle handle = pr->handle, pr_ahandle; in acpi_processor_get_lpi_info()
1181 handle = pr->handle; in acpi_processor_get_lpi_info()
1185 flatten_lpi_states(pr, prev, NULL); in acpi_processor_get_lpi_info()
1204 flatten_lpi_states(pr, curr, prev); in acpi_processor_get_lpi_info()
1211 pr->power.count = flat_state_cnt; in acpi_processor_get_lpi_info()
1213 for (i = 0; i < pr->power.count; i++) in acpi_processor_get_lpi_info()
1214 pr->power.lpi_states[i].index = i; in acpi_processor_get_lpi_info()
1217 pr->flags.has_lpi = 1; in acpi_processor_get_lpi_info()
1218 pr->flags.power = 1; in acpi_processor_get_lpi_info()
1244 struct acpi_processor *pr; in acpi_idle_lpi_enter() local
1247 pr = __this_cpu_read(processors); in acpi_idle_lpi_enter()
1249 if (unlikely(!pr)) in acpi_idle_lpi_enter()
1252 lpi = &pr->power.lpi_states[index]; in acpi_idle_lpi_enter()
1259 static int acpi_processor_setup_lpi_states(struct acpi_processor *pr) in acpi_processor_setup_lpi_states() argument
1266 if (!pr->flags.has_lpi) in acpi_processor_setup_lpi_states()
1269 for (i = 0; i < pr->power.count && i < CPUIDLE_STATE_MAX; i++) { in acpi_processor_setup_lpi_states()
1270 lpi = &pr->power.lpi_states[i]; in acpi_processor_setup_lpi_states()
1294 static int acpi_processor_setup_cpuidle_states(struct acpi_processor *pr) in acpi_processor_setup_cpuidle_states() argument
1299 if (!pr->flags.power_setup_done || !pr->flags.power) in acpi_processor_setup_cpuidle_states()
1308 if (pr->flags.has_lpi) in acpi_processor_setup_cpuidle_states()
1309 return acpi_processor_setup_lpi_states(pr); in acpi_processor_setup_cpuidle_states()
1311 return acpi_processor_setup_cstates(pr); in acpi_processor_setup_cpuidle_states()
1321 static int acpi_processor_setup_cpuidle_dev(struct acpi_processor *pr, in acpi_processor_setup_cpuidle_dev() argument
1324 if (!pr->flags.power_setup_done || !pr->flags.power || !dev) in acpi_processor_setup_cpuidle_dev()
1327 dev->cpu = pr->id; in acpi_processor_setup_cpuidle_dev()
1328 if (pr->flags.has_lpi) in acpi_processor_setup_cpuidle_dev()
1329 return acpi_processor_ffh_lpi_probe(pr->id); in acpi_processor_setup_cpuidle_dev()
1331 return acpi_processor_setup_cpuidle_cx(pr, dev); in acpi_processor_setup_cpuidle_dev()
1334 static int acpi_processor_get_power_info(struct acpi_processor *pr) in acpi_processor_get_power_info() argument
1338 ret = acpi_processor_get_lpi_info(pr); in acpi_processor_get_power_info()
1340 ret = acpi_processor_get_cstate_info(pr); in acpi_processor_get_power_info()
1345 int acpi_processor_hotplug(struct acpi_processor *pr) in acpi_processor_hotplug() argument
1353 if (!pr->flags.power_setup_done) in acpi_processor_hotplug()
1356 dev = per_cpu(acpi_cpuidle_device, pr->id); in acpi_processor_hotplug()
1359 ret = acpi_processor_get_power_info(pr); in acpi_processor_hotplug()
1360 if (!ret && pr->flags.power) { in acpi_processor_hotplug()
1361 acpi_processor_setup_cpuidle_dev(pr, dev); in acpi_processor_hotplug()
1369 int acpi_processor_power_state_has_changed(struct acpi_processor *pr) in acpi_processor_power_state_has_changed() argument
1378 if (!pr->flags.power_setup_done) in acpi_processor_power_state_has_changed()
1387 if (pr->id == 0 && cpuidle_get_driver() == &acpi_idle_driver) { in acpi_processor_power_state_has_changed()
1403 acpi_processor_get_power_info(pr); in acpi_processor_power_state_has_changed()
1404 acpi_processor_setup_cpuidle_states(pr); in acpi_processor_power_state_has_changed()
1427 int acpi_processor_power_init(struct acpi_processor *pr) in acpi_processor_power_init() argument
1437 if (!acpi_processor_get_power_info(pr)) in acpi_processor_power_init()
1438 pr->flags.power_setup_done = 1; in acpi_processor_power_init()
1445 if (pr->flags.power) { in acpi_processor_power_init()
1448 acpi_processor_setup_cpuidle_states(pr); in acpi_processor_power_init()
1459 per_cpu(acpi_cpuidle_device, pr->id) = dev; in acpi_processor_power_init()
1461 acpi_processor_setup_cpuidle_dev(pr, dev); in acpi_processor_power_init()
1477 int acpi_processor_power_exit(struct acpi_processor *pr) in acpi_processor_power_exit() argument
1479 struct cpuidle_device *dev = per_cpu(acpi_cpuidle_device, pr->id); in acpi_processor_power_exit()
1484 if (pr->flags.power) { in acpi_processor_power_exit()
1491 pr->flags.power_setup_done = 0; in acpi_processor_power_exit()