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

ARM: dts: exynos: Add DMC device to Exynos5422 and Odroid XU3-family boards

Add description of Dynamic Memory Controller and PPMU counters to
Exynos5422 and Odroid XU3/XU4/HC1 boards. They are used by
exynos5422-dmc driver. There is a definition of the memory chip, which
is then used during calculation of timings for each OPP.
The algorithm in the driver needs these two sets to bound the timings.

Signed-off-by: Lukasz Luba <l.luba@partner.samsung.com>
Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>

authored by

Lukasz Luba and committed by
Krzysztof Kozlowski
5cb4d9a0 53d2ebcc

+188
+71
arch/arm/boot/dts/exynos5420.dtsi
··· 237 237 status = "disabled"; 238 238 }; 239 239 240 + dmc: memory-controller@10c20000 { 241 + compatible = "samsung,exynos5422-dmc"; 242 + reg = <0x10c20000 0x100>, <0x10c30000 0x100>; 243 + clocks = <&clock CLK_FOUT_SPLL>, 244 + <&clock CLK_MOUT_SCLK_SPLL>, 245 + <&clock CLK_FF_DOUT_SPLL2>, 246 + <&clock CLK_FOUT_BPLL>, 247 + <&clock CLK_MOUT_BPLL>, 248 + <&clock CLK_SCLK_BPLL>, 249 + <&clock CLK_MOUT_MX_MSPLL_CCORE>, 250 + <&clock CLK_MOUT_MCLK_CDREX>; 251 + clock-names = "fout_spll", 252 + "mout_sclk_spll", 253 + "ff_dout_spll2", 254 + "fout_bpll", 255 + "mout_bpll", 256 + "sclk_bpll", 257 + "mout_mx_mspll_ccore", 258 + "mout_mclk_cdrex"; 259 + samsung,syscon-clk = <&clock>; 260 + status = "disabled"; 261 + }; 262 + 240 263 nocp_mem0_0: nocp@10ca1000 { 241 264 compatible = "samsung,exynos5420-nocp"; 242 265 reg = <0x10CA1000 0x200>; ··· 294 271 compatible = "samsung,exynos5420-nocp"; 295 272 reg = <0x11A51400 0x200>; 296 273 status = "disabled"; 274 + }; 275 + 276 + ppmu_dmc0_0: ppmu@10d00000 { 277 + compatible = "samsung,exynos-ppmu"; 278 + reg = <0x10d00000 0x2000>; 279 + clocks = <&clock CLK_PCLK_PPMU_DREX0_0>; 280 + clock-names = "ppmu"; 281 + events { 282 + ppmu_event3_dmc0_0: ppmu-event3-dmc0_0 { 283 + event-name = "ppmu-event3-dmc0_0"; 284 + }; 285 + }; 286 + }; 287 + 288 + ppmu_dmc0_1: ppmu@10d10000 { 289 + compatible = "samsung,exynos-ppmu"; 290 + reg = <0x10d10000 0x2000>; 291 + clocks = <&clock CLK_PCLK_PPMU_DREX0_1>; 292 + clock-names = "ppmu"; 293 + events { 294 + ppmu_event3_dmc0_1: ppmu-event3-dmc0_1 { 295 + event-name = "ppmu-event3-dmc0_1"; 296 + }; 297 + }; 298 + }; 299 + 300 + ppmu_dmc1_0: ppmu@10d60000 { 301 + compatible = "samsung,exynos-ppmu"; 302 + reg = <0x10d60000 0x2000>; 303 + clocks = <&clock CLK_PCLK_PPMU_DREX1_0>; 304 + clock-names = "ppmu"; 305 + events { 306 + ppmu_event3_dmc1_0: ppmu-event3-dmc1_0 { 307 + event-name = "ppmu-event3-dmc1_0"; 308 + }; 309 + }; 310 + }; 311 + 312 + ppmu_dmc1_1: ppmu@10d70000 { 313 + compatible = "samsung,exynos-ppmu"; 314 + reg = <0x10d70000 0x2000>; 315 + clocks = <&clock CLK_PCLK_PPMU_DREX1_1>; 316 + clock-names = "ppmu"; 317 + events { 318 + ppmu_event3_dmc1_1: ppmu-event3-dmc1_1 { 319 + event-name = "ppmu-event3-dmc1_1"; 320 + }; 321 + }; 297 322 }; 298 323 299 324 gsc_pd: power-domain@10044000 {
+117
arch/arm/boot/dts/exynos5422-odroid-core.dtsi
··· 34 34 clock-frequency = <24000000>; 35 35 }; 36 36 }; 37 + 38 + dmc_opp_table: opp_table2 { 39 + compatible = "operating-points-v2"; 40 + 41 + opp00 { 42 + opp-hz = /bits/ 64 <165000000>; 43 + opp-microvolt = <875000>; 44 + }; 45 + opp01 { 46 + opp-hz = /bits/ 64 <206000000>; 47 + opp-microvolt = <875000>; 48 + }; 49 + opp02 { 50 + opp-hz = /bits/ 64 <275000000>; 51 + opp-microvolt = <875000>; 52 + }; 53 + opp03 { 54 + opp-hz = /bits/ 64 <413000000>; 55 + opp-microvolt = <887500>; 56 + }; 57 + opp04 { 58 + opp-hz = /bits/ 64 <543000000>; 59 + opp-microvolt = <937500>; 60 + }; 61 + opp05 { 62 + opp-hz = /bits/ 64 <633000000>; 63 + opp-microvolt = <1012500>; 64 + }; 65 + opp06 { 66 + opp-hz = /bits/ 64 <728000000>; 67 + opp-microvolt = <1037500>; 68 + }; 69 + opp07 { 70 + opp-hz = /bits/ 64 <825000000>; 71 + opp-microvolt = <1050000>; 72 + }; 73 + }; 74 + 75 + samsung_K3QF2F20DB: lpddr3 { 76 + compatible = "samsung,K3QF2F20DB", "jedec,lpddr3"; 77 + density = <16384>; 78 + io-width = <32>; 79 + #address-cells = <1>; 80 + #size-cells = <0>; 81 + 82 + tRFC-min-tck = <17>; 83 + tRRD-min-tck = <2>; 84 + tRPab-min-tck = <2>; 85 + tRPpb-min-tck = <2>; 86 + tRCD-min-tck = <3>; 87 + tRC-min-tck = <6>; 88 + tRAS-min-tck = <5>; 89 + tWTR-min-tck = <2>; 90 + tWR-min-tck = <7>; 91 + tRTP-min-tck = <2>; 92 + tW2W-C2C-min-tck = <0>; 93 + tR2R-C2C-min-tck = <0>; 94 + tWL-min-tck = <8>; 95 + tDQSCK-min-tck = <5>; 96 + tRL-min-tck = <14>; 97 + tFAW-min-tck = <5>; 98 + tXSR-min-tck = <12>; 99 + tXP-min-tck = <2>; 100 + tCKE-min-tck = <2>; 101 + tCKESR-min-tck = <2>; 102 + tMRD-min-tck = <5>; 103 + 104 + timings_samsung_K3QF2F20DB_800mhz: lpddr3-timings@800000000 { 105 + compatible = "jedec,lpddr3-timings"; 106 + /* workaround: 'reg' shows max-freq */ 107 + reg = <800000000>; 108 + min-freq = <100000000>; 109 + tRFC = <65000>; 110 + tRRD = <6000>; 111 + tRPab = <12000>; 112 + tRPpb = <12000>; 113 + tRCD = <10000>; 114 + tRC = <33750>; 115 + tRAS = <23000>; 116 + tWTR = <3750>; 117 + tWR = <7500>; 118 + tRTP = <3750>; 119 + tW2W-C2C = <0>; 120 + tR2R-C2C = <0>; 121 + tFAW = <25000>; 122 + tXSR = <70000>; 123 + tXP = <3750>; 124 + tCKE = <3750>; 125 + tCKESR = <3750>; 126 + tMRD = <7000>; 127 + }; 128 + }; 37 129 }; 38 130 39 131 &adc { ··· 222 130 223 131 &cpu4 { 224 132 cpu-supply = <&buck2_reg>; 133 + }; 134 + 135 + &dmc { 136 + devfreq-events = <&ppmu_event3_dmc0_0>, <&ppmu_event3_dmc0_1>, 137 + <&ppmu_event3_dmc1_0>, <&ppmu_event3_dmc1_1>; 138 + device-handle = <&samsung_K3QF2F20DB>; 139 + operating-points-v2 = <&dmc_opp_table>; 140 + vdd-supply = <&buck1_reg>; 141 + status = "okay"; 225 142 }; 226 143 227 144 &hsi2c_4 { ··· 733 632 samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>; 734 633 samsung,pin-drv = <EXYNOS5420_PIN_DRV_LV1>; 735 634 }; 635 + }; 636 + 637 + &ppmu_dmc0_0 { 638 + status = "okay"; 639 + }; 640 + 641 + &ppmu_dmc0_1 { 642 + status = "okay"; 643 + }; 644 + 645 + &ppmu_dmc1_0 { 646 + status = "okay"; 647 + }; 648 + 649 + &ppmu_dmc1_1 { 650 + status = "okay"; 736 651 }; 737 652 738 653 &tmu_cpu0 {