mirror of
https://git.proxmox.com/git/mirror_ubuntu-kernels.git
synced 2026-01-27 20:49:52 +00:00
clk: qcom: cpu-8996: move qcom_cpu_clk_msm8996_acd_init call
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. Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> Signed-off-by: Bjorn Andersson <andersson@kernel.org> Link: https://lore.kernel.org/r/20230113120544.59320-10-dmitry.baryshkov@linaro.org
This commit is contained in:
parent
61dc1a7368
commit
fa0bc05f2f
@ -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
|
||||
@ -539,6 +542,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;
|
||||
@ -560,8 +564,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;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user