diff mbox series

arm64: dts: rockchip: Add cache information to the SoC dtsi for RK3399

Message ID be3cbcae5c40fa72a52845d30dcc66c847a98cfa.1702616304.git.dsimic@manjaro.org (mailing list archive)
State New
Headers show
Series arm64: dts: rockchip: Add cache information to the SoC dtsi for RK3399 | expand

Commit Message

Dragan Simic Dec. 15, 2023, 5 a.m. UTC
Add missing cache information to the Rockchip RK3399 SoC dtsi.  The specified
values were derived by hand from the cache size specifications available from
the RK3399 datasheet;  for future reference, here's a brief summary:

  - Each Cortex-A72 core has 48 KB of L1 instruction cache and
    32 KB of L1 data cache available, four-way set associative
  - Each Cortex-A53 core core has 32 KB of instruction cache and
    32 KB of L1 data cache available, four-way set associative
  - The big (A72) cluster has 1 MB of unified L2 cache available
  - The little (A53) cluster has 512 KB of unified L2 cache available

This patch allows /proc/cpuinfo and lscpu(1) to display proper RK3399 cache
information, and it eliminates the following error in the kernel log:

  cacheinfo: Unable to detect cache hierarchy for CPU 0

While there, add a couple of somewhat useful comments, which may help a bit
anyone going through the RK3399 SoC dtsi.

Co-developed-by: Kyle Copperfield <kmcopper@danwin1210.me>
Signed-off-by: Dragan Simic <dsimic@manjaro.org>
---

Notes:
    It's been a while since Kyle and I worked on this patch, and his email
    address seems to no longer work.  Unfortunately, I have no idea is there
    some other email address that he actually uses now.  However, Kyle needs
    to be mentioned as a co-author of this patch.

 arch/arm64/boot/dts/rockchip/rk3399.dtsi | 64 +++++++++++++++++++++++-
 1 file changed, 62 insertions(+), 2 deletions(-)

Comments

Dragan Simic Jan. 4, 2024, 8:50 a.m. UTC | #1
Hello,

Just checking, is there something preventing this patch from becoming 
accepted?  I'd appreciate if you'd provide some feedback and let me know 
if there's something in the patch that needs adjusting.

By the way, Stefan Nagy noted that he'll have this patch tested after 
the holidays.  I guess that should help.


