1 * Generic Exynos Bus frequency device
3 The Samsung Exynos SoC has many buses for data transfer between DRAM
4 and sub-blocks in SoC. Most Exynos SoCs share the common architecture
5 for buses. Generally, each bus of Exynos SoC includes a source clock
6 and a power line, which are able to change the clock frequency
7 of the bus in runtime. To monitor the usage of each bus in runtime,
8 the driver uses the PPMU (Platform Performance Monitoring Unit), which
9 is able to measure the current load of sub-blocks.
11 The Exynos SoC includes the various sub-blocks which have the each AXI bus.
12 The each AXI bus has the owned source clock but, has not the only owned
13 power line. The power line might be shared among one more sub-blocks.
14 So, we can divide into two type of device as the role of each sub-block.
15 There are two type of bus devices as following:
19 Basically, parent and passive bus device share the same power line.
20 The parent bus device can only change the voltage of shared power line
21 and the rest bus devices (passive bus device) depend on the decision of
22 the parent bus device. If there are three blocks which share the VDD_xxx
23 power line, Only one block should be parent device and then the rest blocks
24 should depend on the parent device as passive device.
26 VDD_xxx |--- A block (parent)
27 |--- B block (passive)
28 |--- C block (passive)
30 There are a little different composition among Exynos SoC because each Exynos
31 SoC has different sub-blocks. Therefore, such difference should be specified
32 in devicetree file instead of each device driver. In result, this driver
33 is able to support the bus frequency for all Exynos SoCs.
35 Required properties for all bus devices:
36 - compatible: Should be "samsung,exynos-bus".
37 - clock-names : the name of clock used by the bus, "bus".
38 - clocks : phandles for clock specified in "clock-names" property.
39 - operating-points-v2: the OPP table including frequency/voltage information
40 to support DVFS (Dynamic Voltage/Frequency Scaling) feature.
42 Required properties only for parent bus device:
43 - vdd-supply: the regulator to provide the buses with the voltage.
44 - devfreq-events: the devfreq-event device to monitor the current utilization
47 Required properties only for passive bus device:
48 - devfreq: the parent bus device.
50 Optional properties only for parent bus device:
51 - exynos,saturation-ratio: the percentage value which is used to calibrate
52 the performance count against total cycle count.
53 - exynos,voltage-tolerance: the percentage value for bus voltage tolerance
54 which is used to calculate the max voltage.
56 Detailed correlation between sub-blocks and power line according to Exynos SoC:
57 - In case of Exynos3250, there are two power line as following:
60 VDD_INT |--- LEFTBUS (parent device)
72 - In case of Exynos4210, there is one power line as following:
73 VDD_INT |--- DMC (parent device)
89 - In case of Exynos4x12, there are two power line as following:
92 VDD_INT |--- LEFTBUS (parent device)
108 Show the AXI buses of Exynos3250 SoC. Exynos3250 divides the buses to
109 power line (regulator). The MIF (Memory Interface) AXI bus is used to
110 transfer data between DRAM and CPU and uses the VDD_MIF regulator.
112 - MIF (Memory Interface) block
113 : VDD_MIF |--- DMC (Dynamic Memory Controller)
115 - INT (Internal) block
116 : VDD_INT |--- LEFTBUS (parent device)
127 - MIF bus's frequency/voltage table
128 -----------------------
129 |Lv| Freq | Voltage |
130 -----------------------
132 |L2| 100000 |800000 |
133 |L3| 134000 |800000 |
134 |L4| 200000 |825000 |
135 |L5| 400000 |875000 |
136 -----------------------
138 - INT bus's frequency/voltage table
139 ----------------------------------------------------------
140 |Block|LEFTBUS|RIGHTBUS|MCUISP |ISP |PERIL ||VDD_INT |
141 | name| |LCD0 | | | || |
144 ----------------------------------------------------------
145 |Mode |*parent|passive |passive|passive|passive|| |
146 ----------------------------------------------------------
147 |Lv |Frequency ||Voltage |
148 ----------------------------------------------------------
149 |L1 |50000 |50000 |50000 |50000 |50000 ||900000 |
150 |L2 |80000 |80000 |80000 |80000 |80000 ||900000 |
151 |L3 |100000 |100000 |100000 |100000 |100000 ||1000000 |
152 |L4 |134000 |134000 |200000 |200000 | ||1000000 |
153 |L5 |200000 |200000 |400000 |300000 | ||1000000 |
154 ----------------------------------------------------------
157 The bus of DMC (Dynamic Memory Controller) block in exynos3250.dtsi
161 compatible = "samsung,exynos-bus";
162 clocks = <&cmu_dmc CLK_DIV_DMC>;
164 operating-points-v2 = <&bus_dmc_opp_table>;
168 bus_dmc_opp_table: opp_table1 {
169 compatible = "operating-points-v2";
173 opp-hz = /bits/ 64 <50000000>;
174 opp-microvolt = <800000>;
177 opp-hz = /bits/ 64 <100000000>;
178 opp-microvolt = <800000>;
181 opp-hz = /bits/ 64 <134000000>;
182 opp-microvolt = <800000>;
185 opp-hz = /bits/ 64 <200000000>;
186 opp-microvolt = <825000>;
189 opp-hz = /bits/ 64 <400000000>;
190 opp-microvolt = <875000>;
194 bus_leftbus: bus_leftbus {
195 compatible = "samsung,exynos-bus";
196 clocks = <&cmu CLK_DIV_GDL>;
198 operating-points-v2 = <&bus_leftbus_opp_table>;
202 bus_rightbus: bus_rightbus {
203 compatible = "samsung,exynos-bus";
204 clocks = <&cmu CLK_DIV_GDR>;
206 operating-points-v2 = <&bus_leftbus_opp_table>;
211 compatible = "samsung,exynos-bus";
212 clocks = <&cmu CLK_DIV_ACLK_160>;
214 operating-points-v2 = <&bus_leftbus_opp_table>;
219 compatible = "samsung,exynos-bus";
220 clocks = <&cmu CLK_DIV_ACLK_200>;
222 operating-points-v2 = <&bus_leftbus_opp_table>;
226 bus_mcuisp: bus_mcuisp {
227 compatible = "samsung,exynos-bus";
228 clocks = <&cmu CLK_DIV_ACLK_400_MCUISP>;
230 operating-points-v2 = <&bus_mcuisp_opp_table>;
235 compatible = "samsung,exynos-bus";
236 clocks = <&cmu CLK_DIV_ACLK_266>;
238 operating-points-v2 = <&bus_isp_opp_table>;
242 bus_peril: bus_peril {
243 compatible = "samsung,exynos-bus";
244 clocks = <&cmu CLK_DIV_ACLK_100>;
246 operating-points-v2 = <&bus_peril_opp_table>;
251 compatible = "samsung,exynos-bus";
252 clocks = <&cmu CLK_SCLK_MFC>;
254 operating-points-v2 = <&bus_leftbus_opp_table>;
258 bus_leftbus_opp_table: opp_table1 {
259 compatible = "operating-points-v2";
263 opp-hz = /bits/ 64 <50000000>;
264 opp-microvolt = <900000>;
267 opp-hz = /bits/ 64 <80000000>;
268 opp-microvolt = <900000>;
271 opp-hz = /bits/ 64 <100000000>;
272 opp-microvolt = <1000000>;
275 opp-hz = /bits/ 64 <134000000>;
276 opp-microvolt = <1000000>;
279 opp-hz = /bits/ 64 <200000000>;
280 opp-microvolt = <1000000>;
284 bus_mcuisp_opp_table: opp_table2 {
285 compatible = "operating-points-v2";
289 opp-hz = /bits/ 64 <50000000>;
292 opp-hz = /bits/ 64 <80000000>;
295 opp-hz = /bits/ 64 <100000000>;
298 opp-hz = /bits/ 64 <200000000>;
301 opp-hz = /bits/ 64 <400000000>;
305 bus_isp_opp_table: opp_table3 {
306 compatible = "operating-points-v2";
310 opp-hz = /bits/ 64 <50000000>;
313 opp-hz = /bits/ 64 <80000000>;
316 opp-hz = /bits/ 64 <100000000>;
319 opp-hz = /bits/ 64 <200000000>;
322 opp-hz = /bits/ 64 <300000000>;
326 bus_peril_opp_table: opp_table4 {
327 compatible = "operating-points-v2";
331 opp-hz = /bits/ 64 <50000000>;
334 opp-hz = /bits/ 64 <80000000>;
337 opp-hz = /bits/ 64 <100000000>;
342 Usage case to handle the frequency and voltage of bus on runtime
343 in exynos3250-rinato.dts is listed below:
346 devfreq-events = <&ppmu_dmc0_3>, <&ppmu_dmc1_3>;
347 vdd-supply = <&buck1_reg>; /* VDD_MIF */
352 devfreq-events = <&ppmu_leftbus_3>, <&ppmu_rightbus_3>;
353 vdd-supply = <&buck3_reg>;
358 devfreq = <&bus_leftbus>;
363 devfreq = <&bus_leftbus>;
368 devfreq = <&bus_leftbus>;
373 devfreq = <&bus_leftbus>;
378 devfreq = <&bus_leftbus>;
383 devfreq = <&bus_leftbus>;
388 devfreq = <&bus_leftbus>;