diff mbox

[1/2] Documentation: devicetree: arm: cpus/cpu nodes bindings updates

Message ID 1376559743-31848-2-git-send-email-lorenzo.pieralisi@arm.com (mailing list archive)
State New, archived
Headers show

Commit Message

Lorenzo Pieralisi Aug. 15, 2013, 9:42 a.m. UTC
In order to extend the current cpu nodes bindings to newer CPUs
inclusive of AArch64 and to update support for older ARM CPUs this
patch updates device tree documentation for the cpu nodes bindings.

Main changes:
    - adds 64-bit bindings
    - define usage of #address-cells
    - defines behaviour on pre and post v7 uniprocessor systems
    - adds ARM 11MPcore specific reg property definition

Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
---
 Documentation/devicetree/bindings/arm/cpus.txt | 424 ++++++++++++++++++++++---
 1 file changed, 377 insertions(+), 47 deletions(-)

Comments

Rob Herring Aug. 15, 2013, 2:32 p.m. UTC | #1
On 08/15/2013 04:42 AM, Lorenzo Pieralisi wrote:
> In order to extend the current cpu nodes bindings to newer CPUs
> inclusive of AArch64 and to update support for older ARM CPUs this
> patch updates device tree documentation for the cpu nodes bindings.
> 
> Main changes:
>     - adds 64-bit bindings
>     - define usage of #address-cells
>     - defines behaviour on pre and post v7 uniprocessor systems
>     - adds ARM 11MPcore specific reg property definition
> 
> Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
> ---
>  Documentation/devicetree/bindings/arm/cpus.txt | 424 ++++++++++++++++++++++---
>  1 file changed, 377 insertions(+), 47 deletions(-)
> 

The binding looks mostly fine to me.

[snip]

> +			    "faraday,fa526"
> +			    "intel,sa110"
> +			    "intel,sa1100"
> +			    "marvell,feroceon"
> +			    "marvell,mohawk"
> +			    "marvell,pj4"
> +			    "marvell,sheeva-v7"
> +			    "marvell,xsc3"
> +			    "marvell,xscale"

Better make sure the Marvell folks are happy with these. We don't need
another rename here. I'm too annoyed with all the renames to pay attention.

> +
> +Example 4 (ARM Cortex-A57 64-bit system running OS in AArch64):
> +

Going back to my comments that the dtb can't be dependent on the OS,
these 2 examples don't make sense.

> +
> +Example 5 (ARM Cortex-A57 64-bit system running OS in AArch32):

This example should be removed.

Rob

> +
> +cpus {
> +	#size-cells = <0>;
> +	#address-cells = <2>;
> +
> +	cpu@0 {
> +		device_type = "cpu";
> +		compatible = "arm,cortex-a57";
> +		reg = <0x0 0x0>;
> +	};
> +
> +	cpu@1 {
> +		device_type = "cpu";
> +		compatible = "arm,cortex-a57";
> +		reg = <0x0 0x1>;
> +	};
> +
> +	cpu@100 {
> +		device_type = "cpu";
> +		compatible = "arm,cortex-a57";
> +		reg = <0x0 0x100>;
> +	};
> +
> +	cpu@101 {
> +		device_type = "cpu";
> +		compatible = "arm,cortex-a57";
> +		reg = <0x0 0x101>;
> +	};
> +};
>
Lorenzo Pieralisi Aug. 15, 2013, 3:22 p.m. UTC | #2
[adding Andrew, Gregory and Thomas to check the Marvell compatible names]

On Thu, Aug 15, 2013 at 03:32:05PM +0100, Rob Herring wrote:
> On 08/15/2013 04:42 AM, Lorenzo Pieralisi wrote:
> > In order to extend the current cpu nodes bindings to newer CPUs
> > inclusive of AArch64 and to update support for older ARM CPUs this
> > patch updates device tree documentation for the cpu nodes bindings.
> > 
> > Main changes:
> >     - adds 64-bit bindings
> >     - define usage of #address-cells
> >     - defines behaviour on pre and post v7 uniprocessor systems
> >     - adds ARM 11MPcore specific reg property definition
> > 
> > Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
> > ---
> >  Documentation/devicetree/bindings/arm/cpus.txt | 424 ++++++++++++++++++++++---
> >  1 file changed, 377 insertions(+), 47 deletions(-)
> > 
> 
> The binding looks mostly fine to me.
> 
> [snip]
> 
> > +			    "faraday,fa526"
> > +			    "intel,sa110"
> > +			    "intel,sa1100"
> > +			    "marvell,feroceon"
> > +			    "marvell,mohawk"
> > +			    "marvell,pj4"
> > +			    "marvell,sheeva-v7"
> > +			    "marvell,xsc3"
> > +			    "marvell,xscale"
> 
> Better make sure the Marvell folks are happy with these. We don't need
> another rename here. I'm too annoyed with all the renames to pay attention.

