Re: [PATCH 08/13] clk: qcom: cpu-8996: move qcom_cpu_clk_msm8996_acd_init call

Konrad Dybcio
2023-01-12T14:36:11Z

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@linaro.org>
> ---
Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org>

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;