• S
    clk: divider: do not propagate rate change request when unnecessary · 081c9025
    Shawn Guo 提交于
    If the current rate of parent clock is sufficient to provide child a
    requested rate with a proper divider setting, the rate change request
    should not be propagated.  Instead, changing the divider setting is good
    enough to get child clock run at the requested rate.
    
    On an imx6q clock configuration illustrated below,
    
      ahb --> ipg --> ipg_per
      132M    66M     66M
    
    calling clk_set_rate(ipg_per, 22M) with the current
    clk_divider_bestdiv() implementation will result in the rate change up
    to ahb level like the following, because of the unnecessary/incorrect
    rate change propagation.
    
      ahb --> ipg --> ipg_per
      66M     22M     22M
    
    Fix the problem by trying to see if the requested rate can be achieved
    by simply changing the divider value, and in that case return the
    divider immediately from function clk_divider_bestdiv() as the best
    one, so that all those unnecessary rate change propagation can be saved.
    Reported-by: NAnson Huang <b20788@freescale.com>
    Signed-off-by: NShawn Guo <shawn.guo@linaro.org>
    Signed-off-by: NMike Turquette <mturquette@linaro.org>
    081c9025
clk-divider.c 8.7 KB