1 // SPDX-License-Identifier: GPL-2.0-only 1 2 /* 3 * Copyright (C) 2002 ARM Ltd. 4 * All Rights Reserved 5 * Copyright (c) 2010, 2012-2013, NVIDIA Corp 6 */ 7 8 #include <linux/clk/tegra.h> 9 #include <linux/kernel.h> 10 #include <linux/smp.h> 11 12 #include <soc/tegra/common.h> 13 #include <soc/tegra/fuse.h> 14 15 #include <asm/smp_plat.h> 16 17 #include "common.h" 18 #include "sleep.h" 19 20 static void (*tegra_hotplug_shutdown)(void); 21 22 int tegra_cpu_kill(unsigned cpu) 23 { 24 cpu = cpu_logical_map(cpu); 25 26 /* Clock gate the CPU */ 27 tegra_wait_cpu_in_reset(cpu); 28 tegra_disable_cpu_clock(cpu); 29 30 return 1; 31 } 32 33 /* 34 * platform-specific code to shutdown a CPU 35 * 36 * Called with IRQs disabled 37 */ 38 void tegra_cpu_die(unsigned int cpu) 39 { 40 if (!tegra_hotplug_shutdown) { 41 WARN(1, "hotplug is not yet in 42 return; 43 } 44 45 /* Clean L1 data cache */ 46 tegra_disable_clean_inv_dcache(TEGRA_F 47 48 /* Shut down the current CPU. */ 49 tegra_hotplug_shutdown(); 50 51 /* Should never return here. */ 52 BUG(); 53 } 54 55 static int __init tegra_hotplug_init(void) 56 { 57 if (!IS_ENABLED(CONFIG_HOTPLUG_CPU)) 58 return 0; 59 60 if (!soc_is_tegra()) 61 return 0; 62 63 if (IS_ENABLED(CONFIG_ARCH_TEGRA_2x_SO 64 tegra_hotplug_shutdown = tegra 65 if (IS_ENABLED(CONFIG_ARCH_TEGRA_3x_SO 66 tegra_hotplug_shutdown = tegra 67 if (IS_ENABLED(CONFIG_ARCH_TEGRA_114_S 68 tegra_hotplug_shutdown = tegra 69 if (IS_ENABLED(CONFIG_ARCH_TEGRA_124_S 70 tegra_hotplug_shutdown = tegra 71 72 return 0; 73 } 74 pure_initcall(tegra_hotplug_init); 75
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.