Commit 881741fa authored by Dmitry Osipenko's avatar Dmitry Osipenko Committed by Thierry Reding
Browse files

ARM: tegra: Add EMC OPP and ICC properties to Tegra30 EMC and ACTMON device-tree nodes



Add EMC OPP tables and interconnect paths that will be used for
dynamic memory bandwidth scaling based on memory utilization statistics.
Update board device-trees by removing unsupported EMC OPPs.

Note that ACTMON watches all memory interconnect paths, but we use a
single CPU-READ interconnect path for driving memory bandwidth, for
simplicity.

Signed-off-by: default avatarDmitry Osipenko <digetx@gmail.com>
Signed-off-by: default avatarThierry Reding <treding@nvidia.com>
parent f5204ac4
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -1563,3 +1563,15 @@ timing-667000000 {
		};
	};
};

&emc_icc_dvfs_opp_table {
	/delete-node/ opp@750000000,1300;
	/delete-node/ opp@800000000,1300;
	/delete-node/ opp@900000000,1350;
};

&emc_bw_dfs_opp_table {
	/delete-node/ opp@750000000;
	/delete-node/ opp@800000000;
	/delete-node/ opp@900000000;
};
+8 −0
Original line number Diff line number Diff line
@@ -4509,3 +4509,11 @@ drive_groups {
		nvidia,slew-rate-falling = <TEGRA_PIN_SLEW_RATE_SLOWEST>;
	};
};

&emc_icc_dvfs_opp_table {
	/delete-node/ opp@900000000,1350;
};

&emc_bw_dfs_opp_table {
	/delete-node/ opp@900000000;
};
+383 −0
Original line number Diff line number Diff line
// SPDX-License-Identifier: GPL-2.0

