b96fc2f3c1
Now that __cpuinit has been removed, the __ref markings on these functions are useless. Remove them. This also reduces the size of the multi_v7_defconfig image: $ size before after text data bss dec hex filename 12683578 1470996 348904 14503478 dd4e36 before 12683274 1470996 348904 14503174 dd4d06 after presumably because now we don't have to jump to code in the .ref.text section and/or the noinline marking is removed. Cc: Shiraz Hashim <shiraz.linux.kernel@gmail.com> Cc: Stephen Warren <swarren@wwwdotorg.org> Cc: Alexandre Courbot <gnurou@gmail.com> Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> Cc: Will Deacon <will.deacon@arm.com> Cc: <linux-omap@vger.kernel.org> Cc: <linux-arm-msm@vger.kernel.org> Cc: <spear-devel@list.st.com> Cc: <linux-tegra@vger.kernel.org> Acked-by: Tony Lindgren <tony@atomide.com> Acked-by: Barry Song <baohua@kernel.org> Acked-by: Andy Gross <agross@codeaurora.org> Acked-by: Viresh Kumar <vireshk@kernel.org> Acked-by: Thierry Reding <thierry.reding@gmail.com> Acked-by: Linus Walleij <linus.walleij@linaro.org> Acked-by: Sudeep Holla <sudeep.holla@arm.com> Acked-by: Mark Rutland <mark.rutland@arm.com> Signed-off-by: Stephen Boyd <sboyd@codeaurora.org> Signed-off-by: Olof Johansson <olof@lixom.net>
76 lines
1.8 KiB
C
76 lines
1.8 KiB
C
/*
|
|
* Copyright (C) 2002 ARM Ltd.
|
|
* All Rights Reserved
|
|
* Copyright (c) 2010, 2012-2013, NVIDIA Corporation. All rights reserved.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 as
|
|
* published by the Free Software Foundation.
|
|
*/
|
|
|
|
#include <linux/clk/tegra.h>
|
|
#include <linux/kernel.h>
|
|
#include <linux/smp.h>
|
|
|
|
#include <soc/tegra/common.h>
|
|
#include <soc/tegra/fuse.h>
|
|
|
|
#include <asm/smp_plat.h>
|
|
|
|
#include "sleep.h"
|
|
|
|
static void (*tegra_hotplug_shutdown)(void);
|
|
|
|
int tegra_cpu_kill(unsigned cpu)
|
|
{
|
|
cpu = cpu_logical_map(cpu);
|
|
|
|
/* Clock gate the CPU */
|
|
tegra_wait_cpu_in_reset(cpu);
|
|
tegra_disable_cpu_clock(cpu);
|
|
|
|
return 1;
|
|
}
|
|
|
|
/*
|
|
* platform-specific code to shutdown a CPU
|
|
*
|
|
* Called with IRQs disabled
|
|
*/
|
|
void tegra_cpu_die(unsigned int cpu)
|
|
{
|
|
if (!tegra_hotplug_shutdown) {
|
|
WARN(1, "hotplug is not yet initialized\n");
|
|
return;
|
|
}
|
|
|
|
/* Clean L1 data cache */
|
|
tegra_disable_clean_inv_dcache(TEGRA_FLUSH_CACHE_LOUIS);
|
|
|
|
/* Shut down the current CPU. */
|
|
tegra_hotplug_shutdown();
|
|
|
|
/* Should never return here. */
|
|
BUG();
|
|
}
|
|
|
|
static int __init tegra_hotplug_init(void)
|
|
{
|
|
if (!IS_ENABLED(CONFIG_HOTPLUG_CPU))
|
|
return 0;
|
|
|
|
if (!soc_is_tegra())
|
|
return 0;
|
|
|
|
if (IS_ENABLED(CONFIG_ARCH_TEGRA_2x_SOC) && tegra_get_chip_id() == TEGRA20)
|
|
tegra_hotplug_shutdown = tegra20_hotplug_shutdown;
|
|
if (IS_ENABLED(CONFIG_ARCH_TEGRA_3x_SOC) && tegra_get_chip_id() == TEGRA30)
|
|
tegra_hotplug_shutdown = tegra30_hotplug_shutdown;
|
|
if (IS_ENABLED(CONFIG_ARCH_TEGRA_114_SOC) && tegra_get_chip_id() == TEGRA114)
|
|
tegra_hotplug_shutdown = tegra30_hotplug_shutdown;
|
|
if (IS_ENABLED(CONFIG_ARCH_TEGRA_124_SOC) && tegra_get_chip_id() == TEGRA124)
|
|
tegra_hotplug_shutdown = tegra30_hotplug_shutdown;
|
|
|
|
return 0;
|
|
}
|
|
pure_initcall(tegra_hotplug_init);
|