• Viresh Kumar's avatar
    OPP: Prevent creating multiple OPP tables for devices sharing OPP nodes · 283d55e6
    Viresh Kumar authored
    When two or more devices are sharing their clock and voltage rails, they
    share the same OPP table. But there are some corner cases where the OPP
    core incorrectly creates separate OPP tables for them.
    
    For example, CPU 0 and 1 share clock/voltage rails. The platform
    specific code calls dev_pm_opp_set_regulators() for CPU0 and the OPP
    core creates an OPP table for it (the individual OPPs aren't initialized
    as of now). The same is repeated for CPU1 then. Because
    _opp_get_opp_table() doesn't compare DT node pointers currently, it
    fails to find the link between CPU0 and CPU1 and so creates a new OPP
    table.
    
    Fix this by calling _managed_opp() from _opp_get_opp_table().
    _managed_opp() gain an additional argument (index) to get the right node
    pointer. This resulted in simplifying code in _of_add_opp_table_v2() as
    well.
    Tested-by: default avatarNiklas Cassel <niklas.cassel@linaro.org>
    Signed-off-by: default avatarViresh Kumar <viresh.kumar@linaro.org>
    283d55e6
core.c 46.9 KB