All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: kbuild-all@lists.01.org
Subject: Re: [PATCH v2 2/2] clk: mvebu: use firmware SiP service for accessing dfx register set
Date: Fri, 15 Jan 2021 03:00:12 +0800	[thread overview]
Message-ID: <202101150235.8HJgeUWL-lkp@intel.com> (raw)
In-Reply-To: <20210114102643.16108-3-kostap@marvell.com>

[-- Attachment #1: Type: text/plain, Size: 13633 bytes --]

Hi,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on clk/clk-next]
[also build test ERROR on linus/master v5.11-rc3 next-20210114]
[cannot apply to thermal/next soc-thermal/next]
[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/kostap-marvell-com/Enable-usage-of-Marvell-FW-SIP-services/20210114-183207
base:   https://git.kernel.org/pub/scm/linux/kernel/git/clk/linux.git clk-next
config: arm64-allyesconfig (attached as .config)
compiler: aarch64-linux-gcc (GCC) 9.3.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/8dc917b26b54d723831b58c1f166a15a1b7d28e2
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review kostap-marvell-com/Enable-usage-of-Marvell-FW-SIP-services/20210114-183207
        git checkout 8dc917b26b54d723831b58c1f166a15a1b7d28e2
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=arm64 

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 >>):

   In file included from include/linux/regmap.h:20,
                    from drivers/clk/mvebu/ap-cpu-clk.c:21:
   drivers/clk/mvebu/ap-cpu-clk.c: In function 'legacy_regmap_read_poll_timeout':