Ok, I will verify that, I copied maintainers in.

On a side note I have just noticed that last cycle some dts were merged in the
kernel with cpu nodes that are not compliant (not picking on anyone,
eg am4372.dtsi).
Please prevent this from happening from now onwards, really please.

> > +
> > +Example 4 (ARM Cortex-A57 64-bit system running OS in AArch64):
> > +
> 
> Going back to my comments that the dtb can't be dependent on the OS,
> these 2 examples don't make sense.

Gah, my bad sorry, I missed the examples while removing dependency on the OS
from the bindings.

> > +
> > +Example 5 (ARM Cortex-A57 64-bit system running OS in AArch32):
> 
> This example should be removed.

Yes, consider it done, see above.

Thanks,
Lorenzo
Stephen Warren Aug. 16, 2013, 11:15 p.m. UTC | #3
On 08/15/2013 03:42 AM, Lorenzo Pieralisi wrote:
> In order to extend the current cpu nodes bindings to newer CPUs
> inclusive of AArch64 and to update support for older ARM CPUs this
> patch updates device tree documentation for the cpu nodes bindings.

At a brief glance, I have no particular issues with this binding.
However, it'd be best if one of the DT bindings reviewers who worked for
ARM gave the ack.
Afzal Mohammed Aug. 19, 2013, 10:34 a.m. UTC | #4
Hi Lorenzo,

On Thursday 15 August 2013 08:52 PM, Lorenzo Pieralisi wrote:

> On a side note I have just noticed that last cycle some dts were merged in the
> kernel with cpu nodes that are not compliant (not picking on anyone,

> eg am4372.dtsi).

mea culpa

am4372.dtsi was posted early in last cycle and started it's journey
towards mainline after quite sometime. iirc, am4372 was posted around
the time cpu node update was on the lists.

The relevant silicon is in pre-silicon stage, I was going back & forth
on whether patches to fix it should go in -rc's or the coming merge
window, finally settled for next merge window as am43x won't boot on
mainline with last Kernel version.

The patches to fix cpu nodes in am4372 has been posted, acked by Mark
Rutland, hopefully would make into mainline this merge window.

Regards
Afzal
Grant Likely Aug. 28, 2013, 7:45 p.m. UTC | #5
On Thu, 15 Aug 2013 10:42:22 +0100, Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> wrote:
> +=====================================
> +cpus and cpu node bindings definition
> +=====================================
> +
> +The ARM architecture, in accordance with the ePAPR, requires the cpus and cpu
> +nodes to be present and contain the properties described below.
> +
> +- cpus node
> +
> +	Description: Container of cpu nodes
> +
> +	The node name must be "cpus".
> +
> +	A cpus node must define the following properties:
> +
> +	- #address-cells
> +		Usage: required
> +		Value type: <u32>
> +
> +		Definition depends on ARM architecture version and
> +		configuration:
> +
> +			# On uniprocessor ARM architectures previous to v7
> +			  value must be 0, since they have no register
> +			  providing CPU identification.

Just clued into this point from the other thread; Don't do this.
Uniprocessor should follow the same rules as 32bit or 64bit for the
value of #address-cells, and cpu nodes should have a reg property, even
if it is merely set to '0'.

g.
Lorenzo Pieralisi Sept. 13, 2013, 4:57 p.m. UTC | #6
Hi Rob, all,

On Thu, Aug 15, 2013 at 04:22:38PM +0100, Lorenzo Pieralisi wrote:
> [adding Andrew, Gregory and Thomas to check the Marvell compatible names]
> 
> On Thu, Aug 15, 2013 at 03:32:05PM +0100, Rob Herring wrote:
> > On 08/15/2013 04:42 AM, Lorenzo Pieralisi wrote:
> > > In order to extend the current cpu nodes bindings to newer CPUs
> > > inclusive of AArch64 and to update support for older ARM CPUs this
> > > patch updates device tree documentation for the cpu nodes bindings.
> > > 
> > > Main changes:
> > >     - adds 64-bit bindings
> > >     - define usage of #address-cells
> > >     - defines behaviour on pre and post v7 uniprocessor systems
> > >     - adds ARM 11MPcore specific reg property definition
> > > 
> > > Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
> > > ---
> > >  Documentation/devicetree/bindings/arm/cpus.txt | 424 ++++++++++++++++++++++---
> > >  1 file changed, 377 insertions(+), 47 deletions(-)
> > > 
> > 
> > The binding looks mostly fine to me.

