On Mon, Jun 24, 2019 at 2:43 AM Viresh Kumar <viresh.ku...@linaro.org> wrote: > > On 21-06-19, 17:34, Saravana Kannan wrote: > > The devfreq passive governor scales the frequency of a "child" device > > based on the current frequency of a "parent" device (not parent/child in > > the sense of device hierarchy). As of today, the passive governor > > requires one of the following to work correctly: > > 1. The parent and child device have the same number of frequencies > > 2. The child device driver passes a mapping function to translate from > > parent frequency to child frequency. > > > > When (1) is not true, (2) is the only option right now. But often times, > > all that is required is a simple mapping from parent's frequency to > > child's frequency. > > > > Since OPPs already support pointing to other "required-opps", add > > support for using that to map from parent device frequency to child > > device frequency. That way, every child device driver doesn't have to > > implement a separate mapping function anytime (1) isn't true. > > Can you please provide a real world example with DT code here so I > can understand it better ? >
Here's an example. This can't be done today, but can be done with this change. In arch/arm64/boot/dts/exynos/exynos5433-bus.dtsi you have something like this with the following changes: bus_g2d_400: bus0 { compatible = "samsung,exynos-bus"; clocks = <&cmu_top CLK_ACLK_G2D_400>; clock-names = "bus"; operating-points-v2 = <&bus_g2d_400_opp_table>; status = "disabled"; }; bus_noc2: bus9 { compatible = "samsung,exynos-bus"; clocks = <&cmu_mif CLK_ACLK_BUS2_400>; clock-names = "bus"; operating-points-v2 = <&bus_noc2_opp_table>; status = "disabled"; }; bus_g2d_400_opp_table: opp_table2 { compatible = "operating-points-v2"; opp-shared; opp-400000000 { opp-hz = /bits/ 64 <400000000>; opp-microvolt = <1075000>; + required-opps = <&noc2_400>; }; opp-267000000 { opp-hz = /bits/ 64 <267000000>; opp-microvolt = <1000000>; + required-opps = <&noc2_200>; }; opp-200000000 { opp-hz = /bits/ 64 <200000000>; opp-microvolt = <975000>; + required-opps = <&noc2_200>; }; opp-160000000 { opp-hz = /bits/ 64 <160000000>; opp-microvolt = <962500>; + required-opps = <&noc2_134>; }; opp-134000000 { opp-hz = /bits/ 64 <134000000>; opp-microvolt = <950000>; + required-opps = <&noc2_134>; }; opp-100000000 { opp-hz = /bits/ 64 <100000000>; opp-microvolt = <937500>; + required-opps = <&noc2_100>; }; }; bus_noc2_opp_table: opp_table6 { compatible = "operating-points-v2"; - opp-400000000 { + noc2_400: opp-400000000 { opp-hz = /bits/ 64 <400000000>; }; - opp-200000000 { + noc2_200: opp-200000000 { opp-hz = /bits/ 64 <200000000>; }; - opp-134000000 { + noc2_134: opp-134000000 { opp-hz = /bits/ 64 <134000000>; }; - opp-100000000 { + noc2_100: opp-100000000 { opp-hz = /bits/ 64 <100000000>; }; }; Thanks, Saravana