>> drivers/clk/mvebu/ap-cpu-clk.c:252:11: error: 'val' undeclared (first use in this function)
     252 |      reg, val,
         |           ^~~
   include/linux/iopoll.h:46:14: note: in definition of macro 'read_poll_timeout'
      46 |   (val) = op(args); \
         |              ^~~~
   drivers/clk/mvebu/ap-cpu-clk.c:251:9: note: in expansion of macro 'regmap_read_poll_timeout'
     251 |  return regmap_read_poll_timeout(clk->pll_cr_base,
         |         ^~~~~~~~~~~~~~~~~~~~~~~~
   drivers/clk/mvebu/ap-cpu-clk.c:252:11: note: each undeclared identifier is reported only once for each function it appears in
     252 |      reg, val,
         |           ^~~
   include/linux/iopoll.h:46:14: note: in definition of macro 'read_poll_timeout'
      46 |   (val) = op(args); \
         |              ^~~~
   drivers/clk/mvebu/ap-cpu-clk.c:251:9: note: in expansion of macro 'regmap_read_poll_timeout'
     251 |  return regmap_read_poll_timeout(clk->pll_cr_base,
         |         ^~~~~~~~~~~~~~~~~~~~~~~~
   drivers/clk/mvebu/ap-cpu-clk.c: In function 'ap_cpu_clk_set_rate':
>> drivers/clk/mvebu/ap-cpu-clk.c:313:20: error: macro "regmap_read_poll_timeout" requires 6 arguments, but only 3 given
     313 |          stable_bit);
         |                    ^
   In file included from drivers/clk/mvebu/ap-cpu-clk.c:21:
   include/linux/regmap.h:103: note: macro "regmap_read_poll_timeout" defined here
     103 | #define regmap_read_poll_timeout(map, addr, val, cond, sleep_us, timeout_us) \
         | 
   drivers/clk/mvebu/ap-cpu-clk.c:311:6: warning: assignment to 'int' from 'int (*)(struct ap_cpu_clk *, unsigned int,  unsigned int)' makes integer from pointer without a cast [-Wint-conversion]
     311 |  ret = clk->regmap_read_poll_timeout(clk,
         |      ^
   drivers/clk/mvebu/ap-cpu-clk.c:277:61: warning: variable 'stable_bit' set but not used [-Wunused-but-set-variable]
     277 |  unsigned int cpu_clkdiv_reg, cpu_force_reg, cpu_ratio_reg, stable_bit;
         |                                                             ^~~~~~~~~~
   drivers/clk/mvebu/ap-cpu-clk.c: In function 'ap_cpu_clock_probe':
>> drivers/clk/mvebu/ap-cpu-clk.c:440:30: error: 'struct ap_cpu_clk' has no member named 'regmap_wriite'; did you mean 'regmap_write'?
     440 |    ap_cpu_clk[cluster_index].regmap_wriite = smc_regmap_write;
         |                              ^~~~~~~~~~~~~
         |                              regmap_write
   drivers/clk/mvebu/ap-cpu-clk.c:446:30: error: 'struct ap_cpu_clk' has no member named 'regmap_wriite'; did you mean 'regmap_write'?
     446 |    ap_cpu_clk[cluster_index].regmap_wriite = legacy_regmap_write;
         |                              ^~~~~~~~~~~~~
         |                              regmap_write
   drivers/clk/mvebu/ap-cpu-clk.c: In function 'smc_regmap_read_poll_timeout':
   drivers/clk/mvebu/ap-cpu-clk.c:245:1: error: control reaches end of non-void function [-Werror=return-type]
     245 | }
         | ^
   cc1: some warnings being treated as errors


vim +/val +252 drivers/clk/mvebu/ap-cpu-clk.c

   246	
   247	static int legacy_regmap_read_poll_timeout(struct ap_cpu_clk *clk,
   248						   unsigned int reg,
   249						   unsigned int stable_bit)
   250	{
 > 251		return regmap_read_poll_timeout(clk->pll_cr_base,
 > 252						reg, val,
   253						val & stable_bit, STATUS_POLL_PERIOD_US,
   254						STATUS_POLL_TIMEOUT_US);
   255	}
   256	static unsigned long ap_cpu_clk_recalc_rate(struct clk_hw *hw,
   257						    unsigned long parent_rate)
   258	{
   259		struct ap_cpu_clk *clk = to_ap_cpu_clk(hw);
   260		unsigned int cpu_clkdiv_reg;
   261		int cpu_clkdiv_ratio;
   262	
   263		cpu_clkdiv_reg = clk->pll_regs->divider_reg +
   264			(clk->cluster * clk->pll_regs->cluster_offset);
   265		clk->regmap_read(clk, cpu_clkdiv_reg, &cpu_clkdiv_ratio);
   266		cpu_clkdiv_ratio &= clk->pll_regs->divider_mask;
   267		cpu_clkdiv_ratio >>= clk->pll_regs->divider_offset;
   268	
   269		return parent_rate / cpu_clkdiv_ratio;
   270	}
   271	
   272	static int ap_cpu_clk_set_rate(struct clk_hw *hw, unsigned long rate,
   273				       unsigned long parent_rate)
   274	{
   275		struct ap_cpu_clk *clk = to_ap_cpu_clk(hw);
   276		int ret, reg, divider = parent_rate / rate;
   277		unsigned int cpu_clkdiv_reg, cpu_force_reg, cpu_ratio_reg, stable_bit;
   278	
   279		cpu_clkdiv_reg = clk->pll_regs->divider_reg +
   280			(clk->cluster * clk->pll_regs->cluster_offset);
   281		cpu_force_reg = clk->pll_regs->force_reg +
   282			(clk->cluster * clk->pll_regs->cluster_offset);
   283		cpu_ratio_reg = clk->pll_regs->ratio_reg +
   284			(clk->cluster * clk->pll_regs->cluster_offset);
   285	
   286		clk->regmap_read(clk, cpu_clkdiv_reg, &reg);
   287		reg &= ~(clk->pll_regs->divider_mask);
   288		reg |= (divider << clk->pll_regs->divider_offset);
   289	
   290		/*
   291		 * AP807 CPU divider has two channels with ratio 1:3 and divider_ratio
   292		 * is 1. Otherwise, in the case of the AP806, divider_ratio is 0.
   293		 */
   294		if (clk->pll_regs->divider_ratio) {
   295			reg &= ~(AP807_PLL_CR_1_CPU_CLK_DIV_RATIO_MASK);
   296			reg |= ((divider * clk->pll_regs->divider_ratio) <<
   297					AP807_PLL_CR_1_CPU_CLK_DIV_RATIO_OFFSET);
   298		}
   299		clk->regmap_write(clk, cpu_clkdiv_reg, reg);
   300	
   301		clk->regmap_update_bits(clk, cpu_force_reg, clk->pll_regs->force_mask,
   302					clk->pll_regs->force_mask);
   303	
   304		clk->regmap_update_bits(clk, cpu_ratio_reg,
   305					BIT(clk->pll_regs->ratio_offset),
   306					BIT(clk->pll_regs->ratio_offset));
   307	
   308		stable_bit = BIT(clk->pll_regs->ratio_state_offset +
   309				 clk->cluster *
   310				 clk->pll_regs->ratio_state_cluster_offset);
 > 311		ret = clk->regmap_read_poll_timeout(clk,
   312						    clk->pll_regs->ratio_state_reg,
 > 313						    stable_bit);
   314		if (ret)
   315			return ret;
   316	
   317		clk->regmap_update_bits(clk, cpu_ratio_reg,
   318					BIT(clk->pll_regs->ratio_offset), 0);
   319	
   320		return 0;
   321	}
   322	
   323	static long ap_cpu_clk_round_rate(struct clk_hw *hw, unsigned long rate,
   324					  unsigned long *parent_rate)
   325	{
   326		int divider = *parent_rate / rate;
   327	
   328		divider = min(divider, APN806_MAX_DIVIDER);
   329	
   330		return *parent_rate / divider;
   331	}
   332	
   333	static const struct clk_ops ap_cpu_clk_ops = {
   334		.recalc_rate	= ap_cpu_clk_recalc_rate,
   335		.round_rate	= ap_cpu_clk_round_rate,
   336		.set_rate	= ap_cpu_clk_set_rate,
   337	};
   338	
   339	static int ap_cpu_clock_probe(struct platform_device *pdev)
   340	{
   341		int ret, nclusters = 0, cluster_index = 0;
   342		struct device *dev = &pdev->dev;
   343		struct device_node *dn, *np = dev->of_node;
   344		struct clk_hw_onecell_data *ap_cpu_data;
   345		struct ap_cpu_clk *ap_cpu_clk;
   346		struct regmap *regmap;
   347		struct resource res;
   348	
   349		ret = of_address_to_resource(np->parent, 0, &res);
   350		if (ret)
   351			return ret;
   352	
   353		regmap = syscon_node_to_regmap(np->parent);
   354		if (IS_ERR(regmap)) {
   355			pr_err("cannot get pll_cr_base regmap\n");
   356			return PTR_ERR(regmap);
   357		}
   358	
   359		/*
   360		 * AP806 has 4 cpus and DFS for AP806 is controlled per
   361		 * cluster (2 CPUs per cluster), cpu0 and cpu1 are fixed to
   362		 * cluster0 while cpu2 and cpu3 are fixed to cluster1 whether
   363		 * they are enabled or not.  Since cpu0 is the boot cpu, then
   364		 * cluster0 must exist.  If cpu2 or cpu3 is enabled, cluster1
   365		 * will exist and the cluster number is 2; otherwise the
   366		 * cluster number is 1.
   367		 */
   368		nclusters = 1;
   369		for_each_of_cpu_node(dn) {
   370			int cpu, err;
   371	
   372			err = of_property_read_u32(dn, "reg", &cpu);
   373			if (WARN_ON(err))
   374				return err;
   375	
   376			/* If cpu2 or cpu3 is enabled */
   377			if (cpu & APN806_CLUSTER_NUM_MASK) {
   378				nclusters = 2;
   379				break;
   380			}
   381		}
   382		/*
   383		 * DFS for AP806 is controlled per cluster (2 CPUs per cluster),
   384		 * so allocate structs per cluster
   385		 */
   386		ap_cpu_clk = devm_kcalloc(dev, nclusters, sizeof(*ap_cpu_clk),
   387					  GFP_KERNEL);
   388		if (!ap_cpu_clk)
   389			return -ENOMEM;
   390	
   391		ap_cpu_data = devm_kzalloc(dev, struct_size(ap_cpu_data, hws,
   392							    nclusters),
   393					GFP_KERNEL);
   394		if (!ap_cpu_data)
   395			return -ENOMEM;
   396	
   397		for_each_of_cpu_node(dn) {
   398			char *clk_name = "cpu-cluster-0";
   399			struct clk_init_data init;
   400			const char *parent_name;
   401			struct clk *parent;
   402			int cpu, err;
   403			unsigned int tmp;
   404	
   405			err = of_property_read_u32(dn, "reg", &cpu);
   406			if (WARN_ON(err))
   407				return err;
   408	
   409			cluster_index = cpu & APN806_CLUSTER_NUM_MASK;
   410			cluster_index >>= APN806_CLUSTER_NUM_OFFSET;
   411	
   412			/* Initialize once for one cluster */
   413			if (ap_cpu_data->hws[cluster_index])
   414				continue;
   415	
   416			parent = of_clk_get(np, cluster_index);
   417			if (IS_ERR(parent)) {
   418				dev_err(dev, "Could not get the clock parent\n");
   419				return -EINVAL;
   420			}
   421			parent_name =  __clk_get_name(parent);
   422			clk_name[12] += cluster_index;
   423			ap_cpu_clk[cluster_index].clk_name =
   424				ap_cp_unique_name(dev, np->parent, clk_name);
   425			ap_cpu_clk[cluster_index].cluster = cluster_index;
   426			ap_cpu_clk[cluster_index].pll_cr_base = regmap;
   427			ap_cpu_clk[cluster_index].hw.init = &init;
   428			ap_cpu_clk[cluster_index].dev = dev;
   429			ap_cpu_clk[cluster_index].pll_regs = of_device_get_match_data(&pdev->dev);
   430	
   431			/* Get the physical address to hand to the firmware. */
   432			ap_cpu_clk[cluster_index].phys = res.start;
   433	
   434			/* Try to read a register using SMC and setup DFX access APIs accordingly */
   435			ret = smc_regmap_read(&ap_cpu_clk[cluster_index],
   436					      ap_cpu_clk[cluster_index].pll_regs->divider_reg,
   437					      &tmp);
   438			if (ret == SMCCC_RET_SUCCESS) {
   439				ap_cpu_clk[cluster_index].regmap_read = smc_regmap_read;
 > 440				ap_cpu_clk[cluster_index].regmap_wriite = smc_regmap_write;
   441				ap_cpu_clk[cluster_index].regmap_update_bits = smc_regmap_update_bits;
   442				ap_cpu_clk[cluster_index].regmap_read_poll_timeout =
   443									smc_regmap_read_poll_timeout;
   444			} else {
   445				ap_cpu_clk[cluster_index].regmap_read = legacy_regmap_read;
   446				ap_cpu_clk[cluster_index].regmap_wriite = legacy_regmap_write;
   447				ap_cpu_clk[cluster_index].regmap_update_bits = legacy_regmap_update_bits;
   448				ap_cpu_clk[cluster_index].regmap_read_poll_timeout =
   449									legacy_regmap_read_poll_timeout;
   450			}
   451	
   452			init.name = ap_cpu_clk[cluster_index].clk_name;
   453			init.ops = &ap_cpu_clk_ops;
   454			init.num_parents = 1;
   455			init.parent_names = &parent_name;
   456	
   457			ret = devm_clk_hw_register(dev, &ap_cpu_clk[cluster_index].hw);
   458			if (ret)
   459				return ret;
   460			ap_cpu_data->hws[cluster_index] = &ap_cpu_clk[cluster_index].hw;
   461		}
   462	
   463		ap_cpu_data->num = cluster_index + 1;
   464	
   465		ret = of_clk_add_hw_provider(np, of_clk_hw_onecell_get, ap_cpu_data);
   466		if (ret)
   467			dev_err(dev, "failed to register OF clock provider\n");
   468	
   469		return ret;
   470	}
   471	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 76465 bytes --]

  parent reply	other threads:[~2021-01-14 19:00 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-14 10:26 [PATCH v2 0/2] Enable usage of Marvell FW SIP services kostap
2021-01-14 10:26 ` [PATCH v2 1/2] thermal: armada: ap806: use firmware SiP services for thermal operations kostap
2021-01-14 13:17   ` kernel test robot
2021-01-14 13:17     ` kernel test robot
2021-01-14 10:26 ` [PATCH v2 2/2] clk: mvebu: use firmware SiP service for accessing dfx register set kostap
2021-01-14 14:27   ` kernel test robot
2021-01-14 19:00   ` kernel test robot [this message]
2021-02-11  2:36 ` [PATCH v2 0/2] Enable usage of Marvell FW SIP services Stephen Boyd

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202101150235.8HJgeUWL-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=kbuild-all@lists.01.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.