These bindings have still not received an ACK, and need review by
Marvell guys in copy for the new compatible strings below.

Most importantly, we need to make a decision on the pre v7 uniprocessor
systems, where MPIDR/CPUID are non-existent and the reg property is a
pure SW enumeration. Current bindings (ie this patch) define

#address-cells = <0>;

for those processors (and there are a number of dts in the kernel with that
set-up); Grant and Benjamin had a strong feeling against this choice, I
have to make a decision on how to proceed, please let me know.

Comments welcome.

Lorenzo

> > 
> > [snip]
> > 
> > > +			    "faraday,fa526"
> > > +			    "intel,sa110"
> > > +			    "intel,sa1100"
> > > +			    "marvell,feroceon"
> > > +			    "marvell,mohawk"
> > > +			    "marvell,pj4"
> > > +			    "marvell,sheeva-v7"
> > > +			    "marvell,xsc3"
> > > +			    "marvell,xscale"
> > 
> > Better make sure the Marvell folks are happy with these. We don't need
> > another rename here. I'm too annoyed with all the renames to pay attention.
> 
> Ok, I will verify that, I copied maintainers in.
> 
> On a side note I have just noticed that last cycle some dts were merged in the
> kernel with cpu nodes that are not compliant (not picking on anyone,
> eg am4372.dtsi).
> Please prevent this from happening from now onwards, really please.
> 
> > > +
> > > +Example 4 (ARM Cortex-A57 64-bit system running OS in AArch64):
> > > +
> > 
> > Going back to my comments that the dtb can't be dependent on the OS,
> > these 2 examples don't make sense.
> 
> Gah, my bad sorry, I missed the examples while removing dependency on the OS
> from the bindings.
> 
> > > +
> > > +Example 5 (ARM Cortex-A57 64-bit system running OS in AArch32):
> > 
> > This example should be removed.
> 
> Yes, consider it done, see above.
> 
> Thanks,
> Lorenzo
> 
> --
> To unsubscribe from this list: send the line "unsubscribe devicetree" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>
Rob Herring Sept. 13, 2013, 8:51 p.m. UTC | #7
On 09/13/2013 11:57 AM, Lorenzo Pieralisi wrote:
> Hi Rob, all,
> 
> On Thu, Aug 15, 2013 at 04:22:38PM +0100, Lorenzo Pieralisi wrote:
>> [adding Andrew, Gregory and Thomas to check the Marvell compatible names]
>>
>> On Thu, Aug 15, 2013 at 03:32:05PM +0100, Rob Herring wrote:
>>> On 08/15/2013 04:42 AM, Lorenzo Pieralisi wrote:
>>>> In order to extend the current cpu nodes bindings to newer CPUs
>>>> inclusive of AArch64 and to update support for older ARM CPUs this
>>>> patch updates device tree documentation for the cpu nodes bindings.
>>>>
>>>> Main changes:
>>>>     - adds 64-bit bindings
>>>>     - define usage of #address-cells
>>>>     - defines behaviour on pre and post v7 uniprocessor systems
>>>>     - adds ARM 11MPcore specific reg property definition
>>>>
>>>> Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
>>>> ---
>>>>  Documentation/devicetree/bindings/arm/cpus.txt | 424 ++++++++++++++++++++++---
>>>>  1 file changed, 377 insertions(+), 47 deletions(-)
>>>>
>>>
>>> The binding looks mostly fine to me.
> 
> These bindings have still not received an ACK, and need review by
> Marvell guys in copy for the new compatible strings below.

If you can't get comment, then leave them out if they are not used
already. If they are used, then tough shit when they want to change.

> 
> Most importantly, we need to make a decision on the pre v7 uniprocessor
> systems, where MPIDR/CPUID are non-existent and the reg property is a
> pure SW enumeration. Current bindings (ie this patch) define
> 
> #address-cells = <0>;
> 
> for those processors (and there are a number of dts in the kernel with that
> set-up); Grant and Benjamin had a strong feeling against this choice, I
> have to make a decision on how to proceed, please let me know.

I agree that we should define #address-cells to 1 and reg will be simply
0,1,2,etc. in this case.

This change and fixing the example as I pointed out are what I was
waiting to see.

Rob

