diff mbox series

clk: qcom: clk-alpha-pll: Don't reconfigure running Trion

Message ID 20211123161630.123222-1-bjorn.andersson@linaro.org (mailing list archive)
State Changes Requested, archived
Headers show
Series clk: qcom: clk-alpha-pll: Don't reconfigure running Trion | expand

Commit Message

Bjorn Andersson Nov. 23, 2021, 4:16 p.m. UTC
In the event that the bootloader has configured the Trion PLL as source
for the display clocks, e.g. for the continuous splashscreen, then there
will also be RCGs that are clocked by this instance.

Reconfiguring, and in particular disabling the output of, the PLL will
cause issues for these downstream RCGs and has been shown to prevent
them from being re-parented.

Follow downstream and skip configuration if it's determined that the PLL
is already running.

Fixes: 59128c20a6a9 ("clk: qcom: clk-alpha-pll: Add support for controlling Lucid PLLs")
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
---
 drivers/clk/qcom/clk-alpha-pll.c | 9 +++++++++
 1 file changed, 9 insertions(+)

Comments

kernel test robot Nov. 24, 2021, 1:45 a.m. UTC | #1
Hi Bjorn,

I love your patch! Yet something to improve:

[auto build test ERROR on clk/clk-next]
[also build test ERROR on v5.16-rc2 next-20211123]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Bjorn-Andersson/clk-qcom-clk-alpha-pll-Don-t-reconfigure-running-Trion/20211124-001628
base:   https://git.kernel.org/pub/scm/linux/kernel/git/clk/linux.git clk-next
config: riscv-randconfig-r042-20211123 (https://download.01.org/0day-ci/archive/20211124/202111240901.R3Fzm2O3-lkp@intel.com/config.gz)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 49e3838145dff1ec91c2e67a2cb562775c8d2a08)
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # install riscv cross compiling tool for clang build
        # apt-get install binutils-riscv64-linux-gnu
        # https://github.com/0day-ci/linux/commit/1c6539db17125d4d4eaf17c4071063fe8a7e2ca6
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Bjorn-Andersson/clk-qcom-clk-alpha-pll-Don-t-reconfigure-running-Trion/20211124-001628
        git checkout 1c6539db17125d4d4eaf17c4071063fe8a7e2ca6
        # save the config file to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 ARCH=riscv 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

>> drivers/clk/qcom/clk-alpha-pll.c:1437:3: error: implicit declaration of function 'pr_dbg' [-Werror,-Wimplicit-function-declaration]
                   pr_dbg("Trion PLL is already enabled, skipping configuration\n");
                   ^
   1 error generated.


vim +/pr_dbg +1437 drivers/clk/qcom/clk-alpha-pll.c

  1421	
  1422	/**
  1423	 * clk_lucid_pll_configure - configure the lucid pll
  1424	 *
  1425	 * @pll: clk alpha pll
  1426	 * @regmap: register map
  1427	 * @config: configuration to apply for pll
  1428	 */
  1429	void clk_trion_pll_configure(struct clk_alpha_pll *pll, struct regmap *regmap,
  1430				     const struct alpha_pll_config *config)
  1431	{
  1432		/*
  1433		 * If the bootloader left the PLL enabled it's likely that there are
  1434		 * RCGs that will lock up if we disable the PLL below.
  1435		 */
  1436		if (trion_pll_is_enabled(pll, regmap)) {
> 1437			pr_dbg("Trion PLL is already enabled, skipping configuration\n");
  1438			return;
  1439		}
  1440	
  1441		clk_alpha_pll_write_config(regmap, PLL_L_VAL(pll), config->l);
  1442		regmap_write(regmap, PLL_CAL_L_VAL(pll), TRION_PLL_CAL_VAL);
  1443		clk_alpha_pll_write_config(regmap, PLL_ALPHA_VAL(pll), config->alpha);
  1444		clk_alpha_pll_write_config(regmap, PLL_CONFIG_CTL(pll),
  1445					     config->config_ctl_val);
  1446		clk_alpha_pll_write_config(regmap, PLL_CONFIG_CTL_U(pll),
  1447					     config->config_ctl_hi_val);
  1448		clk_alpha_pll_write_config(regmap, PLL_CONFIG_CTL_U1(pll),
  1449					     config->config_ctl_hi1_val);
  1450		clk_alpha_pll_write_config(regmap, PLL_USER_CTL(pll),
  1451						config->user_ctl_val);
  1452		clk_alpha_pll_write_config(regmap, PLL_USER_CTL_U(pll),
  1453						config->user_ctl_hi_val);
  1454		clk_alpha_pll_write_config(regmap, PLL_USER_CTL_U1(pll),
  1455						config->user_ctl_hi1_val);
  1456		clk_alpha_pll_write_config(regmap, PLL_TEST_CTL(pll),
  1457						config->test_ctl_val);
  1458		clk_alpha_pll_write_config(regmap, PLL_TEST_CTL_U(pll),
  1459						config->test_ctl_hi_val);
  1460		clk_alpha_pll_write_config(regmap, PLL_TEST_CTL_U1(pll),
  1461						config->test_ctl_hi1_val);
  1462	
  1463		regmap_update_bits(regmap, PLL_MODE(pll), PLL_UPDATE_BYPASS,
  1464				   PLL_UPDATE_BYPASS);
  1465	
  1466		/* Disable PLL output */
  1467		regmap_update_bits(regmap, PLL_MODE(pll),  PLL_OUTCTRL, 0);
  1468	
  1469		/* Set operation mode to OFF */
  1470		regmap_write(regmap, PLL_OPMODE(pll), PLL_STANDBY);
  1471	
  1472		/* Place the PLL in STANDBY mode */
  1473		regmap_update_bits(regmap, PLL_MODE(pll), PLL_RESET_N, PLL_RESET_N);
  1474	}
  1475	EXPORT_SYMBOL_GPL(clk_trion_pll_configure);
  1476	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
kernel test robot Nov. 24, 2021, 10:46 a.m. UTC | #2
Hi Bjorn,

I love your patch! Yet something to improve:

[auto build test ERROR on clk/clk-next]
[also build test ERROR on v5.16-rc2 next-20211124]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Bjorn-Andersson/clk-qcom-clk-alpha-pll-Don-t-reconfigure-running-Trion/20211124-001628
base:   https://git.kernel.org/pub/scm/linux/kernel/git/clk/linux.git clk-next
config: m68k-allmodconfig (https://download.01.org/0day-ci/archive/20211124/202111241836.A2WvIKic-lkp@intel.com/config)
compiler: m68k-linux-gcc (GCC) 11.2.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/0day-ci/linux/commit/1c6539db17125d4d4eaf17c4071063fe8a7e2ca6
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Bjorn-Andersson/clk-qcom-clk-alpha-pll-Don-t-reconfigure-running-Trion/20211124-001628
        git checkout 1c6539db17125d4d4eaf17c4071063fe8a7e2ca6
        # save the config file to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross ARCH=m68k 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   drivers/clk/qcom/clk-alpha-pll.c: In function 'clk_trion_pll_configure':
>> drivers/clk/qcom/clk-alpha-pll.c:1437:17: error: implicit declaration of function 'pr_dbg'; did you mean 'pr_debug'? [-Werror=implicit-function-declaration]
    1437 |                 pr_dbg("Trion PLL is already enabled, skipping configuration\n");
         |                 ^~~~~~
         |                 pr_debug
   cc1: some warnings being treated as errors


vim +1437 drivers/clk/qcom/clk-alpha-pll.c

  1421	
  1422	/**
  1423	 * clk_lucid_pll_configure - configure the lucid pll
  1424	 *
  1425	 * @pll: clk alpha pll
  1426	 * @regmap: register map
  1427	 * @config: configuration to apply for pll
  1428	 */
  1429	void clk_trion_pll_configure(struct clk_alpha_pll *pll, struct regmap *regmap,
  1430				     const struct alpha_pll_config *config)
  1431	{
  1432		/*
  1433		 * If the bootloader left the PLL enabled it's likely that there are
  1434		 * RCGs that will lock up if we disable the PLL below.
  1435		 */
  1436		if (trion_pll_is_enabled(pll, regmap)) {
> 1437			pr_dbg("Trion PLL is already enabled, skipping configuration\n");
  1438			return;
  1439		}
  1440	
  1441		clk_alpha_pll_write_config(regmap, PLL_L_VAL(pll), config->l);
  1442		regmap_write(regmap, PLL_CAL_L_VAL(pll), TRION_PLL_CAL_VAL);
  1443		clk_alpha_pll_write_config(regmap, PLL_ALPHA_VAL(pll), config->alpha);
  1444		clk_alpha_pll_write_config(regmap, PLL_CONFIG_CTL(pll),
  1445					     config->config_ctl_val);
  1446		clk_alpha_pll_write_config(regmap, PLL_CONFIG_CTL_U(pll),
  1447					     config->config_ctl_hi_val);
  1448		clk_alpha_pll_write_config(regmap, PLL_CONFIG_CTL_U1(pll),
  1449					     config->config_ctl_hi1_val);
  1450		clk_alpha_pll_write_config(regmap, PLL_USER_CTL(pll),
  1451						config->user_ctl_val);
  1452		clk_alpha_pll_write_config(regmap, PLL_USER_CTL_U(pll),
  1453						config->user_ctl_hi_val);
  1454		clk_alpha_pll_write_config(regmap, PLL_USER_CTL_U1(pll),
  1455						config->user_ctl_hi1_val);
  1456		clk_alpha_pll_write_config(regmap, PLL_TEST_CTL(pll),
  1457						config->test_ctl_val);
  1458		clk_alpha_pll_write_config(regmap, PLL_TEST_CTL_U(pll),
  1459						config->test_ctl_hi_val);
  1460		clk_alpha_pll_write_config(regmap, PLL_TEST_CTL_U1(pll),
  1461						config->test_ctl_hi1_val);
  1462	
  1463		regmap_update_bits(regmap, PLL_MODE(pll), PLL_UPDATE_BYPASS,
  1464				   PLL_UPDATE_BYPASS);
  1465	
  1466		/* Disable PLL output */
  1467		regmap_update_bits(regmap, PLL_MODE(pll),  PLL_OUTCTRL, 0);
  1468	
  1469		/* Set operation mode to OFF */
  1470		regmap_write(regmap, PLL_OPMODE(pll), PLL_STANDBY);
  1471	
  1472		/* Place the PLL in STANDBY mode */
  1473		regmap_update_bits(regmap, PLL_MODE(pll), PLL_RESET_N, PLL_RESET_N);
  1474	}
  1475	EXPORT_SYMBOL_GPL(clk_trion_pll_configure);
  1476	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
diff mbox series

Patch

diff --git a/drivers/clk/qcom/clk-alpha-pll.c b/drivers/clk/qcom/clk-alpha-pll.c
index eaedcceb766f..b04aa0a630e9 100644
--- a/drivers/clk/qcom/clk-alpha-pll.c
+++ b/drivers/clk/qcom/clk-alpha-pll.c
@@ -1429,6 +1429,15 @@  EXPORT_SYMBOL_GPL(clk_alpha_pll_postdiv_fabia_ops);
 void clk_trion_pll_configure(struct clk_alpha_pll *pll, struct regmap *regmap,
 			     const struct alpha_pll_config *config)
 {
+	/*
+	 * If the bootloader left the PLL enabled it's likely that there are
+	 * RCGs that will lock up if we disable the PLL below.
+	 */
+	if (trion_pll_is_enabled(pll, regmap)) {
+		pr_dbg("Trion PLL is already enabled, skipping configuration\n");
+		return;
+	}
+
 	clk_alpha_pll_write_config(regmap, PLL_L_VAL(pll), config->l);
 	regmap_write(regmap, PLL_CAL_L_VAL(pll), TRION_PLL_CAL_VAL);
 	clk_alpha_pll_write_config(regmap, PLL_ALPHA_VAL(pll), config->alpha);