Commit 4f0d20ec authored by Krzysztof Kozlowski's avatar Krzysztof Kozlowski

ARM: dts: Make CPU configuration more readable on exynos542x/5800

Exynos5420 and Exynos5800 boards boot from big core (A15) but
Exynos5422 boards choose otherwise: LITTLE core (A7) (on Exynos5422 this
is property of the board - configurable by pulling up/down gpg2-1).
To make user-visible CPU ordering more consistent the 'cpus' node was
overridden by exynos5422-cpus.dtsi.

However this is a little bit ugly and error-prone. Overriding the CPU
child nodes requires to basically reverse what was done initially in
exynos5420.dtsi.

Instead, split CPU configuration entirely to separate files which should
be included by board DTS.
Suggested-by: default avatarViresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: default avatarKrzysztof Kozlowski <k.kozlowski@samsung.com>
Reviewed-by: default avatarViresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: default avatarChanho Park <parkch98@gmail.com>
parent 14579412
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
/dts-v1/; /dts-v1/;
#include "exynos5420.dtsi" #include "exynos5420.dtsi"
#include "exynos5420-cpus.dtsi"
#include <dt-bindings/gpio/gpio.h> #include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/interrupt-controller/irq.h> #include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/input/input.h> #include <dt-bindings/input/input.h>
......
/*
* SAMSUNG EXYNOS5420 SoC cpu device tree source
*
* Copyright (c) 2015 Samsung Electronics Co., Ltd.
* http://www.samsung.com
*
* This file provides desired ordering for Exynos5420 and Exynos5800
* boards: CPU[0123] being the A15.
*
* The Exynos5420, 5422 and 5800 actually share the same CPU configuration
* but particular boards choose different booting order.
*
* Exynos5420 and Exynos5800 always boot from Cortex-A15. On Exynos5422
* booting cluster (big or LITTLE) is chosen by IROM code by reading
* the gpg2-1 GPIO. By default all Exynos5422 based boards choose booting
* from the LITTLE: Cortex-A7.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
/ {
cpus {
#address-cells = <1>;
#size-cells = <0>;
cpu0: cpu@0 {
device_type = "cpu";
compatible = "arm,cortex-a15";
reg = <0x0>;
clock-frequency = <1800000000>;
cci-control-port = <&cci_control1>;
};
cpu1: cpu@1 {
device_type = "cpu";
compatible = "arm,cortex-a15";
reg = <0x1>;
clock-frequency = <1800000000>;
cci-control-port = <&cci_control1>;
};
cpu2: cpu@2 {
device_type = "cpu";
compatible = "arm,cortex-a15";
reg = <0x2>;
clock-frequency = <1800000000>;
cci-control-port = <&cci_control1>;
};
cpu3: cpu@3 {
device_type = "cpu";
compatible = "arm,cortex-a15";
reg = <0x3>;
clock-frequency = <1800000000>;
cci-control-port = <&cci_control1>;
};
cpu4: cpu@100 {
device_type = "cpu";
compatible = "arm,cortex-a7";
reg = <0x100>;
clock-frequency = <1000000000>;
cci-control-port = <&cci_control0>;
};
cpu5: cpu@101 {
device_type = "cpu";
compatible = "arm,cortex-a7";
reg = <0x101>;
clock-frequency = <1000000000>;
cci-control-port = <&cci_control0>;
};
cpu6: cpu@102 {
device_type = "cpu";
compatible = "arm,cortex-a7";
reg = <0x102>;
clock-frequency = <1000000000>;
cci-control-port = <&cci_control0>;
};
cpu7: cpu@103 {
device_type = "cpu";
compatible = "arm,cortex-a7";
reg = <0x103>;
clock-frequency = <1000000000>;
cci-control-port = <&cci_control0>;
};
};
};
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#include <dt-bindings/clock/maxim,max77802.h> #include <dt-bindings/clock/maxim,max77802.h>
#include <dt-bindings/regulator/maxim,max77802.h> #include <dt-bindings/regulator/maxim,max77802.h>
#include "exynos5420.dtsi" #include "exynos5420.dtsi"
#include "exynos5420-cpus.dtsi"
/ { / {
model = "Google Peach Pit Rev 6+"; model = "Google Peach Pit Rev 6+";
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
/dts-v1/; /dts-v1/;
#include "exynos5420.dtsi" #include "exynos5420.dtsi"
#include "exynos5420-cpus.dtsi"
#include <dt-bindings/gpio/gpio.h> #include <dt-bindings/gpio/gpio.h>
/ { / {
......
...@@ -50,74 +50,10 @@ aliases { ...@@ -50,74 +50,10 @@ aliases {
usbdrdphy1 = &usbdrd_phy1; usbdrdphy1 = &usbdrd_phy1;
}; };
cpus { /*
#address-cells = <1>; * The 'cpus' node is not present here but instead it is provided
#size-cells = <0>; * by exynos5420-cpus.dtsi or exynos5422-cpus.dtsi.
*/
cpu0: cpu@0 {
device_type = "cpu";
compatible = "arm,cortex-a15";
reg = <0x0>;
clock-frequency = <1800000000>;
cci-control-port = <&cci_control1>;
};
cpu1: cpu@1 {
device_type = "cpu";
compatible = "arm,cortex-a15";
reg = <0x1>;
clock-frequency = <1800000000>;
cci-control-port = <&cci_control1>;
};
cpu2: cpu@2 {
device_type = "cpu";
compatible = "arm,cortex-a15";
reg = <0x2>;
clock-frequency = <1800000000>;
cci-control-port = <&cci_control1>;
};
cpu3: cpu@3 {
device_type = "cpu";
compatible = "arm,cortex-a15";
reg = <0x3>;
clock-frequency = <1800000000>;
cci-control-port = <&cci_control1>;
};
cpu4: cpu@100 {
device_type = "cpu";
compatible = "arm,cortex-a7";
reg = <0x100>;
clock-frequency = <1000000000>;
cci-control-port = <&cci_control0>;
};
cpu5: cpu@101 {
device_type = "cpu";
compatible = "arm,cortex-a7";
reg = <0x101>;
clock-frequency = <1000000000>;
cci-control-port = <&cci_control0>;
};
cpu6: cpu@102 {
device_type = "cpu";
compatible = "arm,cortex-a7";
reg = <0x102>;
clock-frequency = <1000000000>;
cci-control-port = <&cci_control0>;
};
cpu7: cpu@103 {
device_type = "cpu";
compatible = "arm,cortex-a7";
reg = <0x103>;
clock-frequency = <1000000000>;
cci-control-port = <&cci_control0>;
};
};
cci: cci@10d20000 { cci: cci@10d20000 {
compatible = "arm,cci-400"; compatible = "arm,cci-400";
......
...@@ -4,78 +4,88 @@ ...@@ -4,78 +4,88 @@
* Copyright (c) 2015 Samsung Electronics Co., Ltd. * Copyright (c) 2015 Samsung Electronics Co., Ltd.
* http://www.samsung.com * http://www.samsung.com
* *
* The only difference between EXYNOS5422 and EXYNOS5800 is cpu ordering. The * This file provides desired ordering for Exynos5422: CPU[0123] being the A7.
* EXYNOS5422 is booting from Cortex-A7 core while the EXYNOS5800 is booting
* from Cortex-A15 core.
* *
* EXYNOS5422 based board files can include this file to provide cpu ordering * The Exynos5420, 5422 and 5800 actually share the same CPU configuration
* which could boot a cortex-a7 from cpu0. * but particular boards choose different booting order.
*
* Exynos5420 and Exynos5800 always boot from Cortex-A15. On Exynos5422
* booting cluster (big or LITTLE) is chosen by IROM code by reading
* the gpg2-1 GPIO. By default all Exynos5422 based boards choose booting
* from the LITTLE: Cortex-A7.
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as * it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation. * published by the Free Software Foundation.
*/ */
&cpu0 { / {
device_type = "cpu"; cpus {
compatible = "arm,cortex-a7"; #address-cells = <1>;
reg = <0x100>; #size-cells = <0>;
clock-frequency = <1000000000>;
cci-control-port = <&cci_control0>;
};
&cpu1 { cpu0: cpu@100 {
device_type = "cpu"; device_type = "cpu";
compatible = "arm,cortex-a7"; compatible = "arm,cortex-a7";
reg = <0x101>; reg = <0x100>;
clock-frequency = <1000000000>; clock-frequency = <1000000000>;
cci-control-port = <&cci_control0>; cci-control-port = <&cci_control0>;
}; };
&cpu2 { cpu1: cpu@101 {
device_type = "cpu"; device_type = "cpu";
compatible = "arm,cortex-a7"; compatible = "arm,cortex-a7";
reg = <0x102>; reg = <0x101>;
clock-frequency = <1000000000>; clock-frequency = <1000000000>;
cci-control-port = <&cci_control0>; cci-control-port = <&cci_control0>;
}; };
&cpu3 { cpu2: cpu@102 {
device_type = "cpu"; device_type = "cpu";
compatible = "arm,cortex-a7"; compatible = "arm,cortex-a7";
reg = <0x103>; reg = <0x102>;
clock-frequency = <1000000000>; clock-frequency = <1000000000>;
cci-control-port = <&cci_control0>; cci-control-port = <&cci_control0>;
}; };
&cpu4 { cpu3: cpu@103 {
device_type = "cpu"; device_type = "cpu";
compatible = "arm,cortex-a15"; compatible = "arm,cortex-a7";
reg = <0x0>; reg = <0x103>;
clock-frequency = <1800000000>; clock-frequency = <1000000000>;
cci-control-port = <&cci_control1>; cci-control-port = <&cci_control0>;
}; };
&cpu5 { cpu4: cpu@0 {
device_type = "cpu"; device_type = "cpu";
compatible = "arm,cortex-a15"; compatible = "arm,cortex-a15";
reg = <0x1>; reg = <0x0>;
clock-frequency = <1800000000>; clock-frequency = <1800000000>;
cci-control-port = <&cci_control1>; cci-control-port = <&cci_control1>;
}; };
&cpu6 { cpu5: cpu@1 {
device_type = "cpu"; device_type = "cpu";
compatible = "arm,cortex-a15"; compatible = "arm,cortex-a15";
reg = <0x2>; reg = <0x1>;
clock-frequency = <1800000000>; clock-frequency = <1800000000>;
cci-control-port = <&cci_control1>; cci-control-port = <&cci_control1>;
}; };
cpu6: cpu@2 {
device_type = "cpu";
compatible = "arm,cortex-a15";
reg = <0x2>;
clock-frequency = <1800000000>;
cci-control-port = <&cci_control1>;
};
&cpu7 { cpu7: cpu@3 {
device_type = "cpu"; device_type = "cpu";
compatible = "arm,cortex-a15"; compatible = "arm,cortex-a15";
reg = <0x3>; reg = <0x3>;
clock-frequency = <1800000000>; clock-frequency = <1800000000>;
cci-control-port = <&cci_control1>; cci-control-port = <&cci_control1>;
};
};
}; };
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#include <dt-bindings/clock/maxim,max77802.h> #include <dt-bindings/clock/maxim,max77802.h>
#include <dt-bindings/regulator/maxim,max77802.h> #include <dt-bindings/regulator/maxim,max77802.h>
#include "exynos5800.dtsi" #include "exynos5800.dtsi"
#include "exynos5420-cpus.dtsi"
/ { / {
model = "Google Peach Pi Rev 10+"; model = "Google Peach Pi Rev 10+";
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment