• Martin Blumenstingl's avatar
    clk: composite: Also consider .determine_rate for rate + mux composites · 675c496d
    Martin Blumenstingl authored
    Commit 69a00fb3 ("clk: divider: Implement and wire up
    .determine_rate by default") switches clk_divider_ops to implement
    .determine_rate by default. This breaks composite clocks with multiple
    parents because clk-composite.c does not use the special handling for
    mux + divider combinations anymore (that was restricted to rate clocks
    which only implement .round_rate, but not .determine_rate).
    
    Alex reports:
      This breaks lot of clocks for Rockchip which intensively uses
      composites,  i.e. those clocks will always stay at the initial parent,
      which in some cases  is the XTAL clock and I strongly guess it is the
      same for other platforms,  which use composite clocks having more than
      one parent (e.g. mediatek, ti ...)
    
      Example (RK3399)
      clk_sdio is set (initialized) with XTAL (24 MHz) as parent in u-boot.
      It will always stay at this parent, even if the mmc driver sets a rate
      of  200 MHz (fails, as the nature of things), which should switch it
      to   any of its possible parent PLLs defined in
      mux_pll_src_cpll_gpll_npll_ppll_upll_24m_p (see clk-rk3399.c)  - which
      never happens.
    
    Restore the original behavior by changing the priority of the conditions
    inside clk-composite.c. Now the special rate + mux case (with rate_ops
    having a .round_rate - which is still the case for the default
    clk_divider_ops) is preferred over rate_ops which have .determine_rate
    defined (and not further considering the mux).
    
    Fixes: 69a00fb3
    
     ("clk: divider: Implement and wire up .determine_rate by default")
    Reported-by: default avatarAlex Bee <knaerzche@gmail.com>
    Signed-off-by: default avatarMartin Blumenstingl <martin.blumenstingl@googlemail.com>
    Link: https://lore.kernel.org/r/20211016105022.303413-2-martin.blumenstingl@googlemail.com
    
    Tested-by: default avatarAlex Bee <knaerzche@gmail.com>
    Tested-by: default avatarChen-Yu Tsai <wens@csie.org>
    Signed-off-by: default avatarStephen Boyd <sboyd@kernel.org>
    675c496d
clk-composite.c 12.3 KB