// SPDX-License-Identifier: GPL-2.0-or-later /* * Copyright 2011 Freescale Semiconductor, Inc. * Copyright 2011 Linaro Ltd. */ #include #include #include #include #include #include "common.h" /* * platform-specific code to shutdown a CPU * * Called with IRQs disabled */ void imx_cpu_die(unsigned int cpu) { v7_exit_coherency_flush(louis); /* * We use the cpu jumping argument register to sync with * imx_cpu_kill() which is running on cpu0 and waiting for * the register being cleared to kill the cpu. */ imx_set_cpu_arg(cpu, ~0); while (1) cpu_do_idle(); } int imx_cpu_kill(unsigned int cpu) { unsigned long timeout = jiffies + msecs_to_jiffies(50); while (imx_get_cpu_arg(cpu) == 0) if (time_after(jiffies, timeout)) return 0; imx_enable_cpu(cpu, false); imx_set_cpu_arg(cpu, 0); return 1; }