• Mike Tipton's avatar
    clk: qcom: clk-rpmh: Wait for completion when enabling clocks · dad4e7fd
    Mike Tipton authored
    The current implementation always uses rpmh_write_async, which doesn't
    wait for completion. That's fine for disable requests since there's no
    immediate need for the clocks and they can be disabled in the
    background. However, for enable requests we need to ensure the clocks
    are actually enabled before returning to the client. Otherwise, clients
    can end up accessing their HW before the necessary clocks are enabled,
    which can lead to bus errors.
    
    Use the synchronous version of this API (rpmh_write) for enable requests
    in the active set to ensure completion.
    
    Completion isn't required for sleep/wake sets, since they don't take
    effect until after we enter sleep. All rpmh requests are automatically
    flushed prior to entering sleep.
    
    Fixes: 9c7e4702 ("clk: qcom: clk-rpmh: Add QCOM RPMh clock driver")
    Signed-off-by: default avatarMike Tipton <mdtipton@codeaurora.org>
    Link: https://lkml.kernel.org/r/20200215021232.1149-1-mdtipton@codeaurora.orgReviewed-by: default avatarBjorn Andersson <bjorn.andersson@linaro.org>
    [sboyd@kernel.org: Reorg code a bit for readability, rename to 'wait' to
    make local variable not conflict with completion.h mechanism]
    Signed-off-by: default avatarStephen Boyd <sboyd@kernel.org>
    dad4e7fd
clk-rpmh.c 14.5 KB