Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

clk: qcom: rcg2: Make hw_clk_ctrl toggleable

Certain SoCs use the HW_CLK_CTRL feature on some of the clocks they
host. This allows the clocks to be turned on automatically when a
downstream branch tries to change rate or config.

Make it togglable so that we can utilize this.

Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
Signed-off-by: Bjorn Andersson <andersson@kernel.org>
Link: https://lore.kernel.org/r/20230517-topic-waipio-gpucc-v1-2-4f40e282af1d@linaro.org

authored by

Konrad Dybcio and committed by
Bjorn Andersson
a0e0ec74 6de1bd74

+4
+2
drivers/clk/qcom/clk-rcg.h
··· 141 141 * @clkr: regmap clock handle 142 142 * @cfg_off: defines the cfg register offset from the CMD_RCGR + CFG_REG 143 143 * @parked_cfg: cached value of the CFG register for parked RCGs 144 + * @hw_clk_ctrl: whether to enable hardware clock control 144 145 */ 145 146 struct clk_rcg2 { 146 147 u32 cmd_rcgr; ··· 153 152 struct clk_regmap clkr; 154 153 u8 cfg_off; 155 154 u32 parked_cfg; 155 + bool hw_clk_ctrl; 156 156 }; 157 157 158 158 #define to_clk_rcg2(_hw) container_of(to_clk_regmap(_hw), struct clk_rcg2, clkr)
+2
drivers/clk/qcom/clk-rcg2.c
··· 325 325 cfg |= rcg->parent_map[index].cfg << CFG_SRC_SEL_SHIFT; 326 326 if (rcg->mnd_width && f->n && (f->m != f->n)) 327 327 cfg |= CFG_MODE_DUAL_EDGE; 328 + if (rcg->hw_clk_ctrl) 329 + cfg |= CFG_HW_CLK_CTRL_MASK; 328 330 329 331 *_cfg &= ~mask; 330 332 *_cfg |= cfg;