Hi, On Thu, Jun 25, 2015 at 03:02:50PM +0100, Vitaly Andrianov wrote: > This commit add cpu_die implementation using psci api
I don't understand. If you have a PSCI implementation, it should be sufficient to have a PSCI node (and enable-method) in your DT, and the generic code will be used. Nothing should be required in your board code. You should also use CPU_ON to bring secondaries online rather than mixing up PSCI and platform-specific mechanisms. > > Signed-off-by: Vitaly Andrianov <[email protected]> > --- > arch/arm/mach-keystone/platsmp.c | 32 ++++++++++++++++++++++++++++++++ > 1 file changed, 32 insertions(+) > > diff --git a/arch/arm/mach-keystone/platsmp.c > b/arch/arm/mach-keystone/platsmp.c > index 5f46a7c..2c40cc0 100644 > --- a/arch/arm/mach-keystone/platsmp.c > +++ b/arch/arm/mach-keystone/platsmp.c > @@ -20,6 +20,7 @@ > #include <asm/prom.h> > #include <asm/tlbflush.h> > #include <asm/pgtable.h> > +#include <asm/psci.h> > > #include "keystone.h" > > @@ -51,7 +52,38 @@ static inline void __cpuinit > keystone_smp_secondary_initmem(unsigned int cpu) > {} > #endif > > + > +#ifdef CONFIG_HOTPLUG_CPU > +static void keystone_cpu_die(unsigned int cpu) > +{ > +#ifdef CONFIG_ARM_PSCI > + struct psci_power_state pwr_state = {0, 0, 0}; > + > + pr_info("keystone_cpu_die(%d) from %d using PSCI\n", cpu, > + smp_processor_id()); > + > + if (psci_ops.cpu_off) > + psci_ops.cpu_off(pwr_state); > +#else > + /* > + * We may want to add here a direct smc call to monitor > + * if the kernel doesn't support PSCI API > + */ > +#endif You should determine this from your DT. Your FW/bootloader can patch in the relevant nodes and properties when support is present, so the presence of such nodes should guarantee that PSCI is available. > + > + /* > + * we shouldn't come here. But in case something went > + * wrong the code below prevents kernel from crush > + */ > + while (1) > + cpu_do_idle(); This will make kexec appear to work, yet it won't. Thanks, Mark. > +} > +#endif > + > struct smp_operations keystone_smp_ops __initdata = { > .smp_boot_secondary = keystone_smp_boot_secondary, > .smp_secondary_init = keystone_smp_secondary_initmem, > +#ifdef CONFIG_HOTPLUG_CPU > + .cpu_die = keystone_cpu_die, > +#endif > }; > -- > 1.9.1 > > > _______________________________________________ > linux-arm-kernel mailing list > [email protected] > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/

