Message ID | cover.1697694811.git.quic_varada@quicinc.com |
---|---|
Headers | show |
Series | Enable cpufreq for IPQ5332 & IPQ9574 | expand |
On Thu, 19 Oct 2023 at 11:42, Varadarajan Narayanan <quic_varada@quicinc.com> wrote: > > The config IPQ_APSS_6018 should depend on QCOM_SMEM, to > avoid the following error. Which error? > > Fixes: 5e77b4ef1b19 ("clk: qcom: Add ipq6018 apss clock controller") > Reported-by: kernel test robot <yujie.liu@intel.com> > Closes: https://lore.kernel.org/r/202310181650.g8THtfsm-lkp@intel.com/ > Signed-off-by: Varadarajan Narayanan <quic_varada@quicinc.com> > --- > drivers/clk/qcom/Kconfig | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/drivers/clk/qcom/Kconfig b/drivers/clk/qcom/Kconfig > index 3194c8b..ad1acd9 100644 > --- a/drivers/clk/qcom/Kconfig > +++ b/drivers/clk/qcom/Kconfig > @@ -131,6 +131,7 @@ config IPQ_APSS_6018 > tristate "IPQ APSS Clock Controller" > select IPQ_APSS_PLL > depends on QCOM_APCS_IPC || COMPILE_TEST > + depends on QCOM_SMEM > help > Support for APSS clock controller on IPQ platforms. The > APSS clock controller manages the Mux and enable block that feeds the > -- > 2.7.4 >
On Thu, 19 Oct 2023 at 11:42, Varadarajan Narayanan <quic_varada@quicinc.com> wrote: > > Stromer plus APSS PLL does not support dynamic frequency scaling. > To switch between frequencies, we have to shut down the PLL, > configure the L and ALPHA values and turn on again. So introduce the > separate set of ops for Stromer Plus PLL. > > Signed-off-by: Kathiravan T <quic_kathirav@quicinc.com> > Signed-off-by: Varadarajan Narayanan <quic_varada@quicinc.com> > --- > v4: Ensure PLL is enabled before re-enabling > v3: Use prepare/unprepare instead of disable/enable in clk_alpha_pll_stromer_plus_ops > v2: Use clk_alpha_pll_stromer_determine_rate, instead of adding new > clk_alpha_pll_stromer_plus_determine_rate as the alpha pll width > is same for both > > Fix review comments > udelay(50) -> usleep_range(50, 60) > Remove SoC-specific from print message > --- > drivers/clk/qcom/clk-alpha-pll.c | 63 ++++++++++++++++++++++++++++++++++++++++ > drivers/clk/qcom/clk-alpha-pll.h | 1 + > 2 files changed, 64 insertions(+) Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
On Thu, 19 Oct 2023 at 11:42, Varadarajan Narayanan <quic_varada@quicinc.com> wrote: > > Stromer Plus PLL found on IPQ53xx doesn't support dynamic > frequency scaling. To achieve the same, we need to park the APPS > PLL source to GPLL0, re configure the PLL and then switch the > source to APSS_PLL_EARLY. > > To support this, register a clock notifier to get the PRE_RATE > and POST_RATE notification. Change the APSS PLL source to GPLL0 > when PRE_RATE notification is received, then configure the PLL > and then change back the source to APSS_PLL_EARLY. > > Additionally, not all SKUs of IPQ53xx support scaling. Hence, > do the above to the SKUs that support scaling. > > Signed-off-by: Kathiravan T <quic_kathirav@quicinc.com> > Signed-off-by: Varadarajan Narayanan <quic_varada@quicinc.com> > --- > v3: devm_kzalloc for cpu_clk_notifier instead of global static > v2: Handle ABORT_RATE_CHANGE > Use local variable for apcs_alias0_clk_src.clkr.hw > Use single line comment instead of multi line style > --- > drivers/clk/qcom/apss-ipq6018.c | 58 ++++++++++++++++++++++++++++++++++++++++- > 1 file changed, 57 insertions(+), 1 deletion(-) > > diff --git a/drivers/clk/qcom/apss-ipq6018.c b/drivers/clk/qcom/apss-ipq6018.c > index 4e13a08..db65b0d 100644 > --- a/drivers/clk/qcom/apss-ipq6018.c > +++ b/drivers/clk/qcom/apss-ipq6018.c > @@ -9,8 +9,11 @@ > #include <linux/clk-provider.h> > #include <linux/regmap.h> > #include <linux/module.h> > +#include <linux/clk.h> > +#include <linux/soc/qcom/smem.h> > > #include <dt-bindings/clock/qcom,apss-ipq.h> > +#include <dt-bindings/arm/qcom,ids.h> > > #include "common.h" > #include "clk-regmap.h" > @@ -84,15 +87,68 @@ static const struct qcom_cc_desc apss_ipq6018_desc = { > .num_clks = ARRAY_SIZE(apss_ipq6018_clks), > }; > > +static int cpu_clk_notifier_fn(struct notifier_block *nb, unsigned long action, > + void *data) > +{ > + struct clk_hw *hw; > + u8 index; > + int err; > + > + if (action == PRE_RATE_CHANGE) > + index = P_GPLL0; > + else if (action == POST_RATE_CHANGE || action == ABORT_RATE_CHANGE) > + index = P_APSS_PLL_EARLY; > + else > + return NOTIFY_OK; > + > + hw = &apcs_alias0_clk_src.clkr.hw; > + err = clk_rcg2_mux_closest_ops.set_parent(hw, index); > + > + return notifier_from_errno(err); > +} > + > static int apss_ipq6018_probe(struct platform_device *pdev) > { > + struct notifier_block *cpu_clk_notifier; > struct regmap *regmap; > + u32 soc_id; > + int ret; > + > + ret = qcom_smem_get_soc_id(&soc_id); > + if (ret) > + return ret; > > regmap = dev_get_regmap(pdev->dev.parent, NULL); > if (!regmap) > return -ENODEV; > > - return qcom_cc_really_probe(pdev, &apss_ipq6018_desc, regmap); > + ret = qcom_cc_really_probe(pdev, &apss_ipq6018_desc, regmap); > + if (ret) > + return ret; > + > + switch (soc_id) { > + /* Only below variants of IPQ53xx support scaling */ > + case QCOM_ID_IPQ5332: > + case QCOM_ID_IPQ5322: > + case QCOM_ID_IPQ5300: > + cpu_clk_notifier = devm_kzalloc(&pdev->dev, > + sizeof(*cpu_clk_notifier), > + GFP_KERNEL); > + if (!cpu_clk_notifier) > + return -ENOMEM; > + > + cpu_clk_notifier->notifier_call = cpu_clk_notifier_fn; > + > + ret = clk_notifier_register(apcs_alias0_clk_src.clkr.hw.clk, > + cpu_clk_notifier); devm_clk_notifier_register sounds more future-proof. Other than that: Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> > + if (ret) > + return ret; > + break; > + default: > + break; > + } > + > + return 0; > } > > static struct platform_driver apss_ipq6018_driver = { > -- > 2.7.4 >
On Thu, Oct 19, 2023 at 04:12:25PM +0300, Dmitry Baryshkov wrote: > On Thu, 19 Oct 2023 at 11:42, Varadarajan Narayanan > <quic_varada@quicinc.com> wrote: > > > > The config IPQ_APSS_6018 should depend on QCOM_SMEM, to > > avoid the following error. > > Which error? Sorry. I assumed that it would refer to the info mentioned in the 'Reported-by' & 'Closes' tags. Have included the error message in the commit log, addressed other comments and posted v5. Kindly take a look. Thanks Varada > > Fixes: 5e77b4ef1b19 ("clk: qcom: Add ipq6018 apss clock controller") > > Reported-by: kernel test robot <yujie.liu@intel.com> > > Closes: https://lore.kernel.org/r/202310181650.g8THtfsm-lkp@intel.com/ > > Signed-off-by: Varadarajan Narayanan <quic_varada@quicinc.com> > > --- > > drivers/clk/qcom/Kconfig | 1 + > > 1 file changed, 1 insertion(+) > > > > diff --git a/drivers/clk/qcom/Kconfig b/drivers/clk/qcom/Kconfig > > index 3194c8b..ad1acd9 100644 > > --- a/drivers/clk/qcom/Kconfig > > +++ b/drivers/clk/qcom/Kconfig > > @@ -131,6 +131,7 @@ config IPQ_APSS_6018 > > tristate "IPQ APSS Clock Controller" > > select IPQ_APSS_PLL > > depends on QCOM_APCS_IPC || COMPILE_TEST > > + depends on QCOM_SMEM > > help > > Support for APSS clock controller on IPQ platforms. The > > APSS clock controller manages the Mux and enable block that feeds the > > -- > > 2.7.4 > > > > > -- > With best wishes > Dmitry