/ {
	emc_icc_dvfs_opp_table: emc-dvfs-opp-table {
		compatible = "operating-points-v2";

		opp@12750000,950 {
			opp-microvolt = <950000 950000 1350000>;
			opp-hz = /bits/ 64 <12750000>;
			opp-supported-hw = <0x0006>;
		};

		opp@12750000,1000 {
			opp-microvolt = <1000000 1000000 1350000>;
			opp-hz = /bits/ 64 <12750000>;
			opp-supported-hw = <0x0001>;
		};

		opp@12750000,1250 {
			opp-microvolt = <1250000 1250000 1350000>;
			opp-hz = /bits/ 64 <12750000>;
			opp-supported-hw = <0x0008>;
		};

		opp@25500000,950 {
			opp-microvolt = <950000 950000 1350000>;
			opp-hz = /bits/ 64 <25500000>;
			opp-supported-hw = <0x0006>;
		};

		opp@25500000,1000 {
			opp-microvolt = <1000000 1000000 1350000>;
			opp-hz = /bits/ 64 <25500000>;
			opp-supported-hw = <0x0001>;
		};

		opp@25500000,1250 {
			opp-microvolt = <1250000 1250000 1350000>;
			opp-hz = /bits/ 64 <25500000>;
			opp-supported-hw = <0x0008>;
		};

		opp@27000000,950 {
			opp-microvolt = <950000 950000 1350000>;
			opp-hz = /bits/ 64 <27000000>;
			opp-supported-hw = <0x0006>;
		};

		opp@27000000,1000 {
			opp-microvolt = <1000000 1000000 1350000>;
			opp-hz = /bits/ 64 <27000000>;
			opp-supported-hw = <0x0001>;
		};

		opp@27000000,1250 {
			opp-microvolt = <1250000 1250000 1350000>;
			opp-hz = /bits/ 64 <27000000>;
			opp-supported-hw = <0x0008>;
		};

		opp@51000000,950 {
			opp-microvolt = <950000 950000 1350000>;
			opp-hz = /bits/ 64 <51000000>;
			opp-supported-hw = <0x0006>;
		};

		opp@51000000,1000 {
			opp-microvolt = <1000000 1000000 1350000>;
			opp-hz = /bits/ 64 <51000000>;
			opp-supported-hw = <0x0001>;
		};

		opp@51000000,1250 {
			opp-microvolt = <1250000 1250000 1350000>;
			opp-hz = /bits/ 64 <51000000>;
			opp-supported-hw = <0x0008>;
		};

		opp@54000000,950 {
			opp-microvolt = <950000 950000 1350000>;
			opp-hz = /bits/ 64 <54000000>;
			opp-supported-hw = <0x0006>;
		};

		opp@54000000,1000 {
			opp-microvolt = <1000000 1000000 1350000>;
			opp-hz = /bits/ 64 <54000000>;
			opp-supported-hw = <0x0001>;
		};

		opp@54000000,1250 {
			opp-microvolt = <1250000 1250000 1350000>;
			opp-hz = /bits/ 64 <54000000>;
			opp-supported-hw = <0x0008>;
		};

		opp@102000000,950 {
			opp-microvolt = <950000 950000 1350000>;
			opp-hz = /bits/ 64 <102000000>;
			opp-supported-hw = <0x0006>;
		};

		opp@102000000,1000 {
			opp-microvolt = <1000000 1000000 1350000>;
			opp-hz = /bits/ 64 <102000000>;
			opp-supported-hw = <0x0001>;
		};

		opp@102000000,1250 {
			opp-microvolt = <1250000 1250000 1350000>;
			opp-hz = /bits/ 64 <102000000>;
			opp-supported-hw = <0x0008>;
		};

		opp@108000000,1000 {
			opp-microvolt = <1000000 1000000 1350000>;
			opp-hz = /bits/ 64 <108000000>;
			opp-supported-hw = <0x0007>;
		};

		opp@108000000,1250 {
			opp-microvolt = <1250000 1250000 1350000>;
			opp-hz = /bits/ 64 <108000000>;
			opp-supported-hw = <0x0008>;
		};

		opp@204000000,1000 {
			opp-microvolt = <1000000 1000000 1350000>;
			opp-hz = /bits/ 64 <204000000>;
			opp-supported-hw = <0x0007>;
		};

		opp@204000000,1250 {
			opp-microvolt = <1250000 1250000 1350000>;
			opp-hz = /bits/ 64 <204000000>;
			opp-supported-hw = <0x0008>;
		};

		opp@333500000,1000 {
			opp-microvolt = <1000000 1000000 1350000>;
			opp-hz = /bits/ 64 <333500000>;
			opp-supported-hw = <0x0006>;
		};

		opp@333500000,1200 {
			opp-microvolt = <1200000 1200000 1350000>;
			opp-hz = /bits/ 64 <333500000>;
			opp-supported-hw = <0x0001>;
		};

		opp@333500000,1250 {
			opp-microvolt = <1250000 1250000 1350000>;
			opp-hz = /bits/ 64 <333500000>;
			opp-supported-hw = <0x0008>;
		};

		opp@375000000,1000 {
			opp-microvolt = <1000000 1000000 1350000>;
			opp-hz = /bits/ 64 <375000000>;
			opp-supported-hw = <0x0006>;
		};

		opp@375000000,1200 {
			opp-microvolt = <1200000 1200000 1350000>;
			opp-hz = /bits/ 64 <375000000>;
			opp-supported-hw = <0x0001>;
		};

		opp@375000000,1250 {
			opp-microvolt = <1250000 1250000 1350000>;
			opp-hz = /bits/ 64 <375000000>;
			opp-supported-hw = <0x0008>;
		};

		opp@400000000,1000 {
			opp-microvolt = <1000000 1000000 1350000>;
			opp-hz = /bits/ 64 <400000000>;
			opp-supported-hw = <0x0006>;
		};

		opp@400000000,1200 {
			opp-microvolt = <1200000 1200000 1350000>;
			opp-hz = /bits/ 64 <400000000>;
			opp-supported-hw = <0x0001>;
		};

		opp@400000000,1250 {
			opp-microvolt = <1250000 1250000 1350000>;
			opp-hz = /bits/ 64 <400000000>;
			opp-supported-hw = <0x0008>;
		};

		opp@416000000,1200 {
			opp-microvolt = <1200000 1200000 1350000>;
			opp-hz = /bits/ 64 <416000000>;
			opp-supported-hw = <0x0007>;
		};

		opp@416000000,1250 {
			opp-microvolt = <1250000 1250000 1350000>;
			opp-hz = /bits/ 64 <416000000>;
			opp-supported-hw = <0x0008>;
		};

		opp@450000000,1200 {
			opp-microvolt = <1200000 1200000 1350000>;
			opp-hz = /bits/ 64 <450000000>;
			opp-supported-hw = <0x0007>;
		};

		opp@450000000,1250 {
			opp-microvolt = <1250000 1250000 1350000>;
			opp-hz = /bits/ 64 <450000000>;
			opp-supported-hw = <0x0008>;
		};

		opp@533000000,1200 {
			opp-microvolt = <1200000 1200000 1350000>;
			opp-hz = /bits/ 64 <533000000>;
			opp-supported-hw = <0x0007>;
		};

		opp@533000000,1250 {
			opp-microvolt = <1250000 1250000 1350000>;
			opp-hz = /bits/ 64 <533000000>;
			opp-supported-hw = <0x0008>;
		};

		opp@625000000,1200 {
			opp-microvolt = <1200000 1200000 1350000>;
			opp-hz = /bits/ 64 <625000000>;
			opp-supported-hw = <0x0006>;
		};

		opp@625000000,1250 {
			opp-microvolt = <1250000 1250000 1350000>;
			opp-hz = /bits/ 64 <625000000>;
			opp-supported-hw = <0x0008>;
		};

		opp@667000000,1200 {
			opp-microvolt = <1200000 1200000 1350000>;
			opp-hz = /bits/ 64 <667000000>;
			opp-supported-hw = <0x0006>;
		};

		opp@750000000,1300 {
			opp-microvolt = <1300000 1300000 1350000>;
			opp-hz = /bits/ 64 <750000000>;
			opp-supported-hw = <0x0004>;
		};

		opp@800000000,1300 {
			opp-microvolt = <1300000 1300000 1350000>;
			opp-hz = /bits/ 64 <800000000>;
			opp-supported-hw = <0x0004>;
		};

		opp@900000000,1350 {
			opp-microvolt = <1350000 1350000 1350000>;
			opp-hz = /bits/ 64 <900000000>;
			opp-supported-hw = <0x0004>;
		};
	};

	emc_bw_dfs_opp_table: emc-bandwidth-opp-table {
		compatible = "operating-points-v2";

		opp@12750000 {
			opp-hz = /bits/ 64 <12750000>;
			opp-supported-hw = <0x000F>;
			opp-peak-kBps = <102000>;
		};

		opp@25500000 {
			opp-hz = /bits/ 64 <25500000>;
			opp-supported-hw = <0x000F>;
			opp-peak-kBps = <204000>;
		};

		opp@27000000 {
			opp-hz = /bits/ 64 <27000000>;
			opp-supported-hw = <0x000F>;
			opp-peak-kBps = <216000>;
		};

		opp@51000000 {
			opp-hz = /bits/ 64 <51000000>;
			opp-supported-hw = <0x000F>;
			opp-peak-kBps = <408000>;
		};

		opp@54000000 {
			opp-hz = /bits/ 64 <54000000>;
			opp-supported-hw = <0x000F>;
			opp-peak-kBps = <432000>;
		};

		opp@102000000 {
			opp-hz = /bits/ 64 <102000000>;
			opp-supported-hw = <0x000F>;
			opp-peak-kBps = <816000>;
		};

		opp@108000000 {
			opp-hz = /bits/ 64 <108000000>;
			opp-supported-hw = <0x000F>;
			opp-peak-kBps = <864000>;
		};

		opp@204000000 {
			opp-hz = /bits/ 64 <204000000>;
			opp-supported-hw = <0x000F>;
			opp-peak-kBps = <1632000>;
		};

		opp@333500000 {
			opp-hz = /bits/ 64 <333500000>;
			opp-supported-hw = <0x000F>;
			opp-peak-kBps = <2668000>;
		};

		opp@375000000 {
			opp-hz = /bits/ 64 <375000000>;
			opp-supported-hw = <0x000F>;
			opp-peak-kBps = <3000000>;
		};

		opp@400000000 {
			opp-hz = /bits/ 64 <400000000>;
			opp-supported-hw = <0x000F>;
			opp-peak-kBps = <3200000>;
		};

		opp@416000000 {
			opp-hz = /bits/ 64 <416000000>;
			opp-supported-hw = <0x000F>;
			opp-peak-kBps = <3328000>;
		};

		opp@450000000 {
			opp-hz = /bits/ 64 <450000000>;
			opp-supported-hw = <0x000F>;
			opp-peak-kBps = <3600000>;
		};

		opp@533000000 {
			opp-hz = /bits/ 64 <533000000>;
			opp-supported-hw = <0x000F>;
			opp-peak-kBps = <4264000>;
		};

		opp@625000000 {
			opp-hz = /bits/ 64 <625000000>;
			opp-supported-hw = <0x000E>;
			opp-peak-kBps = <5000000>;
		};

		opp@667000000 {
			opp-hz = /bits/ 64 <667000000>;
			opp-supported-hw = <0x0006>;
			opp-peak-kBps = <5336000>;
		};

		opp@750000000 {
			opp-hz = /bits/ 64 <750000000>;
			opp-supported-hw = <0x0004>;
			opp-peak-kBps = <6000000>;
		};

		opp@800000000 {
			opp-hz = /bits/ 64 <800000000>;
			opp-supported-hw = <0x0004>;
			opp-peak-kBps = <6400000>;
		};

		opp@900000000 {
			opp-hz = /bits/ 64 <900000000>;
			opp-supported-hw = <0x0004>;
			opp-peak-kBps = <7200000>;
		};
	};
};
+6 −0
Original line number Diff line number Diff line
@@ -6,6 +6,8 @@
#include <dt-bindings/interrupt-controller/arm-gic.h>
#include <dt-bindings/soc/tegra-pmc.h>

#include "tegra30-peripherals-opp.dtsi"

/ {
	compatible = "nvidia,tegra30";
	interrupt-parent = <&lic>;
@@ -417,6 +419,9 @@ actmon@6000c800 {
		clock-names = "actmon", "emc";
		resets = <&tegra_car TEGRA30_CLK_ACTMON>;
		reset-names = "actmon";
		operating-points-v2 = <&emc_bw_dfs_opp_table>;
		interconnects = <&mc TEGRA30_MC_MPCORER &emc>;
		interconnect-names = "cpu-read";
	};

	gpio: gpio@6000d000 {
@@ -780,6 +785,7 @@ emc: memory-controller@7000f400 {
		clocks = <&tegra_car TEGRA30_CLK_EMC>;

		nvidia,memory-controller = <&mc>;
		operating-points-v2 = <&emc_icc_dvfs_opp_table>;

		#interconnect-cells = <0>;
	};