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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




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;



[Index of Archives]     [Device Tree Compilter]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux PCI Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]


  Powered by Linux