Lines Matching +full:cpu +full:- +full:nr

1 // SPDX-License-Identifier: GPL-2.0-or-later
6 * Copyright 2006-2008, 2011-2012, 2015 Freescale Semiconductor Inc.
17 #include <linux/cpu.h>
26 #include <asm/text-patching.h>
58 qoriq_pm_ops->freeze_time_base(true); in mpc85xx_give_timebase()
61 * e5500/e6500 have a workaround for erratum A-006958 in place in mpc85xx_give_timebase()
62 * that will reread the timebase until TBL is non-zero. in mpc85xx_give_timebase()
66 * TBL is non-zero, we ensure that TB does not change. We don't in mpc85xx_give_timebase()
91 qoriq_pm_ops->freeze_time_base(false); in mpc85xx_give_timebase()
117 unsigned int cpu = smp_processor_id(); in smp_85xx_cpu_offline_self() local
121 /* mask all irqs to prevent cpu wakeup */ in smp_85xx_cpu_offline_self()
122 qoriq_pm_ops->irq_mask(cpu); in smp_85xx_cpu_offline_self()
129 generic_set_cpu_dead(cpu); in smp_85xx_cpu_offline_self()
131 cur_cpu_spec->cpu_down_flush(); in smp_85xx_cpu_offline_self()
133 qoriq_pm_ops->cpu_die(cpu); in smp_85xx_cpu_offline_self()
139 static void qoriq_cpu_kill(unsigned int cpu) in qoriq_cpu_kill() argument
144 if (is_cpu_dead(cpu)) { in qoriq_cpu_kill()
146 paca_ptrs[cpu]->cpu_start = 0; in qoriq_cpu_kill()
152 pr_err("CPU%d didn't die...\n", cpu); in qoriq_cpu_kill()
158 * cache-inhibit spin table, we need to flush the cache
173 return in_be32(&((struct epapr_spin_table *)spin_table)->addr_l); in read_spin_table_addr_l()
181 int cpu = *(const int *)info; in wake_hw_thread() local
184 book3e_start_thread(cpu_thread_in_core(cpu), inia); in wake_hw_thread()
188 static int smp_85xx_start_cpu(int cpu) in smp_85xx_start_cpu() argument
195 int hw_cpu = get_hard_smp_processor_id(cpu); in smp_85xx_start_cpu()
198 np = of_get_cpu_node(cpu, NULL); in smp_85xx_start_cpu()
199 cpu_rel_addr = of_get_property(np, "cpu-release-addr", NULL); in smp_85xx_start_cpu()
201 pr_err("No cpu-release-addr for cpu %d\n", cpu); in smp_85xx_start_cpu()
202 return -ENOENT; in smp_85xx_start_cpu()
211 ioremappable = *cpu_rel_addr > virt_to_phys(high_memory - 1); in smp_85xx_start_cpu()
223 if (qoriq_pm_ops && qoriq_pm_ops->cpu_up_prepare) in smp_85xx_start_cpu()
224 qoriq_pm_ops->cpu_up_prepare(cpu); in smp_85xx_start_cpu()
226 /* if cpu is not spinning, reset it */ in smp_85xx_start_cpu()
232 mpic_reset_core(cpu); in smp_85xx_start_cpu()
237 * loader uses a cache-inhibited spin table. in smp_85xx_start_cpu()
242 pr_err("timeout waiting for cpu %d to reset\n", in smp_85xx_start_cpu()
244 ret = -EAGAIN; in smp_85xx_start_cpu()
250 out_be32(&spin_table->pir, hw_cpu); in smp_85xx_start_cpu()
252 out_be64((u64 *)(&spin_table->addr_h), in smp_85xx_start_cpu()
262 out_be32(&spin_table->addr_h, __pa(__early_start) >> 32); in smp_85xx_start_cpu()
264 out_be32(&spin_table->addr_l, __pa(__early_start)); in smp_85xx_start_cpu()
276 static int smp_85xx_kick_cpu(int nr) in smp_85xx_kick_cpu() argument
280 int primary = nr; in smp_85xx_kick_cpu()
283 WARN_ON(nr < 0 || nr >= num_possible_cpus()); in smp_85xx_kick_cpu()
285 pr_debug("kick CPU #%d\n", nr); in smp_85xx_kick_cpu()
290 return -ENOENT; in smp_85xx_kick_cpu()
292 booting_thread_hwid = cpu_thread_in_core(nr); in smp_85xx_kick_cpu()
293 primary = cpu_first_thread_sibling(nr); in smp_85xx_kick_cpu()
295 if (qoriq_pm_ops && qoriq_pm_ops->cpu_up_prepare) in smp_85xx_kick_cpu()
296 qoriq_pm_ops->cpu_up_prepare(nr); in smp_85xx_kick_cpu()
304 wake_hw_thread, &nr, 1); in smp_85xx_kick_cpu()
308 wake_hw_thread, &nr, 1); in smp_85xx_kick_cpu()
316 * corresponding to nr. in smp_85xx_kick_cpu()
327 pr_err("Do not support more than 2 threads per CPU."); in smp_85xx_kick_cpu()
328 return -EINVAL; in smp_85xx_kick_cpu()
336 paca_ptrs[nr]->cpu_start = 1; in smp_85xx_kick_cpu()
337 generic_set_cpu_up(nr); in smp_85xx_kick_cpu()
341 ret = smp_85xx_start_cpu(nr); in smp_85xx_kick_cpu()
345 generic_set_cpu_up(nr); in smp_85xx_kick_cpu()
374 cur_cpu_spec->cpu_down_flush(); in mpc85xx_smp_kexec_cpu_down()
389 int cpu = smp_processor_id(); in mpc85xx_smp_kexec_cpu_down() local
390 int sibling = cpu_last_thread_sibling(cpu); in mpc85xx_smp_kexec_cpu_down()
402 if (cpu == crashing_cpu && cpu_thread_in_core(cpu) != 0) { in mpc85xx_smp_kexec_cpu_down()
404 * We enter the crash kernel on whatever cpu crashed, in mpc85xx_smp_kexec_cpu_down()
409 disable_cpu = cpu_first_thread_sibling(cpu); in mpc85xx_smp_kexec_cpu_down()
414 if (cpu_thread_in_core(cpu) == 0 && cpu_thread_in_core(sibling) != 0) { in mpc85xx_smp_kexec_cpu_down()
420 while (paca_ptrs[disable_cpu]->kexec_state < KEXEC_STATE_REAL_MODE) { in mpc85xx_smp_kexec_cpu_down()
423 if (!notified && now - start > 1000000) { in mpc85xx_smp_kexec_cpu_down()
424 pr_info("%s/%d: waiting for cpu %d to enter KEXEC_STATE_REAL_MODE (%d)\n", in mpc85xx_smp_kexec_cpu_down()
427 paca_ptrs[disable_cpu]->kexec_state); in mpc85xx_smp_kexec_cpu_down()
433 pr_info("%s: cpu %d done waiting\n", in mpc85xx_smp_kexec_cpu_down()
450 if (image->type == KEXEC_TYPE_DEFAULT) in mpc85xx_smp_machine_kexec()
453 while ( (atomic_read(&kexec_down_cpus) != (num_cpus - 1)) && in mpc85xx_smp_machine_kexec()
456 timeout--; in mpc85xx_smp_machine_kexec()
460 printk(KERN_ERR "Unable to bring down secondary cpu(s)"); in mpc85xx_smp_machine_kexec()
483 np = of_find_node_by_type(NULL, "open-pic"); in mpc85xx_smp_init()