> 
> Comments welcome.
> 
> Lorenzo
> 
>>>
>>> [snip]
>>>
>>>> +			    "faraday,fa526"
>>>> +			    "intel,sa110"
>>>> +			    "intel,sa1100"
>>>> +			    "marvell,feroceon"
>>>> +			    "marvell,mohawk"
>>>> +			    "marvell,pj4"
>>>> +			    "marvell,sheeva-v7"
>>>> +			    "marvell,xsc3"
>>>> +			    "marvell,xscale"
>>>
>>> Better make sure the Marvell folks are happy with these. We don't need
>>> another rename here. I'm too annoyed with all the renames to pay attention.
>>
>> Ok, I will verify that, I copied maintainers in.
>>
>> On a side note I have just noticed that last cycle some dts were merged in the
>> kernel with cpu nodes that are not compliant (not picking on anyone,
>> eg am4372.dtsi).
>> Please prevent this from happening from now onwards, really please.
>>
>>>> +
>>>> +Example 4 (ARM Cortex-A57 64-bit system running OS in AArch64):
>>>> +
>>>
>>> Going back to my comments that the dtb can't be dependent on the OS,
>>> these 2 examples don't make sense.
>>
>> Gah, my bad sorry, I missed the examples while removing dependency on the OS
>> from the bindings.
>>
>>>> +
>>>> +Example 5 (ARM Cortex-A57 64-bit system running OS in AArch32):
>>>
>>> This example should be removed.
>>
>> Yes, consider it done, see above.
>>
>> Thanks,
>> Lorenzo
>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe devicetree" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>>
>
Andrew Lunn Sept. 14, 2013, 7:49 a.m. UTC | #8
On Fri, Sep 13, 2013 at 03:51:56PM -0500, Rob Herring wrote:
> On 09/13/2013 11:57 AM, Lorenzo Pieralisi wrote:
> > Hi Rob, all,
> > 
> > On Thu, Aug 15, 2013 at 04:22:38PM +0100, Lorenzo Pieralisi wrote:
> >> [adding Andrew, Gregory and Thomas to check the Marvell compatible names]
> >>
> >> On Thu, Aug 15, 2013 at 03:32:05PM +0100, Rob Herring wrote:
> >>> On 08/15/2013 04:42 AM, Lorenzo Pieralisi wrote:
> >>>> In order to extend the current cpu nodes bindings to newer CPUs
> >>>> inclusive of AArch64 and to update support for older ARM CPUs this
> >>>> patch updates device tree documentation for the cpu nodes bindings.
> >>>>
> >>>> Main changes:
> >>>>     - adds 64-bit bindings
> >>>>     - define usage of #address-cells
> >>>>     - defines behaviour on pre and post v7 uniprocessor systems
> >>>>     - adds ARM 11MPcore specific reg property definition
> >>>>
> >>>> Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
> >>>> ---
> >>>>  Documentation/devicetree/bindings/arm/cpus.txt | 424 ++++++++++++++++++++++---
> >>>>  1 file changed, 377 insertions(+), 47 deletions(-)
> >>>>
> >>>
> >>> The binding looks mostly fine to me.
> > 
> > These bindings have still not received an ACK, and need review by
> > Marvell guys in copy for the new compatible strings below.
> 
> If you can't get comment, then leave them out if they are not used
> already. If they are used, then tough shit when they want to change.

Hi Rob

We are working on it. Hope to be able to comment soon.

   Andrew
Andrew Lunn Sept. 15, 2013, 8:36 a.m. UTC | #9
> > > > +			    "faraday,fa526"
> > > > +			    "intel,sa110"
> > > > +			    "intel,sa1100"
> > > > +			    "marvell,feroceon"
> > > > +			    "marvell,mohawk"
> > > > +			    "marvell,pj4"
> > > > +			    "marvell,sheeva-v7"
> > > > +			    "marvell,xsc3"
> > > > +			    "marvell,xscale"
> > > 
> > > Better make sure the Marvell folks are happy with these. We don't need
> > > another rename here. I'm too annoyed with all the renames to pay attention.
> > 
> > Ok, I will verify that, I copied maintainers in.

Hi Lorenzo

Here are the compatibility strings we would like, and a comment about
which SoCs will/do use them.

"marvell,feroceon"  - Orion5x
"marvell,sheeva-v5" - Mv78xx0, Kirkwood
"marvell,pj4a"      - Dove
"marvell,pj4b"      - Armada XP, Armada 370, Armada 1500
"marvell,mohawk"    - Armada 100

"marvell,xscale" & "marvell,xsc3" should be removed.

The compatibility strings are not correct, or present in all the
current <soc>.dtsi files. 

orion5x cpus needs adding.
mv78xx0 needs adding.
kirkwood.dtsi needs changing.
armada-370-xp.dtsi need changing.
armada-xp-mv*.dtsi needs changing.

We will deal with these in the next cycle.

Thanks
        Andrew
