• Dmitry Baryshkov's avatar
    clk: qcom: regmap: add PHY clock source implementation · 74e4190c
    Dmitry Baryshkov authored
    On recent Qualcomm platforms the QMP PIPE clocks feed into a set of
    muxes which must be parked to the "safe" source (bi_tcxo) when
    corresponding GDSC is turned off and on again. Currently this is
    handcoded in the PCIe driver by reparenting the gcc_pipe_N_clk_src
    clock. However the same code sequence should be applied in the
    pcie-qcom endpoint, USB3 and UFS drivers.
    
    Rather than copying this sequence over and over again, follow the
    example of clk_rcg2_shared_ops and implement this parking in the
    enable() and disable() clock operations. Supplement the regmap-mux with
    the new clk_regmap_phy_mux type, which implements such multiplexers
    as a simple gate clocks.
    
    This is possible since each of these multiplexers has just two clock
    sources: one coming from the PHY and a reference (XO) one.  If the clock
    is running off the from-PHY source, report it as enabled. Report it as
    disabled otherwise (if it uses reference source).
    
    This way the PHY will disable the pipe clock before turning off the
    GDSC, which in turn would lead to disabling corresponding pipe_clk_src
    (and thus it being parked to a safe, reference clock source). And vice
    versa, after enabling the GDSC the PHY will enable the pipe clock, which
    would cause pipe_clk_src to be switched from a safe source to the
    working one.
    Reviewed-by: default avatarJohan Hovold <johan+linaro@kernel.org>
    Tested-by: default avatarJohan Hovold <johan+linaro@kernel.org>
    Reported-by: default avatarkernel test robot <lkp@intel.com>
    Signed-off-by: default avatarDmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Reviewed-by: default avatarStephen Boyd <sboyd@kernel.org>
    Signed-off-by: default avatarBjorn Andersson <bjorn.andersson@linaro.org>
    Link: https://lore.kernel.org/r/20220608105238.2973600-2-dmitry.baryshkov@linaro.org
    74e4190c
clk-regmap-phy-mux.c 1.58 KB