From: kernel test robot <lkp@intel.com>
To: Shubhrajyoti Datta <shubhrajyoti.datta@amd.com>,
devicetree@vger.kernel.org
Cc: llvm@lists.linux.dev, oe-kbuild-all@lists.linux.dev, git@amd.com,
linux-clk@vger.kernel.org, robh+dt@kernel.org, sboyd@kernel.org,
mturquette@baylibre.com, krzysztof.kozlowski+dt@linaro.org,
michal.simek@xilinx.com
Subject: Re: [PATCH v1 2/2] clocking-wizard: Add support for versal clocking wizard
Date: Wed, 19 Apr 2023 01:07:58 +0800 [thread overview]
Message-ID: <202304190151.IdOfiD0y-lkp@intel.com> (raw)
In-Reply-To: <20230418102855.6791-3-shubhrajyoti.datta@amd.com>
Hi Shubhrajyoti,
kernel test robot noticed the following build warnings:
[auto build test WARNING on clk/clk-next]
[also build test WARNING on next-20230417]
[cannot apply to xilinx-xlnx/master robh/for-next linus/master v6.3-rc7]
[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#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Shubhrajyoti-Datta/dt-bindings-clocking-wizard-add-versal-compatible/20230418-183046
base: https://git.kernel.org/pub/scm/linux/kernel/git/clk/linux.git clk-next
patch link: https://lore.kernel.org/r/20230418102855.6791-3-shubhrajyoti.datta%40amd.com
patch subject: [PATCH v1 2/2] clocking-wizard: Add support for versal clocking wizard
config: hexagon-randconfig-r041-20230418 (https://download.01.org/0day-ci/archive/20230419/202304190151.IdOfiD0y-lkp@intel.com/config)
compiler: clang version 17.0.0 (https://github.com/llvm/llvm-project 437b7602e4a998220871de78afcb020b9c14a661)
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/intel-lab-lkp/linux/commit/143916412aa6a419e20fa37059004329e300ca95
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Shubhrajyoti-Datta/dt-bindings-clocking-wizard-add-versal-compatible/20230418-183046
git checkout 143916412aa6a419e20fa37059004329e300ca95
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=hexagon olddefconfig
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=hexagon SHELL=/bin/bash drivers/clk/xilinx/
If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>
| Link: https://lore.kernel.org/oe-kbuild-all/202304190151.IdOfiD0y-lkp@intel.com/
All warnings (new ones prefixed by >>):
In file included from drivers/clk/xilinx/clk-xlnx-clock-wizard.c:16:
In file included from include/linux/io.h:13:
In file included from arch/hexagon/include/asm/io.h:334:
include/asm-generic/io.h:547:31: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
val = __raw_readb(PCI_IOBASE + addr);
~~~~~~~~~~ ^
include/asm-generic/io.h:560:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
val = __le16_to_cpu((__le16 __force)__raw_readw(PCI_IOBASE + addr));
~~~~~~~~~~ ^
include/uapi/linux/byteorder/little_endian.h:37:51: note: expanded from macro '__le16_to_cpu'
#define __le16_to_cpu(x) ((__force __u16)(__le16)(x))
^
In file included from drivers/clk/xilinx/clk-xlnx-clock-wizard.c:16:
In file included from include/linux/io.h:13:
In file included from arch/hexagon/include/asm/io.h:334:
include/asm-generic/io.h:573:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
val = __le32_to_cpu((__le32 __force)__raw_readl(PCI_IOBASE + addr));
~~~~~~~~~~ ^
include/uapi/linux/byteorder/little_endian.h:35:51: note: expanded from macro '__le32_to_cpu'
#define __le32_to_cpu(x) ((__force __u32)(__le32)(x))
^
In file included from drivers/clk/xilinx/clk-xlnx-clock-wizard.c:16:
In file included from include/linux/io.h:13:
In file included from arch/hexagon/include/asm/io.h:334:
include/asm-generic/io.h:584:33: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
__raw_writeb(value, PCI_IOBASE + addr);
~~~~~~~~~~ ^
include/asm-generic/io.h:594:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
__raw_writew((u16 __force)cpu_to_le16(value), PCI_IOBASE + addr);
~~~~~~~~~~ ^
include/asm-generic/io.h:604:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
__raw_writel((u32 __force)cpu_to_le32(value), PCI_IOBASE + addr);
~~~~~~~~~~ ^
>> drivers/clk/xilinx/clk-xlnx-clock-wizard.c:264:11: warning: variable 'value' is uninitialized when used here [-Wuninitialized]
regh = (value / 4);
^~~~~
drivers/clk/xilinx/clk-xlnx-clock-wizard.c:231:11: note: initialize the variable 'value' to silence this warning
u32 value, regh, edged, p5en, p5fedge, regval, regval1;
^
= 0
>> drivers/clk/xilinx/clk-xlnx-clock-wizard.c:332:12: warning: implicit conversion from 'long long' to 'unsigned long' changes value from 4320000000 to 25032704 [-Wconstant-conversion]
vcomax = VER_WZRD_VCO_MAX;
~ ^~~~~~~~~~~~~~~~
drivers/clk/xilinx/clk-xlnx-clock-wizard.c:102:27: note: expanded from macro 'VER_WZRD_VCO_MAX'
#define VER_WZRD_VCO_MAX 4320000000
^~~~~~~~~~
8 warnings generated.
vim +/value +264 drivers/clk/xilinx/clk-xlnx-clock-wizard.c
225
226 static int clk_wzrd_dynamic_reconfig(struct clk_hw *hw, unsigned long rate,
227 unsigned long parent_rate)
228 {
229 struct clk_wzrd_divider *divider = to_clk_wzrd_divider(hw);
230 void __iomem *div_addr = divider->base + divider->offset;
231 u32 value, regh, edged, p5en, p5fedge, regval, regval1;
232 unsigned long flags = 0;
233 int err;
234
235 if (divider->lock)
236 spin_lock_irqsave(divider->lock, flags);
237 else
238 __acquire(divider->lock);
239
240 if (!divider->is_versal) {
241 value = DIV_ROUND_CLOSEST(parent_rate, rate);
242
243 /* Cap the value to max */
244 min_t(u32, value, WZRD_DR_MAX_INT_DIV_VALUE);
245
246 /* Set divisor and clear phase offset */
247 writel(value, div_addr);
248 writel(0x00, div_addr + WZRD_DR_DIV_TO_PHASE_OFFSET);
249
250 /* Check status register */
251 err = readl_poll_timeout(divider->base + WZRD_DR_STATUS_REG_OFFSET,
252 value, value & WZRD_DR_LOCK_BIT_MASK,
253 WZRD_USEC_POLL, WZRD_TIMEOUT_POLL);
254 if (err)
255 goto err_reconfig;
256
257 /* Initiate reconfiguration */
258 writel(WZRD_DR_BEGIN_DYNA_RECONF_5_2,
259 divider->base + WZRD_DR_INIT_REG_OFFSET);
260 writel(WZRD_DR_BEGIN_DYNA_RECONF1_5_2,
261 divider->base + WZRD_DR_INIT_REG_OFFSET);
262
263 } else {
> 264 regh = (value / 4);
265 regval1 = readl(div_addr);
266 regval1 |= WZRD_CLKFBOUT_PREDIV2;
267 regval1 = regval1 & ~(WZRD_CLKFBOUT_EDGE | WZRD_P5EN | WZRD_P5FEDGE);
268 if (value % 4 > 1) {
269 edged = 1;
270 regval1 |= (edged << WZRD_EDGE_SHIFT);
271 }
272 p5fedge = value % 2;
273 p5en = value % 2;
274 regval1 = regval1 | p5en << WZRD_P5EN_SHIFT | p5fedge << WZRD_P5FEDGE_SHIFT;
275 writel(regval1, div_addr);
276
277 regval = regh | regh << WZRD_CLKFBOUT_H_SHIFT;
278 writel(regval, div_addr + 4);
279 /* Check status register */
280 err = readl_poll_timeout(divider->base + WZRD_DR_STATUS_REG_OFFSET,
281 value, value & WZRD_DR_LOCK_BIT_MASK,
282 WZRD_USEC_POLL, WZRD_TIMEOUT_POLL);
283 if (err)
284 goto err_reconfig;
285
286 /* Initiate reconfiguration */
287 writel(WZRD_DR_BEGIN_DYNA_RECONF,
288 divider->base + WZRD_DR_INIT_VERSAL_OFFSET);
289 }
290 /* Check status register */
291 err = readl_poll_timeout(divider->base + WZRD_DR_STATUS_REG_OFFSET,
292 value, value & WZRD_DR_LOCK_BIT_MASK,
293 WZRD_USEC_POLL, WZRD_TIMEOUT_POLL);
294 err_reconfig:
295 if (divider->lock)
296 spin_unlock_irqrestore(divider->lock, flags);
297 else
298 __release(divider->lock);
299 return err;
300 }
301
302 static long clk_wzrd_round_rate(struct clk_hw *hw, unsigned long rate,
303 unsigned long *prate)
304 {
305 u8 div;
306
307 /*
308 * since we don't change parent rate we just round rate to closest
309 * achievable
310 */
311 div = DIV_ROUND_CLOSEST(*prate, rate);
312
313 return *prate / div;
314 }
315
316 static int clk_wzrd_get_divisors(struct clk_hw *hw, unsigned long rate,
317 unsigned long parent_rate)
318 {
319 struct clk_wzrd_divider *divider = to_clk_wzrd_divider(hw);
320 unsigned long vco_freq, freq, diff, vcomin, vcomax;
321 u32 m, d, o;
322 u32 mmin, mmax, dmin, dmax, omin, omax;
323
324 if (divider->is_versal) {
325 mmin = VER_WZRD_M_MIN;
326 mmax = VER_WZRD_M_MAX;
327 dmin = VER_WZRD_D_MIN;
328 dmax = VER_WZRD_D_MAX;
329 omin = VER_WZRD_O_MIN;
330 omax = VER_WZRD_O_MAX;
331 vcomin = VER_WZRD_VCO_MIN;
> 332 vcomax = VER_WZRD_VCO_MAX;
333 } else {
334 mmin = WZRD_M_MIN;
335 mmax = WZRD_M_MAX;
336 dmin = WZRD_D_MIN;
337 dmax = WZRD_D_MAX;
338 omin = WZRD_O_MIN;
339 omax = WZRD_O_MAX;
340 vcomin = WZRD_VCO_MIN;
341 vcomax = WZRD_VCO_MAX;
342 }
343
344 for (m = mmin; m <= mmax; m++) {
345 for (d = dmin; d <= dmax; d++) {
346 vco_freq = DIV_ROUND_CLOSEST((parent_rate * m), d);
347 if (vco_freq >= vcomin && vco_freq <= vcomax) {
348 for (o = omin; o <= omax; o++) {
349 freq = DIV_ROUND_CLOSEST_ULL(vco_freq, o);
350 diff = abs(freq - rate);
351
352 if (diff < WZRD_MIN_ERR) {
353 divider->m = m;
354 divider->d = d;
355 divider->o = o;
356 return 0;
357 }
358 }
359 }
360 }
361 }
362 return -EBUSY;
363 }
364
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests
next prev parent reply other threads:[~2023-04-18 17:10 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-04-18 10:28 [PATCH v1 0/2] clocking-wizard: Added support for versal clocking wizard Shubhrajyoti Datta
2023-04-18 10:28 ` [PATCH v1 1/2] dt-bindings: clocking-wizard: add versal compatible Shubhrajyoti Datta
2023-04-18 17:29 ` Krzysztof Kozlowski
2023-04-18 10:28 ` [PATCH v1 2/2] clocking-wizard: Add support for versal clocking wizard Shubhrajyoti Datta
2023-04-18 16:57 ` kernel test robot
2023-04-18 17:07 ` kernel test robot
2023-04-18 17:07 ` kernel test robot [this message]
2023-04-19 4:42 ` Dan Carpenter
2023-04-21 10:15 ` Dan Carpenter
2023-04-18 17:28 ` [PATCH v1 0/2] clocking-wizard: Added " Krzysztof Kozlowski
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=202304190151.IdOfiD0y-lkp@intel.com \
--to=lkp@intel.com \
--cc=devicetree@vger.kernel.org \
--cc=git@amd.com \
--cc=krzysztof.kozlowski+dt@linaro.org \
--cc=linux-clk@vger.kernel.org \
--cc=llvm@lists.linux.dev \
--cc=michal.simek@xilinx.com \
--cc=mturquette@baylibre.com \
--cc=oe-kbuild-all@lists.linux.dev \
--cc=robh+dt@kernel.org \
--cc=sboyd@kernel.org \
--cc=shubhrajyoti.datta@amd.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).