Lorenzo Pieralisi Sept. 16, 2013, 8:55 a.m. UTC | #10
On Fri, Sep 13, 2013 at 09:51:56PM +0100, Rob Herring wrote:
> On 09/13/2013 11:57 AM, Lorenzo Pieralisi wrote:
> > Hi Rob, all,
> > 
> > On Thu, Aug 15, 2013 at 04:22:38PM +0100, Lorenzo Pieralisi wrote:
> >> [adding Andrew, Gregory and Thomas to check the Marvell compatible names]
> >>
> >> On Thu, Aug 15, 2013 at 03:32:05PM +0100, Rob Herring wrote:
> >>> On 08/15/2013 04:42 AM, Lorenzo Pieralisi wrote:
> >>>> In order to extend the current cpu nodes bindings to newer CPUs
> >>>> inclusive of AArch64 and to update support for older ARM CPUs this
> >>>> patch updates device tree documentation for the cpu nodes bindings.
> >>>>
> >>>> Main changes:
> >>>>     - adds 64-bit bindings
> >>>>     - define usage of #address-cells
> >>>>     - defines behaviour on pre and post v7 uniprocessor systems
> >>>>     - adds ARM 11MPcore specific reg property definition
> >>>>
> >>>> Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
> >>>> ---
> >>>>  Documentation/devicetree/bindings/arm/cpus.txt | 424 ++++++++++++++++++++++---
> >>>>  1 file changed, 377 insertions(+), 47 deletions(-)
> >>>>
> >>>
> >>> The binding looks mostly fine to me.
> > 
> > These bindings have still not received an ACK, and need review by
> > Marvell guys in copy for the new compatible strings below.
> 
> If you can't get comment, then leave them out if they are not used
> already. If they are used, then tough shit when they want to change.
> 
> > 
> > Most importantly, we need to make a decision on the pre v7 uniprocessor
> > systems, where MPIDR/CPUID are non-existent and the reg property is a
> > pure SW enumeration. Current bindings (ie this patch) define
> > 
> > #address-cells = <0>;
> > 
> > for those processors (and there are a number of dts in the kernel with that
> > set-up); Grant and Benjamin had a strong feeling against this choice, I
> > have to make a decision on how to proceed, please let me know.
> 
> I agree that we should define #address-cells to 1 and reg will be simply
> 0,1,2,etc. in this case.

Ok, so this means that when these bindings are finally acked and queued
for merging, there will be a slew of dts in the kernel that will need
patching (again) and this is likely to ruffle feathers. Honestly I would
leave this task to platform maintainers, if we all agree.

> This change and fixing the example as I pointed out are what I was
> waiting to see.

Perfect, given that I got feedback from Andrew, I will be posting a
final version very soon.

Lorenzo
Lorenzo Pieralisi Sept. 16, 2013, 8:57 a.m. UTC | #11
On Sun, Sep 15, 2013 at 09:36:58AM +0100, Andrew Lunn wrote:
> > > > > +			    "faraday,fa526"
> > > > > +			    "intel,sa110"
> > > > > +			    "intel,sa1100"
> > > > > +			    "marvell,feroceon"
> > > > > +			    "marvell,mohawk"
> > > > > +			    "marvell,pj4"
> > > > > +			    "marvell,sheeva-v7"
> > > > > +			    "marvell,xsc3"
> > > > > +			    "marvell,xscale"
> > > > 
> > > > Better make sure the Marvell folks are happy with these. We don't need
> > > > another rename here. I'm too annoyed with all the renames to pay attention.
> > > 
> > > Ok, I will verify that, I copied maintainers in.
> 
> Hi Lorenzo
> 
> Here are the compatibility strings we would like, and a comment about
> which SoCs will/do use them.
> 
> "marvell,feroceon"  - Orion5x
> "marvell,sheeva-v5" - Mv78xx0, Kirkwood
> "marvell,pj4a"      - Dove
> "marvell,pj4b"      - Armada XP, Armada 370, Armada 1500
> "marvell,mohawk"    - Armada 100
> 
> "marvell,xscale" & "marvell,xsc3" should be removed.
> 
> The compatibility strings are not correct, or present in all the
> current <soc>.dtsi files. 
> 
> orion5x cpus needs adding.
> mv78xx0 needs adding.
> kirkwood.dtsi needs changing.
> armada-370-xp.dtsi need changing.
> armada-xp-mv*.dtsi needs changing.
> 
> We will deal with these in the next cycle.

Thank you very much Andrew, appreciated. I will update the document
accordingly and should be able to post a final version very soon.

Lorenzo
diff mbox

Patch

