arm64: tegra: Add CPU OPP tables and interconnects property
authorSumit Gupta <sumitg@nvidia.com>
Thu, 11 May 2023 17:32:11 +0000 (23:02 +0530)
committerThierry Reding <treding@nvidia.com>
Tue, 16 May 2023 10:13:20 +0000 (12:13 +0200)
Add OPP table and interconnects property to scale DDR frequency with
CPU frequency for better performance. Each operating point entry of
the OPP table has CPU freq to per MC channel bandwidth mapping.
One table is added for each cluster even though the table data is
same because the bandwidth request is per cluster. This is done
because OPP framework creates a single icc path and hence single
bandwidth request if the table is marked as 'opp-shared' and shared
among all clusters. For us, the OPP table data is same but the MC
Client ID argument to interconnects property is different for each
cluster. So, having per cluster table makes different icc path for
each cluster and helps to make per cluster BW requests.

Signed-off-by: Sumit Gupta <sumitg@nvidia.com>
Signed-off-by: Thierry Reding <treding@nvidia.com>
arch/arm64/boot/dts/nvidia/tegra234.dtsi

index 18b4c2b..97ed3e0 100644 (file)
 
                        enable-method = "psci";
 
+                       operating-points-v2 = <&cl0_opp_tbl>;
+                       interconnects = <&mc TEGRA_ICC_MC_CPU_CLUSTER0 &emc>;
+
                        i-cache-size = <65536>;
                        i-cache-line-size = <64>;
                        i-cache-sets = <256>;
 
                        enable-method = "psci";
 
+                       operating-points-v2 = <&cl0_opp_tbl>;
+                       interconnects = <&mc TEGRA_ICC_MC_CPU_CLUSTER0 &emc>;
+
                        i-cache-size = <65536>;
                        i-cache-line-size = <64>;
                        i-cache-sets = <256>;
 
                        enable-method = "psci";
 
+                       operating-points-v2 = <&cl0_opp_tbl>;
+                       interconnects = <&mc TEGRA_ICC_MC_CPU_CLUSTER0 &emc>;
+
                        i-cache-size = <65536>;
                        i-cache-line-size = <64>;
                        i-cache-sets = <256>;
 
                        enable-method = "psci";
 
+                       operating-points-v2 = <&cl0_opp_tbl>;
+                       interconnects = <&mc TEGRA_ICC_MC_CPU_CLUSTER0 &emc>;
+
                        i-cache-size = <65536>;
                        i-cache-line-size = <64>;
                        i-cache-sets = <256>;
 
                        enable-method = "psci";
 
+                       operating-points-v2 = <&cl1_opp_tbl>;
+                       interconnects = <&mc TEGRA_ICC_MC_CPU_CLUSTER1 &emc>;
+
                        i-cache-size = <65536>;
                        i-cache-line-size = <64>;
                        i-cache-sets = <256>;
 
                        enable-method = "psci";
 
+                       operating-points-v2 = <&cl1_opp_tbl>;
+                       interconnects = <&mc TEGRA_ICC_MC_CPU_CLUSTER1 &emc>;
+
                        i-cache-size = <65536>;
                        i-cache-line-size = <64>;
                        i-cache-sets = <256>;
 
                        enable-method = "psci";
 
+                       operating-points-v2 = <&cl1_opp_tbl>;
+                       interconnects = <&mc TEGRA_ICC_MC_CPU_CLUSTER1 &emc>;
+
                        i-cache-size = <65536>;
                        i-cache-line-size = <64>;
                        i-cache-sets = <256>;
 
                        enable-method = "psci";
 
+                       operating-points-v2 = <&cl1_opp_tbl>;
+                       interconnects = <&mc TEGRA_ICC_MC_CPU_CLUSTER1 &emc>;
+
                        i-cache-size = <65536>;
                        i-cache-line-size = <64>;
                        i-cache-sets = <256>;
 
                        enable-method = "psci";
 
+                       operating-points-v2 = <&cl2_opp_tbl>;
+                       interconnects = <&mc TEGRA_ICC_MC_CPU_CLUSTER2 &emc>;
+
                        i-cache-size = <65536>;
                        i-cache-line-size = <64>;
                        i-cache-sets = <256>;
 
                        enable-method = "psci";
 
+                       operating-points-v2 = <&cl2_opp_tbl>;
+                       interconnects = <&mc TEGRA_ICC_MC_CPU_CLUSTER2 &emc>;
+
                        i-cache-size = <65536>;
                        i-cache-line-size = <64>;
                        i-cache-sets = <256>;
 
                        enable-method = "psci";
 
