On 11.01.2023 20:19, Dmitry Baryshkov wrote: > Initialize ACD configuration from qcom_cpu_clk_msm8996_register_clks(), > before registering all clocks. This way we can be sure that the clock is > fully configured before letting CCF touch it. > > Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@xxxxxxxxxx> > --- Reviewed-by: Konrad Dybcio <konrad.dybcio@xxxxxxxxxx> Konrad > drivers/clk/qcom/clk-cpu-8996.c | 16 +++++++++------- > 1 file changed, 9 insertions(+), 7 deletions(-) > > diff --git a/drivers/clk/qcom/clk-cpu-8996.c b/drivers/clk/qcom/clk-cpu-8996.c > index e390f4aadff1..571ed52b3026 100644 > --- a/drivers/clk/qcom/clk-cpu-8996.c > +++ b/drivers/clk/qcom/clk-cpu-8996.c > @@ -425,6 +425,8 @@ static struct clk_regmap *cpu_msm8996_clks[] = { > &perfcl_pmux.clkr, > }; > > +static void qcom_cpu_clk_msm8996_acd_init(struct regmap *regmap); > + > static int qcom_cpu_clk_msm8996_register_clks(struct device *dev, > struct regmap *regmap) > { > @@ -435,6 +437,8 @@ static int qcom_cpu_clk_msm8996_register_clks(struct device *dev, > clk_alpha_pll_configure(&pwrcl_alt_pll, regmap, &altpll_config); > clk_alpha_pll_configure(&perfcl_alt_pll, regmap, &altpll_config); > > + qcom_cpu_clk_msm8996_acd_init(regmap); > + > for (i = 0; i < ARRAY_SIZE(cpu_msm8996_hw_clks); i++) { > ret = devm_clk_hw_register(dev, cpu_msm8996_hw_clks[i]); > if (ret) > @@ -467,9 +471,8 @@ static int qcom_cpu_clk_msm8996_register_clks(struct device *dev, > #define L2ACDSSCR_REG 0x589ULL > > static DEFINE_SPINLOCK(qcom_clk_acd_lock); > -static void __iomem *base; > > -static void qcom_cpu_clk_msm8996_acd_init(void __iomem *base) > +static void qcom_cpu_clk_msm8996_acd_init(struct regmap *regmap) > { > u64 hwid; > u32 val; > @@ -488,13 +491,13 @@ static void qcom_cpu_clk_msm8996_acd_init(void __iomem *base) > kryo_l2_set_indirect_reg(L2ACDSSCR_REG, 0x00000601); > > if (PWRCL_CPU_REG_MASK == (hwid | PWRCL_CPU_REG_MASK)) { > - writel(0xf, base + PWRCL_REG_OFFSET + SSSCTL_OFFSET); > + regmap_write(regmap, PWRCL_REG_OFFSET + SSSCTL_OFFSET, 0xf); > kryo_l2_set_indirect_reg(L2ACDCR_REG, 0x002c5ffd); > } > > if (PERFCL_CPU_REG_MASK == (hwid | PERFCL_CPU_REG_MASK)) { > kryo_l2_set_indirect_reg(L2ACDCR_REG, 0x002c5ffd); > - writel(0xf, base + PERFCL_REG_OFFSET + SSSCTL_OFFSET); > + regmap_write(regmap, PERFCL_REG_OFFSET + SSSCTL_OFFSET, 0xf); > } > > out: > @@ -509,7 +512,7 @@ static int cpu_clk_notifier_cb(struct notifier_block *nb, unsigned long event, > > switch (event) { > case PRE_RATE_CHANGE: > - qcom_cpu_clk_msm8996_acd_init(base); > + qcom_cpu_clk_msm8996_acd_init(cpuclk->clkr.regmap); > > /* > * Avoid overvolting. clk_core_set_rate_nolock() walks from top > @@ -538,6 +541,7 @@ static int cpu_clk_notifier_cb(struct notifier_block *nb, unsigned long event, > > static int qcom_cpu_clk_msm8996_driver_probe(struct platform_device *pdev) > { > + static void __iomem *base; > struct regmap *regmap; > struct clk_hw_onecell_data *data; > struct device *dev = &pdev->dev; > @@ -559,8 +563,6 @@ static int qcom_cpu_clk_msm8996_driver_probe(struct platform_device *pdev) > if (ret) > return ret; > > - qcom_cpu_clk_msm8996_acd_init(base); > - > data->hws[0] = &pwrcl_pmux.clkr.hw; > data->hws[1] = &perfcl_pmux.clkr.hw; > data->num = 2;