Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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: Dmitry Osipenko <digetx@gmail.com>
Signed-off-by: Thierry Reding <treding@nvidia.com>

authored by

Dmitry Osipenko and committed by
Thierry Reding
881741fa f5204ac4

+409
+12
arch/arm/boot/dts/tegra30-asus-nexus7-grouper-memory-timings.dtsi
··· 1563 1563 }; 1564 1564 }; 1565 1565 }; 1566 + 1567 + &emc_icc_dvfs_opp_table { 1568 + /delete-node/ opp@750000000,1300; 1569 + /delete-node/ opp@800000000,1300; 1570 + /delete-node/ opp@900000000,1350; 1571 + }; 1572 + 1573 + &emc_bw_dfs_opp_table { 1574 + /delete-node/ opp@750000000; 1575 + /delete-node/ opp@800000000; 1576 + /delete-node/ opp@900000000; 1577 + };
+8
arch/arm/boot/dts/tegra30-ouya.dts
··· 4509 4509 nvidia,slew-rate-falling = <TEGRA_PIN_SLEW_RATE_SLOWEST>; 4510 4510 }; 4511 4511 }; 4512 + 4513 + &emc_icc_dvfs_opp_table { 4514 + /delete-node/ opp@900000000,1350; 4515 + }; 4516 + 4517 + &emc_bw_dfs_opp_table { 4518 + /delete-node/ opp@900000000; 4519 + };
+383
arch/arm/boot/dts/tegra30-peripherals-opp.dtsi
··· 1 + // SPDX-License-Identifier: GPL-2.0 2 + 3 + / { 4 + emc_icc_dvfs_opp_table: emc-dvfs-opp-table { 5 + compatible = "operating-points-v2"; 6 + 7 + opp@12750000,950 { 8 + opp-microvolt = <950000 950000 1350000>; 9 + opp-hz = /bits/ 64 <12750000>; 10 + opp-supported-hw = <0x0006>; 11 + }; 12 + 13 + opp@12750000,1000 { 14 + opp-microvolt = <1000000 1000000 1350000>; 15 + opp-hz = /bits/ 64 <12750000>; 16 + opp-supported-hw = <0x0001>; 17 + }; 18 + 19 + opp@12750000,1250 { 20 + opp-microvolt = <1250000 1250000 1350000>; 21 + opp-hz = /bits/ 64 <12750000>; 22 + opp-supported-hw = <0x0008>; 23 + }; 24 + 25 + opp@25500000,950 { 26 + opp-microvolt = <950000 950000 1350000>; 27 + opp-hz = /bits/ 64 <25500000>; 28 + opp-supported-hw = <0x0006>; 29 + }; 30 + 31 + opp@25500000,1000 { 32 + opp-microvolt = <1000000 1000000 1350000>; 33 + opp-hz = /bits/ 64 <25500000>; 34 + opp-supported-hw = <0x0001>; 35 + }; 36 + 37 + opp@25500000,1250 { 38 + opp-microvolt = <1250000 1250000 1350000>; 39 + opp-hz = /bits/ 64 <25500000>; 40 + opp-supported-hw = <0x0008>; 41 + }; 42 + 43 + opp@27000000,950 { 44 + opp-microvolt = <950000 950000 1350000>; 45 + opp-hz = /bits/ 64 <27000000>; 46 + opp-supported-hw = <0x0006>; 47 + }; 48 + 49 + opp@27000000,1000 { 50 + opp-microvolt = <1000000 1000000 1350000>; 51 + opp-hz = /bits/ 64 <27000000>; 52 + opp-supported-hw = <0x0001>; 53 + }; 54 + 55 + opp@27000000,1250 { 56 + opp-microvolt = <1250000 1250000 1350000>; 57 + opp-hz = /bits/ 64 <27000000>; 58 + opp-supported-hw = <0x0008>; 59 + }; 60 + 61 + opp@51000000,950 { 62 + opp-microvolt = <950000 950000 1350000>; 63 + opp-hz = /bits/ 64 <51000000>; 64 + opp-supported-hw = <0x0006>; 65 + }; 66 + 67 + opp@51000000,1000 { 68 + opp-microvolt = <1000000 1000000 1350000>; 69 + opp-hz = /bits/ 64 <51000000>; 70 + opp-supported-hw = <0x0001>; 71 + }; 72 + 73 + opp@51000000,1250 { 74 + opp-microvolt = <1250000 1250000 1350000>; 75 + opp-hz = /bits/ 64 <51000000>; 76 + opp-supported-hw = <0x0008>; 77 + }; 78 + 79 + opp@54000000,950 { 80 + opp-microvolt = <950000 950000 1350000>; 81 + opp-hz = /bits/ 64 <54000000>; 82 + opp-supported-hw = <0x0006>; 83 + }; 84 + 85 + opp@54000000,1000 { 86 + opp-microvolt = <1000000 1000000 1350000>; 87 + opp-hz = /bits/ 64 <54000000>; 88 + opp-supported-hw = <0x0001>; 89 + }; 90 + 91 + opp@54000000,1250 { 92 + opp-microvolt = <1250000 1250000 1350000>; 93 + opp-hz = /bits/ 64 <54000000>; 94 + opp-supported-hw = <0x0008>; 95 + }; 96 + 97 + opp@102000000,950 { 98 + opp-microvolt = <950000 950000 1350000>; 99 + opp-hz = /bits/ 64 <102000000>; 100 + opp-supported-hw = <0x0006>; 101 + }; 102 + 103 + opp@102000000,1000 { 104 + opp-microvolt = <1000000 1000000 1350000>; 105 + opp-hz = /bits/ 64 <102000000>; 106 + opp-supported-hw = <0x0001>; 107 + }; 108 + 109 + opp@102000000,1250 { 110 + opp-microvolt = <1250000 1250000 1350000>; 111 + opp-hz = /bits/ 64 <102000000>; 112 + opp-supported-hw = <0x0008>; 113 + }; 114 + 115 + opp@108000000,1000 { 116 + opp-microvolt = <1000000 1000000 1350000>; 117 + opp-hz = /bits/ 64 <108000000>; 118 + opp-supported-hw = <0x0007>; 119 + }; 120 + 121 + opp@108000000,1250 { 122 + opp-microvolt = <1250000 1250000 1350000>; 123 + opp-hz = /bits/ 64 <108000000>; 124 + opp-supported-hw = <0x0008>; 125 + }; 126 + 127 + opp@204000000,1000 { 128 + opp-microvolt = <1000000 1000000 1350000>; 129 + opp-hz = /bits/ 64 <204000000>; 130 + opp-supported-hw = <0x0007>; 131 + }; 132 + 133 + opp@204000000,1250 { 134 + opp-microvolt = <1250000 1250000 1350000>; 135 + opp-hz = /bits/ 64 <204000000>; 136 + opp-supported-hw = <0x0008>; 137 + }; 138 + 139 + opp@333500000,1000 { 140 + opp-microvolt = <1000000 1000000 1350000>; 141 + opp-hz = /bits/ 64 <333500000>; 142 + opp-supported-hw = <0x0006>; 143 + }; 144 + 145 + opp@333500000,1200 { 146 + opp-microvolt = <1200000 1200000 1350000>; 147 + opp-hz = /bits/ 64 <333500000>; 148 + opp-supported-hw = <0x0001>; 149 + }; 150 + 151 + opp@333500000,1250 { 152 + opp-microvolt = <1250000 1250000 1350000>; 153 + opp-hz = /bits/ 64 <333500000>; 154 + opp-supported-hw = <0x0008>; 155 + }; 156 + 157 + opp@375000000,1000 { 158 + opp-microvolt = <1000000 1000000 1350000>; 159 + opp-hz = /bits/ 64 <375000000>; 160 + opp-supported-hw = <0x0006>; 161 + }; 162 + 163 + opp@375000000,1200 { 164 + opp-microvolt = <1200000 1200000 1350000>; 165 + opp-hz = /bits/ 64 <375000000>; 166 + opp-supported-hw = <0x0001>; 167 + }; 168 + 169 + opp@375000000,1250 { 170 + opp-microvolt = <1250000 1250000 1350000>; 171 + opp-hz = /bits/ 64 <375000000>; 172 + opp-supported-hw = <0x0008>; 173 + }; 174 + 175 + opp@400000000,1000 { 176 + opp-microvolt = <1000000 1000000 1350000>; 177 + opp-hz = /bits/ 64 <400000000>; 178 + opp-supported-hw = <0x0006>; 179 + }; 180 + 181 + opp@400000000,1200 { 182 + opp-microvolt = <1200000 1200000 1350000>; 183 + opp-hz = /bits/ 64 <400000000>; 184 + opp-supported-hw = <0x0001>; 185 + }; 186 + 187 + opp@400000000,1250 { 188 + opp-microvolt = <1250000 1250000 1350000>; 189 + opp-hz = /bits/ 64 <400000000>; 190 + opp-supported-hw = <0x0008>; 191 + }; 192 + 193 + opp@416000000,1200 { 194 + opp-microvolt = <1200000 1200000 1350000>; 195 + opp-hz = /bits/ 64 <416000000>; 196 + opp-supported-hw = <0x0007>; 197 + }; 198 + 199 + opp@416000000,1250 { 200 + opp-microvolt = <1250000 1250000 1350000>; 201 + opp-hz = /bits/ 64 <416000000>; 202 + opp-supported-hw = <0x0008>; 203 + }; 204 + 205 + opp@450000000,1200 { 206 + opp-microvolt = <1200000 1200000 1350000>; 207 + opp-hz = /bits/ 64 <450000000>; 208 + opp-supported-hw = <0x0007>; 209 + }; 210 + 211 + opp@450000000,1250 { 212 + opp-microvolt = <1250000 1250000 1350000>; 213 + opp-hz = /bits/ 64 <450000000>; 214 + opp-supported-hw = <0x0008>; 215 + }; 216 + 217 + opp@533000000,1200 { 218 + opp-microvolt = <1200000 1200000 1350000>; 219 + opp-hz = /bits/ 64 <533000000>; 220 + opp-supported-hw = <0x0007>; 221 + }; 222 + 223 + opp@533000000,1250 { 224 + opp-microvolt = <1250000 1250000 1350000>; 225 + opp-hz = /bits/ 64 <533000000>; 226 + opp-supported-hw = <0x0008>; 227 + }; 228 + 229 + opp@625000000,1200 { 230 + opp-microvolt = <1200000 1200000 1350000>; 231 + opp-hz = /bits/ 64 <625000000>; 232 + opp-supported-hw = <0x0006>; 233 + }; 234 + 235 + opp@625000000,1250 { 236 + opp-microvolt = <1250000 1250000 1350000>; 237 + opp-hz = /bits/ 64 <625000000>; 238 + opp-supported-hw = <0x0008>; 239 + }; 240 + 241 + opp@667000000,1200 { 242 + opp-microvolt = <1200000 1200000 1350000>; 243 + opp-hz = /bits/ 64 <667000000>; 244 + opp-supported-hw = <0x0006>; 245 + }; 246 + 247 + opp@750000000,1300 { 248 + opp-microvolt = <1300000 1300000 1350000>; 249 + opp-hz = /bits/ 64 <750000000>; 250 + opp-supported-hw = <0x0004>; 251 + }; 252 + 253 + opp@800000000,1300 { 254 + opp-microvolt = <1300000 1300000 1350000>; 255 + opp-hz = /bits/ 64 <800000000>; 256 + opp-supported-hw = <0x0004>; 257 + }; 258 + 259 + opp@900000000,1350 { 260 + opp-microvolt = <1350000 1350000 1350000>; 261 + opp-hz = /bits/ 64 <900000000>; 262 + opp-supported-hw = <0x0004>; 263 + }; 264 + }; 265 + 266 + emc_bw_dfs_opp_table: emc-bandwidth-opp-table { 267 + compatible = "operating-points-v2"; 268 + 269 + opp@12750000 { 270 + opp-hz = /bits/ 64 <12750000>; 271 + opp-supported-hw = <0x000F>; 272 + opp-peak-kBps = <102000>; 273 + }; 274 + 275 + opp@25500000 { 276 + opp-hz = /bits/ 64 <25500000>; 277 + opp-supported-hw = <0x000F>; 278 + opp-peak-kBps = <204000>; 279 + }; 280 + 281 + opp@27000000 { 282 + opp-hz = /bits/ 64 <27000000>; 283 + opp-supported-hw = <0x000F>; 284 + opp-peak-kBps = <216000>; 285 + }; 286 + 287 + opp@51000000 { 288 + opp-hz = /bits/ 64 <51000000>; 289 + opp-supported-hw = <0x000F>; 290 + opp-peak-kBps = <408000>; 291 + }; 292 + 293 + opp@54000000 { 294 + opp-hz = /bits/ 64 <54000000>; 295 + opp-supported-hw = <0x000F>; 296 + opp-peak-kBps = <432000>; 297 + }; 298 + 299 + opp@102000000 { 300 + opp-hz = /bits/ 64 <102000000>; 301 + opp-supported-hw = <0x000F>; 302 + opp-peak-kBps = <816000>; 303 + }; 304 + 305 + opp@108000000 { 306 + opp-hz = /bits/ 64 <108000000>; 307 + opp-supported-hw = <0x000F>; 308 + opp-peak-kBps = <864000>; 309 + }; 310 + 311 + opp@204000000 { 312 + opp-hz = /bits/ 64 <204000000>; 313 + opp-supported-hw = <0x000F>; 314 + opp-peak-kBps = <1632000>; 315 + }; 316 + 317 + opp@333500000 { 318 + opp-hz = /bits/ 64 <333500000>; 319 + opp-supported-hw = <0x000F>; 320 + opp-peak-kBps = <2668000>; 321 + }; 322 + 323 + opp@375000000 { 324 + opp-hz = /bits/ 64 <375000000>; 325 + opp-supported-hw = <0x000F>; 326 + opp-peak-kBps = <3000000>; 327 + }; 328 + 329 + opp@400000000 { 330 + opp-hz = /bits/ 64 <400000000>; 331 + opp-supported-hw = <0x000F>; 332 + opp-peak-kBps = <3200000>; 333 + }; 334 + 335 + opp@416000000 { 336 + opp-hz = /bits/ 64 <416000000>; 337 + opp-supported-hw = <0x000F>; 338 + opp-peak-kBps = <3328000>; 339 + }; 340 + 341 + opp@450000000 { 342 + opp-hz = /bits/ 64 <450000000>; 343 + opp-supported-hw = <0x000F>; 344 + opp-peak-kBps = <3600000>; 345 + }; 346 + 347 + opp@533000000 { 348 + opp-hz = /bits/ 64 <533000000>; 349 + opp-supported-hw = <0x000F>; 350 + opp-peak-kBps = <4264000>; 351 + }; 352 + 353 + opp@625000000 { 354 + opp-hz = /bits/ 64 <625000000>; 355 + opp-supported-hw = <0x000E>; 356 + opp-peak-kBps = <5000000>; 357 + }; 358 + 359 + opp@667000000 { 360 + opp-hz = /bits/ 64 <667000000>; 361 + opp-supported-hw = <0x0006>; 362 + opp-peak-kBps = <5336000>; 363 + }; 364 + 365 + opp@750000000 { 366 + opp-hz = /bits/ 64 <750000000>; 367 + opp-supported-hw = <0x0004>; 368 + opp-peak-kBps = <6000000>; 369 + }; 370 + 371 + opp@800000000 { 372 + opp-hz = /bits/ 64 <800000000>; 373 + opp-supported-hw = <0x0004>; 374 + opp-peak-kBps = <6400000>; 375 + }; 376 + 377 + opp@900000000 { 378 + opp-hz = /bits/ 64 <900000000>; 379 + opp-supported-hw = <0x0004>; 380 + opp-peak-kBps = <7200000>; 381 + }; 382 + }; 383 + };
+6
arch/arm/boot/dts/tegra30.dtsi
··· 6 6 #include <dt-bindings/interrupt-controller/arm-gic.h> 7 7 #include <dt-bindings/soc/tegra-pmc.h> 8 8 9 + #include "tegra30-peripherals-opp.dtsi" 10 + 9 11 / { 10 12 compatible = "nvidia,tegra30"; 11 13 interrupt-parent = <&lic>; ··· 419 417 clock-names = "actmon", "emc"; 420 418 resets = <&tegra_car TEGRA30_CLK_ACTMON>; 421 419 reset-names = "actmon"; 420 + operating-points-v2 = <&emc_bw_dfs_opp_table>; 421 + interconnects = <&mc TEGRA30_MC_MPCORER &emc>; 422 + interconnect-names = "cpu-read"; 422 423 }; 423 424 424 425 gpio: gpio@6000d000 { ··· 785 780 clocks = <&tegra_car TEGRA30_CLK_EMC>; 786 781 787 782 nvidia,memory-controller = <&mc>; 783 + operating-points-v2 = <&emc_icc_dvfs_opp_table>; 788 784 789 785 #interconnect-cells = <0>; 790 786 };