+                       operating-points-v2 = <&cl2_opp_tbl>;
+                       interconnects = <&mc TEGRA_ICC_MC_CPU_CLUSTER2 &emc>;
+
                        i-cache-size = <65536>;
                        i-cache-line-size = <64>;
                        i-cache-sets = <256>;
 
                        enable-method = "psci";
 
+                       operating-points-v2 = <&cl2_opp_tbl>;
+                       interconnects = <&mc TEGRA_ICC_MC_CPU_CLUSTER2 &emc>;
+
                        i-cache-size = <65536>;
                        i-cache-line-size = <64>;
                        i-cache-sets = <256>;
                interrupt-parent = <&gic>;
                always-on;
        };
+
+       cl0_opp_tbl: opp-table-cluster0 {
+               compatible = "operating-points-v2";
+               opp-shared;
+
+               cl0_ch1_opp1: opp-115200000 {
+                         opp-hz = /bits/ 64 <115200000>;
+                         opp-peak-kBps = <816000>;
+               };
+
+               cl0_ch1_opp2: opp-268800000 {
+                       opp-hz = /bits/ 64 <268800000>;
+                       opp-peak-kBps = <816000>;
+               };
+
+               cl0_ch1_opp3: opp-422400000 {
+                       opp-hz = /bits/ 64 <422400000>;
+                       opp-peak-kBps = <816000>;
+               };
+
+               cl0_ch1_opp4: opp-576000000 {
+                       opp-hz = /bits/ 64 <576000000>;
+                       opp-peak-kBps = <816000>;
+               };
+
+               cl0_ch1_opp5: opp-729600000 {
+                       opp-hz = /bits/ 64 <729600000>;
+                       opp-peak-kBps = <816000>;
+               };
+
+               cl0_ch1_opp6: opp-883200000 {
+                       opp-hz = /bits/ 64 <883200000>;
+                       opp-peak-kBps = <816000>;
+               };
+
+               cl0_ch1_opp7: opp-1036800000 {
+                       opp-hz = /bits/ 64 <1036800000>;
+                       opp-peak-kBps = <816000>;
+               };
+
+               cl0_ch1_opp8: opp-1190400000 {
+                       opp-hz = /bits/ 64 <1190400000>;
+                       opp-peak-kBps = <816000>;
+               };
+
+               cl0_ch1_opp9: opp-1344000000 {
+                       opp-hz = /bits/ 64 <1344000000>;
+                       opp-peak-kBps = <1632000>;
+               };
+
+               cl0_ch1_opp10: opp-1497600000 {
+                       opp-hz = /bits/ 64 <1497600000>;
+                       opp-peak-kBps = <1632000>;
+               };
+
+               cl0_ch1_opp11: opp-1651200000 {
+                       opp-hz = /bits/ 64 <1651200000>;
+                       opp-peak-kBps = <2660000>;
+               };
+
+               cl0_ch1_opp12: opp-1804800000 {
+                       opp-hz = /bits/ 64 <1804800000>;
+                       opp-peak-kBps = <2660000>;
+               };
+
+               cl0_ch1_opp13: opp-1958400000 {
+                       opp-hz = /bits/ 64 <1958400000>;
+                       opp-peak-kBps = <3200000>;
+               };
+
+               cl0_ch1_opp14: opp-2112000000 {
+                       opp-hz = /bits/ 64 <2112000000>;
+                       opp-peak-kBps = <6400000>;
+               };
+
+               cl0_ch1_opp15: opp-2201600000 {
+                       opp-hz = /bits/ 64 <2201600000>;
+                       opp-peak-kBps = <6400000>;
+               };
+       };
+
+       cl1_opp_tbl: opp-table-cluster1 {
+               compatible = "operating-points-v2";
+               opp-shared;
+
+               cl1_ch1_opp1: opp-115200000 {
+                         opp-hz = /bits/ 64 <115200000>;
+                         opp-peak-kBps = <816000>;
+               };
+
+               cl1_ch1_opp2: opp-268800000 {
+                       opp-hz = /bits/ 64 <268800000>;
+                       opp-peak-kBps = <816000>;
+               };
+
+               cl1_ch1_opp3: opp-422400000 {
+                       opp-hz = /bits/ 64 <422400000>;
+                       opp-peak-kBps = <816000>;
+               };
+
+               cl1_ch1_opp4: opp-576000000 {
+                       opp-hz = /bits/ 64 <576000000>;
+                       opp-peak-kBps = <816000>;
+               };
+
+               cl1_ch1_opp5: opp-729600000 {
+                       opp-hz = /bits/ 64 <729600000>;
+                       opp-peak-kBps = <816000>;
+               };
+
+               cl1_ch1_opp6: opp-883200000 {
+                       opp-hz = /bits/ 64 <883200000>;
+                       opp-peak-kBps = <816000>;
+               };
+
+               cl1_ch1_opp7: opp-1036800000 {
+                       opp-hz = /bits/ 64 <1036800000>;
+                       opp-peak-kBps = <816000>;
+               };
+
+               cl1_ch1_opp8: opp-1190400000 {
+                       opp-hz = /bits/ 64 <1190400000>;
+                       opp-peak-kBps = <816000>;
+               };
+
+               cl1_ch1_opp9: opp-1344000000 {
+                       opp-hz = /bits/ 64 <1344000000>;
+                       opp-peak-kBps = <1632000>;
+               };
+
+               cl1_ch1_opp10: opp-1497600000 {
+                       opp-hz = /bits/ 64 <1497600000>;
+                       opp-peak-kBps = <1632000>;
+               };
+
+               cl1_ch1_opp11: opp-1651200000 {
+                       opp-hz = /bits/ 64 <1651200000>;
+                       opp-peak-kBps = <2660000>;
+               };
+
+               cl1_ch1_opp12: opp-1804800000 {
+                       opp-hz = /bits/ 64 <1804800000>;
+                       opp-peak-kBps = <2660000>;
+               };
+
+               cl1_ch1_opp13: opp-1958400000 {
+                       opp-hz = /bits/ 64 <1958400000>;
+                       opp-peak-kBps = <3200000>;
+               };
+
+               cl1_ch1_opp14: opp-2112000000 {
+                       opp-hz = /bits/ 64 <2112000000>;
+                       opp-peak-kBps = <6400000>;
+               };
+
+               cl1_ch1_opp15: opp-2201600000 {
+                       opp-hz = /bits/ 64 <2201600000>;
+                       opp-peak-kBps = <6400000>;
+               };
+       };
+
+       cl2_opp_tbl: opp-table-cluster2 {
+               compatible = "operating-points-v2";
+               opp-shared;
+
+               cl2_ch1_opp1: opp-115200000 {
+                         opp-hz = /bits/ 64 <115200000>;
+                         opp-peak-kBps = <816000>;
+               };
+
+               cl2_ch1_opp2: opp-268800000 {
+                       opp-hz = /bits/ 64 <268800000>;
+                       opp-peak-kBps = <816000>;
+               };
+
+               cl2_ch1_opp3: opp-422400000 {
+                       opp-hz = /bits/ 64 <422400000>;
+                       opp-peak-kBps = <816000>;
+               };
+
+               cl2_ch1_opp4: opp-576000000 {
+                       opp-hz = /bits/ 64 <576000000>;
+                       opp-peak-kBps = <816000>;
+               };
+
+               cl2_ch1_opp5: opp-729600000 {
+                       opp-hz = /bits/ 64 <729600000>;
+                       opp-peak-kBps = <816000>;
+               };
+
+               cl2_ch1_opp6: opp-883200000 {
+                       opp-hz = /bits/ 64 <883200000>;
+                       opp-peak-kBps = <816000>;
+               };
+
+               cl2_ch1_opp7: opp-1036800000 {
+                       opp-hz = /bits/ 64 <1036800000>;
+                       opp-peak-kBps = <816000>;
+               };
+
+               cl2_ch1_opp8: opp-1190400000 {
+                       opp-hz = /bits/ 64 <1190400000>;
+                       opp-peak-kBps = <816000>;
+               };
+
+               cl2_ch1_opp9: opp-1344000000 {
+                       opp-hz = /bits/ 64 <1344000000>;
+                       opp-peak-kBps = <1632000>;
+               };
+
+               cl2_ch1_opp10: opp-1497600000 {
+                       opp-hz = /bits/ 64 <1497600000>;
+                       opp-peak-kBps = <1632000>;
+               };
+
+               cl2_ch1_opp11: opp-1651200000 {
+                       opp-hz = /bits/ 64 <1651200000>;
+                       opp-peak-kBps = <2660000>;
+               };
+
+               cl2_ch1_opp12: opp-1804800000 {
+                       opp-hz = /bits/ 64 <1804800000>;
+                       opp-peak-kBps = <2660000>;
+               };
+
+               cl2_ch1_opp13: opp-1958400000 {
+                       opp-hz = /bits/ 64 <1958400000>;
+                       opp-peak-kBps = <3200000>;
+               };
+
+               cl2_ch1_opp14: opp-2112000000 {
+                       opp-hz = /bits/ 64 <2112000000>;
+                       opp-peak-kBps = <6400000>;
+               };
+
+               cl2_ch1_opp15: opp-2201600000 {
+                       opp-hz = /bits/ 64 <2201600000>;
+                       opp-peak-kBps = <6400000>;
+               };
+       };
 };