<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">From d3cf2859a056273400fbdf9d389b75750ff6ca5e Mon Sep 17 00:00:00 2001
From: David Abdurachmanov &lt;david.abdurachmanov@sifive.com&gt;
Date: Fri, 14 May 2021 05:27:51 -0700
Subject: [PATCH 6/7] riscv: sifive: unleashed: define opp table (cpufreq)

Source: https://github.com/sifive/riscv-linux/commits/dev/paulw/cpufreq-dt-aloe-v5.3-rc4

Signed-off-by: David Abdurachmanov &lt;david.abdurachmanov@sifive.com&gt;
---
 arch/riscv/Kconfig                                 |  8 +++++
 arch/riscv/boot/dts/sifive/fu540-c000.dtsi         |  5 ++++
 .../riscv/boot/dts/sifive/hifive-unleashed-a00.dts | 34 ++++++++++++++++++++++
 3 files changed, 47 insertions(+)

--- a/arch/riscv/Kconfig
+++ b/arch/riscv/Kconfig
@@ -711,6 +711,14 @@ config PORTABLE
 	select OF
 	select MMU
 
+menu "CPU Power Management"
+
+source "drivers/cpuidle/Kconfig"
+
+source "drivers/cpufreq/Kconfig"
+
+endmenu
+
 menu "Power management options"
 
 source "kernel/power/Kconfig"
--- a/arch/riscv/boot/dts/sifive/fu540-c000.dtsi
+++ b/arch/riscv/boot/dts/sifive/fu540-c000.dtsi
@@ -30,6 +30,7 @@
 			i-cache-size = &lt;16384&gt;;
 			reg = &lt;0&gt;;
 			riscv,isa = "rv64imac";
+			clocks = &lt;&amp;prci FU540_PRCI_CLK_COREPLL&gt;;
 			status = "disabled";
 			cpu0_intc: interrupt-controller {
 				#interrupt-cells = &lt;1&gt;;
@@ -54,6 +55,7 @@
 			reg = &lt;1&gt;;
 			riscv,isa = "rv64imafdc";
 			tlb-split;
+			clocks = &lt;&amp;prci FU540_PRCI_CLK_COREPLL&gt;;
 			next-level-cache = &lt;&amp;l2cache&gt;;
 			cpu1_intc: interrupt-controller {
 				#interrupt-cells = &lt;1&gt;;
@@ -78,6 +80,7 @@
 			reg = &lt;2&gt;;
 			riscv,isa = "rv64imafdc";
 			tlb-split;
+			clocks = &lt;&amp;prci FU540_PRCI_CLK_COREPLL&gt;;
 			next-level-cache = &lt;&amp;l2cache&gt;;
 			cpu2_intc: interrupt-controller {
 				#interrupt-cells = &lt;1&gt;;
@@ -102,6 +105,7 @@
 			reg = &lt;3&gt;;
 			riscv,isa = "rv64imafdc";
 			tlb-split;
+			clocks = &lt;&amp;prci FU540_PRCI_CLK_COREPLL&gt;;
 			next-level-cache = &lt;&amp;l2cache&gt;;
 			cpu3_intc: interrupt-controller {
 				#interrupt-cells = &lt;1&gt;;
@@ -126,6 +130,7 @@
 			reg = &lt;4&gt;;
 			riscv,isa = "rv64imafdc";
 			tlb-split;
+			clocks = &lt;&amp;prci FU540_PRCI_CLK_COREPLL&gt;;
 			next-level-cache = &lt;&amp;l2cache&gt;;
 			cpu4_intc: interrupt-controller {
 				#interrupt-cells = &lt;1&gt;;
--- a/arch/riscv/boot/dts/sifive/hifive-unleashed-a00.dts
+++ b/arch/riscv/boot/dts/sifive/hifive-unleashed-a00.dts
@@ -80,6 +80,40 @@
 			label = "d4";
 		};
 	};
+
+	fu540_c000_opp_table: opp-table {
+		compatible = "operating-points-v2";
+		opp-shared;
+
+		opp-350000000 {
+			opp-hz = /bits/ 64 &lt;350000000&gt;;
+		};
+		opp-700000000 {
+			opp-hz = /bits/ 64 &lt;700000000&gt;;
+		};
+		opp-999999999 {
+			opp-hz = /bits/ 64 &lt;999999999&gt;;
+		};
+		opp-1400000000 {
+			opp-hz = /bits/ 64 &lt;1400000000&gt;;
+		};
+	};
+};
+
+&amp;cpu0 {
+	operating-points-v2 = &lt;&amp;fu540_c000_opp_table&gt;;
+};
+&amp;cpu1 {
+	operating-points-v2 = &lt;&amp;fu540_c000_opp_table&gt;;
+};
+&amp;cpu2 {
+	operating-points-v2 = &lt;&amp;fu540_c000_opp_table&gt;;
+};
+&amp;cpu3 {
+	operating-points-v2 = &lt;&amp;fu540_c000_opp_table&gt;;
+};
+&amp;cpu4 {
+	operating-points-v2 = &lt;&amp;fu540_c000_opp_table&gt;;
 };
 
 &amp;uart0 {
</pre></body></html>