diff options
author | Chanwoo Choi <cw00.choi@samsung.com> | 2015-11-23 09:18:52 -0500 |
---|---|---|
committer | MyungJoo Ham <myungjoo.ham@samsung.com> | 2016-05-02 22:20:08 -0400 |
commit | a296cb5c35ce5429415043a22a385c24673e4aeb (patch) | |
tree | 6d757d03456c97b2583b5babee0067cbd44691c7 | |
parent | 403e0689d2a9eb33d9281db4079e964eb65ba9ef (diff) |
PM / devfreq: exynos: Update documentation for bus devices using passive governor
This patch updates the documentation for passive bus devices and adds the
detailed example of Exynos3250.
Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
Acked-by: MyungJoo Ham <myungjoo.ham@samsung.com>
Acked-by: Krzysztof Kozlowski <k.kozlowski@samsung.com>
-rw-r--r-- | Documentation/devicetree/bindings/devfreq/exynos-bus.txt | 250 |
1 files changed, 247 insertions, 3 deletions
diff --git a/Documentation/devicetree/bindings/devfreq/exynos-bus.txt b/Documentation/devicetree/bindings/devfreq/exynos-bus.txt index 7200817b78dc..2fa15dc08fe6 100644 --- a/Documentation/devicetree/bindings/devfreq/exynos-bus.txt +++ b/Documentation/devicetree/bindings/devfreq/exynos-bus.txt | |||
@@ -8,22 +8,46 @@ 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 | 8 | the driver uses the PPMU (Platform Performance Monitoring Unit), which |
9 | is able to measure the current load of sub-blocks. | 9 | is able to measure the current load of sub-blocks. |
10 | 10 | ||
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: | ||
16 | - parent bus device | ||
17 | - passive bus device | ||
18 | |||
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. | ||
25 | |||
26 | VDD_xxx |--- A block (parent) | ||
27 | |--- B block (passive) | ||
28 | |--- C block (passive) | ||
29 | |||
11 | There are a little different composition among Exynos SoC because each Exynos | 30 | There are a little different composition among Exynos SoC because each Exynos |
12 | SoC has different sub-blocks. Therefore, such difference should be specified | 31 | SoC has different sub-blocks. Therefore, such difference should be specified |
13 | in devicetree file instead of each device driver. In result, this driver | 32 | in devicetree file instead of each device driver. In result, this driver |
14 | is able to support the bus frequency for all Exynos SoCs. | 33 | is able to support the bus frequency for all Exynos SoCs. |
15 | 34 | ||
16 | Required properties for bus device: | 35 | Required properties for all bus devices: |
17 | - compatible: Should be "samsung,exynos-bus". | 36 | - compatible: Should be "samsung,exynos-bus". |
18 | - clock-names : the name of clock used by the bus, "bus". | 37 | - clock-names : the name of clock used by the bus, "bus". |
19 | - clocks : phandles for clock specified in "clock-names" property. | 38 | - clocks : phandles for clock specified in "clock-names" property. |
20 | - operating-points-v2: the OPP table including frequency/voltage information | 39 | - operating-points-v2: the OPP table including frequency/voltage information |
21 | to support DVFS (Dynamic Voltage/Frequency Scaling) feature. | 40 | to support DVFS (Dynamic Voltage/Frequency Scaling) feature. |
41 | |||
42 | Required properties only for parent bus device: | ||
22 | - vdd-supply: the regulator to provide the buses with the voltage. | 43 | - vdd-supply: the regulator to provide the buses with the voltage. |
23 | - devfreq-events: the devfreq-event device to monitor the current utilization | 44 | - devfreq-events: the devfreq-event device to monitor the current utilization |
24 | of buses. | 45 | of buses. |
25 | 46 | ||
26 | Optional properties for bus device: | 47 | Required properties only for passive bus device: |
48 | - devfreq: the parent bus device. | ||
49 | |||
50 | Optional properties only for parent bus device: | ||
27 | - exynos,saturation-ratio: the percentage value which is used to calibrate | 51 | - exynos,saturation-ratio: the percentage value which is used to calibrate |
28 | the performance count against total cycle count. | 52 | the performance count against total cycle count. |
29 | - exynos,voltage-tolerance: the percentage value for bus voltage tolerance | 53 | - exynos,voltage-tolerance: the percentage value for bus voltage tolerance |
@@ -34,7 +58,20 @@ Example1: | |||
34 | power line (regulator). The MIF (Memory Interface) AXI bus is used to | 58 | power line (regulator). The MIF (Memory Interface) AXI bus is used to |
35 | transfer data between DRAM and CPU and uses the VDD_MIF regulator. | 59 | transfer data between DRAM and CPU and uses the VDD_MIF regulator. |
36 | 60 | ||
37 | - power line(VDD_MIF) --> bus for DMC (Dynamic Memory Controller) block | 61 | - MIF (Memory Interface) block |
62 | : VDD_MIF |--- DMC (Dynamic Memory Controller) | ||
63 | |||
64 | - INT (Internal) block | ||
65 | : VDD_INT |--- LEFTBUS (parent device) | ||
66 | |--- PERIL | ||
67 | |--- MFC | ||
68 | |--- G3D | ||
69 | |--- RIGHTBUS | ||
70 | |--- FSYS | ||
71 | |--- LCD0 | ||
72 | |--- PERIR | ||
73 | |--- ISP | ||
74 | |--- CAM | ||
38 | 75 | ||
39 | - MIF bus's frequency/voltage table | 76 | - MIF bus's frequency/voltage table |
40 | ----------------------- | 77 | ----------------------- |
@@ -47,6 +84,24 @@ Example1: | |||
47 | |L5| 400000 |875000 | | 84 | |L5| 400000 |875000 | |
48 | ----------------------- | 85 | ----------------------- |
49 | 86 | ||
87 | - INT bus's frequency/voltage table | ||
88 | ---------------------------------------------------------- | ||
89 | |Block|LEFTBUS|RIGHTBUS|MCUISP |ISP |PERIL ||VDD_INT | | ||
90 | | name| |LCD0 | | | || | | ||
91 | | | |FSYS | | | || | | ||
92 | | | |MFC | | | || | | ||
93 | ---------------------------------------------------------- | ||
94 | |Mode |*parent|passive |passive|passive|passive|| | | ||
95 | ---------------------------------------------------------- | ||
96 | |Lv |Frequency ||Voltage | | ||
97 | ---------------------------------------------------------- | ||
98 | |L1 |50000 |50000 |50000 |50000 |50000 ||900000 | | ||
99 | |L2 |80000 |80000 |80000 |80000 |80000 ||900000 | | ||
100 | |L3 |100000 |100000 |100000 |100000 |100000 ||1000000 | | ||
101 | |L4 |134000 |134000 |200000 |200000 | ||1000000 | | ||
102 | |L5 |200000 |200000 |400000 |300000 | ||1000000 | | ||
103 | ---------------------------------------------------------- | ||
104 | |||
50 | Example2 : | 105 | Example2 : |
51 | The bus of DMC (Dynamic Memory Controller) block in exynos3250.dtsi | 106 | The bus of DMC (Dynamic Memory Controller) block in exynos3250.dtsi |
52 | is listed below: | 107 | is listed below: |
@@ -85,6 +140,154 @@ Example2 : | |||
85 | }; | 140 | }; |
86 | }; | 141 | }; |
87 | 142 | ||
143 | bus_leftbus: bus_leftbus { | ||
144 | compatible = "samsung,exynos-bus"; | ||
145 | clocks = <&cmu CLK_DIV_GDL>; | ||
146 | clock-names = "bus"; | ||
147 | operating-points-v2 = <&bus_leftbus_opp_table>; | ||
148 | status = "disabled"; | ||
149 | }; | ||
150 | |||
151 | bus_rightbus: bus_rightbus { | ||
152 | compatible = "samsung,exynos-bus"; | ||
153 | clocks = <&cmu CLK_DIV_GDR>; | ||
154 | clock-names = "bus"; | ||
155 | operating-points-v2 = <&bus_leftbus_opp_table>; | ||
156 | status = "disabled"; | ||
157 | }; | ||
158 | |||
159 | bus_lcd0: bus_lcd0 { | ||
160 | compatible = "samsung,exynos-bus"; | ||
161 | clocks = <&cmu CLK_DIV_ACLK_160>; | ||
162 | clock-names = "bus"; | ||
163 | operating-points-v2 = <&bus_leftbus_opp_table>; | ||
164 | status = "disabled"; | ||
165 | }; | ||
166 | |||
167 | bus_fsys: bus_fsys { | ||
168 | compatible = "samsung,exynos-bus"; | ||
169 | clocks = <&cmu CLK_DIV_ACLK_200>; | ||
170 | clock-names = "bus"; | ||
171 | operating-points-v2 = <&bus_leftbus_opp_table>; | ||
172 | status = "disabled"; | ||
173 | }; | ||
174 | |||
175 | bus_mcuisp: bus_mcuisp { | ||
176 | compatible = "samsung,exynos-bus"; | ||
177 | clocks = <&cmu CLK_DIV_ACLK_400_MCUISP>; | ||
178 | clock-names = "bus"; | ||
179 | operating-points-v2 = <&bus_mcuisp_opp_table>; | ||
180 | status = "disabled"; | ||
181 | }; | ||
182 | |||
183 | bus_isp: bus_isp { | ||
184 | compatible = "samsung,exynos-bus"; | ||
185 | clocks = <&cmu CLK_DIV_ACLK_266>; | ||
186 | clock-names = "bus"; | ||
187 | operating-points-v2 = <&bus_isp_opp_table>; | ||
188 | status = "disabled"; | ||
189 | }; | ||
190 | |||
191 | bus_peril: bus_peril { | ||
192 | compatible = "samsung,exynos-bus"; | ||
193 | clocks = <&cmu CLK_DIV_ACLK_100>; | ||
194 | clock-names = "bus"; | ||
195 | operating-points-v2 = <&bus_peril_opp_table>; | ||
196 | status = "disabled"; | ||
197 | }; | ||
198 | |||
199 | bus_mfc: bus_mfc { | ||
200 | compatible = "samsung,exynos-bus"; | ||
201 | clocks = <&cmu CLK_SCLK_MFC>; | ||
202 | clock-names = "bus"; | ||
203 | operating-points-v2 = <&bus_leftbus_opp_table>; | ||
204 | status = "disabled"; | ||
205 | }; | ||
206 | |||
207 | bus_leftbus_opp_table: opp_table1 { | ||
208 | compatible = "operating-points-v2"; | ||
209 | opp-shared; | ||
210 | |||
211 | opp@50000000 { | ||
212 | opp-hz = /bits/ 64 <50000000>; | ||
213 | opp-microvolt = <900000>; | ||
214 | }; | ||
215 | opp@80000000 { | ||
216 | opp-hz = /bits/ 64 <80000000>; | ||
217 | opp-microvolt = <900000>; | ||
218 | }; | ||
219 | opp@100000000 { | ||
220 | opp-hz = /bits/ 64 <100000000>; | ||
221 | opp-microvolt = <1000000>; | ||
222 | }; | ||
223 | opp@134000000 { | ||
224 | opp-hz = /bits/ 64 <134000000>; | ||
225 | opp-microvolt = <1000000>; | ||
226 | }; | ||
227 | opp@200000000 { | ||
228 | opp-hz = /bits/ 64 <200000000>; | ||
229 | opp-microvolt = <1000000>; | ||
230 | }; | ||
231 | }; | ||
232 | |||
233 | bus_mcuisp_opp_table: opp_table2 { | ||
234 | compatible = "operating-points-v2"; | ||
235 | opp-shared; | ||
236 | |||
237 | opp@50000000 { | ||
238 | opp-hz = /bits/ 64 <50000000>; | ||
239 | }; | ||
240 | opp@80000000 { | ||
241 | opp-hz = /bits/ 64 <80000000>; | ||
242 | }; | ||
243 | opp@100000000 { | ||
244 | opp-hz = /bits/ 64 <100000000>; | ||
245 | }; | ||
246 | opp@200000000 { | ||
247 | opp-hz = /bits/ 64 <200000000>; | ||
248 | }; | ||
249 | opp@400000000 { | ||
250 | opp-hz = /bits/ 64 <400000000>; | ||
251 | }; | ||
252 | }; | ||
253 | |||
254 | bus_isp_opp_table: opp_table3 { | ||
255 | compatible = "operating-points-v2"; | ||
256 | opp-shared; | ||
257 | |||
258 | opp@50000000 { | ||
259 | opp-hz = /bits/ 64 <50000000>; | ||
260 | }; | ||
261 | opp@80000000 { | ||
262 | opp-hz = /bits/ 64 <80000000>; | ||
263 | }; | ||
264 | opp@100000000 { | ||
265 | opp-hz = /bits/ 64 <100000000>; | ||
266 | }; | ||
267 | opp@200000000 { | ||
268 | opp-hz = /bits/ 64 <200000000>; | ||
269 | }; | ||
270 | opp@300000000 { | ||
271 | opp-hz = /bits/ 64 <300000000>; | ||
272 | }; | ||
273 | }; | ||
274 | |||
275 | bus_peril_opp_table: opp_table4 { | ||
276 | compatible = "operating-points-v2"; | ||
277 | opp-shared; | ||
278 | |||
279 | opp@50000000 { | ||
280 | opp-hz = /bits/ 64 <50000000>; | ||
281 | }; | ||
282 | opp@80000000 { | ||
283 | opp-hz = /bits/ 64 <80000000>; | ||
284 | }; | ||
285 | opp@100000000 { | ||
286 | opp-hz = /bits/ 64 <100000000>; | ||
287 | }; | ||
288 | }; | ||
289 | |||
290 | |||
88 | Usage case to handle the frequency and voltage of bus on runtime | 291 | Usage case to handle the frequency and voltage of bus on runtime |
89 | in exynos3250-rinato.dts is listed below: | 292 | in exynos3250-rinato.dts is listed below: |
90 | 293 | ||
@@ -93,3 +296,44 @@ Example2 : | |||
93 | vdd-supply = <&buck1_reg>; /* VDD_MIF */ | 296 | vdd-supply = <&buck1_reg>; /* VDD_MIF */ |
94 | status = "okay"; | 297 | status = "okay"; |
95 | }; | 298 | }; |
299 | |||
300 | &bus_leftbus { | ||
301 | devfreq-events = <&ppmu_leftbus_3>, <&ppmu_rightbus_3>; | ||
302 | vdd-supply = <&buck3_reg>; | ||
303 | status = "okay"; | ||
304 | }; | ||
305 | |||
306 | &bus_rightbus { | ||
307 | devfreq = <&bus_leftbus>; | ||
308 | status = "okay"; | ||
309 | }; | ||
310 | |||
311 | &bus_lcd0 { | ||
312 | devfreq = <&bus_leftbus>; | ||
313 | status = "okay"; | ||
314 | }; | ||
315 | |||
316 | &bus_fsys { | ||
317 | devfreq = <&bus_leftbus>; | ||
318 | status = "okay"; | ||
319 | }; | ||
320 | |||
321 | &bus_mcuisp { | ||
322 | devfreq = <&bus_leftbus>; | ||
323 | status = "okay"; | ||
324 | }; | ||
325 | |||
326 | &bus_isp { | ||
327 | devfreq = <&bus_leftbus>; | ||
328 | status = "okay"; | ||
329 | }; | ||
330 | |||
331 | &bus_peril { | ||
332 | devfreq = <&bus_leftbus>; | ||
333 | status = "okay"; | ||
334 | }; | ||
335 | |||
336 | &bus_mfc { | ||
337 | devfreq = <&bus_leftbus>; | ||
338 | status = "okay"; | ||
339 | }; | ||