Subject: [PATCH 0/6] Fix MT8186/92/95 topology and idle state names

MT8186, MT8192 and MT8195 use ARM DynamIQ, which combines big and
LITTLE cores in one single cluster! A two cluster topology is simply
wrong in this case.

While at it, after some research, I've also noticed that the names
assigned to the idle states are misleading, so I went on changing
them to reflect the actual function.

The names change commits, unlike the CPU map ones, didn't get any
Fixes tag, as naming changes aren't fixing anything that would be
meaningful for functionality (it's cosmetic, nothing else).

AngeloGioacchino Del Regno (6):
arm64: dts: mt8195: Fix CPU map for single-cluster SoC
arm64: dts: mt8192: Fix CPU map for single-cluster SoC
arm64: dts: mt8186: Fix CPU map for single-cluster SoC
arm64: dts: mt8195: Change idle states names to reflect actual
function
arm64: dts: mt8186: Change idle states names to reflect actual
function
arm64: dts: mt8192: Change idle states names to reflect actual
function

arch/arm64/boot/dts/mediatek/mt8186.dtsi | 30 ++++++++++----------
arch/arm64/boot/dts/mediatek/mt8192.dtsi | 35 +++++++++++-------------
arch/arm64/boot/dts/mediatek/mt8195.dtsi | 34 +++++++++++------------
3 files changed, 46 insertions(+), 53 deletions(-)

--
2.39.0



Subject: [PATCH 1/6] arm64: dts: mt8195: Fix CPU map for single-cluster SoC

MT8195 features the ARM DynamIQ technology and combines both four
Cortex-A78 (big) and four Cortex-A55 (LITTLE) CPUs in one cluster:
fix the CPU map to reflect that.

Signed-off-by: AngeloGioacchino Del Regno <[email protected]>
Fixes: 37f2582883be ("arm64: dts: Add mediatek SoC mt8195 and evaluation board")
---
arch/arm64/boot/dts/mediatek/mt8195.dtsi | 10 ++++------
1 file changed, 4 insertions(+), 6 deletions(-)

diff --git a/arch/arm64/boot/dts/mediatek/mt8195.dtsi b/arch/arm64/boot/dts/mediatek/mt8195.dtsi
index 926325935777..f04f836d9a72 100644
--- a/arch/arm64/boot/dts/mediatek/mt8195.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8195.dtsi
@@ -199,22 +199,20 @@ core2 {
core3 {
cpu = <&cpu3>;
};
- };

- cluster1 {
- core0 {
+ core4 {
cpu = <&cpu4>;
};

- core1 {
+ core5 {
cpu = <&cpu5>;
};

- core2 {
+ core6 {
cpu = <&cpu6>;
};

- core3 {
+ core7 {
cpu = <&cpu7>;
};
};
--
2.39.0


Subject: [PATCH 2/6] arm64: dts: mt8192: Fix CPU map for single-cluster SoC

MT8192 features the ARM DynamIQ technology and combines both four
Cortex-A76 (big) and four Cortex-A55 (LITTLE) CPUs in one cluster:
fix the CPU map to reflect that.

Signed-off-by: AngeloGioacchino Del Regno <[email protected]>
Fixes: 48489980e27e ("arm64: dts: Add Mediatek SoC MT8192 and evaluation board dts and Makefile")
---
arch/arm64/boot/dts/mediatek/mt8192.dtsi | 11 ++++-------
1 file changed, 4 insertions(+), 7 deletions(-)

diff --git a/arch/arm64/boot/dts/mediatek/mt8192.dtsi b/arch/arm64/boot/dts/mediatek/mt8192.dtsi
index ef4fcefa2bfc..eb46cbadd310 100644
--- a/arch/arm64/boot/dts/mediatek/mt8192.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8192.dtsi
@@ -206,19 +206,16 @@ core2 {
core3 {
cpu = <&cpu3>;
};
- };
-
- cluster1 {
- core0 {
+ core4 {
cpu = <&cpu4>;
};
- core1 {
+ core5 {
cpu = <&cpu5>;
};
- core2 {
+ core6 {
cpu = <&cpu6>;
};
- core3 {
+ core7 {
cpu = <&cpu7>;
};
};
--
2.39.0


Subject: [PATCH 3/6] arm64: dts: mt8186: Fix CPU map for single-cluster SoC

MT8186 features the ARM DynamIQ technology and combines both two
Cortex-A76 (big) and six Cortex-A55 (LITTLE) CPUs in one cluster:
fix the CPU map to reflect that.

Signed-off-by: AngeloGioacchino Del Regno <[email protected]>
Fixes: 2e78620b1350 ("arm64: dts: Add MediaTek MT8186 dts and evaluation board and Makefile")
---
arch/arm64/boot/dts/mediatek/mt8186.dtsi | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/arch/arm64/boot/dts/mediatek/mt8186.dtsi b/arch/arm64/boot/dts/mediatek/mt8186.dtsi
index c9124bb0c960..9e8daaa044dc 100644
--- a/arch/arm64/boot/dts/mediatek/mt8186.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8186.dtsi
@@ -48,14 +48,12 @@ core4 {
core5 {
cpu = <&cpu5>;
};
- };

- cluster1 {
- core0 {
+ core6 {
cpu = <&cpu6>;
};

- core1 {
+ core7 {
cpu = <&cpu7>;
};
};
--
2.39.0


Subject: [PATCH 4/6] arm64: dts: mt8195: Change idle states names to reflect actual function

The names of the idle states are misleading being this a single cluster
SoC, a cluster-off idle state is impossible!

After some research in ATF, it emerged that the cpu-off state is in
reality putting CPUs in retention state, while the cluster-off one
is turning off the CPUs.

Summarizing renaming:
- cpu-off -> cpu-retention
- cluster-off -> cpu-off

Signed-off-by: AngeloGioacchino Del Regno <[email protected]>
---
arch/arm64/boot/dts/mediatek/mt8195.dtsi | 24 ++++++++++++------------
1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/arch/arm64/boot/dts/mediatek/mt8195.dtsi b/arch/arm64/boot/dts/mediatek/mt8195.dtsi
index f04f836d9a72..60ccf02b60bd 100644
--- a/arch/arm64/boot/dts/mediatek/mt8195.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8195.dtsi
@@ -38,7 +38,7 @@ cpu0: cpu@0 {
performance-domains = <&performance 0>;
clock-frequency = <1701000000>;
capacity-dmips-mhz = <308>;
- cpu-idle-states = <&cpu_off_l &cluster_off_l>;
+ cpu-idle-states = <&cpu_ret_l &cpu_off_l>;
i-cache-size = <32768>;
i-cache-line-size = <64>;
i-cache-sets = <128>;
@@ -57,7 +57,7 @@ cpu1: cpu@100 {
performance-domains = <&performance 0>;
clock-frequency = <1701000000>;
capacity-dmips-mhz = <308>;
- cpu-idle-states = <&cpu_off_l &cluster_off_l>;
+ cpu-idle-states = <&cpu_ret_l &cpu_off_l>;
i-cache-size = <32768>;
i-cache-line-size = <64>;
i-cache-sets = <128>;
@@ -76,7 +76,7 @@ cpu2: cpu@200 {
performance-domains = <&performance 0>;
clock-frequency = <1701000000>;
capacity-dmips-mhz = <308>;
- cpu-idle-states = <&cpu_off_l &cluster_off_l>;
+ cpu-idle-states = <&cpu_ret_l &cpu_off_l>;
i-cache-size = <32768>;
i-cache-line-size = <64>;
i-cache-sets = <128>;
@@ -95,7 +95,7 @@ cpu3: cpu@300 {
performance-domains = <&performance 0>;
clock-frequency = <1701000000>;
capacity-dmips-mhz = <308>;
- cpu-idle-states = <&cpu_off_l &cluster_off_l>;
+ cpu-idle-states = <&cpu_ret_l &cpu_off_l>;
i-cache-size = <32768>;
i-cache-line-size = <64>;
i-cache-sets = <128>;
@@ -114,7 +114,7 @@ cpu4: cpu@400 {
performance-domains = <&performance 1>;
clock-frequency = <2171000000>;
capacity-dmips-mhz = <1024>;
- cpu-idle-states = <&cpu_off_b &cluster_off_b>;
+ cpu-idle-states = <&cpu_ret_b &cpu_off_b>;
i-cache-size = <65536>;
i-cache-line-size = <64>;
i-cache-sets = <256>;
@@ -133,7 +133,7 @@ cpu5: cpu@500 {
performance-domains = <&performance 1>;
clock-frequency = <2171000000>;
capacity-dmips-mhz = <1024>;
- cpu-idle-states = <&cpu_off_b &cluster_off_b>;
+ cpu-idle-states = <&cpu_ret_b &cpu_off_b>;
i-cache-size = <65536>;
i-cache-line-size = <64>;
i-cache-sets = <256>;
@@ -152,7 +152,7 @@ cpu6: cpu@600 {
performance-domains = <&performance 1>;
clock-frequency = <2171000000>;
capacity-dmips-mhz = <1024>;
- cpu-idle-states = <&cpu_off_b &cluster_off_b>;
+ cpu-idle-states = <&cpu_ret_b &cpu_off_b>;
i-cache-size = <65536>;
i-cache-line-size = <64>;
i-cache-sets = <256>;
@@ -171,7 +171,7 @@ cpu7: cpu@700 {
performance-domains = <&performance 1>;
clock-frequency = <2171000000>;
capacity-dmips-mhz = <1024>;
- cpu-idle-states = <&cpu_off_b &cluster_off_b>;
+ cpu-idle-states = <&cpu_ret_b &cpu_off_b>;
i-cache-size = <65536>;
i-cache-line-size = <64>;
i-cache-sets = <256>;
@@ -221,7 +221,7 @@ core7 {
idle-states {
entry-method = "psci";

- cpu_off_l: cpu-off-l {
+ cpu_ret_l: cpu-retention-l {
compatible = "arm,idle-state";
arm,psci-suspend-param = <0x00010001>;
local-timer-stop;
@@ -230,7 +230,7 @@ cpu_off_l: cpu-off-l {
min-residency-us = <580>;
};

- cpu_off_b: cpu-off-b {
+ cpu_ret_b: cpu-retention-b {
compatible = "arm,idle-state";
arm,psci-suspend-param = <0x00010001>;
local-timer-stop;
@@ -239,7 +239,7 @@ cpu_off_b: cpu-off-b {
min-residency-us = <740>;
};

- cluster_off_l: cluster-off-l {
+ cpu_off_l: cpu-off-l {
compatible = "arm,idle-state";
arm,psci-suspend-param = <0x01010002>;
local-timer-stop;
@@ -248,7 +248,7 @@ cluster_off_l: cluster-off-l {
min-residency-us = <840>;
};

- cluster_off_b: cluster-off-b {
+ cpu_off_b: cpu-off-b {
compatible = "arm,idle-state";
arm,psci-suspend-param = <0x01010002>;
local-timer-stop;
--
2.39.0


Subject: [PATCH 5/6] arm64: dts: mt8186: Change idle states names to reflect actual function

The names of the idle states are misleading being this a single cluster
SoC, a cluster-off idle state is impossible!

After some research in ATF, it emerged that the cpu-off state is in
reality putting CPUs in retention state, while the cluster-off one
is turning off the CPUs.

Summarizing renaming:
- cpu-off -> cpu-retention
- cluster-off -> cpu-off

Signed-off-by: AngeloGioacchino Del Regno <[email protected]>
---
arch/arm64/boot/dts/mediatek/mt8186.dtsi | 24 ++++++++++++------------
1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/arch/arm64/boot/dts/mediatek/mt8186.dtsi b/arch/arm64/boot/dts/mediatek/mt8186.dtsi
index 9e8daaa044dc..50fdb88bdc3d 100644
--- a/arch/arm64/boot/dts/mediatek/mt8186.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8186.dtsi
@@ -66,7 +66,7 @@ cpu0: cpu@0 {
enable-method = "psci";
clock-frequency = <2000000000>;
capacity-dmips-mhz = <382>;
- cpu-idle-states = <&cpu_off_l &cluster_off_l>;
+ cpu-idle-states = <&cpu_ret_l &cpu_off_l>;
i-cache-size = <32768>;
i-cache-line-size = <64>;
i-cache-sets = <128>;
@@ -84,7 +84,7 @@ cpu1: cpu@100 {
enable-method = "psci";
clock-frequency = <2000000000>;
capacity-dmips-mhz = <382>;
- cpu-idle-states = <&cpu_off_l &cluster_off_l>;
+ cpu-idle-states = <&cpu_ret_l &cpu_off_l>;
i-cache-size = <32768>;
i-cache-line-size = <64>;
i-cache-sets = <128>;
@@ -102,7 +102,7 @@ cpu2: cpu@200 {
enable-method = "psci";
clock-frequency = <2000000000>;
capacity-dmips-mhz = <382>;
- cpu-idle-states = <&cpu_off_l &cluster_off_l>;
+ cpu-idle-states = <&cpu_ret_l &cpu_off_l>;
i-cache-size = <32768>;
i-cache-line-size = <64>;
i-cache-sets = <128>;
@@ -120,7 +120,7 @@ cpu3: cpu@300 {
enable-method = "psci";
clock-frequency = <2000000000>;
capacity-dmips-mhz = <382>;
- cpu-idle-states = <&cpu_off_l &cluster_off_l>;
+ cpu-idle-states = <&cpu_ret_l &cpu_off_l>;
i-cache-size = <32768>;
i-cache-line-size = <64>;
i-cache-sets = <128>;
@@ -138,7 +138,7 @@ cpu4: cpu@400 {
enable-method = "psci";
clock-frequency = <2000000000>;
capacity-dmips-mhz = <382>;
- cpu-idle-states = <&cpu_off_l &cluster_off_l>;
+ cpu-idle-states = <&cpu_ret_l &cpu_off_l>;
i-cache-size = <32768>;
i-cache-line-size = <64>;
i-cache-sets = <128>;
@@ -156,7 +156,7 @@ cpu5: cpu@500 {
enable-method = "psci";
clock-frequency = <2000000000>;
capacity-dmips-mhz = <382>;
- cpu-idle-states = <&cpu_off_l &cluster_off_l>;
+ cpu-idle-states = <&cpu_ret_l &cpu_off_l>;
i-cache-size = <32768>;
i-cache-line-size = <64>;
i-cache-sets = <128>;
@@ -174,7 +174,7 @@ cpu6: cpu@600 {
enable-method = "psci";
clock-frequency = <2050000000>;
capacity-dmips-mhz = <1024>;
- cpu-idle-states = <&cpu_off_b &cluster_off_b>;
+ cpu-idle-states = <&cpu_ret_b &cpu_off_b>;
i-cache-size = <65536>;
i-cache-line-size = <64>;
i-cache-sets = <256>;
@@ -192,7 +192,7 @@ cpu7: cpu@700 {
enable-method = "psci";
clock-frequency = <2050000000>;
capacity-dmips-mhz = <1024>;
- cpu-idle-states = <&cpu_off_b &cluster_off_b>;
+ cpu-idle-states = <&cpu_ret_b &cpu_off_b>;
i-cache-size = <65536>;
i-cache-line-size = <64>;
i-cache-sets = <256>;
@@ -206,7 +206,7 @@ cpu7: cpu@700 {
idle-states {
entry-method = "psci";

- cpu_off_l: cpu-off-l {
+ cpu_ret_l: cpu-retention-l {
compatible = "arm,idle-state";
arm,psci-suspend-param = <0x00010001>;
local-timer-stop;
@@ -215,7 +215,7 @@ cpu_off_l: cpu-off-l {
min-residency-us = <1600>;
};

- cpu_off_b: cpu-off-b {
+ cpu_ret_b: cpu-retention-b {
compatible = "arm,idle-state";
arm,psci-suspend-param = <0x00010001>;
local-timer-stop;
@@ -224,7 +224,7 @@ cpu_off_b: cpu-off-b {
min-residency-us = <1400>;
};

- cluster_off_l: cluster-off-l {
+ cpu_off_l: cpu-off-l {
compatible = "arm,idle-state";
arm,psci-suspend-param = <0x01010001>;
local-timer-stop;
@@ -233,7 +233,7 @@ cluster_off_l: cluster-off-l {
min-residency-us = <2100>;
};

- cluster_off_b: cluster-off-b {
+ cpu_off_b: cpu-off-b {
compatible = "arm,idle-state";
arm,psci-suspend-param = <0x01010001>;
local-timer-stop;
--
2.39.0


Subject: [PATCH 6/6] arm64: dts: mt8192: Change idle states names to reflect actual function

The names of the idle states are misleading being this a single cluster
SoC, a cluster-sleep idle state is impossible!

After some research in ATF, it emerged that the cpu-sleep state is in
reality putting CPUs in retention state, while the cluster-sleep one
is turning off the CPUs.

Summarizing renaming:
- cpu-sleep -> cpu-retention
- cluster-sleep -> cpu-off

Signed-off-by: AngeloGioacchino Del Regno <[email protected]>
---
arch/arm64/boot/dts/mediatek/mt8192.dtsi | 24 ++++++++++++------------
1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/arch/arm64/boot/dts/mediatek/mt8192.dtsi b/arch/arm64/boot/dts/mediatek/mt8192.dtsi
index eb46cbadd310..87b91c8feaf9 100644
--- a/arch/arm64/boot/dts/mediatek/mt8192.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8192.dtsi
@@ -62,7 +62,7 @@ cpu0: cpu@0 {
reg = <0x000>;
enable-method = "psci";
clock-frequency = <1701000000>;
- cpu-idle-states = <&cpu_sleep_l &cluster_sleep_l>;
+ cpu-idle-states = <&cpu_ret_l &cpu_off_l>;
i-cache-size = <32768>;
i-cache-line-size = <64>;
i-cache-sets = <128>;
@@ -79,7 +79,7 @@ cpu1: cpu@100 {
reg = <0x100>;
enable-method = "psci";
clock-frequency = <1701000000>;
- cpu-idle-states = <&cpu_sleep_l &cluster_sleep_l>;
+ cpu-idle-states = <&cpu_ret_l &cpu_off_l>;
i-cache-size = <32768>;
i-cache-line-size = <64>;
i-cache-sets = <128>;
@@ -96,7 +96,7 @@ cpu2: cpu@200 {
reg = <0x200>;
enable-method = "psci";
clock-frequency = <1701000000>;
- cpu-idle-states = <&cpu_sleep_l &cluster_sleep_l>;
+ cpu-idle-states = <&cpu_ret_l &cpu_off_l>;
i-cache-size = <32768>;
i-cache-line-size = <64>;
i-cache-sets = <128>;
@@ -113,7 +113,7 @@ cpu3: cpu@300 {
reg = <0x300>;
enable-method = "psci";
clock-frequency = <1701000000>;
- cpu-idle-states = <&cpu_sleep_l &cluster_sleep_l>;
+ cpu-idle-states = <&cpu_ret_l &cpu_off_l>;
i-cache-size = <32768>;
i-cache-line-size = <64>;
i-cache-sets = <128>;
@@ -130,7 +130,7 @@ cpu4: cpu@400 {
reg = <0x400>;
enable-method = "psci";
clock-frequency = <2171000000>;
- cpu-idle-states = <&cpu_sleep_b &cluster_sleep_b>;
+ cpu-idle-states = <&cpu_ret_b &cpu_off_b>;
i-cache-size = <65536>;
i-cache-line-size = <64>;
i-cache-sets = <256>;
@@ -147,7 +147,7 @@ cpu5: cpu@500 {
reg = <0x500>;
enable-method = "psci";
clock-frequency = <2171000000>;
- cpu-idle-states = <&cpu_sleep_b &cluster_sleep_b>;
+ cpu-idle-states = <&cpu_ret_b &cpu_off_b>;
i-cache-size = <65536>;
i-cache-line-size = <64>;
i-cache-sets = <256>;
@@ -164,7 +164,7 @@ cpu6: cpu@600 {
reg = <0x600>;
enable-method = "psci";
clock-frequency = <2171000000>;
- cpu-idle-states = <&cpu_sleep_b &cluster_sleep_b>;
+ cpu-idle-states = <&cpu_ret_b &cpu_off_b>;
i-cache-size = <65536>;
i-cache-line-size = <64>;
i-cache-sets = <256>;
@@ -181,7 +181,7 @@ cpu7: cpu@700 {
reg = <0x700>;
enable-method = "psci";
clock-frequency = <2171000000>;
- cpu-idle-states = <&cpu_sleep_b &cluster_sleep_b>;
+ cpu-idle-states = <&cpu_ret_b &cpu_off_b>;
i-cache-size = <65536>;
i-cache-line-size = <64>;
i-cache-sets = <256>;
@@ -250,7 +250,7 @@ l3_0: l3-cache {

idle-states {
entry-method = "psci";
- cpu_sleep_l: cpu-sleep-l {
+ cpu_ret_l: cpu-retention-l {
compatible = "arm,idle-state";
arm,psci-suspend-param = <0x00010001>;
local-timer-stop;
@@ -258,7 +258,7 @@ cpu_sleep_l: cpu-sleep-l {
exit-latency-us = <140>;
min-residency-us = <780>;
};
- cpu_sleep_b: cpu-sleep-b {
+ cpu_ret_b: cpu-retention-b {
compatible = "arm,idle-state";
arm,psci-suspend-param = <0x00010001>;
local-timer-stop;
@@ -266,7 +266,7 @@ cpu_sleep_b: cpu-sleep-b {
exit-latency-us = <145>;
min-residency-us = <720>;
};
- cluster_sleep_l: cluster-sleep-l {
+ cpu_off_l: cpu-off-l {
compatible = "arm,idle-state";
arm,psci-suspend-param = <0x01010002>;
local-timer-stop;
@@ -274,7 +274,7 @@ cluster_sleep_l: cluster-sleep-l {
exit-latency-us = <155>;
min-residency-us = <860>;
};
- cluster_sleep_b: cluster-sleep-b {
+ cpu_off_b: cpu-off-b {
compatible = "arm,idle-state";
arm,psci-suspend-param = <0x01010002>;
local-timer-stop;
--
2.39.0


2023-01-31 11:42:55

by Matthias Brugger

[permalink] [raw]
Subject: Re: [PATCH 0/6] Fix MT8186/92/95 topology and idle state names



On 26/01/2023 11:35, AngeloGioacchino Del Regno wrote:
> MT8186, MT8192 and MT8195 use ARM DynamIQ, which combines big and
> LITTLE cores in one single cluster! A two cluster topology is simply
> wrong in this case.
>
> While at it, after some research, I've also noticed that the names
> assigned to the idle states are misleading, so I went on changing
> them to reflect the actual function.
>
> The names change commits, unlike the CPU map ones, didn't get any
> Fixes tag, as naming changes aren't fixing anything that would be
> meaningful for functionality (it's cosmetic, nothing else).
>
> AngeloGioacchino Del Regno (6):
> arm64: dts: mt8195: Fix CPU map for single-cluster SoC
> arm64: dts: mt8192: Fix CPU map for single-cluster SoC
> arm64: dts: mt8186: Fix CPU map for single-cluster SoC
> arm64: dts: mt8195: Change idle states names to reflect actual
> function
> arm64: dts: mt8186: Change idle states names to reflect actual
> function
> arm64: dts: mt8192: Change idle states names to reflect actual
> function
>

Whole series applied, thanks!
Matthias

> arch/arm64/boot/dts/mediatek/mt8186.dtsi | 30 ++++++++++----------
> arch/arm64/boot/dts/mediatek/mt8192.dtsi | 35 +++++++++++-------------
> arch/arm64/boot/dts/mediatek/mt8195.dtsi | 34 +++++++++++------------
> 3 files changed, 46 insertions(+), 53 deletions(-)
>