On 2023-12-15 06:00, Dragan Simic wrote:
> Add missing cache information to the Rockchip RK3399 SoC dtsi.  The 
> specified
> values were derived by hand from the cache size specifications 
> available from
> the RK3399 datasheet;  for future reference, here's a brief summary:
> 
>   - Each Cortex-A72 core has 48 KB of L1 instruction cache and
>     32 KB of L1 data cache available, four-way set associative
>   - Each Cortex-A53 core core has 32 KB of instruction cache and
>     32 KB of L1 data cache available, four-way set associative
>   - The big (A72) cluster has 1 MB of unified L2 cache available
>   - The little (A53) cluster has 512 KB of unified L2 cache available
> 
> This patch allows /proc/cpuinfo and lscpu(1) to display proper RK3399 
> cache
> information, and it eliminates the following error in the kernel log:
> 
>   cacheinfo: Unable to detect cache hierarchy for CPU 0
> 
> While there, add a couple of somewhat useful comments, which may help a 
> bit
> anyone going through the RK3399 SoC dtsi.
> 
> Co-developed-by: Kyle Copperfield <kmcopper@danwin1210.me>
> Signed-off-by: Dragan Simic <dsimic@manjaro.org>
> ---
> 
> Notes:
>     It's been a while since Kyle and I worked on this patch, and his 
> email
>     address seems to no longer work.  Unfortunately, I have no idea is 
> there
>     some other email address that he actually uses now.  However, Kyle 
> needs
>     to be mentioned as a co-author of this patch.
> 
>  arch/arm64/boot/dts/rockchip/rk3399.dtsi | 64 +++++++++++++++++++++++-
>  1 file changed, 62 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/arm64/boot/dts/rockchip/rk3399.dtsi
> b/arch/arm64/boot/dts/rockchip/rk3399.dtsi
> index da0dfb237f85..f38c27f87cc9 100644
> --- a/arch/arm64/boot/dts/rockchip/rk3399.dtsi
> +++ b/arch/arm64/boot/dts/rockchip/rk3399.dtsi
> @@ -41,22 +41,22 @@ cpus {
>  		#size-cells = <0>;
> 
>  		cpu-map {
> -			cluster0 {
> +			cluster0 {	/* Cortex-A53 */
>  				core0 {
>  					cpu = <&cpu_l0>;
>  				};
>  				core1 {
>  					cpu = <&cpu_l1>;
>  				};
>  				core2 {
>  					cpu = <&cpu_l2>;
>  				};
>  				core3 {
>  					cpu = <&cpu_l3>;
>  				};
>  			};
> 
> -			cluster1 {
> +			cluster1 {	/* Cortex-A72 */
>  				core0 {
>  					cpu = <&cpu_b0>;
>  				};
> @@ -76,54 +76,89 @@ cpu_l0: cpu@0 {
>  			#cooling-cells = <2>; /* min followed by max */
>  			dynamic-power-coefficient = <100>;
>  			cpu-idle-states = <&CPU_SLEEP &CLUSTER_SLEEP>;
> +			i-cache-size = <0x8000>;
> +			i-cache-line-size = <64>;
> +			i-cache-sets = <256>;
> +			d-cache-size = <0x8000>;
> +			d-cache-line-size = <64>;
> +			d-cache-sets = <128>;
> +			next-level-cache = <&l2_cache_l>;
>  		};
> 
>  		cpu_l1: cpu@1 {
>  			device_type = "cpu";
>  			compatible = "arm,cortex-a53";
>  			reg = <0x0 0x1>;
>  			enable-method = "psci";
>  			capacity-dmips-mhz = <485>;
>  			clocks = <&cru ARMCLKL>;
>  			#cooling-cells = <2>; /* min followed by max */
>  			dynamic-power-coefficient = <100>;
>  			cpu-idle-states = <&CPU_SLEEP &CLUSTER_SLEEP>;
> +			i-cache-size = <0x8000>;
> +			i-cache-line-size = <64>;
> +			i-cache-sets = <256>;
> +			d-cache-size = <0x8000>;
> +			d-cache-line-size = <64>;
> +			d-cache-sets = <128>;
> +			next-level-cache = <&l2_cache_l>;
>  		};
> 
>  		cpu_l2: cpu@2 {
>  			device_type = "cpu";
>  			compatible = "arm,cortex-a53";
>  			reg = <0x0 0x2>;
>  			enable-method = "psci";
>  			capacity-dmips-mhz = <485>;
>  			clocks = <&cru ARMCLKL>;
>  			#cooling-cells = <2>; /* min followed by max */
>  			dynamic-power-coefficient = <100>;
>  			cpu-idle-states = <&CPU_SLEEP &CLUSTER_SLEEP>;
> +			i-cache-size = <0x8000>;
> +			i-cache-line-size = <64>;
> +			i-cache-sets = <256>;
> +			d-cache-size = <0x8000>;
> +			d-cache-line-size = <64>;
> +			d-cache-sets = <128>;
> +			next-level-cache = <&l2_cache_l>;
>  		};
> 
>  		cpu_l3: cpu@3 {
>  			device_type = "cpu";
>  			compatible = "arm,cortex-a53";
>  			reg = <0x0 0x3>;
>  			enable-method = "psci";
>  			capacity-dmips-mhz = <485>;
>  			clocks = <&cru ARMCLKL>;
>  			#cooling-cells = <2>; /* min followed by max */
>  			dynamic-power-coefficient = <100>;
>  			cpu-idle-states = <&CPU_SLEEP &CLUSTER_SLEEP>;
> +			i-cache-size = <0x8000>;
> +			i-cache-line-size = <64>;
> +			i-cache-sets = <256>;
> +			d-cache-size = <0x8000>;
> +			d-cache-line-size = <64>;
> +			d-cache-sets = <128>;
> +			next-level-cache = <&l2_cache_l>;
>  		};
> 
>  		cpu_b0: cpu@100 {
>  			device_type = "cpu";
>  			compatible = "arm,cortex-a72";
>  			reg = <0x0 0x100>;
>  			enable-method = "psci";
>  			capacity-dmips-mhz = <1024>;
>  			clocks = <&cru ARMCLKB>;
>  			#cooling-cells = <2>; /* min followed by max */
>  			dynamic-power-coefficient = <436>;
>  			cpu-idle-states = <&CPU_SLEEP &CLUSTER_SLEEP>;
> +			i-cache-size = <0xC000>;
> +			i-cache-line-size = <64>;
> +			i-cache-sets = <256>;
> +			d-cache-size = <0x8000>;
> +			d-cache-line-size = <64>;
> +			d-cache-sets = <256>;
> +			next-level-cache = <&l2_cache_b>;
> 
>  			thermal-idle {
>  				#cooling-cells = <2>;
> @@ -142,14 +177,39 @@ cpu_b1: cpu@101 {
>  			#cooling-cells = <2>; /* min followed by max */
>  			dynamic-power-coefficient = <436>;
>  			cpu-idle-states = <&CPU_SLEEP &CLUSTER_SLEEP>;
> +			i-cache-size = <0xC000>;
> +			i-cache-line-size = <64>;
> +			i-cache-sets = <256>;
> +			d-cache-size = <0x8000>;
> +			d-cache-line-size = <64>;
> +			d-cache-sets = <256>;
> +			next-level-cache = <&l2_cache_b>;
> 
>  			thermal-idle {
>  				#cooling-cells = <2>;
>  				duration-us = <10000>;
>  				exit-latency-us = <500>;
>  			};
>  		};
> 
> +		l2_cache_l: l2-cache-cluster0 {
> +			compatible = "cache";
> +			cache-level = <2>;
> +			cache-unified;
> +			cache-size = <0x80000>;
> +			cache-line-size = <64>;
> +			cache-sets = <512>;
> +		};
> +
> +		l2_cache_b: l2-cache-cluster1 {
> +			compatible = "cache";
> +			cache-level = <2>;
> +			cache-unified;
> +			cache-size = <0x100000>;
> +			cache-line-size = <64>;
> +			cache-sets = <1024>;
> +		};
> +
>  		idle-states {
>  			entry-method = "psci";
> 
> 
> _______________________________________________
> Linux-rockchip mailing list
> Linux-rockchip@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-rockchip
Krzysztof Kozlowski Jan. 4, 2024, 8:51 a.m. UTC | #2
On 04/01/2024 09:50, Dragan Simic wrote:
> Hello,
> 
> Just checking, is there something preventing this patch from becoming 
> accepted?  I'd appreciate if you'd provide some feedback and let me know 
> if there's something in the patch that needs adjusting.

Merge window? Is it a fix? If not, the cutoff is around rc5-rc7,
depending on your SoC maintainer preferences.

Best regards,
Krzysztof
Dragan Simic Jan. 4, 2024, 8:55 a.m. UTC | #3
On 2024-01-04 09:51, Krzysztof Kozlowski wrote:
> On 04/01/2024 09:50, Dragan Simic wrote:
>> Hello,
>> 
>> Just checking, is there something preventing this patch from becoming
>> accepted?  I'd appreciate if you'd provide some feedback and let me 
>> know
>> if there's something in the patch that needs adjusting.
> 
> Merge window? Is it a fix? If not, the cutoff is around rc5-rc7,
> depending on your SoC maintainer preferences.

Ah, I see, thanks for the clarification.  It isn't a bugfix, so I'll 
send the patch again during the next merge window.
Heiko Stuebner Jan. 4, 2024, 9:07 a.m. UTC | #4
Am Donnerstag, 4. Januar 2024, 09:55:35 CET schrieb Dragan Simic:
> On 2024-01-04 09:51, Krzysztof Kozlowski wrote:
> > On 04/01/2024 09:50, Dragan Simic wrote:
> >> Hello,
> >> 
> >> Just checking, is there something preventing this patch from becoming
> >> accepted?  I'd appreciate if you'd provide some feedback and let me 
> >> know
> >> if there's something in the patch that needs adjusting.
> > 
> > Merge window? Is it a fix? If not, the cutoff is around rc5-rc7,
> > depending on your SoC maintainer preferences.
> 
> Ah, I see, thanks for the clarification.  It isn't a bugfix, so I'll 
> send the patch again during the next merge window.

no need to resend.

The main thing holding the patch back was xmas ;-) .

But as Krzysztof wrote, the merge-window is upon us, so I'll pick this up
for 6.9 .

Thanks
Heiko
Dragan Simic Jan. 4, 2024, 9:12 a.m. UTC | #5
On 2024-01-04 10:07, Heiko Stübner wrote:
> Am Donnerstag, 4. Januar 2024, 09:55:35 CET schrieb Dragan Simic:
>> On 2024-01-04 09:51, Krzysztof Kozlowski wrote:
>> > On 04/01/2024 09:50, Dragan Simic wrote:
>> >> Hello,
>> >>
>> >> Just checking, is there something preventing this patch from becoming
>> >> accepted?  I'd appreciate if you'd provide some feedback and let me
>> >> know
>> >> if there's something in the patch that needs adjusting.
>> >
>> > Merge window? Is it a fix? If not, the cutoff is around rc5-rc7,
>> > depending on your SoC maintainer preferences.
>> 
>> Ah, I see, thanks for the clarification.  It isn't a bugfix, so I'll
>> send the patch again during the next merge window.
> 
> no need to resend.
> 
> The main thing holding the patch back was xmas ;-) .
> 
> But as Krzysztof wrote, the merge-window is upon us, so I'll pick this 
> up
> for 6.9 .

Awesome, thank you! :)  I'll move forward and prepare a few more similar 
patches for other Rockchip SoCs, after I recover from some nasty flu 
I've unfortunately contracted.
Heiko Stuebner Jan. 25, 2024, 9:12 p.m. UTC | #6
On Fri, 15 Dec 2023 06:00:33 +0100, Dragan Simic wrote:
> Add missing cache information to the Rockchip RK3399 SoC dtsi.  The specified
> values were derived by hand from the cache size specifications available from
> the RK3399 datasheet;  for future reference, here's a brief summary:
> 
>   - Each Cortex-A72 core has 48 KB of L1 instruction cache and
>     32 KB of L1 data cache available, four-way set associative
>   - Each Cortex-A53 core core has 32 KB of instruction cache and
>     32 KB of L1 data cache available, four-way set associative
>   - The big (A72) cluster has 1 MB of unified L2 cache available
>   - The little (A53) cluster has 512 KB of unified L2 cache available
> 
> [...]

Applied, thanks!

[1/1] arm64: dts: rockchip: Add cache information to the SoC dtsi for RK3399
      commit: b72633ba5cfa932405832de25d0f0a11716903b4

Best regards,
Dragan Simic Jan. 25, 2024, 10:27 p.m. UTC | #7
On 2024-01-25 22:12, Heiko Stuebner wrote:
> On Fri, 15 Dec 2023 06:00:33 +0100, Dragan Simic wrote:
>> Add missing cache information to the Rockchip RK3399 SoC dtsi.  The 
>> specified
>> values were derived by hand from the cache size specifications 
>> available from
>> the RK3399 datasheet;  for future reference, here's a brief summary:
>> 
>>   - Each Cortex-A72 core has 48 KB of L1 instruction cache and
>>     32 KB of L1 data cache available, four-way set associative
>>   - Each Cortex-A53 core core has 32 KB of instruction cache and
>>     32 KB of L1 data cache available, four-way set associative
>>   - The big (A72) cluster has 1 MB of unified L2 cache available
>>   - The little (A53) cluster has 512 KB of unified L2 cache available
>> 
>> [...]
> 
> Applied, thanks!
> 
> [1/1] arm64: dts: rockchip: Add cache information to the SoC dtsi for 
> RK3399
>       commit: b72633ba5cfa932405832de25d0f0a11716903b4

Great, thank you!
Dragan Simic March 3, 2024, 7:10 p.m. UTC | #8
Hello Heiko,

On 2024-01-04 10:12, Dragan Simic wrote:
> On 2024-01-04 10:07, Heiko Stübner wrote:
>> Am Donnerstag, 4. Januar 2024, 09:55:35 CET schrieb Dragan Simic:
>>> On 2024-01-04 09:51, Krzysztof Kozlowski wrote:
>>> > On 04/01/2024 09:50, Dragan Simic wrote:
>>> >> Just checking, is there something preventing this patch from becoming
>>> >> accepted?  I'd appreciate if you'd provide some feedback and let me
>>> >> know if there's something in the patch that needs adjusting.
>>> >
>>> > Merge window? Is it a fix? If not, the cutoff is around rc5-rc7,
>>> > depending on your SoC maintainer preferences.
>>> 
>>> Ah, I see, thanks for the clarification.  It isn't a bugfix, so I'll
>>> send the patch again during the next merge window.
>> 
>> no need to resend.
>> 
>> The main thing holding the patch back was xmas ;-) .
>> 
>> But as Krzysztof wrote, the merge-window is upon us, so I'll pick this 
>> up
>> for 6.9 .
> 
> Awesome, thank you! :)  I'll move forward and prepare a few more
> similar patches for other Rockchip SoCs, after I recover from some
> nasty flu I've unfortunately contracted.

It took me a while, but pretty much the same patches for the RK3328 [1]
and the RK356x [2] are now on the mailing list.  Please, have a look.

[1] 
https://lore.kernel.org/linux-rockchip/e61173d87f5f41af80e6f87f8820ce8d06f7c20c.1709491127.git.dsimic@manjaro.org/
[2] 
https://lore.kernel.org/linux-rockchip/2285ee41e165813011220f9469e28697923aa6e0.1709491108.git.dsimic@manjaro.org/
diff mbox series

Patch

diff --git a/arch/arm64/boot/dts/rockchip/rk3399.dtsi b/arch/arm64/boot/dts/rockchip/rk3399.dtsi
index da0dfb237f85..f38c27f87cc9 100644
--- a/arch/arm64/boot/dts/rockchip/rk3399.dtsi
+++ b/arch/arm64/boot/dts/rockchip/rk3399.dtsi
@@ -41,22 +41,22 @@  cpus {
 		#size-cells = <0>;
 
 		cpu-map {
-			cluster0 {
+			cluster0 {	/* Cortex-A53 */
 				core0 {
 					cpu = <&cpu_l0>;
 				};
 				core1 {
 					cpu = <&cpu_l1>;
 				};
 				core2 {
 					cpu = <&cpu_l2>;
 				};
 				core3 {
 					cpu = <&cpu_l3>;
 				};
 			};
 
-			cluster1 {
+			cluster1 {	/* Cortex-A72 */
 				core0 {
 					cpu = <&cpu_b0>;
 				};
@@ -76,54 +76,89 @@  cpu_l0: cpu@0 {
 			#cooling-cells = <2>; /* min followed by max */
 			dynamic-power-coefficient = <100>;
 			cpu-idle-states = <&CPU_SLEEP &CLUSTER_SLEEP>;
+			i-cache-size = <0x8000>;
+			i-cache-line-size = <64>;
+			i-cache-sets = <256>;
+			d-cache-size = <0x8000>;
+			d-cache-line-size = <64>;
+			d-cache-sets = <128>;
+			next-level-cache = <&l2_cache_l>;
 		};
 
 		cpu_l1: cpu@1 {
 			device_type = "cpu";
 			compatible = "arm,cortex-a53";
 			reg = <0x0 0x1>;
 			enable-method = "psci";
 			capacity-dmips-mhz = <485>;
 			clocks = <&cru ARMCLKL>;
 			#cooling-cells = <2>; /* min followed by max */
 			dynamic-power-coefficient = <100>;
 			cpu-idle-states = <&CPU_SLEEP &CLUSTER_SLEEP>;
+			i-cache-size = <0x8000>;
+			i-cache-line-size = <64>;
+			i-cache-sets = <256>;
+			d-cache-size = <0x8000>;
+			d-cache-line-size = <64>;
+			d-cache-sets = <128>;
+			next-level-cache = <&l2_cache_l>;
 		};
 
 		cpu_l2: cpu@2 {
 			device_type = "cpu";
 			compatible = "arm,cortex-a53";
 			reg = <0x0 0x2>;
 			enable-method = "psci";
 			capacity-dmips-mhz = <485>;
 			clocks = <&cru ARMCLKL>;
 			#cooling-cells = <2>; /* min followed by max */
 			dynamic-power-coefficient = <100>;
 			cpu-idle-states = <&CPU_SLEEP &CLUSTER_SLEEP>;
+			i-cache-size = <0x8000>;
+			i-cache-line-size = <64>;
+			i-cache-sets = <256>;
+			d-cache-size = <0x8000>;
+			d-cache-line-size = <64>;
+			d-cache-sets = <128>;
+			next-level-cache = <&l2_cache_l>;
 		};
 
 		cpu_l3: cpu@3 {
 			device_type = "cpu";
 			compatible = "arm,cortex-a53";
 			reg = <0x0 0x3>;
 			enable-method = "psci";
 			capacity-dmips-mhz = <485>;
 			clocks = <&cru ARMCLKL>;
 			#cooling-cells = <2>; /* min followed by max */
 			dynamic-power-coefficient = <100>;
 			cpu-idle-states = <&CPU_SLEEP &CLUSTER_SLEEP>;
+			i-cache-size = <0x8000>;
+			i-cache-line-size = <64>;
+			i-cache-sets = <256>;
+			d-cache-size = <0x8000>;
+			d-cache-line-size = <64>;
+			d-cache-sets = <128>;
+			next-level-cache = <&l2_cache_l>;
 		};
 
 		cpu_b0: cpu@100 {
 			device_type = "cpu";
 			compatible = "arm,cortex-a72";
 			reg = <0x0 0x100>;
 			enable-method = "psci";
 			capacity-dmips-mhz = <1024>;
 			clocks = <&cru ARMCLKB>;
 			#cooling-cells = <2>; /* min followed by max */
 			dynamic-power-coefficient = <436>;
 			cpu-idle-states = <&CPU_SLEEP &CLUSTER_SLEEP>;
+			i-cache-size = <0xC000>;
+			i-cache-line-size = <64>;
+			i-cache-sets = <256>;
+			d-cache-size = <0x8000>;
+			d-cache-line-size = <64>;
+			d-cache-sets = <256>;
+			next-level-cache = <&l2_cache_b>;
 
 			thermal-idle {
 				#cooling-cells = <2>;
@@ -142,14 +177,39 @@  cpu_b1: cpu@101 {
 			#cooling-cells = <2>; /* min followed by max */
 			dynamic-power-coefficient = <436>;
 			cpu-idle-states = <&CPU_SLEEP &CLUSTER_SLEEP>;
+			i-cache-size = <0xC000>;
+			i-cache-line-size = <64>;
+			i-cache-sets = <256>;
+			d-cache-size = <0x8000>;
+			d-cache-line-size = <64>;
+			d-cache-sets = <256>;
+			next-level-cache = <&l2_cache_b>;
 
 			thermal-idle {
 				#cooling-cells = <2>;
 				duration-us = <10000>;
 				exit-latency-us = <500>;
 			};
 		};
 
+		l2_cache_l: l2-cache-cluster0 {
+			compatible = "cache";
+			cache-level = <2>;
+			cache-unified;
+			cache-size = <0x80000>;
+			cache-line-size = <64>;
+			cache-sets = <512>;
+		};
+
+		l2_cache_b: l2-cache-cluster1 {
+			compatible = "cache";
+			cache-level = <2>;
+			cache-unified;
+			cache-size = <0x100000>;
+			cache-line-size = <64>;
+			cache-sets = <1024>;
+		};
+
 		idle-states {
 			entry-method = "psci";