diff options
author | Tony Lindgren <tony@atomide.com> | 2017-11-28 07:06:34 -0800 |
---|---|---|
committer | Tony Lindgren <tony@atomide.com> | 2017-11-28 07:06:34 -0800 |
commit | 2db57789e6612ce0cf2fcbb577a1c8307b708566 (patch) | |
tree | dd9f9e3dffabbf5cb932fcf5055ab329ca940fa0 /arch/arm/mach-bcm/platsmp.c | |
parent | f0c96c6d40312b1a76cd36709dc3eb5948c1b97f (diff) | |
parent | e9a9bb4e4779ca74cb52a6e2f8acbc0881d3bb18 (diff) |
Merge branch 'soc-fixes' into omap-for-v4.15/fixes
Diffstat (limited to 'arch/arm/mach-bcm/platsmp.c')
-rw-r--r-- | arch/arm/mach-bcm/platsmp.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/arch/arm/mach-bcm/platsmp.c b/arch/arm/mach-bcm/platsmp.c index 9e3f275934eb..7d954830eb57 100644 --- a/arch/arm/mach-bcm/platsmp.c +++ b/arch/arm/mach-bcm/platsmp.c @@ -17,6 +17,7 @@ #include <linux/errno.h> #include <linux/init.h> #include <linux/io.h> +#include <linux/irqchip/irq-bcm2836.h> #include <linux/jiffies.h> #include <linux/of.h> #include <linux/of_address.h> @@ -287,6 +288,38 @@ out: return ret; } +static int bcm2836_boot_secondary(unsigned int cpu, struct task_struct *idle) +{ + void __iomem *intc_base; + struct device_node *dn; + char *name; + + name = "brcm,bcm2836-l1-intc"; + dn = of_find_compatible_node(NULL, NULL, name); + if (!dn) { + pr_err("unable to find intc node\n"); + return -ENODEV; + } + + intc_base = of_iomap(dn, 0); + of_node_put(dn); + + if (!intc_base) { + pr_err("unable to remap intc base register\n"); + return -ENOMEM; + } + + writel(virt_to_phys(secondary_startup), + intc_base + LOCAL_MAILBOX3_SET0 + 16 * cpu); + + dsb(sy); + sev(); + + iounmap(intc_base); + + return 0; +} + static const struct smp_operations kona_smp_ops __initconst = { .smp_prepare_cpus = bcm_smp_prepare_cpus, .smp_boot_secondary = kona_boot_secondary, @@ -305,3 +338,8 @@ static const struct smp_operations nsp_smp_ops __initconst = { .smp_boot_secondary = nsp_boot_secondary, }; CPU_METHOD_OF_DECLARE(bcm_smp_nsp, "brcm,bcm-nsp-smp", &nsp_smp_ops); + +const struct smp_operations bcm2836_smp_ops __initconst = { + .smp_boot_secondary = bcm2836_boot_secondary, +}; +CPU_METHOD_OF_DECLARE(bcm_smp_bcm2836, "brcm,bcm2836-smp", &bcm2836_smp_ops); |