Skip to content
  • Shawn Lin's avatar
    clk: Don't show the incorrect clock phase · 2c440ef4
    Shawn Lin authored
    
    
    [ Upstream commit 1f9c63e8de3d7b377c9d74e4a17524cfb60e6384 ]
    
    It's found that the clock phase output from clk_summary is
    wrong compared to the actual phase reading from the register.
    
    cat /sys/kernel/debug/clk/clk_summary | grep sdio_sample
    sdio_sample     0        1        0 50000000          0 -22
    
    It exposes an issue that clk core, clk_core_get_phase, always
    returns the cached core->phase which should be either updated
    by calling clk_set_phase or directly from the first place the
    clk was registered.
    
    When registering the clk, the core->phase geting from ->get_phase()
    may return negative value indicating error. This is quite common
    since the clk's phase may be highly related to its parent chain,
    but it was temporarily orphan when registered, since its parent
    chains hadn't be ready at that time, so the clk drivers decide to
    return error in this case. However, if no clk_set_phase is called or
    maybe the ->set_phase() isn't even implemented, the core->phase would
    never be updated. This is wrong, and we should try to update it when
    all its parent chains are settled down, like the way of updating clock
    rate for that. But it's not deserved to complicate the code now and
    just update it anyway when calling clk_core_get_phase, which would be
    much simple and enough.
    
    Signed-off-by: default avatarShawn Lin <shawn.lin@rock-chips.com>
    Acked-by: default avatarJerome Brunet <jbrunet@baylibre.com>
    Signed-off-by: default avatarStephen Boyd <sboyd@kernel.org>
    Signed-off-by: default avatarSasha Levin <alexander.levin@microsoft.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    2c440ef4