]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ARM: dts: bcm2835/6: Add the missing L1/L2 cache information
authorRichard Schleich <rs@noreya.tech>
Sat, 5 Feb 2022 19:59:11 +0000 (20:59 +0100)
committerFlorian Fainelli <f.fainelli@gmail.com>
Fri, 11 Feb 2022 22:24:48 +0000 (14:24 -0800)
This patch adds the cache info for the BCM2835 and BCM2836.
However, while testing I noticed that this is
not implemented for ARMv6/7.
Basically arch/arm/kernel/cacheinfo.c and other topology
related code is missing.
Since the work is already done and this has no negative effects,
I am submitting it for future/documentation purposes.

Signed-off-by: Richard Schleich <rs@noreya.tech>
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
arch/arm/boot/dts/bcm2835.dtsi
arch/arm/boot/dts/bcm2836.dtsi

index 0549686134ea67a4bd9567270138a09d2dd0cb94..1c90e5a44283c651ad27edad242e811c821323a8 100644 (file)
                        device_type = "cpu";
                        compatible = "arm,arm1176jzf-s";
                        reg = <0x0>;
+                       /* Source for d/i-cache-line-size and d/i-cache-sets
+                        * https://developer.arm.com/documentation/ddi0301
+                        * /h/level-one-memory-system/cache-organization?lang=en
+                        *
+                        * Source for d/i-cache-size
+                        * https://forums.raspberrypi.com/viewtopic.php?t=98428
+                        *
+                        * NOTE: The BCM2835 has a L2 cache but it is dedicated to the GPU
+                        * It can be shared with the CPU through fw settings,
+                        * but this is not recommended.
+                        */
+                       d-cache-size = <0x4000>;
+                       d-cache-line-size = <16>;
+                       d-cache-sets = <256>; // 16KiB(size)/16(line-size)=1024ways/4-way set
+                       i-cache-size = <0x4000>;
+                       i-cache-line-size = <16>;
+                       i-cache-sets = <256>; // 16KiB(size)/16(line-size)=1024ways/4-way set
                };
        };
 
index b390006aef79a33dd7817039c7df9bb03bdb7dd6..534dacfc4dd54db2ad3669c06d44f327316736d6 100644 (file)
                #size-cells = <0>;
                enable-method = "brcm,bcm2836-smp";
 
+               /* Source for d/i-cache-line-size and d/i-cache-sets
+                * https://developer.arm.com/documentation/ddi0464/f/L1-Memory-System
+                * /About-the-L1-memory-system?lang=en
+                *
+                * Source for d/i-cache-size
+                * https://forums.raspberrypi.com/viewtopic.php?t=98428
+                */
+
                v7_cpu0: cpu@0 {
                        device_type = "cpu";
                        compatible = "arm,cortex-a7";
                        reg = <0xf00>;
                        clock-frequency = <800000000>;
+                       d-cache-size = <0x8000>;
+                       d-cache-line-size = <64>;
+                       d-cache-sets = <128>; // 32KiB(size)/64(line-size)=512ways/4-way set
+                       i-cache-size = <0x8000>;
+                       i-cache-line-size = <32>;
+                       i-cache-sets = <512>; // 32KiB(size)/32(line-size)=1024ways/2-way set
+                       next-level-cache = <&l2>;
                };
 
                v7_cpu1: cpu@1 {
                        compatible = "arm,cortex-a7";
                        reg = <0xf01>;
                        clock-frequency = <800000000>;
+                       d-cache-size = <0x8000>;
+                       d-cache-line-size = <64>;
+                       d-cache-sets = <128>; // 32KiB(size)/64(line-size)=512ways/4-way set
+                       i-cache-size = <0x8000>;
+                       i-cache-line-size = <32>;
+                       i-cache-sets = <512>; // 32KiB(size)/32(line-size)=1024ways/2-way set
+                       next-level-cache = <&l2>;
                };
 
                v7_cpu2: cpu@2 {
                        compatible = "arm,cortex-a7";
                        reg = <0xf02>;
                        clock-frequency = <800000000>;
+                       d-cache-size = <0x8000>;
+                       d-cache-line-size = <64>;
+                       d-cache-sets = <128>; // 32KiB(size)/64(line-size)=512ways/4-way set
+                       i-cache-size = <0x8000>;
+                       i-cache-line-size = <32>;
+                       i-cache-sets = <512>; // 32KiB(size)/32(line-size)=1024ways/2-way set
+                       next-level-cache = <&l2>;
                };
 
                v7_cpu3: cpu@3 {
                        compatible = "arm,cortex-a7";
                        reg = <0xf03>;
                        clock-frequency = <800000000>;
+                       d-cache-size = <0x8000>;
+                       d-cache-line-size = <64>;
+                       d-cache-sets = <128>; // 32KiB(size)/64(line-size)=512ways/4-way set
+                       i-cache-size = <0x8000>;
+                       i-cache-line-size = <32>;
+                       i-cache-sets = <512>; // 32KiB(size)/32(line-size)=1024ways/2-way set
+                       next-level-cache = <&l2>;
+               };
+
+               /* Source for cache-line-size + cache-sets
+                * https://developer.arm.com/documentation/ddi0464/f/L2-Memory-System
+                * /About-the-L2-Memory-system?lang=en
+                * Source for cache-size
+                * https://forums.raspberrypi.com/viewtopic.php?t=98428
+                */
+               l2: l2-cache0 {
+                       compatible = "cache";
+                       cache-size = <0x80000>;
+                       cache-line-size = <64>;
+                       cache-sets = <1024>; // 512KiB(size)/64(line-size)=8192ways/8-way set
+                       cache-level = <2>;
                };
        };
 };