diff --git a/Documentation/devicetree/bindings/arm/cpus.txt b/Documentation/devicetree/bindings/arm/cpus.txt
index f32494d..5e62a92 100644
--- a/Documentation/devicetree/bindings/arm/cpus.txt
+++ b/Documentation/devicetree/bindings/arm/cpus.txt
@@ -1,77 +1,407 @@ 
-* ARM CPUs binding description
+=================
+ARM CPUs bindings
+=================
 
 The device tree allows to describe the layout of CPUs in a system through
 the "cpus" node, which in turn contains a number of subnodes (ie "cpu")
 defining properties for every cpu.
 
-Bindings for CPU nodes follow the ePAPR standard, available from:
-
-http://devicetree.org
-
-For the ARM architecture every CPU node must contain the following properties:
-
-- device_type:	must be "cpu"
-- reg:		property matching the CPU MPIDR[23:0] register bits
-		reg[31:24] bits must be set to 0
-- compatible:	should be one of:
-		"arm,arm1020"
-		"arm,arm1020e"
-		"arm,arm1022"
-		"arm,arm1026"
-		"arm,arm720"
-		"arm,arm740"
-		"arm,arm7tdmi"
-		"arm,arm920"
-		"arm,arm922"
-		"arm,arm925"
-		"arm,arm926"
-		"arm,arm940"
-		"arm,arm946"
-		"arm,arm9tdmi"
-		"arm,cortex-a5"
-		"arm,cortex-a7"
-		"arm,cortex-a8"
-		"arm,cortex-a9"
-		"arm,cortex-a15"
-		"arm,arm1136"
-		"arm,arm1156"
-		"arm,arm1176"
-		"arm,arm11mpcore"
-		"faraday,fa526"
-		"intel,sa110"
-		"intel,sa1100"
-		"marvell,feroceon"
-		"marvell,mohawk"
-		"marvell,xsc3"
-		"marvell,xscale"
-
-Example:
+Bindings for CPU nodes follow the ePAPR v1.1 standard, available from:
+
+https://www.power.org/documentation/epapr-version-1-1/
+
+with updates for 32-bit and 64-bit ARM systems provided in this document.
+
+================================
+Convention used in this document
+================================
+
+This document follows the conventions described in the ePAPR v1.1, with
+the addition:
+
+- square brackets define bitfields, eg reg[7:0] value of the bitfield in
+  the reg property contained in bits 7 down to 0
+
+=====================================
+cpus and cpu node bindings definition
+=====================================
+
+The ARM architecture, in accordance with the ePAPR, requires the cpus and cpu
+nodes to be present and contain the properties described below.
+
+- cpus node
+
+	Description: Container of cpu nodes
+
+	The node name must be "cpus".
+
+	A cpus node must define the following properties:
+
+	- #address-cells
+		Usage: required
+		Value type: <u32>
+
+		Definition depends on ARM architecture version and
+		configuration:
+
+			# On uniprocessor ARM architectures previous to v7
+			  value must be 0, since they have no register
+			  providing CPU identification.
+			# On 32-bit ARM 11 MPcore, ARM v7 or later systems
+			  value must be 1, that corresponds to CPUID/MPIDR
+			  registers sizes.
+			# On ARM v8 64-bit systems value must be set to 2,
+			  that corresponds to the MPIDR_EL1 register size.
+
+	- #size-cells
+		Usage: required
+		Value type: <u32>
+		Definition: must be set to 0
+
+- cpu node
+
+	Description: Describes a CPU in an ARM based system
+
+	PROPERTIES
+
+	- device_type
+		Usage: required
+		Value type: <string>
+		Definition: must be "cpu"
+	- reg
+		Usage and definition depend on ARM architecture version and
+		configuration:
+
+			# On uniprocessor ARM architectures previous to v7
+			  this property is optional since they do not define
+			  any register that provides a CPU identifier.
+			  Any value set in the reg property for these CPUs
+			  should be ignored.
+
+			# On ARM 11 MPcore based systems this property is
+			  required and matches the CPUID[11:0] register bits.
+
+			  Bits [11:0] in the reg cell must be set to
+			  bits [11:0] in CPU ID register.
+
+			  All other bits in the reg cell must be set to 0.
+
+			# On 32-bit ARM v7 or later systems this property is
+			  required and matches the CPU MPIDR[23:0] register
+			  bits.
+
+			  Bits [23:0] in the reg cell must be set to
+			  bits [23:0] in MPIDR.
+
+			  All other bits in the reg cell must be set to 0.
+
+			# On ARM v8 64-bit systems this property is required
+			  and matches the MPIDR_EL1 register affinity bits:
+
+			  The first reg cell bits [7:0] must be set to
+			  bits [39:32] of MPIDR_EL1.
+
+			  The second reg cell bits [23:0] must be set to
+			  bits [23:0] of MPIDR_EL1.
+
+			  All other bits in the reg cells must be set to 0.
+
+	- compatible:
+		Usage: required
+		Value type: <string>
+		Definition: should be one of:
+			    "arm,arm710t"
+			    "arm,arm720t"
+			    "arm,arm740t"
+			    "arm,arm7ej-s"
+			    "arm,arm7tdmi"
+			    "arm,arm7tdmi-s"
+			    "arm,arm9es"
+			    "arm,arm9ej-s"
+			    "arm,arm920t"
+			    "arm,arm922t"
+			    "arm,arm925"
+			    "arm,arm926e-s"
+			    "arm,arm926ej-s"
+			    "arm,arm940t"
+			    "arm,arm946e-s"
+			    "arm,arm966e-s"
+			    "arm,arm968e-s"
+			    "arm,arm9tdmi"
+			    "arm,arm1020e"
+			    "arm,arm1020t"
+			    "arm,arm1022e"
+			    "arm,arm1026ej-s"
+			    "arm,arm1136j-s"
+			    "arm,arm1136jf-s"
+			    "arm,arm1156t2-s"
+			    "arm,arm1156t2f-s"
+			    "arm,arm1176jzf"
+			    "arm,arm1176jz-s"
+			    "arm,arm1176jzf-s"
+			    "arm,arm11mpcore"
+			    "arm,cortex-a5"
+			    "arm,cortex-a7"
+			    "arm,cortex-a8"
+			    "arm,cortex-a9"
+			    "arm,cortex-a15"
+			    "arm,cortex-a53"
+			    "arm,cortex-a57"
+			    "arm,cortex-m0"
+			    "arm,cortex-m0+"
+			    "arm,cortex-m1"
+			    "arm,cortex-m3"
+			    "arm,cortex-m4"
+			    "arm,cortex-r4"
+			    "arm,cortex-r5"
+			    "arm,cortex-r7"
+			    "faraday,fa526"
+			    "intel,sa110"
+			    "intel,sa1100"
+			    "marvell,feroceon"
+			    "marvell,mohawk"
+			    "marvell,pj4"
+			    "marvell,sheeva-v7"
+			    "marvell,xsc3"
+			    "marvell,xscale"
+			    "qcom,krait"
+			    "qcom,scorpion"
+	- enable-method
+		Value type: <stringlist>
+		Usage and definition depend on ARM architecture version.
+			# On ARM v8 64-bit this property is required and must
+			  be one of:
+			     "spin-table"
+			     "psci"
+			# On ARM 32-bit system this property is optional.
+
+	- cpu-release-addr
+		Usage: required for systems that have an "enable-method"
+		       property value of "spin-table".
+		Value type: <prop-encoded-array>
+		Definition:
+			# On ARM v8 64-bit systems must be a two cell
+			  property identifying a 64-bit zero-initialised
+			  memory location.
+
+Example 1 (dual-cluster big.LITTLE system 32-bit):
 
 	cpus {
 		#size-cells = <0>;
 		#address-cells = <1>;
 
-		CPU0: cpu@0 {
+		cpu@0 {
 			device_type = "cpu";
 			compatible = "arm,cortex-a15";
 			reg = <0x0>;
 		};
 
-		CPU1: cpu@1 {
+		cpu@1 {
 			device_type = "cpu";
 			compatible = "arm,cortex-a15";
 			reg = <0x1>;
 		};
 
-		CPU2: cpu@100 {
+		cpu@100 {
 			device_type = "cpu";
 			compatible = "arm,cortex-a7";
 			reg = <0x100>;
 		};
 
-		CPU3: cpu@101 {
+		cpu@101 {
 			device_type = "cpu";
 			compatible = "arm,cortex-a7";
 			reg = <0x101>;
 		};
 	};
+
+Example 2 (Cortex-A8 uniprocessor 32-bit system):
+
+	cpus {
+		#size-cells = <0>;
+		#address-cells = <1>;
+
+		cpu@0 {
+			device_type = "cpu";
+			compatible = "arm,cortex-a8";
+			reg = <0x0>;
+		};
+	};
+
+Example 3 (ARM 926EJ-S uniprocessor 32-bit system):
+
+	cpus {
+		#size-cells = <0>;
+		#address-cells = <0>;
+
+		cpu {
+			device_type = "cpu";
+			compatible = "arm,arm926ej-s";
+		};
+	};
+
+Example 4 (ARM Cortex-A57 64-bit system running OS in AArch64):
+
+cpus {
+	#size-cells = <0>;
+	#address-cells = <2>;
+
+	cpu@0 {
+		device_type = "cpu";
+		compatible = "arm,cortex-a57";
+		reg = <0x0 0x0>;
+		enable-method = "spin-table";
+		cpu-release-addr = <0 0x20000000>;
+	};
+
+	cpu@1 {
+		device_type = "cpu";
+		compatible = "arm,cortex-a57";
+		reg = <0x0 0x1>;
+		enable-method = "spin-table";
+		cpu-release-addr = <0 0x20000000>;
+	};
+
+	cpu@100 {
+		device_type = "cpu";
+		compatible = "arm,cortex-a57";
+		reg = <0x0 0x100>;
+		enable-method = "spin-table";
+		cpu-release-addr = <0 0x20000000>;
+	};
+
+	cpu@101 {
+		device_type = "cpu";
+		compatible = "arm,cortex-a57";
+		reg = <0x0 0x101>;
+		enable-method = "spin-table";
+		cpu-release-addr = <0 0x20000000>;
+	};
+
+	cpu@10000 {
+		device_type = "cpu";
+		compatible = "arm,cortex-a57";
+		reg = <0x0 0x10000>;
+		enable-method = "spin-table";
+		cpu-release-addr = <0 0x20000000>;
+	};
+
+	cpu@10001 {
+		device_type = "cpu";
+		compatible = "arm,cortex-a57";
+		reg = <0x0 0x10001>;
+		enable-method = "spin-table";
+		cpu-release-addr = <0 0x20000000>;
+	};
+
+	cpu@10100 {
+		device_type = "cpu";
+		compatible = "arm,cortex-a57";
+		reg = <0x0 0x10100>;
+		enable-method = "spin-table";
+		cpu-release-addr = <0 0x20000000>;
+	};
+
+	cpu@10101 {
+		device_type = "cpu";
+		compatible = "arm,cortex-a57";
+		reg = <0x0 0x10101>;
+		enable-method = "spin-table";
+		cpu-release-addr = <0 0x20000000>;
+	};
+
+	cpu@100000000 {
+		device_type = "cpu";
+		compatible = "arm,cortex-a57";
+		reg = <0x1 0x0>;
+		enable-method = "spin-table";
+		cpu-release-addr = <0 0x20000000>;
+	};
+
+	cpu@100000001 {
+		device_type = "cpu";
+		compatible = "arm,cortex-a57";
+		reg = <0x1 0x1>;
+		enable-method = "spin-table";
+		cpu-release-addr = <0 0x20000000>;
+	};
+
+	cpu@100000100 {
+		device_type = "cpu";
+		compatible = "arm,cortex-a57";
+		reg = <0x1 0x100>;
+		enable-method = "spin-table";
+		cpu-release-addr = <0 0x20000000>;
+	};
+
+	cpu@100000101 {
+		device_type = "cpu";
+		compatible = "arm,cortex-a57";
+		reg = <0x1 0x101>;
+		enable-method = "spin-table";
+		cpu-release-addr = <0 0x20000000>;
+	};
+
+	cpu@100010000 {
+		device_type = "cpu";
+		compatible = "arm,cortex-a57";
+		reg = <0x1 0x10000>;
+		enable-method = "spin-table";
+		cpu-release-addr = <0 0x20000000>;
+	};
+
+	cpu@100010001 {
+		device_type = "cpu";
+		compatible = "arm,cortex-a57";
+		reg = <0x1 0x10001>;
+		enable-method = "spin-table";
+		cpu-release-addr = <0 0x20000000>;
+	};
+
+	cpu@100010100 {
+		device_type = "cpu";
+		compatible = "arm,cortex-a57";
+		reg = <0x1 0x10100>;
+		enable-method = "spin-table";
+		cpu-release-addr = <0 0x20000000>;
+	};
+
+	cpu@100010101 {
+		device_type = "cpu";
+		compatible = "arm,cortex-a57";
+		reg = <0x1 0x10101>;
+		enable-method = "spin-table";
+		cpu-release-addr = <0 0x20000000>;
+	};
+};
+
+Example 5 (ARM Cortex-A57 64-bit system running OS in AArch32):
+
+cpus {
+	#size-cells = <0>;
+	#address-cells = <2>;
+
+	cpu@0 {
+		device_type = "cpu";
+		compatible = "arm,cortex-a57";
+		reg = <0x0 0x0>;
+	};
+
+	cpu@1 {
+		device_type = "cpu";
+		compatible = "arm,cortex-a57";
+		reg = <0x0 0x1>;
+	};
+
+	cpu@100 {
+		device_type = "cpu";
+		compatible = "arm,cortex-a57";
+		reg = <0x0 0x100>;
+	};
+
+	cpu@101 {
+		device_type = "cpu";
+		compatible = "arm,cortex-a57";
+		reg = <0x0 0x101>;
+	};
+};