* [PATCH v4 1/5] dt-bindings: add SMP enable-method for Broadcom NSP
2015-12-01 16:24 [PATCH v4 0/5] SMP support for Broadcom NSP Kapil Hali
@ 2015-12-01 16:24 ` Kapil Hali
2015-12-01 23:06 ` Florian Fainelli
2015-12-02 15:26 ` Rob Herring
2015-12-01 16:24 ` [PATCH v4 2/5] ARM: BCM: Clean up SMP support for Broadcom Kona Kapil Hali
` (3 subsequent siblings)
4 siblings, 2 replies; 20+ messages in thread
From: Kapil Hali @ 2015-12-01 16:24 UTC (permalink / raw)
To: linux-arm-kernel
Add a compatible string "brcm,bcm-nsp-smp" for Broadcom's
Northstar Plus CPU to the 32-bit ARM CPU device tree binding
documentation file and create a new binding documentation for
Northstar Plus CPU.
Signed-off-by: Kapil Hali <kapilh@broadcom.com>
---
.../bindings/arm/bcm/brcm,nsp-cpu-method.txt | 39 ++++++++++++++++++++++
Documentation/devicetree/bindings/arm/cpus.txt | 1 +
2 files changed, 40 insertions(+)
create mode 100644 Documentation/devicetree/bindings/arm/bcm/brcm,nsp-cpu-method.txt
diff --git a/Documentation/devicetree/bindings/arm/bcm/brcm,nsp-cpu-method.txt b/Documentation/devicetree/bindings/arm/bcm/brcm,nsp-cpu-method.txt
new file mode 100644
index 0000000..bf08872
--- /dev/null
+++ b/Documentation/devicetree/bindings/arm/bcm/brcm,nsp-cpu-method.txt
@@ -0,0 +1,39 @@
+Broadcom Northstar Plus SoC CPU Enable Method
+---------------------------------------------
+This binding defines the enable method used for starting secondary
+CPUs in the following Broadcom SoCs:
+ BCM58522, BCM58525, BCM58535, BCM58622, BCM58623, BCM58625, BCM88312
+
+The enable method is specified by defining the following required
+properties in the "cpus" device tree node:
+ - enable-method = "brcm,bcm-nsp-smp";
+ - secondary-boot-reg = <...>;
+
+The secondary-boot-reg property is a u32 value that specifies the
+physical address of the register which should hold the common
+entry point for a secondary CPU. This entry is cpu node specific
+and should be added per cpu. E.g., in case of NSP (BCM58625) which
+is a dual core CPU SoC, this entry should be added to cpu1 node.
+
+
+Example:
+ cpus {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ enable-method = "brcm,bcm-nsp-smp";
+
+ cpu0: cpu at 0 {
+ device_type = "cpu";
+ compatible = "arm,cortex-a9";
+ next-level-cache = <&L2>;
+ reg = <0>;
+ };
+
+ cpu1: cpu at 1 {
+ device_type = "cpu";
+ compatible = "arm,cortex-a9";
+ next-level-cache = <&L2>;
+ reg = <1>;
+ secondary-boot-reg = <0xffff042c>;
+ };
+ };
diff --git a/Documentation/devicetree/bindings/arm/cpus.txt b/Documentation/devicetree/bindings/arm/cpus.txt
index 3a07a87..d191554 100644
--- a/Documentation/devicetree/bindings/arm/cpus.txt
+++ b/Documentation/devicetree/bindings/arm/cpus.txt
@@ -190,6 +190,7 @@ nodes to be present and contain the properties described below.
"allwinner,sun6i-a31"
"allwinner,sun8i-a23"
"arm,psci"
+ "brcm,bcm-nsp-smp"
"brcm,brahma-b15"
"marvell,armada-375-smp"
"marvell,armada-380-smp"
--
2.1.0
^ permalink raw reply related [flat|nested] 20+ messages in thread* [PATCH v4 1/5] dt-bindings: add SMP enable-method for Broadcom NSP
2015-12-01 16:24 ` [PATCH v4 1/5] dt-bindings: add SMP enable-method " Kapil Hali
@ 2015-12-01 23:06 ` Florian Fainelli
2015-12-02 15:26 ` Rob Herring
1 sibling, 0 replies; 20+ messages in thread
From: Florian Fainelli @ 2015-12-01 23:06 UTC (permalink / raw)
To: linux-arm-kernel
On 01/12/15 08:24, Kapil Hali wrote:
> Add a compatible string "brcm,bcm-nsp-smp" for Broadcom's
> Northstar Plus CPU to the 32-bit ARM CPU device tree binding
> documentation file and create a new binding documentation for
> Northstar Plus CPU.
>
> Signed-off-by: Kapil Hali <kapilh@broadcom.com>
Applied to devicetree/next, thanks!
--
Florian
^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH v4 1/5] dt-bindings: add SMP enable-method for Broadcom NSP
2015-12-01 16:24 ` [PATCH v4 1/5] dt-bindings: add SMP enable-method " Kapil Hali
2015-12-01 23:06 ` Florian Fainelli
@ 2015-12-02 15:26 ` Rob Herring
2015-12-02 16:06 ` Kapil Hali
1 sibling, 1 reply; 20+ messages in thread
From: Rob Herring @ 2015-12-02 15:26 UTC (permalink / raw)
To: linux-arm-kernel
On Tue, Dec 01, 2015 at 11:24:05AM -0500, Kapil Hali wrote:
> Add a compatible string "brcm,bcm-nsp-smp" for Broadcom's
> Northstar Plus CPU to the 32-bit ARM CPU device tree binding
> documentation file and create a new binding documentation for
> Northstar Plus CPU.
>
> Signed-off-by: Kapil Hali <kapilh@broadcom.com>
> ---
> .../bindings/arm/bcm/brcm,nsp-cpu-method.txt | 39 ++++++++++++++++++++++
> Documentation/devicetree/bindings/arm/cpus.txt | 1 +
> 2 files changed, 40 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/arm/bcm/brcm,nsp-cpu-method.txt
>
> diff --git a/Documentation/devicetree/bindings/arm/bcm/brcm,nsp-cpu-method.txt b/Documentation/devicetree/bindings/arm/bcm/brcm,nsp-cpu-method.txt
> new file mode 100644
> index 0000000..bf08872
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/arm/bcm/brcm,nsp-cpu-method.txt
> @@ -0,0 +1,39 @@
> +Broadcom Northstar Plus SoC CPU Enable Method
> +---------------------------------------------
> +This binding defines the enable method used for starting secondary
> +CPUs in the following Broadcom SoCs:
> + BCM58522, BCM58525, BCM58535, BCM58622, BCM58623, BCM58625, BCM88312
> +
> +The enable method is specified by defining the following required
> +properties in the "cpus" device tree node:
> + - enable-method = "brcm,bcm-nsp-smp";
> + - secondary-boot-reg = <...>;
Both of these are supposed to be per cpu core.
Rob
> +
> +The secondary-boot-reg property is a u32 value that specifies the
> +physical address of the register which should hold the common
> +entry point for a secondary CPU. This entry is cpu node specific
> +and should be added per cpu. E.g., in case of NSP (BCM58625) which
> +is a dual core CPU SoC, this entry should be added to cpu1 node.
> +
> +
> +Example:
> + cpus {
> + #address-cells = <1>;
> + #size-cells = <0>;
> + enable-method = "brcm,bcm-nsp-smp";
> +
> + cpu0: cpu at 0 {
> + device_type = "cpu";
> + compatible = "arm,cortex-a9";
> + next-level-cache = <&L2>;
> + reg = <0>;
> + };
> +
> + cpu1: cpu at 1 {
> + device_type = "cpu";
> + compatible = "arm,cortex-a9";
> + next-level-cache = <&L2>;
> + reg = <1>;
> + secondary-boot-reg = <0xffff042c>;
> + };
> + };
> diff --git a/Documentation/devicetree/bindings/arm/cpus.txt b/Documentation/devicetree/bindings/arm/cpus.txt
> index 3a07a87..d191554 100644
> --- a/Documentation/devicetree/bindings/arm/cpus.txt
> +++ b/Documentation/devicetree/bindings/arm/cpus.txt
> @@ -190,6 +190,7 @@ nodes to be present and contain the properties described below.
> "allwinner,sun6i-a31"
> "allwinner,sun8i-a23"
> "arm,psci"
> + "brcm,bcm-nsp-smp"
> "brcm,brahma-b15"
> "marvell,armada-375-smp"
> "marvell,armada-380-smp"
> --
> 2.1.0
>
^ permalink raw reply [flat|nested] 20+ messages in thread* [PATCH v4 1/5] dt-bindings: add SMP enable-method for Broadcom NSP
2015-12-02 15:26 ` Rob Herring
@ 2015-12-02 16:06 ` Kapil Hali
2015-12-03 21:18 ` Florian Fainelli
2015-12-06 0:52 ` Rob Herring
0 siblings, 2 replies; 20+ messages in thread
From: Kapil Hali @ 2015-12-02 16:06 UTC (permalink / raw)
To: linux-arm-kernel
Hi Rob,
On 12/2/2015 8:56 PM, Rob Herring wrote:
> On Tue, Dec 01, 2015 at 11:24:05AM -0500, Kapil Hali wrote:
>> Add a compatible string "brcm,bcm-nsp-smp" for Broadcom's
>> Northstar Plus CPU to the 32-bit ARM CPU device tree binding
>> documentation file and create a new binding documentation for
>> Northstar Plus CPU.
>>
>> Signed-off-by: Kapil Hali <kapilh@broadcom.com>
>> ---
>> .../bindings/arm/bcm/brcm,nsp-cpu-method.txt | 39 ++++++++++++++++++++++
>> Documentation/devicetree/bindings/arm/cpus.txt | 1 +
>> 2 files changed, 40 insertions(+)
>> create mode 100644 Documentation/devicetree/bindings/arm/bcm/brcm,nsp-cpu-method.txt
>>
>> diff --git a/Documentation/devicetree/bindings/arm/bcm/brcm,nsp-cpu-method.txt b/Documentation/devicetree/bindings/arm/bcm/brcm,nsp-cpu-method.txt
>> new file mode 100644
>> index 0000000..bf08872
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/arm/bcm/brcm,nsp-cpu-method.txt
>> @@ -0,0 +1,39 @@
>> +Broadcom Northstar Plus SoC CPU Enable Method
>> +---------------------------------------------
>> +This binding defines the enable method used for starting secondary
>> +CPUs in the following Broadcom SoCs:
>> + BCM58522, BCM58525, BCM58535, BCM58622, BCM58623, BCM58625, BCM88312
>> +
>> +The enable method is specified by defining the following required
>> +properties in the "cpus" device tree node:
>> + - enable-method = "brcm,bcm-nsp-smp";
>> + - secondary-boot-reg = <...>;
>
> Both of these are supposed to be per cpu core.
'enable-method' if not found in 'cpu' node is looked at in the 'cpus'
node. Except for two-three SoC families, 'enable-method' is within
'cpus' node. Is my interpretation incorrect? Did I miss anything here?
>
> Rob
>
>> +
>> +The secondary-boot-reg property is a u32 value that specifies the
>> +physical address of the register which should hold the common
>> +entry point for a secondary CPU. This entry is cpu node specific
>> +and should be added per cpu. E.g., in case of NSP (BCM58625) which
>> +is a dual core CPU SoC, this entry should be added to cpu1 node.
>> +
>> +
>> +Example:
>> + cpus {
>> + #address-cells = <1>;
>> + #size-cells = <0>;
>> + enable-method = "brcm,bcm-nsp-smp";
>> +
>> + cpu0: cpu at 0 {
>> + device_type = "cpu";
>> + compatible = "arm,cortex-a9";
>> + next-level-cache = <&L2>;
>> + reg = <0>;
>> + };
>> +
>> + cpu1: cpu at 1 {
>> + device_type = "cpu";
>> + compatible = "arm,cortex-a9";
>> + next-level-cache = <&L2>;
>> + reg = <1>;
>> + secondary-boot-reg = <0xffff042c>;
>> + };
>> + };
>> diff --git a/Documentation/devicetree/bindings/arm/cpus.txt b/Documentation/devicetree/bindings/arm/cpus.txt
>> index 3a07a87..d191554 100644
>> --- a/Documentation/devicetree/bindings/arm/cpus.txt
>> +++ b/Documentation/devicetree/bindings/arm/cpus.txt
>> @@ -190,6 +190,7 @@ nodes to be present and contain the properties described below.
>> "allwinner,sun6i-a31"
>> "allwinner,sun8i-a23"
>> "arm,psci"
>> + "brcm,bcm-nsp-smp"
>> "brcm,brahma-b15"
>> "marvell,armada-375-smp"
>> "marvell,armada-380-smp"
>> --
>> 2.1.0
>>
>
Thanks,
Kapil
^ permalink raw reply [flat|nested] 20+ messages in thread* [PATCH v4 1/5] dt-bindings: add SMP enable-method for Broadcom NSP
2015-12-02 16:06 ` Kapil Hali
@ 2015-12-03 21:18 ` Florian Fainelli
2015-12-06 0:52 ` Rob Herring
1 sibling, 0 replies; 20+ messages in thread
From: Florian Fainelli @ 2015-12-03 21:18 UTC (permalink / raw)
To: linux-arm-kernel
On 02/12/15 08:06, Kapil Hali wrote:
>>> --- /dev/null
>>> +++ b/Documentation/devicetree/bindings/arm/bcm/brcm,nsp-cpu-method.txt
>>> @@ -0,0 +1,39 @@
>>> +Broadcom Northstar Plus SoC CPU Enable Method
>>> +---------------------------------------------
>>> +This binding defines the enable method used for starting secondary
>>> +CPUs in the following Broadcom SoCs:
>>> + BCM58522, BCM58525, BCM58535, BCM58622, BCM58623, BCM58625, BCM88312
>>> +
>>> +The enable method is specified by defining the following required
>>> +properties in the "cpus" device tree node:
>>> + - enable-method = "brcm,bcm-nsp-smp";
>>> + - secondary-boot-reg = <...>;
>>
>> Both of these are supposed to be per cpu core.
>
> 'enable-method' if not found in 'cpu' node is looked at in the 'cpus'
> node. Except for two-three SoC families, 'enable-method' is within
> 'cpus' node. Is my interpretation incorrect? Did I miss anything here?
So, what do we do from here? I would appreciate a timely answer from the
DT maintainers here so we can decide on the fate of this patch series
for 4.5.
Thank you
--
Florian
^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH v4 1/5] dt-bindings: add SMP enable-method for Broadcom NSP
2015-12-02 16:06 ` Kapil Hali
2015-12-03 21:18 ` Florian Fainelli
@ 2015-12-06 0:52 ` Rob Herring
2015-12-06 18:29 ` Kapil Hali
1 sibling, 1 reply; 20+ messages in thread
From: Rob Herring @ 2015-12-06 0:52 UTC (permalink / raw)
To: linux-arm-kernel
On Wed, Dec 2, 2015 at 10:06 AM, Kapil Hali <kapilh@broadcom.com> wrote:
> Hi Rob,
>
> On 12/2/2015 8:56 PM, Rob Herring wrote:
>> On Tue, Dec 01, 2015 at 11:24:05AM -0500, Kapil Hali wrote:
>>> Add a compatible string "brcm,bcm-nsp-smp" for Broadcom's
>>> Northstar Plus CPU to the 32-bit ARM CPU device tree binding
>>> documentation file and create a new binding documentation for
>>> Northstar Plus CPU.
>>>
>>> Signed-off-by: Kapil Hali <kapilh@broadcom.com>
>>> ---
>>> .../bindings/arm/bcm/brcm,nsp-cpu-method.txt | 39 ++++++++++++++++++++++
>>> Documentation/devicetree/bindings/arm/cpus.txt | 1 +
>>> 2 files changed, 40 insertions(+)
>>> create mode 100644 Documentation/devicetree/bindings/arm/bcm/brcm,nsp-cpu-method.txt
>>>
>>> diff --git a/Documentation/devicetree/bindings/arm/bcm/brcm,nsp-cpu-method.txt b/Documentation/devicetree/bindings/arm/bcm/brcm,nsp-cpu-method.txt
>>> new file mode 100644
>>> index 0000000..bf08872
>>> --- /dev/null
>>> +++ b/Documentation/devicetree/bindings/arm/bcm/brcm,nsp-cpu-method.txt
>>> @@ -0,0 +1,39 @@
>>> +Broadcom Northstar Plus SoC CPU Enable Method
>>> +---------------------------------------------
>>> +This binding defines the enable method used for starting secondary
>>> +CPUs in the following Broadcom SoCs:
>>> + BCM58522, BCM58525, BCM58535, BCM58622, BCM58623, BCM58625, BCM88312
>>> +
>>> +The enable method is specified by defining the following required
>>> +properties in the "cpus" device tree node:
>>> + - enable-method = "brcm,bcm-nsp-smp";
>>> + - secondary-boot-reg = <...>;
>>
>> Both of these are supposed to be per cpu core.
>
> 'enable-method' if not found in 'cpu' node is looked at in the 'cpus'
> node. Except for two-three SoC families, 'enable-method' is within
> 'cpus' node. Is my interpretation incorrect? Did I miss anything here?
I'm not sure how you counted, but it is much more than 2-3 that are
correct (including all of PPC). It is quite mixed in dts files, but it
is documented to be per cpu node, so lets follow the documentation
please.
Rob
^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH v4 1/5] dt-bindings: add SMP enable-method for Broadcom NSP
2015-12-06 0:52 ` Rob Herring
@ 2015-12-06 18:29 ` Kapil Hali
0 siblings, 0 replies; 20+ messages in thread
From: Kapil Hali @ 2015-12-06 18:29 UTC (permalink / raw)
To: linux-arm-kernel
Hi Rob,
On 12/6/2015 6:22 AM, Rob Herring wrote:
> On Wed, Dec 2, 2015 at 10:06 AM, Kapil Hali <kapilh@broadcom.com> wrote:
>> Hi Rob,
>>
>> On 12/2/2015 8:56 PM, Rob Herring wrote:
>>> On Tue, Dec 01, 2015 at 11:24:05AM -0500, Kapil Hali wrote:
>>>> Add a compatible string "brcm,bcm-nsp-smp" for Broadcom's
>>>> Northstar Plus CPU to the 32-bit ARM CPU device tree binding
>>>> documentation file and create a new binding documentation for
>>>> Northstar Plus CPU.
>>>>
>>>> Signed-off-by: Kapil Hali <kapilh@broadcom.com>
>>>> ---
>>>> .../bindings/arm/bcm/brcm,nsp-cpu-method.txt | 39 ++++++++++++++++++++++
>>>> Documentation/devicetree/bindings/arm/cpus.txt | 1 +
>>>> 2 files changed, 40 insertions(+)
>>>> create mode 100644 Documentation/devicetree/bindings/arm/bcm/brcm,nsp-cpu-method.txt
>>>>
>>>> diff --git a/Documentation/devicetree/bindings/arm/bcm/brcm,nsp-cpu-method.txt b/Documentation/devicetree/bindings/arm/bcm/brcm,nsp-cpu-method.txt
>>>> new file mode 100644
>>>> index 0000000..bf08872
>>>> --- /dev/null
>>>> +++ b/Documentation/devicetree/bindings/arm/bcm/brcm,nsp-cpu-method.txt
>>>> @@ -0,0 +1,39 @@
>>>> +Broadcom Northstar Plus SoC CPU Enable Method
>>>> +---------------------------------------------
>>>> +This binding defines the enable method used for starting secondary
>>>> +CPUs in the following Broadcom SoCs:
>>>> + BCM58522, BCM58525, BCM58535, BCM58622, BCM58623, BCM58625, BCM88312
>>>> +
>>>> +The enable method is specified by defining the following required
>>>> +properties in the "cpus" device tree node:
>>>> + - enable-method = "brcm,bcm-nsp-smp";
>>>> + - secondary-boot-reg = <...>;
>>>
>>> Both of these are supposed to be per cpu core.
>>
>> 'enable-method' if not found in 'cpu' node is looked at in the 'cpus'
>> node. Except for two-three SoC families, 'enable-method' is within
>> 'cpus' node. Is my interpretation incorrect? Did I miss anything here?
>
> I'm not sure how you counted, but it is much more than 2-3 that are
> correct (including all of PPC). It is quite mixed in dts files, but it
> is documented to be per cpu node, so lets follow the documentation
> please.
>
> Rob
>
I looked at arch/arm/* and not other arch types. But, as you said, let
us keep it how it is in documentation and I have already updated latest
patch set reflecting this change.
Thanks,
Kapil
^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH v4 2/5] ARM: BCM: Clean up SMP support for Broadcom Kona
2015-12-01 16:24 [PATCH v4 0/5] SMP support for Broadcom NSP Kapil Hali
2015-12-01 16:24 ` [PATCH v4 1/5] dt-bindings: add SMP enable-method " Kapil Hali
@ 2015-12-01 16:24 ` Kapil Hali
2015-12-01 23:07 ` Florian Fainelli
2015-12-02 1:54 ` Florian Fainelli
2015-12-01 16:24 ` [PATCH v4 3/5] ARM: dts: Add SMP support for Broadcom NSP Kapil Hali
` (2 subsequent siblings)
4 siblings, 2 replies; 20+ messages in thread
From: Kapil Hali @ 2015-12-01 16:24 UTC (permalink / raw)
To: linux-arm-kernel
These changes cleans up SMP implementaion for Broadcom's
Kona SoC which are required for handling SMP for iProc
family of SoCs at a single place for BCM NSP and BCM Kona.
Signed-off-by: Kapil Hali <kapilh@broadcom.com>
---
arch/arm/boot/dts/bcm11351.dtsi | 2 +-
arch/arm/boot/dts/bcm21664.dtsi | 2 +-
arch/arm/mach-bcm/kona_smp.c | 82 +++++++++++++++++++++++++++--------------
3 files changed, 56 insertions(+), 30 deletions(-)
diff --git a/arch/arm/boot/dts/bcm11351.dtsi b/arch/arm/boot/dts/bcm11351.dtsi
index 2ddaa51..3dc7a8c 100644
--- a/arch/arm/boot/dts/bcm11351.dtsi
+++ b/arch/arm/boot/dts/bcm11351.dtsi
@@ -31,7 +31,6 @@
#address-cells = <1>;
#size-cells = <0>;
enable-method = "brcm,bcm11351-cpu-method";
- secondary-boot-reg = <0x3500417c>;
cpu0: cpu at 0 {
device_type = "cpu";
@@ -42,6 +41,7 @@
cpu1: cpu at 1 {
device_type = "cpu";
compatible = "arm,cortex-a9";
+ secondary-boot-reg = <0x3500417c>;
reg = <1>;
};
};
diff --git a/arch/arm/boot/dts/bcm21664.dtsi b/arch/arm/boot/dts/bcm21664.dtsi
index 2016b72..3f525be 100644
--- a/arch/arm/boot/dts/bcm21664.dtsi
+++ b/arch/arm/boot/dts/bcm21664.dtsi
@@ -31,7 +31,6 @@
#address-cells = <1>;
#size-cells = <0>;
enable-method = "brcm,bcm11351-cpu-method";
- secondary-boot-reg = <0x35004178>;
cpu0: cpu at 0 {
device_type = "cpu";
@@ -42,6 +41,7 @@
cpu1: cpu at 1 {
device_type = "cpu";
compatible = "arm,cortex-a9";
+ secondary-boot-reg = <0x35004178>;
reg = <1>;
};
};
diff --git a/arch/arm/mach-bcm/kona_smp.c b/arch/arm/mach-bcm/kona_smp.c
index 66a0465..15af781 100644
--- a/arch/arm/mach-bcm/kona_smp.c
+++ b/arch/arm/mach-bcm/kona_smp.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
@@ -30,9 +30,10 @@
/* Name of device node property defining secondary boot register location */
#define OF_SECONDARY_BOOT "secondary-boot-reg"
+#define MPIDR_CPUID_BITMASK 0x3
/* I/O address of register used to coordinate secondary core startup */
-static u32 secondary_boot;
+static u32 secondary_boot_addr;
/*
* Enable the Cortex A9 Snoop Control Unit
@@ -78,44 +79,68 @@ static int __init scu_a9_enable(void)
static void __init bcm_smp_prepare_cpus(unsigned int max_cpus)
{
static cpumask_t only_cpu_0 = { CPU_BITS_CPU0 };
- struct device_node *node;
+ struct device_node *cpus_node = NULL;
+ struct device_node *cpu_node = NULL;
int ret;
- BUG_ON(secondary_boot); /* We're called only once */
-
/*
* This function is only called via smp_ops->smp_prepare_cpu().
* That only happens if a "/cpus" device tree node exists
* and has an "enable-method" property that selects the SMP
* operations defined herein.
*/
- node = of_find_node_by_path("/cpus");
- BUG_ON(!node);
-
- /*
- * 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
- * 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",
- node->name);
- ret = -ENOENT; /* Arrange to disable SMP */
- goto out;
+ cpus_node = of_find_node_by_path("/cpus");
+ if (!cpus_node)
+ return;
+
+ for_each_child_of_node(cpus_node, cpu_node) {
+ u32 cpuid;
+
+ if (of_node_cmp(cpu_node->type, "cpu"))
+ continue;
+
+ if (of_property_read_u32(cpu_node, "reg", &cpuid)) {
+ pr_debug("%s: missing reg property\n",
+ cpu_node->full_name);
+ ret = -ENOENT;
+ goto out;
+ }
+
+ /*
+ * "secondary-boot-reg" property should be defined only
+ * for secondary cpu
+ */
+ if ((cpuid & MPIDR_CPUID_BITMASK) == 1) {
+ /*
+ * Our secondary enable method requires a
+ * "secondary-boot-reg" property to specify a register
+ * address used to request the ROM code boot a secondary
+ * core. If we have any trouble getting this we fall
+ * back to uniprocessor mode.
+ */
+ if (of_property_read_u32(cpu_node,
+ OF_SECONDARY_BOOT,
+ &secondary_boot_addr)) {
+ pr_warn("%s: no" OF_SECONDARY_BOOT "property\n",
+ cpu_node->name);
+ ret = -ENOENT;
+ goto out;
+ }
+ }
}
/*
- * Enable the SCU on Cortex A9 based SoCs. If -ENOENT is
+ * Enable the SCU on Cortex A9 based SoCs. If -ENOENT is
* returned, the SoC reported a uniprocessor configuration.
* We bail on any other error.
*/
ret = scu_a9_enable();
out:
- of_node_put(node);
+ of_node_put(cpu_node);
+ of_node_put(cpus_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 +164,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;
@@ -154,15 +179,16 @@ static int bcm_boot_secondary(unsigned int cpu, struct task_struct *idle)
return -EINVAL;
}
- if (!secondary_boot) {
+ if (!secondary_boot_addr) {
pr_err("required secondary boot register not specified\n");
return -EINVAL;
}
- boot_reg = ioremap_nocache((phys_addr_t)secondary_boot, sizeof(u32));
+ boot_reg = ioremap_nocache(
+ (phys_addr_t)secondary_boot_addr, sizeof(u32));
if (!boot_reg) {
pr_err("unable to map boot register for cpu %u\n", cpu_id);
- return -ENOSYS;
+ return -ENOMEM;
}
/*
@@ -191,12 +217,12 @@ 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 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);
--
2.1.0
^ permalink raw reply related [flat|nested] 20+ messages in thread* [PATCH v4 2/5] ARM: BCM: Clean up SMP support for Broadcom Kona
2015-12-01 16:24 ` [PATCH v4 2/5] ARM: BCM: Clean up SMP support for Broadcom Kona Kapil Hali
@ 2015-12-01 23:07 ` Florian Fainelli
2015-12-02 1:54 ` Florian Fainelli
1 sibling, 0 replies; 20+ messages in thread
From: Florian Fainelli @ 2015-12-01 23:07 UTC (permalink / raw)
To: linux-arm-kernel
On 01/12/15 08:24, Kapil Hali wrote:
> These changes cleans up SMP implementaion for Broadcom's
> Kona SoC which are required for handling SMP for iProc
> family of SoCs at a single place for BCM NSP and BCM Kona.
>
> Signed-off-by: Kapil Hali <kapilh@broadcom.com>
Applied to soc/next, thanks!
--
Florian
^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH v4 2/5] ARM: BCM: Clean up SMP support for Broadcom Kona
2015-12-01 16:24 ` [PATCH v4 2/5] ARM: BCM: Clean up SMP support for Broadcom Kona Kapil Hali
2015-12-01 23:07 ` Florian Fainelli
@ 2015-12-02 1:54 ` Florian Fainelli
1 sibling, 0 replies; 20+ messages in thread
From: Florian Fainelli @ 2015-12-02 1:54 UTC (permalink / raw)
To: linux-arm-kernel
On 01/12/15 08:24, Kapil Hali wrote:
> These changes cleans up SMP implementaion for Broadcom's
> Kona SoC which are required for handling SMP for iProc
> family of SoCs at a single place for BCM NSP and BCM Kona.
FWIW, I gave this patch a try on a Capri board, and this still brings-up
the two CPUs successfully:
MMC read: dev # 0, block # 114688, count 32768 ...
100% (32768/32768 blocks)
32768 blocks read: OK
## Starting application at 0x80008000 ...
Uncompressing Linux... done, booting the kernel.
[ 0.000000] Booting Linux on physical CPU 0x0
[ 0.000000] Linux version 4.4.0-rc1-00005-ge49c96ed573e
(fainelli at fainelli-desktop) (gcc version 4.
8.5 (Broadcom stbgcc-4.8-1.4) ) #605 SMP Tue Dec 1 17:53:02 PST 2015
[ 0.000000] CPU: ARMv7 Processor [413fc090] revision 0 (ARMv7),
cr=10c5387d
[ 0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing
instruction cache
[ 0.000000] Machine model: BCM28155 AP board
[ 0.000000] cma: Reserved 16 MiB at 0xbf000000
[ 0.000000] Memory policy: Data cache writealloc
[ 0.000000] PERCPU: Embedded 12 pages/cpu @ef7d3000 s18752 r8192
d22208 u49152
[ 0.000000] Built 1 zonelists in Zone order, mobility grouping on.
Total pages: 260608
[ 0.000000] Kernel command line: console=ttyS0,115200n8
[ 0.000000] PID hash table entries: 4096 (order: 2, 16384 bytes)
[ 0.000000] Dentry cache hash table entries: 131072 (order: 7, 524288
bytes)
[ 0.000000] Inode-cache hash table entries: 65536 (order: 6, 262144
bytes)
[ 0.000000] Memory: 1009696K/1048576K available (6384K kernel code,
279K rwdata, 2268K rodata, 4152
K init, 218K bss, 22496K reserved, 16384K cma-reserved, 245760K highmem)
[ 0.000000] Virtual kernel memory layout:
[ 0.000000] vector : 0xffff0000 - 0xffff1000 ( 4 kB)
[ 0.000000] fixmap : 0xffc00000 - 0xfff00000 (3072 kB)
[ 0.000000] vmalloc : 0xf0800000 - 0xff800000 ( 240 MB)
[ 0.000000] lowmem : 0xc0000000 - 0xf0000000 ( 768 MB)
[ 0.000000] pkmap : 0xbfe00000 - 0xc0000000 ( 2 MB)
[ 0.000000] modules : 0xbf000000 - 0xbfe00000 ( 14 MB)
[ 0.000000] .text : 0xc0008000 - 0xc087b694 (8654 kB)
[ 0.000000] .init : 0xc087c000 - 0xc0c8a000 (4152 kB)
[ 0.000000] .data : 0xc0c8a000 - 0xc0ccfdf8 ( 280 kB)
[ 0.000000] .bss : 0xc0cd2000 - 0xc0d08bac ( 219 kB)
[ 0.000000] Hierarchical RCU implementation.
[ 0.000000] Build-time adjustment of leaf fanout to 32.
[ 0.000000] RCU restricting CPUs from NR_CPUS=4 to nr_cpu_ids=2.
[ 0.000000] RCU: Adjusting geometry for rcu_fanout_leaf=32,
nr_cpu_ids=2
[ 0.000000] NR_IRQS:16 nr_irqs:16 16
[ 0.000000] __ccu_wait_bit: slave_ccu/0x0484 bit 18 was never set
[ 0.000000] __peri_clk_init: error initializing gate for bsc3
[ 0.000000] Broadcom slave_ccu initialization had errors
[ 0.000000] sched_clock: 32 bits at 1kHz, resolution 1000000ns, wraps
every 2147483647500000ns
[ 0.000000] Console: colour dummy device 80x30
[ 0.006000] Calibrating delay loop... 2383.87 BogoMIPS (lpj=1191936)
[ 0.006000] pid_max: default: 32768 minimum: 301
[ 0.006000] Mount-cache hash table entries: 2048 (order: 1, 8192
bytes)
[ 0.006000] Mountpoint-cache hash table entries: 2048 (order: 1, 8192
bytes)
[ 0.006000] CPU: Testing write buffer coherency: ok
[ 0.006000] CPU0: thread -1, cpu 0, socket 0, mpidr 80000000
[ 0.006000] Setting up static identity map for 0x800082c0 -
0x80008318
[ 0.015000] CPU1: thread -1, cpu 1, socket 0, mpidr 80000001
[ 0.015000] Brought up 2 CPUs
[ 0.015000] SMP: Total of 2 processors activated (7200.76 BogoMIPS).
[ 0.015000] CPU: All CPU(s) started in SVC mode.
[ 0.015000] devtmpfs: initialized
[ 0.016000] VFP support v0.3: implementor 41 architecture 3 part 30
variant 9 rev 4
[ 0.016000] clocksource: jiffies: mask: 0xffffffff max_cycles:
0xffffffff, max_idle_ns: 19112604462
75000 ns
[ 0.016000] pinctrl core: initialized pinctrl subsystem
[ 0.017000] NET: Registered protocol family 16
[ 0.017000] DMA: preallocated 256 KiB pool for atomic coherent
allocations
[ 0.023000] cpuidle: using governor ladder
[ 0.025000] cpuidle: using governor menu
[ 0.026000] Kona Secure API initialized
[ 0.026000] BCM-L2C-310 cache controller enabled, 16 ways, 512 kB
[ 0.026000] BCM-L2C-310: CACHE_ID 0x410000c8, AUX_CTRL 0x1e050000
[ 0.026000] hw-breakpoint: found 5 (+1 reserved) breakpoint and 1
watchpoint registers.
[ 0.026000] hw-breakpoint: maximum watchpoint size is 4 bytes.
[ 0.033000] SCSI subsystem initialized
[ 0.033000] usbcore: registered new interface driver usbfs
[ 0.033000] usbcore: registered new interface driver hub
[ 0.033000] usbcore: registered new device driver usb
[ 0.033000] Linux video capture interface: v2.00
[ 0.033000] pps_core: LinuxPPS API ver. 1 registered
[ 0.033000] pps_core: Software ver. 5.3.6 - Copyright 2005-2007
Rodolfo Giometti <giometti@linux.it
>
[ 0.033000] PTP clock support registered
[ 0.034000] Advanced Linux Sound Architecture Driver Initialized.
[ 0.037000] NET: Registered protocol family 2
[ 0.037000] TCP established hash table entries: 8192 (order: 3, 32768
bytes)
[ 0.038000] TCP bind hash table entries: 8192 (order: 4, 65536 bytes)
[ 0.038000] TCP: Hash tables configured (established 8192 bind 8192)
[ 0.038000] UDP hash table entries: 512 (order: 2, 16384 bytes)
[ 0.038000] UDP-Lite hash table entries: 512 (order: 2, 16384 bytes)
[ 0.038000] NET: Registered protocol family 1
[ 0.038000] RPC: Registered named UNIX socket transport module.
[ 0.038000] RPC: Registered udp transport module.
[ 0.038000] RPC: Registered tcp transport module.
[ 0.038000] RPC: Registered tcp NFSv4.1 backchannel transport module.
[ 0.114000] futex hash table entries: 512 (order: 3, 32768 bytes)
[ 0.114000] squashfs: version 4.0 (2009/01/31) Phillip Lougher
[ 0.114000] NFS: Registering the id_resolver key type
[ 0.114000] Key type id_resolver registered
[ 0.114000] Key type id_legacy registered
[ 0.114000] nfs4filelayout_init: NFSv4 File Layout Driver
Registering...
[ 0.114000] jffs2: version 2.2. (NAND) ? 2001-2006 Red Hat, Inc.
[ 0.114000] fuse init (API version 7.23)
[ 0.115000] bounce: pool size: 64 pages
[ 0.115000] Block layer SCSI generic (bsg) driver version 0.4 loaded
(major 252)
[ 0.115000] io scheduler noop registered
[ 0.115000] io scheduler deadline registered
[ 0.115000] io scheduler cfq registered (default)
[ 0.115000] bcm-kona-gpio 35003000.gpio: Setting up Kona GPIO
[ 0.138000] Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled
[ 0.139000] console [ttyS0] disabled
[ 0.139000] 3e000000.uart: ttyS0 at MMIO 0x3e000000 (irq = 17,
base_baud = 808290) is a 16550A
[ 0.415000] console [ttyS0] enabled
[ 0.421000] brd: module loaded
[ 0.423000] loop: module loaded
[ 0.424000] libphy: Fixed MDIO Bus: probed
[ 0.425000] cnic: QLogic cnicDriver v2.5.22 (July 20, 2015)
[ 0.426000] e1000e: Intel(R) PRO/1000 Network Driver - 3.2.6-k
[ 0.427000] e1000e: Copyright(c) 1999 - 2015 Intel Corporation.
[ 0.428000] pegasus: v0.9.3 (2013/04/25), Pegasus/Pegasus II USB
Ethernet driver
[ 0.429000] usbcore: registered new interface driver pegasus
[ 0.430000] usbcore: registered new interface driver asix
[ 0.431000] usbcore: registered new interface driver ax88179_178a
[ 0.432000] usbcore: registered new interface driver cdc_ether
[ 0.433000] usbcore: registered new interface driver cdc_ncm
[ 0.434000] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI)
Driver
[ 0.435000] ehci-pci: EHCI PCI platform driver
[ 0.436000] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
[ 0.437000] ohci-pci: OHCI PCI platform driver
[ 0.438000] usbcore: registered new interface driver usb-storage
[ 0.439000] mousedev: PS/2 mouse device common for all mice
[ 0.440000] i2c /dev entries driver
[ 0.441000] bcm-kona-i2c 3e016000.i2c: device registered successfully
[ 0.442000] bcm-kona-i2c 3e017000.i2c: device registered successfully
[ 0.443000] bcm-kona-i2c 3e018000.i2c: device registered successfully
[ 0.444000] bcm-kona-i2c 3500d000.i2c: device registered successfully
[ 0.445000] gspca_main: v2.14.0 registered
[ 0.446000] sdhci: Secure Digital Host Controller Interface driver
[ 0.447000] sdhci: Copyright(c) Pierre Ossman
[ 0.448000] sdhci-pltfm: SDHCI platform and OF driver helper
[ 0.452000] sdhci-kona 3f190000.sdio: No vmmc regulator found
[ 0.453000] sdhci-kona 3f190000.sdio: No vqmmc regulator found
[ 0.483000] mmc0: SDHCI controller on 3f190000.sdio [3f190000.sdio]
using ADMA
[ 0.485000] sdhci-kona 3f1b0000.sdio: Got CD GPIO
[ 0.489000] sdhci-kona 3f1b0000.sdio: No vmmc regulator found
[ 0.490000] sdhci-kona 3f1b0000.sdio: No vqmmc regulator found
[ 0.519000] mmc1: SDHCI controller on 3f1b0000.sdio [3f1b0000.sdio]
using ADMA
[ 0.520000] usbcore: registered new interface driver usbhid
[ 0.521000] usbhid: USB HID core driver
[ 0.522000] NET: Registered protocol family 17
[ 0.523000] bridge: automatic filtering via arp/ip/ip6tables has been
deprecated. Update your scrip
ts to load br_netfilter if you need this.
[ 0.524000] 8021q: 802.1Q VLAN Support v1.8
[ 0.525000] Key type dns_resolver registered
[ 0.526000] Registering SWP/SWPB emulation handler
[ 0.527000] ALSA device list:
[ 0.528000] No soundcards found.
[ 0.529000] ttyS0 - failed to request DMA
[ 0.531000] Freeing unused kernel memory: 4152K (c087c000 - c0c8a000)
starting pid 1114, tty '': '/etc/init.d/rcS'
Mounting virtual filesystems
[ 0.548000] mmc0: MAN_BKOPS_EN bit is not set
[ 0.554000] mmc0: new high speed MMC card at address 0001
[ 0.557000] mmcblk0: mmc0:0001 016G4A 14.8 GiB
[ 0.560000] mmcblk0boot0: mmc0:0001 016G4A partition 1 2.00 MiB
* WARNING: THIS STB CONTAINS GPLv3 SOFTWARE[ 0.564000] mmcblk0boot1:
mmc0:0001 016G4A partition 2 2
.00 MiB
* GPLv3 programs must be removed in order to enable security.
* See: http://www.gnu.org/licenses/gpl-faq.html#Tivoization
[ 0.570000] mmcblk0rpmb: mmc0:0001 016G4A partition 3 256 KiB
Configuring lo interface
[ 0.577000] Alternate GPT is invalid, using primary GPT.
[ 0.580000] mmcblk0: p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14
p15
Starting network services
starting pid 1211, tty '': '/bin/cttyhack /bin/sh -l'
#
# ps awwux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 22.0 0.1 1928 1244 ? Ss 00:00 0:00 init
root 2 0.0 0.0 0 0 ? S 00:00 0:00
[kthreadd]
root 3 0.0 0.0 0 0 ? S 00:00 0:00
[ksoftirqd/0]
root 4 0.0 0.0 0 0 ? S 00:00 0:00
[kworker/0:0]
root 5 0.0 0.0 0 0 ? S< 00:00 0:00
[kworker/0:0H]
root 6 0.0 0.0 0 0 ? S 00:00 0:00
[kworker/u4:0]
root 7 0.0 0.0 0 0 ? S 00:00 0:00
[rcu_sched]
root 8 0.0 0.0 0 0 ? S 00:00 0:00
[rcu_bh]
root 9 0.0 0.0 0 0 ? S 00:00 0:00
[migration/0]
root 10 0.0 0.0 0 0 ? S 00:00 0:00
[watchdog/0]
root 11 0.0 0.0 0 0 ? S 00:00 0:00
[watchdog/1]
root 12 0.0 0.0 0 0 ? S 00:00 0:00
[migration/1]
root 13 0.0 0.0 0 0 ? S 00:00 0:00
[ksoftirqd/1]
root 14 0.0 0.0 0 0 ? S 00:00 0:00
[kworker/1:0]
root 15 0.0 0.0 0 0 ? S< 00:00 0:00
[kworker/1:0H]
root 16 0.0 0.0 0 0 ? S 00:00 0:00
[kdevtmpfs]
root 17 2.0 0.0 0 0 ? S 00:00 0:00
[kworker/u4:1]
root 18 0.0 0.0 0 0 ? S< 00:00 0:00 [perf]
root 24 0.0 0.0 0 0 ? S 00:00 0:00
[kworker/u4:2]
root 248 0.0 0.0 0 0 ? S 00:00 0:00
[khungtaskd]
root 249 0.0 0.0 0 0 ? S< 00:00 0:00
[writeback]
root 250 0.0 0.0 0 0 ? S< 00:00 0:00
[crypto]
root 252 0.0 0.0 0 0 ? S< 00:00 0:00
[bioset]
root 253 0.0 0.0 0 0 ? S 00:00 0:00
[kworker/0:1]
root 254 0.0 0.0 0 0 ? S< 00:00 0:00
[kblockd]
root 256 0.0 0.0 0 0 ? S< 00:00 0:00
[ata_sff]
root 376 0.0 0.0 0 0 ? S< 00:00 0:00
[rpciod]
root 389 0.0 0.0 0 0 ? S 00:00 0:00 [kswapd0]
root 390 0.0 0.0 0 0 ? S 00:00 0:00
[fsnotify_mark]
root 391 0.0 0.0 0 0 ? S< 00:00 0:00 [nfsiod]
root 943 0.0 0.0 0 0 ? S 00:00 0:00
[kworker/1:1]
root 947 0.0 0.0 0 0 ? S< 00:00 0:00 [bioset]
root 950 0.0 0.0 0 0 ? S< 00:00 0:00 [bioset]
root 951 0.0 0.0 0 0 ? S< 00:00 0:00 [bioset]
root 952 0.0 0.0 0 0 ? S< 00:00 0:00 [bioset]
root 953 0.0 0.0 0 0 ? S< 00:00 0:00 [bioset]
root 954 0.0 0.0 0 0 ? S< 00:00 0:00 [bioset]
root 955 0.0 0.0 0 0 ? S< 00:00 0:00 [bioset]
root 956 0.0 0.0 0 0 ? S< 00:00 0:00 [bioset]
root 957 0.0 0.0 0 0 ? S< 00:00 0:00 [bioset]
root 958 0.0 0.0 0 0 ? S< 00:00 0:00 [bioset]
root 959 0.0 0.0 0 0 ? S< 00:00 0:00 [bioset]
root 960 0.0 0.0 0 0 ? S< 00:00 0:00 [bioset]
root 961 0.0 0.0 0 0 ? S< 00:00 0:00 [bioset]
root 962 0.0 0.0 0 0 ? S< 00:00 0:00 [bioset]
root 963 0.0 0.0 0 0 ? S< 00:00 0:00 [bioset]
root 964 0.0 0.0 0 0 ? S< 00:00 0:00 [bioset]
root 998 0.0 0.0 0 0 ? S< 00:00 0:00 [bioset]
root 1001 0.0 0.0 0 0 ? S< 00:00 0:00 [bioset]
root 1004 0.0 0.0 0 0 ? S< 00:00 0:00 [bioset]
root 1007 0.0 0.0 0 0 ? S< 00:00 0:00 [bioset]
root 1010 0.0 0.0 0 0 ? S< 00:00 0:00 [bioset]
root 1013 0.0 0.0 0 0 ? S< 00:00 0:00 [bioset]
root 1016 0.0 0.0 0 0 ? S< 00:00 0:00 [bioset]
root 1019 0.0 0.0 0 0 ? S< 00:00 0:00 [bioset]
root 1051 0.0 0.0 0 0 ? S< 00:00 0:00 [cnic_wq]
root 1074 0.0 0.0 0 0 ? S< 00:00 0:00 [kpsmoused]
root 1092 0.0 0.0 0 0 ? S 00:00 0:00
[irq/24-mmc0]
root 1094 0.0 0.0 0 0 ? S 00:00 0:00
[irq/25-mmc1]
root 1096 0.0 0.0 0 0 ? S 00:00 0:00
[irq/31-3f1b0000]
root 1111 0.0 0.0 0 0 ? S< 00:00 0:00 [deferwq]
root 1127 0.0 0.0 0 0 ? S< 00:00 0:00 [bioset]
root 1130 0.0 0.0 0 0 ? S 00:00 0:00 [mmcqd/0]
root 1131 0.0 0.0 0 0 ? S< 00:00 0:00 [bioset]
root 1133 0.0 0.0 0 0 ? S 00:00 0:00
[mmcqd/0boot0]
root 1134 0.0 0.0 0 0 ? S< 00:00 0:00 [bioset]
root 1137 0.0 0.0 0 0 ? S 00:00 0:00
[mmcqd/0boot1]
root 1138 0.0 0.0 0 0 ? S< 00:00 0:00 [bioset]
root 1140 0.0 0.0 0 0 ? S 00:00 0:00
[mmcqd/0rpmb]
bin 1174 0.0 0.1 1452 1072 ? Ss 00:00 0:00 portmap
root 1210 0.0 0.0 1928 56 ? Ss 00:00 0:00 telnetd
root 1211 0.0 0.1 1968 1632 ttyS0 Ss 00:00 0:00 /bin/sh -l
root 1219 0.0 0.1 1948 1124 ttyS0 R+ 00:00 0:00 ps awwux
c# cat /proc/cpuinfo
processor : 0
model name : ARMv7 Processor rev 0 (v7l)
BogoMIPS : 2383.87
Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpd32
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x3
CPU part : 0xc09
CPU revision : 0
processor : 1
model name : ARMv7 Processor rev 0 (v7l)
BogoMIPS : 4816.89
Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpd32
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x3
CPU part : 0xc09
CPU revision : 0
Hardware : BCM281xx Broadcom Application Processor
Revision : 0000
Serial : 0000000000000000
#
--
Florian
^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH v4 3/5] ARM: dts: Add SMP support for Broadcom NSP
2015-12-01 16:24 [PATCH v4 0/5] SMP support for Broadcom NSP Kapil Hali
2015-12-01 16:24 ` [PATCH v4 1/5] dt-bindings: add SMP enable-method " Kapil Hali
2015-12-01 16:24 ` [PATCH v4 2/5] ARM: BCM: Clean up SMP support for Broadcom Kona Kapil Hali
@ 2015-12-01 16:24 ` Kapil Hali
2015-12-01 23:07 ` Florian Fainelli
2015-12-01 16:24 ` [PATCH v4 4/5] ARM: BCM: " Kapil Hali
2015-12-01 16:24 ` [PATCH v4 5/5] ARM: BCM: Add SMP support for Broadcom 4708 Kapil Hali
4 siblings, 1 reply; 20+ messages in thread
From: Kapil Hali @ 2015-12-01 16:24 UTC (permalink / raw)
To: linux-arm-kernel
Add device tree changes required for providing SMP support
for Broadcom Northstar Plus SoC.
Signed-off-by: Kapil Hali <kapilh@broadcom.com>
---
arch/arm/boot/dts/bcm-nsp.dtsi | 33 +++++++++++++++++++++------------
1 file changed, 21 insertions(+), 12 deletions(-)
diff --git a/arch/arm/boot/dts/bcm-nsp.dtsi b/arch/arm/boot/dts/bcm-nsp.dtsi
index 58aca27..4c52417 100644
--- a/arch/arm/boot/dts/bcm-nsp.dtsi
+++ b/arch/arm/boot/dts/bcm-nsp.dtsi
@@ -40,24 +40,33 @@
model = "Broadcom Northstar Plus SoC";
interrupt-parent = <&gic>;
+ cpus {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ enable-method = "brcm,bcm-nsp-smp";
+
+ cpu at 0 {
+ device_type = "cpu";
+ compatible = "arm,cortex-a9";
+ next-level-cache = <&L2>;
+ reg = <0x0>;
+ };
+
+ cpu at 1 {
+ device_type = "cpu";
+ compatible = "arm,cortex-a9";
+ next-level-cache = <&L2>;
+ secondary-boot-reg = <0xffff042c>;
+ reg = <0x1>;
+ };
+ };
+
mpcore {
compatible = "simple-bus";
ranges = <0x00000000 0x19020000 0x00003000>;
#address-cells = <1>;
#size-cells = <1>;
- cpus {
- #address-cells = <1>;
- #size-cells = <0>;
-
- cpu at 0 {
- device_type = "cpu";
- compatible = "arm,cortex-a9";
- next-level-cache = <&L2>;
- reg = <0x0>;
- };
- };
-
L2: l2-cache {
compatible = "arm,pl310-cache";
reg = <0x2000 0x1000>;
--
2.1.0
^ permalink raw reply related [flat|nested] 20+ messages in thread* [PATCH v4 4/5] ARM: BCM: Add SMP support for Broadcom NSP
2015-12-01 16:24 [PATCH v4 0/5] SMP support for Broadcom NSP Kapil Hali
` (2 preceding siblings ...)
2015-12-01 16:24 ` [PATCH v4 3/5] ARM: dts: Add SMP support for Broadcom NSP Kapil Hali
@ 2015-12-01 16:24 ` Kapil Hali
2015-12-01 23:07 ` Florian Fainelli
2015-12-01 16:24 ` [PATCH v4 5/5] ARM: BCM: Add SMP support for Broadcom 4708 Kapil Hali
4 siblings, 1 reply; 20+ messages in thread
From: Kapil Hali @ 2015-12-01 16:24 UTC (permalink / raw)
To: linux-arm-kernel
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>
---
arch/arm/mach-bcm/Kconfig | 2 +
arch/arm/mach-bcm/Makefile | 8 +++-
arch/arm/mach-bcm/{kona_smp.c => platsmp.c} | 64 ++++++++++++++++++++++++++++-
3 files changed, 71 insertions(+), 3 deletions(-)
rename arch/arm/mach-bcm/{kona_smp.c => platsmp.c} (81%)
diff --git a/arch/arm/mach-bcm/Kconfig b/arch/arm/mach-bcm/Kconfig
index 8c53c55..83765a0 100644
--- a/arch/arm/mach-bcm/Kconfig
+++ b/arch/arm/mach-bcm/Kconfig
@@ -40,6 +40,8 @@ config ARCH_BCM_NSP
select ARCH_BCM_IPROC
select ARM_ERRATA_754322
select ARM_ERRATA_775420
+ select ARM_ERRATA_764369 if SMP
+ select HAVE_SMP
help
Support for Broadcom Northstar Plus SoC.
Broadcom Northstar Plus family of SoCs are used for switching control
diff --git a/arch/arm/mach-bcm/Makefile b/arch/arm/mach-bcm/Makefile
index 892261f..5193a25 100644
--- a/arch/arm/mach-bcm/Makefile
+++ b/arch/arm/mach-bcm/Makefile
@@ -14,7 +14,11 @@
obj-$(CONFIG_ARCH_BCM_CYGNUS) += bcm_cygnus.o
# Northstar Plus
-obj-$(CONFIG_ARCH_BCM_NSP) += bcm_nsp.o
+obj-$(CONFIG_ARCH_BCM_NSP) += bcm_nsp.o
+
+ifeq ($(CONFIG_ARCH_BCM_NSP),y)
+obj-$(CONFIG_SMP) += platsmp.o
+endif
# BCM281XX
obj-$(CONFIG_ARCH_BCM_281XX) += board_bcm281xx.o
@@ -23,7 +27,7 @@ obj-$(CONFIG_ARCH_BCM_281XX) += board_bcm281xx.o
obj-$(CONFIG_ARCH_BCM_21664) += board_bcm21664.o
# BCM281XX and BCM21664 SMP support
-obj-$(CONFIG_ARCH_BCM_MOBILE_SMP) += kona_smp.o
+obj-$(CONFIG_ARCH_BCM_MOBILE_SMP) += platsmp.o
# BCM281XX and BCM21664 L2 cache control
obj-$(CONFIG_ARCH_BCM_MOBILE_L2_CACHE) += kona_l2_cache.o
diff --git a/arch/arm/mach-bcm/kona_smp.c b/arch/arm/mach-bcm/platsmp.c
similarity index 81%
rename from arch/arm/mach-bcm/kona_smp.c
rename to arch/arm/mach-bcm/platsmp.c
index 15af781..ea4201e 100644
--- a/arch/arm/mach-bcm/kona_smp.c
+++ b/arch/arm/mach-bcm/platsmp.c
@@ -12,12 +12,17 @@
* 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>
@@ -76,6 +81,36 @@ 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_addr) {
+ pr_warn("required secondary boot register not specified\n");
+ return -EINVAL;
+ }
+
+ sku_rom_lut = ioremap_nocache((phys_addr_t)secondary_boot_addr,
+ sizeof(secondary_boot_addr));
+ 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 };
@@ -220,9 +255,36 @@ static int kona_boot_secondary(unsigned int cpu, struct task_struct *idle)
return -ENXIO;
}
+static int nsp_boot_secondary(unsigned int cpu, struct task_struct *idle)
+{
+ 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 = 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);
--
2.1.0
^ permalink raw reply related [flat|nested] 20+ messages in thread* [PATCH v4 4/5] ARM: BCM: Add SMP support for Broadcom NSP
2015-12-01 16:24 ` [PATCH v4 4/5] ARM: BCM: " Kapil Hali
@ 2015-12-01 23:07 ` Florian Fainelli
0 siblings, 0 replies; 20+ messages in thread
From: Florian Fainelli @ 2015-12-01 23:07 UTC (permalink / raw)
To: linux-arm-kernel
On 01/12/15 08:24, 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>
Applied to soc/next, thanks!
--
Florian
^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH v4 5/5] ARM: BCM: Add SMP support for Broadcom 4708
2015-12-01 16:24 [PATCH v4 0/5] SMP support for Broadcom NSP Kapil Hali
` (3 preceding siblings ...)
2015-12-01 16:24 ` [PATCH v4 4/5] ARM: BCM: " Kapil Hali
@ 2015-12-01 16:24 ` Kapil Hali
2015-12-01 23:07 ` Florian Fainelli
2015-12-02 15:03 ` Hauke Mehrtens
4 siblings, 2 replies; 20+ messages in thread
From: Kapil Hali @ 2015-12-01 16:24 UTC (permalink / raw)
To: linux-arm-kernel
From: Jon Mason <jonmason@broadcom.com>
Add SMP support for Broadcom's 4708 SoCs.
Signed-off-by: Jon Mason <jonmason@broadcom.com>
Acked-by: Hauke Mehrtens <hauke@hauke-m.de>
Tested-by: Hauke Mehrtens <hauke@hauke-m.de>
Signed-off-by: Kapil Hali <kapilh@broadcom.com>
---
arch/arm/boot/dts/bcm4708.dtsi | 2 ++
arch/arm/mach-bcm/Kconfig | 1 +
arch/arm/mach-bcm/Makefile | 3 +++
3 files changed, 6 insertions(+)
diff --git a/arch/arm/boot/dts/bcm4708.dtsi b/arch/arm/boot/dts/bcm4708.dtsi
index 31141e8..eed4dd1 100644
--- a/arch/arm/boot/dts/bcm4708.dtsi
+++ b/arch/arm/boot/dts/bcm4708.dtsi
@@ -15,6 +15,7 @@
cpus {
#address-cells = <1>;
#size-cells = <0>;
+ enable-method = "brcm,bcm-nsp-smp";
cpu at 0 {
device_type = "cpu";
@@ -27,6 +28,7 @@
device_type = "cpu";
compatible = "arm,cortex-a9";
next-level-cache = <&L2>;
+ secondary-boot-reg = <0xffff0400>;
reg = <0x1>;
};
};
diff --git a/arch/arm/mach-bcm/Kconfig b/arch/arm/mach-bcm/Kconfig
index 83765a0..e85246f 100644
--- a/arch/arm/mach-bcm/Kconfig
+++ b/arch/arm/mach-bcm/Kconfig
@@ -54,6 +54,7 @@ config ARCH_BCM_NSP
config ARCH_BCM_5301X
bool "Broadcom BCM470X / BCM5301X ARM SoC" if ARCH_MULTI_V7
select ARCH_BCM_IPROC
+ select HAVE_SMP
help
Support for Broadcom BCM470X and BCM5301X SoCs with ARM CPU cores.
diff --git a/arch/arm/mach-bcm/Makefile b/arch/arm/mach-bcm/Makefile
index 5193a25..7d66515 100644
--- a/arch/arm/mach-bcm/Makefile
+++ b/arch/arm/mach-bcm/Makefile
@@ -43,6 +43,9 @@ obj-$(CONFIG_ARCH_BCM2835) += board_bcm2835.o
# BCM5301X
obj-$(CONFIG_ARCH_BCM_5301X) += bcm_5301x.o
+ifeq ($(CONFIG_ARCH_BCM_5301X),y)
+obj-$(CONFIG_SMP) += platsmp.o
+endif
# BCM63XXx
ifeq ($(CONFIG_ARCH_BCM_63XX),y)
--
2.1.0
^ permalink raw reply related [flat|nested] 20+ messages in thread* [PATCH v4 5/5] ARM: BCM: Add SMP support for Broadcom 4708
2015-12-01 16:24 ` [PATCH v4 5/5] ARM: BCM: Add SMP support for Broadcom 4708 Kapil Hali
@ 2015-12-01 23:07 ` Florian Fainelli
2015-12-02 15:03 ` Hauke Mehrtens
1 sibling, 0 replies; 20+ messages in thread
From: Florian Fainelli @ 2015-12-01 23:07 UTC (permalink / raw)
To: linux-arm-kernel
On 01/12/15 08:24, Kapil Hali wrote:
> From: Jon Mason <jonmason@broadcom.com>
>
> Add SMP support for Broadcom's 4708 SoCs.
>
> Signed-off-by: Jon Mason <jonmason@broadcom.com>
> Acked-by: Hauke Mehrtens <hauke@hauke-m.de>
> Tested-by: Hauke Mehrtens <hauke@hauke-m.de>
> Signed-off-by: Kapil Hali <kapilh@broadcom.com>
Applied to soc/next, thanks!
--
Florian
^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH v4 5/5] ARM: BCM: Add SMP support for Broadcom 4708
2015-12-01 16:24 ` [PATCH v4 5/5] ARM: BCM: Add SMP support for Broadcom 4708 Kapil Hali
2015-12-01 23:07 ` Florian Fainelli
@ 2015-12-02 15:03 ` Hauke Mehrtens
2015-12-03 21:08 ` Jon Mason
1 sibling, 1 reply; 20+ messages in thread
From: Hauke Mehrtens @ 2015-12-02 15:03 UTC (permalink / raw)
To: linux-arm-kernel
On 12/01/2015 05:24 PM, Kapil Hali wrote:
> From: Jon Mason <jonmason@broadcom.com>
>
> Add SMP support for Broadcom's 4708 SoCs.
>
> Signed-off-by: Jon Mason <jonmason@broadcom.com>
> Acked-by: Hauke Mehrtens <hauke@hauke-m.de>
> Tested-by: Hauke Mehrtens <hauke@hauke-m.de>
> Signed-off-by: Kapil Hali <kapilh@broadcom.com>
> ---
> arch/arm/boot/dts/bcm4708.dtsi | 2 ++
> arch/arm/mach-bcm/Kconfig | 1 +
> arch/arm/mach-bcm/Makefile | 3 +++
> 3 files changed, 6 insertions(+)
>
> diff --git a/arch/arm/boot/dts/bcm4708.dtsi b/arch/arm/boot/dts/bcm4708.dtsi
> index 31141e8..eed4dd1 100644
> --- a/arch/arm/boot/dts/bcm4708.dtsi
> +++ b/arch/arm/boot/dts/bcm4708.dtsi
> @@ -15,6 +15,7 @@
> cpus {
> #address-cells = <1>;
> #size-cells = <0>;
> + enable-method = "brcm,bcm-nsp-smp";
>
> cpu at 0 {
> device_type = "cpu";
> @@ -27,6 +28,7 @@
> device_type = "cpu";
> compatible = "arm,cortex-a9";
> next-level-cache = <&L2>;
> + secondary-boot-reg = <0xffff0400>;
> reg = <0x1>;
> };
> };
> diff --git a/arch/arm/mach-bcm/Kconfig b/arch/arm/mach-bcm/Kconfig
> index 83765a0..e85246f 100644
> --- a/arch/arm/mach-bcm/Kconfig
> +++ b/arch/arm/mach-bcm/Kconfig
> @@ -54,6 +54,7 @@ config ARCH_BCM_NSP
> config ARCH_BCM_5301X
> bool "Broadcom BCM470X / BCM5301X ARM SoC" if ARCH_MULTI_V7
> select ARCH_BCM_IPROC
> + select HAVE_SMP
> help
> Support for Broadcom BCM470X and BCM5301X SoCs with ARM CPU cores.
>
When applying this patch please make sure it is correctly applied this
patch causes some problems here:
http://www.spinics.net/lists/arm-kernel/msg462137.html
> diff --git a/arch/arm/mach-bcm/Makefile b/arch/arm/mach-bcm/Makefile
> index 5193a25..7d66515 100644
> --- a/arch/arm/mach-bcm/Makefile
> +++ b/arch/arm/mach-bcm/Makefile
> @@ -43,6 +43,9 @@ obj-$(CONFIG_ARCH_BCM2835) += board_bcm2835.o
>
> # BCM5301X
> obj-$(CONFIG_ARCH_BCM_5301X) += bcm_5301x.o
> +ifeq ($(CONFIG_ARCH_BCM_5301X),y)
> +obj-$(CONFIG_SMP) += platsmp.o
> +endif
>
> # BCM63XXx
> ifeq ($(CONFIG_ARCH_BCM_63XX),y)
>
I am getting this on a Northstar 1 / BCM4708:
[ 0.137634] CPU0: thread -1, cpu 0, socket 0, mpidr 80000000
[ 0.143643] Setting up static identity map for 0x82a0 - 0x82d4
[ 0.189772] CPU1: thread -1, cpu 1, socket 0, mpidr 80000001
[ 0.189861] Brought up 2 CPUs
[ 0.198845] SMP: Total of 2 processors activated (3188.32 BogoMIPS).
[ 0.205446] CPU: WARNING: CPU(s) started in wrong/inconsistent modes
(primary CPU mode 0x13)
[ 0.214167] CPU: This may indicate a broken bootloader or firmware.
I assume that this is correct and the bootloader is just broken, it uses
this bootloader: "CFE for Foxconn Router version: v1.0.14", I haven't
noticed any problems, so it is ok for me.
Hauke
^ permalink raw reply [flat|nested] 20+ messages in thread* [PATCH v4 5/5] ARM: BCM: Add SMP support for Broadcom 4708
2015-12-02 15:03 ` Hauke Mehrtens
@ 2015-12-03 21:08 ` Jon Mason
2015-12-03 22:55 ` Jon Mason
0 siblings, 1 reply; 20+ messages in thread
From: Jon Mason @ 2015-12-03 21:08 UTC (permalink / raw)
To: linux-arm-kernel
On Wed, Dec 02, 2015 at 04:03:03PM +0100, Hauke Mehrtens wrote:
> On 12/01/2015 05:24 PM, Kapil Hali wrote:
> > From: Jon Mason <jonmason@broadcom.com>
> >
> > Add SMP support for Broadcom's 4708 SoCs.
> >
> > Signed-off-by: Jon Mason <jonmason@broadcom.com>
> > Acked-by: Hauke Mehrtens <hauke@hauke-m.de>
> > Tested-by: Hauke Mehrtens <hauke@hauke-m.de>
> > Signed-off-by: Kapil Hali <kapilh@broadcom.com>
> > ---
> > arch/arm/boot/dts/bcm4708.dtsi | 2 ++
> > arch/arm/mach-bcm/Kconfig | 1 +
> > arch/arm/mach-bcm/Makefile | 3 +++
> > 3 files changed, 6 insertions(+)
> >
> > diff --git a/arch/arm/boot/dts/bcm4708.dtsi b/arch/arm/boot/dts/bcm4708.dtsi
> > index 31141e8..eed4dd1 100644
> > --- a/arch/arm/boot/dts/bcm4708.dtsi
> > +++ b/arch/arm/boot/dts/bcm4708.dtsi
> > @@ -15,6 +15,7 @@
> > cpus {
> > #address-cells = <1>;
> > #size-cells = <0>;
> > + enable-method = "brcm,bcm-nsp-smp";
> >
> > cpu at 0 {
> > device_type = "cpu";
> > @@ -27,6 +28,7 @@
> > device_type = "cpu";
> > compatible = "arm,cortex-a9";
> > next-level-cache = <&L2>;
> > + secondary-boot-reg = <0xffff0400>;
> > reg = <0x1>;
> > };
> > };
> > diff --git a/arch/arm/mach-bcm/Kconfig b/arch/arm/mach-bcm/Kconfig
> > index 83765a0..e85246f 100644
> > --- a/arch/arm/mach-bcm/Kconfig
> > +++ b/arch/arm/mach-bcm/Kconfig
> > @@ -54,6 +54,7 @@ config ARCH_BCM_NSP
> > config ARCH_BCM_5301X
> > bool "Broadcom BCM470X / BCM5301X ARM SoC" if ARCH_MULTI_V7
> > select ARCH_BCM_IPROC
> > + select HAVE_SMP
> > help
> > Support for Broadcom BCM470X and BCM5301X SoCs with ARM CPU cores.
> >
>
> When applying this patch please make sure it is correctly applied this
> patch causes some problems here:
>
> http://www.spinics.net/lists/arm-kernel/msg462137.html
>
> > diff --git a/arch/arm/mach-bcm/Makefile b/arch/arm/mach-bcm/Makefile
> > index 5193a25..7d66515 100644
> > --- a/arch/arm/mach-bcm/Makefile
> > +++ b/arch/arm/mach-bcm/Makefile
> > @@ -43,6 +43,9 @@ obj-$(CONFIG_ARCH_BCM2835) += board_bcm2835.o
> >
> > # BCM5301X
> > obj-$(CONFIG_ARCH_BCM_5301X) += bcm_5301x.o
> > +ifeq ($(CONFIG_ARCH_BCM_5301X),y)
> > +obj-$(CONFIG_SMP) += platsmp.o
> > +endif
> >
> > # BCM63XXx
> > ifeq ($(CONFIG_ARCH_BCM_63XX),y)
> >
>
> I am getting this on a Northstar 1 / BCM4708:
>
> [ 0.137634] CPU0: thread -1, cpu 0, socket 0, mpidr 80000000
> [ 0.143643] Setting up static identity map for 0x82a0 - 0x82d4
> [ 0.189772] CPU1: thread -1, cpu 1, socket 0, mpidr 80000001
> [ 0.189861] Brought up 2 CPUs
> [ 0.198845] SMP: Total of 2 processors activated (3188.32 BogoMIPS).
> [ 0.205446] CPU: WARNING: CPU(s) started in wrong/inconsistent modes
> (primary CPU mode 0x13)
> [ 0.214167] CPU: This may indicate a broken bootloader or firmware.
>
> I assume that this is correct and the bootloader is just broken, it uses
> this bootloader: "CFE for Foxconn Router version: v1.0.14", I haven't
> noticed any problems, so it is ok for me.
On my 4708 SVK, I see the same issue
[ 0.090877] CPU: Testing write buffer coherency: ok
[ 0.091231] CPU0: thread -1, cpu 0, socket 0, mpidr 80000000
[ 0.091377] Setting up static identity map for 0x82a0 - 0x82f8
[ 0.130146] CPU1: thread -1, cpu 1, socket 0, mpidr 80000001
[ 0.130251] Brought up 2 CPUs
[ 0.130323] SMP: Total of 2 processors activated (3188.32 BogoMIPS).
[ 0.130345] CPU: WARNING: CPU(s) started in wrong/inconsistent modes (primary CPU mode 0x13)
[ 0.130374] CPU: This may indicate a broken bootloader or firmware.
I'll investigate it more and see if I can bottom out on the cause.
Thanks,
Jon
>
> Hauke
^ permalink raw reply [flat|nested] 20+ messages in thread* [PATCH v4 5/5] ARM: BCM: Add SMP support for Broadcom 4708
2015-12-03 21:08 ` Jon Mason
@ 2015-12-03 22:55 ` Jon Mason
0 siblings, 0 replies; 20+ messages in thread
From: Jon Mason @ 2015-12-03 22:55 UTC (permalink / raw)
To: linux-arm-kernel
On Thu, Dec 03, 2015 at 04:08:36PM -0500, Jon Mason wrote:
> On Wed, Dec 02, 2015 at 04:03:03PM +0100, Hauke Mehrtens wrote:
> > On 12/01/2015 05:24 PM, Kapil Hali wrote:
> > > From: Jon Mason <jonmason@broadcom.com>
> > >
> > > Add SMP support for Broadcom's 4708 SoCs.
> > >
> > > Signed-off-by: Jon Mason <jonmason@broadcom.com>
> > > Acked-by: Hauke Mehrtens <hauke@hauke-m.de>
> > > Tested-by: Hauke Mehrtens <hauke@hauke-m.de>
> > > Signed-off-by: Kapil Hali <kapilh@broadcom.com>
> > > ---
> > > arch/arm/boot/dts/bcm4708.dtsi | 2 ++
> > > arch/arm/mach-bcm/Kconfig | 1 +
> > > arch/arm/mach-bcm/Makefile | 3 +++
> > > 3 files changed, 6 insertions(+)
> > >
> > > diff --git a/arch/arm/boot/dts/bcm4708.dtsi b/arch/arm/boot/dts/bcm4708.dtsi
> > > index 31141e8..eed4dd1 100644
> > > --- a/arch/arm/boot/dts/bcm4708.dtsi
> > > +++ b/arch/arm/boot/dts/bcm4708.dtsi
> > > @@ -15,6 +15,7 @@
> > > cpus {
> > > #address-cells = <1>;
> > > #size-cells = <0>;
> > > + enable-method = "brcm,bcm-nsp-smp";
> > >
> > > cpu at 0 {
> > > device_type = "cpu";
> > > @@ -27,6 +28,7 @@
> > > device_type = "cpu";
> > > compatible = "arm,cortex-a9";
> > > next-level-cache = <&L2>;
> > > + secondary-boot-reg = <0xffff0400>;
> > > reg = <0x1>;
> > > };
> > > };
> > > diff --git a/arch/arm/mach-bcm/Kconfig b/arch/arm/mach-bcm/Kconfig
> > > index 83765a0..e85246f 100644
> > > --- a/arch/arm/mach-bcm/Kconfig
> > > +++ b/arch/arm/mach-bcm/Kconfig
> > > @@ -54,6 +54,7 @@ config ARCH_BCM_NSP
> > > config ARCH_BCM_5301X
> > > bool "Broadcom BCM470X / BCM5301X ARM SoC" if ARCH_MULTI_V7
> > > select ARCH_BCM_IPROC
> > > + select HAVE_SMP
> > > help
> > > Support for Broadcom BCM470X and BCM5301X SoCs with ARM CPU cores.
> > >
> >
> > When applying this patch please make sure it is correctly applied this
> > patch causes some problems here:
> >
> > http://www.spinics.net/lists/arm-kernel/msg462137.html
> >
> > > diff --git a/arch/arm/mach-bcm/Makefile b/arch/arm/mach-bcm/Makefile
> > > index 5193a25..7d66515 100644
> > > --- a/arch/arm/mach-bcm/Makefile
> > > +++ b/arch/arm/mach-bcm/Makefile
> > > @@ -43,6 +43,9 @@ obj-$(CONFIG_ARCH_BCM2835) += board_bcm2835.o
> > >
> > > # BCM5301X
> > > obj-$(CONFIG_ARCH_BCM_5301X) += bcm_5301x.o
> > > +ifeq ($(CONFIG_ARCH_BCM_5301X),y)
> > > +obj-$(CONFIG_SMP) += platsmp.o
> > > +endif
> > >
> > > # BCM63XXx
> > > ifeq ($(CONFIG_ARCH_BCM_63XX),y)
> > >
> >
> > I am getting this on a Northstar 1 / BCM4708:
> >
> > [ 0.137634] CPU0: thread -1, cpu 0, socket 0, mpidr 80000000
> > [ 0.143643] Setting up static identity map for 0x82a0 - 0x82d4
> > [ 0.189772] CPU1: thread -1, cpu 1, socket 0, mpidr 80000001
> > [ 0.189861] Brought up 2 CPUs
> > [ 0.198845] SMP: Total of 2 processors activated (3188.32 BogoMIPS).
> > [ 0.205446] CPU: WARNING: CPU(s) started in wrong/inconsistent modes
> > (primary CPU mode 0x13)
> > [ 0.214167] CPU: This may indicate a broken bootloader or firmware.
> >
> > I assume that this is correct and the bootloader is just broken, it uses
> > this bootloader: "CFE for Foxconn Router version: v1.0.14", I haven't
> > noticed any problems, so it is ok for me.
>
> On my 4708 SVK, I see the same issue
>
> [ 0.090877] CPU: Testing write buffer coherency: ok
> [ 0.091231] CPU0: thread -1, cpu 0, socket 0, mpidr 80000000
> [ 0.091377] Setting up static identity map for 0x82a0 - 0x82f8
> [ 0.130146] CPU1: thread -1, cpu 1, socket 0, mpidr 80000001
> [ 0.130251] Brought up 2 CPUs
> [ 0.130323] SMP: Total of 2 processors activated (3188.32 BogoMIPS).
> [ 0.130345] CPU: WARNING: CPU(s) started in wrong/inconsistent modes (primary CPU mode 0x13)
> [ 0.130374] CPU: This may indicate a broken bootloader or firmware.
>
> I'll investigate it more and see if I can bottom out on the cause.
I looked at previous versions of this patch, and the issue appears to
be present there as well. I'm not sure why I didn't notice it before.
I don't think "fixing" CFE is an option. Should we investigate the
possibility of setting the CPU mode of CPU1 in the early_boot of
Linux?
Thanks,
Jon
>
> Thanks,
> Jon
>
>
> >
> > Hauke
^ permalink raw reply [flat|nested] 20+ messages in thread