162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci#include "bcm283x.dtsi"
362306a36Sopenharmony_ci#include "bcm2835-common.dtsi"
462306a36Sopenharmony_ci
562306a36Sopenharmony_ci/ {
662306a36Sopenharmony_ci	compatible = "brcm,bcm2836";
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci	soc {
962306a36Sopenharmony_ci		ranges = <0x7e000000 0x3f000000 0x1000000>,
1062306a36Sopenharmony_ci			 <0x40000000 0x40000000 0x00001000>;
1162306a36Sopenharmony_ci		dma-ranges = <0xc0000000 0x00000000 0x3f000000>;
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci		local_intc: interrupt-controller@40000000 {
1462306a36Sopenharmony_ci			compatible = "brcm,bcm2836-l1-intc";
1562306a36Sopenharmony_ci			reg = <0x40000000 0x100>;
1662306a36Sopenharmony_ci			interrupt-controller;
1762306a36Sopenharmony_ci			#interrupt-cells = <2>;
1862306a36Sopenharmony_ci			interrupt-parent = <&local_intc>;
1962306a36Sopenharmony_ci		};
2062306a36Sopenharmony_ci	};
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_ci	arm-pmu {
2362306a36Sopenharmony_ci		compatible = "arm,cortex-a7-pmu";
2462306a36Sopenharmony_ci		interrupt-parent = <&local_intc>;
2562306a36Sopenharmony_ci		interrupts = <9 IRQ_TYPE_LEVEL_HIGH>;
2662306a36Sopenharmony_ci	};
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci	timer {
2962306a36Sopenharmony_ci		compatible = "arm,armv7-timer";
3062306a36Sopenharmony_ci		interrupt-parent = <&local_intc>;
3162306a36Sopenharmony_ci		interrupts = <0 IRQ_TYPE_LEVEL_HIGH>, // PHYS_SECURE_PPI
3262306a36Sopenharmony_ci			     <1 IRQ_TYPE_LEVEL_HIGH>, // PHYS_NONSECURE_PPI
3362306a36Sopenharmony_ci			     <3 IRQ_TYPE_LEVEL_HIGH>, // VIRT_PPI
3462306a36Sopenharmony_ci			     <2 IRQ_TYPE_LEVEL_HIGH>; // HYP_PPI
3562306a36Sopenharmony_ci		always-on;
3662306a36Sopenharmony_ci	};
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_ci	cpus: cpus {
3962306a36Sopenharmony_ci		#address-cells = <1>;
4062306a36Sopenharmony_ci		#size-cells = <0>;
4162306a36Sopenharmony_ci		enable-method = "brcm,bcm2836-smp";
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_ci		/* Source for d/i-cache-line-size and d/i-cache-sets
4462306a36Sopenharmony_ci		 * https://developer.arm.com/documentation/ddi0464/f/L1-Memory-System
4562306a36Sopenharmony_ci		 * /About-the-L1-memory-system?lang=en
4662306a36Sopenharmony_ci		 *
4762306a36Sopenharmony_ci		 * Source for d/i-cache-size
4862306a36Sopenharmony_ci		 * https://forums.raspberrypi.com/viewtopic.php?t=98428
4962306a36Sopenharmony_ci		 */
5062306a36Sopenharmony_ci
5162306a36Sopenharmony_ci		v7_cpu0: cpu@0 {
5262306a36Sopenharmony_ci			device_type = "cpu";
5362306a36Sopenharmony_ci			compatible = "arm,cortex-a7";
5462306a36Sopenharmony_ci			reg = <0xf00>;
5562306a36Sopenharmony_ci			clock-frequency = <800000000>;
5662306a36Sopenharmony_ci			d-cache-size = <0x8000>;
5762306a36Sopenharmony_ci			d-cache-line-size = <64>;
5862306a36Sopenharmony_ci			d-cache-sets = <128>; // 32KiB(size)/64(line-size)=512ways/4-way set
5962306a36Sopenharmony_ci			i-cache-size = <0x8000>;
6062306a36Sopenharmony_ci			i-cache-line-size = <32>;
6162306a36Sopenharmony_ci			i-cache-sets = <512>; // 32KiB(size)/32(line-size)=1024ways/2-way set
6262306a36Sopenharmony_ci			next-level-cache = <&l2>;
6362306a36Sopenharmony_ci		};
6462306a36Sopenharmony_ci
6562306a36Sopenharmony_ci		v7_cpu1: cpu@1 {
6662306a36Sopenharmony_ci			device_type = "cpu";
6762306a36Sopenharmony_ci			compatible = "arm,cortex-a7";
6862306a36Sopenharmony_ci			reg = <0xf01>;
6962306a36Sopenharmony_ci			clock-frequency = <800000000>;
7062306a36Sopenharmony_ci			d-cache-size = <0x8000>;
7162306a36Sopenharmony_ci			d-cache-line-size = <64>;
7262306a36Sopenharmony_ci			d-cache-sets = <128>; // 32KiB(size)/64(line-size)=512ways/4-way set
7362306a36Sopenharmony_ci			i-cache-size = <0x8000>;
7462306a36Sopenharmony_ci			i-cache-line-size = <32>;
7562306a36Sopenharmony_ci			i-cache-sets = <512>; // 32KiB(size)/32(line-size)=1024ways/2-way set
7662306a36Sopenharmony_ci			next-level-cache = <&l2>;
7762306a36Sopenharmony_ci		};
7862306a36Sopenharmony_ci
7962306a36Sopenharmony_ci		v7_cpu2: cpu@2 {
8062306a36Sopenharmony_ci			device_type = "cpu";
8162306a36Sopenharmony_ci			compatible = "arm,cortex-a7";
8262306a36Sopenharmony_ci			reg = <0xf02>;
8362306a36Sopenharmony_ci			clock-frequency = <800000000>;
8462306a36Sopenharmony_ci			d-cache-size = <0x8000>;
8562306a36Sopenharmony_ci			d-cache-line-size = <64>;
8662306a36Sopenharmony_ci			d-cache-sets = <128>; // 32KiB(size)/64(line-size)=512ways/4-way set
8762306a36Sopenharmony_ci			i-cache-size = <0x8000>;
8862306a36Sopenharmony_ci			i-cache-line-size = <32>;
8962306a36Sopenharmony_ci			i-cache-sets = <512>; // 32KiB(size)/32(line-size)=1024ways/2-way set
9062306a36Sopenharmony_ci			next-level-cache = <&l2>;
9162306a36Sopenharmony_ci		};
9262306a36Sopenharmony_ci
9362306a36Sopenharmony_ci		v7_cpu3: cpu@3 {
9462306a36Sopenharmony_ci			device_type = "cpu";
9562306a36Sopenharmony_ci			compatible = "arm,cortex-a7";
9662306a36Sopenharmony_ci			reg = <0xf03>;
9762306a36Sopenharmony_ci			clock-frequency = <800000000>;
9862306a36Sopenharmony_ci			d-cache-size = <0x8000>;
9962306a36Sopenharmony_ci			d-cache-line-size = <64>;
10062306a36Sopenharmony_ci			d-cache-sets = <128>; // 32KiB(size)/64(line-size)=512ways/4-way set
10162306a36Sopenharmony_ci			i-cache-size = <0x8000>;
10262306a36Sopenharmony_ci			i-cache-line-size = <32>;
10362306a36Sopenharmony_ci			i-cache-sets = <512>; // 32KiB(size)/32(line-size)=1024ways/2-way set
10462306a36Sopenharmony_ci			next-level-cache = <&l2>;
10562306a36Sopenharmony_ci		};
10662306a36Sopenharmony_ci
10762306a36Sopenharmony_ci		/* Source for cache-line-size + cache-sets
10862306a36Sopenharmony_ci		 * https://developer.arm.com/documentation/ddi0464/f/L2-Memory-System
10962306a36Sopenharmony_ci		 * /About-the-L2-Memory-system?lang=en
11062306a36Sopenharmony_ci		 * Source for cache-size
11162306a36Sopenharmony_ci		 * https://forums.raspberrypi.com/viewtopic.php?t=98428
11262306a36Sopenharmony_ci		 */
11362306a36Sopenharmony_ci		l2: l2-cache0 {
11462306a36Sopenharmony_ci			compatible = "cache";
11562306a36Sopenharmony_ci			cache-unified;
11662306a36Sopenharmony_ci			cache-size = <0x80000>;
11762306a36Sopenharmony_ci			cache-line-size = <64>;
11862306a36Sopenharmony_ci			cache-sets = <1024>; // 512KiB(size)/64(line-size)=8192ways/8-way set
11962306a36Sopenharmony_ci			cache-level = <2>;
12062306a36Sopenharmony_ci		};
12162306a36Sopenharmony_ci	};
12262306a36Sopenharmony_ci};
12362306a36Sopenharmony_ci
12462306a36Sopenharmony_ci/* Make the BCM2835-style global interrupt controller be a child of the
12562306a36Sopenharmony_ci * CPU-local interrupt controller.
12662306a36Sopenharmony_ci */
12762306a36Sopenharmony_ci&intc {
12862306a36Sopenharmony_ci	compatible = "brcm,bcm2836-armctrl-ic";
12962306a36Sopenharmony_ci	reg = <0x7e00b200 0x200>;
13062306a36Sopenharmony_ci	interrupt-parent = <&local_intc>;
13162306a36Sopenharmony_ci	interrupts = <8 IRQ_TYPE_LEVEL_HIGH>;
13262306a36Sopenharmony_ci};
13362306a36Sopenharmony_ci
13462306a36Sopenharmony_ci&cpu_thermal {
13562306a36Sopenharmony_ci	coefficients = <(-538)	407000>;
13662306a36Sopenharmony_ci};
13762306a36Sopenharmony_ci
13862306a36Sopenharmony_ci/* enable thermal sensor with the correct compatible property set */
13962306a36Sopenharmony_ci&thermal {
14062306a36Sopenharmony_ci	compatible = "brcm,bcm2836-thermal";
14162306a36Sopenharmony_ci	status = "okay";
14262306a36Sopenharmony_ci};
143