Lines Matching +full:total +full:- +full:timeout

1 // SPDX-License-Identifier: GPL-2.0+
24 #include <dm/device-internal.h>
25 #include <dm/uclass-internal.h>
32 /* Total CPUs include BSP */
76 /* Returns 1 if timeout waiting for APs. 0 if target APs found */
80 int timeout = 0; in wait_for_aps() local
87 timeout = 1; in wait_for_aps()
92 return timeout; in wait_for_aps()
102 atomic_inc(&rec->cpus_entered); in ap_do_flight_plan()
103 barrier_wait(&rec->barrier); in ap_do_flight_plan()
105 if (rec->ap_call != NULL) in ap_do_flight_plan()
106 rec->ap_call(cpu, rec->ap_arg); in ap_do_flight_plan()
120 if (plat->cpu_id == apic_id) { in find_cpu_by_apic_id()
126 return -ENOENT; in find_cpu_by_apic_id()
150 dev ? dev->name : "(apic_id not found)"); in ap_init()
173 entry->index = index; in save_msr()
174 entry->lo = msr.lo; in save_msr()
175 entry->hi = msr.hi; in save_msr()
199 return -ENOSPC; in save_bsp_msrs()
228 code_len = ap_start16_code_end - ap_start16; in load_sipi_vector()
233 addr = AP_DEFAULT_BASE + (ulong)sipi_params_16bit - (ulong)ap_start16; in load_sipi_vector()
235 params16->ap_start = (uint32_t)ap_start; in load_sipi_vector()
236 params16->gdt = (uint32_t)gd->arch.gdt; in load_sipi_vector()
237 params16->gdt_limit = X86_GDT_SIZE - 1; in load_sipi_vector()
238 debug("gdt = %x, gdt_limit = %x\n", params16->gdt, params16->gdt_limit); in load_sipi_vector()
241 debug("SIPI 32-bit params at %p\n", params); in load_sipi_vector()
242 params->idt_ptr = (uint32_t)x86_get_idt(); in load_sipi_vector()
244 params->stack_size = CONFIG_AP_STACK_SIZE; in load_sipi_vector()
245 size = params->stack_size * num_cpus; in load_sipi_vector()
248 return -ENOMEM; in load_sipi_vector()
249 params->stack_top = (u32)(stack + size); in load_sipi_vector()
252 params->microcode_ptr = ucode_base; in load_sipi_vector()
253 debug("Microcode at %x\n", params->microcode_ptr); in load_sipi_vector()
255 params->msr_table_ptr = (u32)msr_save; in load_sipi_vector()
259 params->msr_count = ret; in load_sipi_vector()
261 params->c_handler = (uint32_t)&ap_init; in load_sipi_vector()
263 *ap_countp = &params->ap_count; in load_sipi_vector()
288 /* Returns 1 for timeout. 0 on success */
291 int total = 0; in apic_wait_timeout() local
299 total += 50; in apic_wait_timeout()
300 if (total >= total_delay) { in apic_wait_timeout()
302 return -ETIMEDOUT; in apic_wait_timeout()
314 const int max_vector_loc = ((1 << 20) - (1 << 12)) >> 12; in start_aps()
325 return -1; in start_aps()
331 return -ETIMEDOUT; in start_aps()
342 return -ETIMEDOUT; in start_aps()
348 return -ETIMEDOUT; in start_aps()
355 return -ETIMEDOUT; in start_aps()
361 return -ETIMEDOUT; in start_aps()
367 return -1; in start_aps()
379 int num_aps = num_cpus - 1; in bsp_do_flight_plan()
381 for (i = 0; i < mp_params->num_records; i++) { in bsp_do_flight_plan()
382 struct mp_flight_record *rec = &mp_params->flight_plan[i]; in bsp_do_flight_plan()
385 if (atomic_read(&rec->barrier) == 0) { in bsp_do_flight_plan()
387 if (wait_for_aps(&rec->cpus_entered, num_aps, in bsp_do_flight_plan()
389 debug("MP record %d timeout\n", i); in bsp_do_flight_plan()
390 ret = -1; in bsp_do_flight_plan()
394 if (rec->bsp_call != NULL) in bsp_do_flight_plan()
395 rec->bsp_call(cpu, rec->bsp_arg); in bsp_do_flight_plan()
397 release_barrier(&rec->barrier); in bsp_do_flight_plan()
435 if (!strcmp(pdev->name, "cpus")) in qemu_cpu_fixup()
440 return -ENODEV; in qemu_cpu_fixup()
469 return -ENOMEM; in qemu_cpu_fixup()
478 plat->cpu_id = cpu_num; in qemu_cpu_fixup()
509 if (p == NULL || p->flight_plan == NULL || p->num_records < 1) { in mp_init()
511 return -1; in mp_init()
528 mp_info.num_records = p->num_records; in mp_init()
529 mp_info.records = p->flight_plan; in mp_init()
534 return -1; in mp_init()
543 num_aps = num_cpus - 1; in mp_init()
571 cpu->req_seq = fdtdec_get_int(gd->fdt_blob, dev_of_offset(cpu), "reg", in mp_init_cpu()
572 -1); in mp_init_cpu()
573 plat->ucode_version = microcode_read_rev(); in mp_init_cpu()
574 plat->device_id = gd->arch.x86_device; in mp_init_cpu()