From: Florian Fainelli <f.fainelli@gmail.com>
To: Kapil Hali <kapilh@broadcom.com>,
Rob Herring <robh+dt@kernel.org>, Pawel Moll <pawel.moll@arm.com>,
Mark Rutland <mark.rutland@arm.com>,
Ian Campbell <ijc+devicetree@hellion.org.uk>,
Kumar Gala <galak@codeaurora.org>,
Russell King <linux@arm.linux.org.uk>,
Ray Jui <rjui@broadcom.com>,
Scott Branden <sbranden@broadcom.com>,
Jon Mason <jonmason@broadcom.com>,
Florian Fainelli <f.fainelli@gmail.com>
Cc: Gregory Fong <gregory.0xf0@gmail.com>, Lee Jones <lee@kernel.org>,
Hauke Mehrtens <hauke@hauke-m.de>,
Heiko Stuebner <heiko@sntech.de>,
Kever Yang <kever.yang@rock-chips.com>,
Maxime Ripard <maxime.ripard@free-electrons.com>,
Olof Johansson <olof@lixom.net>, Paul Walmsley <paul@pwsan.com>,
Linus Walleij <linus.walleij@linaro.org>,
Chen-Yu Tsai <wens@csie.org>,
devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org,
bcm-kernel-feedback-list@broadcom.com
Subject: Re: [PATCH RESEND v2 3/4] ARM: BCM: Add SMP support for Broadcom NSP
Date: Fri, 06 Nov 2015 11:57:01 -0800 [thread overview]
Message-ID: <563D060D.6070606@gmail.com> (raw)
In-Reply-To: <1446839371-22601-4-git-send-email-kapilh@broadcom.com>
On 06/11/15 11:49, Kapil Hali wrote:
> Add SMP support for Broadcom's Northstar Plus SoC
> cpu enable method. This changes also consolidates
> iProc family's - BCM NSP and BCM Kona, platform
> SMP handling in a common file.
>
> Northstar Plus SoC is based on ARM Cortex-A9
> revision r3p0 which requires configuration for ARM
> Errata 764369 for SMP. This change adds the needed
> configuration option.
>
> Signed-off-by: Kapil Hali <kapilh@broadcom.com>
> ---
Technically, this is not quite a RESEND, using the same git format-patch
--subject command as before maybe?
[snip]
> +#ifndef __BCM_NSP_H
> +#define __BCM_NSP_H
> +
> +extern void nsp_secondary_startup(void);
This does not appear to be needed anymore since you use the standard
secondary_boot entry point now.
> +
> +#endif /* __BCM_NSP_H */
> diff --git a/arch/arm/mach-bcm/kona_smp.c b/arch/arm/mach-bcm/platsmp.c
> similarity index 75%
> rename from arch/arm/mach-bcm/kona_smp.c
> rename to arch/arm/mach-bcm/platsmp.c
> index 66a0465..925402f 100644
> --- a/arch/arm/mach-bcm/kona_smp.c
> +++ b/arch/arm/mach-bcm/platsmp.c
> @@ -1,5 +1,5 @@
> /*
> - * Copyright (C) 2014 Broadcom Corporation
> + * Copyright (C) 2014-2015 Broadcom Corporation
> * Copyright 2014 Linaro Limited
> *
> * This program is free software; you can redistribute it and/or
> @@ -12,16 +12,23 @@
> * GNU General Public License for more details.
> */
>
> -#include <linux/init.h>
> +#include <linux/cpumask.h>
> +#include <linux/delay.h>
> #include <linux/errno.h>
> +#include <linux/init.h>
> #include <linux/io.h>
> +#include <linux/jiffies.h>
> #include <linux/of.h>
> #include <linux/sched.h>
> +#include <linux/smp.h>
>
> +#include <asm/cacheflush.h>
> #include <asm/smp.h>
> #include <asm/smp_plat.h>
> #include <asm/smp_scu.h>
>
> +#include "bcm_nsp.h"
Likewise.
> +
> /* Size of mapped Cortex A9 SCU address space */
> #define CORTEX_A9_SCU_SIZE 0x58
>
> @@ -75,6 +82,37 @@ static int __init scu_a9_enable(void)
> return 0;
> }
>
> +static int nsp_write_lut(void)
> +{
> + void __iomem *sku_rom_lut;
> + phys_addr_t secondary_startup_phy;
> +
> + if (!secondary_boot) {
> + pr_warn("required secondary boot register not specified\n");
> + return -EINVAL;
> + }
> +
> + sku_rom_lut = ioremap_nocache((phys_addr_t)secondary_boot,
> + sizeof(secondary_boot));
That looks weird to me, are not you intending to get a virtual mapping
of the SKU ROM LUT base register address here? What would
sizeof(function) return here?
> + if (!sku_rom_lut) {
> + pr_warn("unable to ioremap SKU-ROM LUT register\n");
> + return -ENOMEM;
> + }
> +
> + secondary_startup_phy = virt_to_phys(secondary_startup);
> + BUG_ON(secondary_startup_phy > (phys_addr_t)U32_MAX);
> +
> + writel_relaxed(secondary_startup_phy, sku_rom_lut);
> + /*
> + * Ensure the write is visible to the secondary core.
> + */
> + smp_wmb();
> +
> + iounmap(sku_rom_lut);
> +
> + return 0;
> +}
> +
> static void __init bcm_smp_prepare_cpus(unsigned int max_cpus)
> {
> static cpumask_t only_cpu_0 = { CPU_BITS_CPU0 };
> @@ -95,11 +133,11 @@ static void __init bcm_smp_prepare_cpus(unsigned int max_cpus)
> /*
> * Our secondary enable method requires a "secondary-boot-reg"
> * property to specify a register address used to request the
> - * ROM code boot a secondary code. If we have any trouble
> + * ROM code boot a secondary core. If we have any trouble
> * getting this we fall back to uniprocessor mode.
> */
> if (of_property_read_u32(node, OF_SECONDARY_BOOT, &secondary_boot)) {
> - pr_err("%s: missing/invalid " OF_SECONDARY_BOOT " property\n",
> + pr_warn("%s: missing/invalid " OF_SECONDARY_BOOT " property\n",
> node->name);
> ret = -ENOENT; /* Arrange to disable SMP */
> goto out;
> @@ -115,7 +153,6 @@ out:
> of_node_put(node);
> if (ret) {
> /* Update the CPU present map to reflect uniprocessor mode */
> - BUG_ON(ret != -ENOENT);
> pr_warn("disabling SMP\n");
> init_cpu_present(&only_cpu_0);
> }
> @@ -139,7 +176,7 @@ out:
> * - Wait for the secondary boot register to be re-written, which
> * indicates the secondary core has started.
> */
> -static int bcm_boot_secondary(unsigned int cpu, struct task_struct *idle)
> +static int kona_boot_secondary(unsigned int cpu, struct task_struct *idle)
> {
> void __iomem *boot_reg;
> phys_addr_t boot_func;
> @@ -162,7 +199,7 @@ static int bcm_boot_secondary(unsigned int cpu, struct task_struct *idle)
> boot_reg = ioremap_nocache((phys_addr_t)secondary_boot, sizeof(u32));
> if (!boot_reg) {
> pr_err("unable to map boot register for cpu %u\n", cpu_id);
> - return -ENOSYS;
> + return -ENOMEM;
> }
>
> /*
> @@ -191,12 +228,42 @@ static int bcm_boot_secondary(unsigned int cpu, struct task_struct *idle)
>
> pr_err("timeout waiting for cpu %u to start\n", cpu_id);
>
> - return -ENOSYS;
> + return -ENXIO;
> +}
> +
> +static int nsp_boot_secondary(unsigned int cpu, struct task_struct *idle)
> +{
> + unsigned long timeout;
This parameter is now unused.
> + int ret;
> +
> + /*
> + * After wake up, secondary core branches to the startup
> + * address programmed at SKU ROM LUT location.
> + */
> + ret = nsp_write_lut();
> + if (ret) {
> + pr_err("unable to write startup addr to SKU ROM LUT\n");
> + goto out;
> + }
> +
> + /*
> + * Send a CPU wakeup interrupt to the secondary core.
> + */
> + arch_send_wakeup_ipi_mask(cpumask_of(cpu));
> +
> +out:
> + return ret;
> }
>
> static struct smp_operations bcm_smp_ops __initdata = {
> .smp_prepare_cpus = bcm_smp_prepare_cpus,
> - .smp_boot_secondary = bcm_boot_secondary,
> + .smp_boot_secondary = kona_boot_secondary,
> };
> CPU_METHOD_OF_DECLARE(bcm_smp_bcm281xx, "brcm,bcm11351-cpu-method",
> &bcm_smp_ops);
> +
> +struct smp_operations nsp_smp_ops __initdata = {
> + .smp_prepare_cpus = bcm_smp_prepare_cpus,
> + .smp_boot_secondary = nsp_boot_secondary,
> +};
> +CPU_METHOD_OF_DECLARE(bcm_smp_nsp, "brcm,bcm-nsp-smp", &nsp_smp_ops);
>
--
Florian
next prev parent reply other threads:[~2015-11-06 19:57 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-11-06 19:49 [PATCH RESEND v2 0/4] SMP support for Broadcom NSP Kapil Hali
2015-11-06 19:49 ` [PATCH RESEND v2 1/4] dt-bindings: add SMP enable-method " Kapil Hali
2015-11-06 19:49 ` [PATCH RESEND v2 2/4] ARM: dts: add SMP support " Kapil Hali
2015-11-06 19:49 ` [PATCH RESEND v2 3/4] ARM: BCM: Add " Kapil Hali
2015-11-06 19:57 ` Florian Fainelli [this message]
2015-11-06 20:03 ` Florian Fainelli
2015-11-09 10:09 ` Linus Walleij
2015-11-10 2:29 ` Florian Fainelli
2015-11-10 16:21 ` Kapil Hali
2015-11-16 21:09 ` Linus Walleij
2015-11-06 19:49 ` [PATCH RESEND v2 4/4] ARM: BCM: Add SMP support for Broadcom 4708 Kapil Hali
2015-11-25 0:06 ` [PATCH RESEND v2 0/4] SMP support for Broadcom NSP Florian Fainelli
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=563D060D.6070606@gmail.com \
--to=f.fainelli@gmail.com \
--cc=bcm-kernel-feedback-list@broadcom.com \
--cc=devicetree@vger.kernel.org \
--cc=galak@codeaurora.org \
--cc=gregory.0xf0@gmail.com \
--cc=hauke@hauke-m.de \
--cc=heiko@sntech.de \
--cc=ijc+devicetree@hellion.org.uk \
--cc=jonmason@broadcom.com \
--cc=kapilh@broadcom.com \
--cc=kever.yang@rock-chips.com \
--cc=lee@kernel.org \
--cc=linus.walleij@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@arm.linux.org.uk \
--cc=mark.rutland@arm.com \
--cc=maxime.ripard@free-electrons.com \
--cc=olof@lixom.net \
--cc=paul@pwsan.com \
--cc=pawel.moll@arm.com \
--cc=rjui@broadcom.com \
--cc=robh+dt@kernel.org \
--cc=sbranden@broadcom.com \
--cc=wens@csie.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox