:::::: :::::: Manual check reason: "low confidence static check warning: drivers/clk/clk-xlnx-clock-wizard-v.c:230:41: sparse: sparse: decimal constant 2160000000 is between LONG_MAX and ULONG_MAX. For C99 that means long long, C90 compilers are very likely to produce unsigned long (and a warning) here" ::::::
CC: [email protected] BCC: [email protected] CC: [email protected] TO: Wilken Gottwalt <[email protected]> CC: Michal Simek <[email protected]> tree: https://github.com/Xilinx/linux-xlnx xlnx_rebase_v5.15_LTS head: 59523b5c4aca0174f1f8cba2a07d3b3328b7c80e commit: d511c6ae9508a42b632fb261a3dd48d0593bfe5e [1094/1181] clk: clk-xlnx-clock-wizard-v: fix missing bitfield include :::::: branch date: 4 days ago :::::: commit date: 8 weeks ago config: h8300-randconfig-s032-20220619 (https://download.01.org/0day-ci/archive/20220619/[email protected]/config) compiler: h8300-linux-gcc (GCC) 11.3.0 reproduce: wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # apt-get install sparse # sparse version: v0.6.4-30-g92122700-dirty # https://github.com/Xilinx/linux-xlnx/commit/d511c6ae9508a42b632fb261a3dd48d0593bfe5e git remote add xilinx-xlnx https://github.com/Xilinx/linux-xlnx git fetch --no-tags xilinx-xlnx xlnx_rebase_v5.15_LTS git checkout d511c6ae9508a42b632fb261a3dd48d0593bfe5e # save the config file mkdir build_dir && cp config build_dir/.config COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.3.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=h8300 SHELL=/bin/bash drivers/clk/ If you fix the issue, kindly add following tag where applicable Reported-by: kernel test robot <[email protected]> sparse warnings: (new ones prefixed by >>) >> drivers/clk/clk-xlnx-clock-wizard-v.c:230:41: sparse: sparse: decimal >> constant 2160000000 is between LONG_MAX and ULONG_MAX. For C99 that means >> long long, C90 compilers are very likely to produce unsigned long (and a >> warning) here >> drivers/clk/clk-xlnx-clock-wizard-v.c:343:43: sparse: sparse: cast removes >> address space '__iomem' of expression drivers/clk/clk-xlnx-clock-wizard-v.c:376:43: sparse: sparse: cast removes address space '__iomem' of expression drivers/clk/clk-xlnx-clock-wizard-v.c: note: in included file (through include/linux/io.h): arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:44:11: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:44:11: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:44:11: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:44:11: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:44:11: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:44:11: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:44:11: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:44:11: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:44:11: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:44:11: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:44:11: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression arch/h8300/include/asm/io.h:26:18: sparse: sparse: cast removes address space '__iomem' of expression vim +230 drivers/clk/clk-xlnx-clock-wizard-v.c 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 219 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 220 static int clk_wzrd_get_divisors(struct clk_hw *hw, unsigned long rate, 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 221 unsigned long parent_rate) 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 222 { 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 223 struct clk_wzrd_divider *divider = to_clk_wzrd_divider(hw); 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 224 u64 vco_freq, freq, diff; 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 225 u32 m, d, o; 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 226 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 227 for (m = WZRD_M_MIN; m <= WZRD_M_MAX; m++) { 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 228 for (d = WZRD_D_MIN; d <= WZRD_D_MAX; d++) { 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 229 vco_freq = DIV_ROUND_CLOSEST((parent_rate * m), d); 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 @230 if (vco_freq >= WZRD_VCO_MIN && vco_freq <= WZRD_VCO_MAX) { 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 231 for (o = WZRD_O_MIN; o <= WZRD_O_MAX; o++) { 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 232 freq = DIV_ROUND_CLOSEST(vco_freq, o); 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 233 diff = abs(freq - rate); 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 234 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 235 if (diff < WZRD_MIN_ERR) { 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 236 divider->valuem = m; 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 237 divider->valued = d; 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 238 divider->valueo = o; 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 239 return 0; 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 240 } 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 241 } 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 242 } 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 243 } 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 244 } 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 245 return -EBUSY; 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 246 } 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 247 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 248 static int clk_wzrd_dynamic_all_nolock(struct clk_hw *hw, unsigned long rate, 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 249 unsigned long parent_rate) 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 250 { 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 251 struct clk_wzrd_divider *divider = to_clk_wzrd_divider(hw); 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 252 u32 value, regh, edged, p5en, p5fedge, value2, m, regval, regval1; 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 253 int err; 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 254 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 255 err = clk_wzrd_get_divisors(hw, rate, parent_rate); 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 256 if (err) 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 257 return err; 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 258 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 259 writel(0, divider->base + WZRD_CLK_CFG_REG(WZRD_CLKFBOUT_4)); 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 260 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 261 m = divider->valuem; 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 262 edged = m % WZRD_DUTY_CYCLE; 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 263 regh = m / WZRD_DUTY_CYCLE; 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 264 regval1 = readl(divider->base + WZRD_CLK_CFG_REG(WZRD_CLKFBOUT_1)); 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 265 regval1 |= WZRD_MULT_PREDIV2; 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 266 if (edged) 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 267 regval1 = regval1 | WZRD_CLKFBOUT_EDGE; 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 268 else 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 269 regval1 = regval1 & ~WZRD_CLKFBOUT_EDGE; 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 270 writel(regval1, divider->base + WZRD_CLK_CFG_REG(WZRD_CLKFBOUT_1)); 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 271 regval1 = regh | regh << WZRD_CLKFBOUT_H_SHIFT; 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 272 writel(regval1, divider->base + WZRD_CLK_CFG_REG(WZRD_CLKFBOUT_2)); 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 273 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 274 value2 = divider->valued; 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 275 edged = value2 % WZRD_DUTY_CYCLE; 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 276 regh = (value2 / WZRD_DUTY_CYCLE); 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 277 regval1 = FIELD_PREP(WZRD_DIVCLK_EDGE, edged); 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 278 writel(regval1, divider->base + WZRD_CLK_CFG_REG(WZRD_DESKEW_2)); 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 279 regval1 = regh | regh << WZRD_CLKFBOUT_H_SHIFT; 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 280 writel(regval1, divider->base + WZRD_CLK_CFG_REG(WZRD_DIVCLK)); 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 281 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 282 value = divider->valueo; 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 283 regh = value / WZRD_O_DIV; 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 284 regval1 = readl(divider->base + WZRD_CLK_CFG_REG(WZRD_CLKOUT0_1)); 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 285 regval1 |= WZRD_CLKFBOUT_PREDIV2; 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 286 regval1 = regval1 & ~(WZRD_CLKFBOUT_EDGE | WZRD_P5EN | WZRD_P5FEDGE); 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 287 if (value % WZRD_O_DIV > 1) { 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 288 edged = 1; 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 289 regval1 |= edged << WZRD_CLKFBOUT_H_SHIFT; 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 290 } 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 291 p5fedge = value % WZRD_DUTY_CYCLE; 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 292 p5en = value % WZRD_DUTY_CYCLE; 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 293 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 294 regval1 = regval1 | FIELD_PREP(WZRD_P5EN, p5en) | FIELD_PREP(WZRD_P5FEDGE, p5fedge); 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 295 writel(regval1, divider->base + WZRD_CLK_CFG_REG(WZRD_CLKOUT0_1)); 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 296 regval = regh | regh << WZRD_CLKFBOUT_H_SHIFT; 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 297 writel(regval, divider->base + WZRD_CLK_CFG_REG(WZRD_CLKOUT0_2)); 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 298 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 299 /* Check status register */ 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 300 err = readl_poll_timeout(divider->base + WZRD_DR_STATUS_REG_OFFSET, 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 301 value, value & WZRD_DR_LOCK_BIT_MASK, 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 302 WZRD_USEC_POLL, WZRD_TIMEOUT_POLL); 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 303 if (err) 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 304 return err; 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 305 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 306 /* Initiate reconfiguration */ 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 307 writel(WZRD_DR_BEGIN_DYNA_RECONF, 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 308 divider->base + WZRD_DR_INIT_REG_OFFSET); 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 309 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 310 /* Check status register */ 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 311 return readl_poll_timeout(divider->base + WZRD_DR_STATUS_REG_OFFSET, 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 312 value, value & WZRD_DR_LOCK_BIT_MASK, 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 313 WZRD_USEC_POLL, WZRD_TIMEOUT_POLL); 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 314 } 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 315 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 316 static int clk_wzrd_dynamic_all(struct clk_hw *hw, unsigned long rate, 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 317 unsigned long parent_rate) 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 318 { 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 319 struct clk_wzrd_divider *divider = to_clk_wzrd_divider(hw); 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 320 unsigned long flags = 0; 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 321 int ret; 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 322 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 323 if (divider->lock) 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 324 spin_lock_irqsave(divider->lock, flags); 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 325 else 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 326 __acquire(divider->lock); 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 327 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 328 ret = clk_wzrd_dynamic_all_nolock(hw, rate, parent_rate); 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 329 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 330 if (divider->lock) 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 331 spin_unlock_irqrestore(divider->lock, flags); 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 332 else 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 333 __release(divider->lock); 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 334 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 335 return ret; 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 336 } 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 337 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 338 static unsigned long clk_wzrd_recalc_rate(struct clk_hw *hw, 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 339 unsigned long parent_rate) 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 340 { 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 341 struct clk_wzrd_divider *divider = to_clk_wzrd_divider(hw); 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 342 void __iomem *div_addr = 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 @343 (void __iomem *)((u64)divider->base + divider->offset); 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 344 unsigned int vall, valh; 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 345 u32 div; 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 346 u32 p5en, edge, prediv2; 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 347 u32 all; 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 348 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 349 edge = !!(readl(div_addr) & BIT(8)); 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 350 p5en = !!(readl(div_addr) & BIT(13)); 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 351 prediv2 = !!(readl(div_addr) & BIT(11)); 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 352 vall = readl(div_addr + 4) & 0xff; 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 353 valh = readl(div_addr + 4) >> 8; 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 354 all = valh + vall + edge; 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 355 if (!all) 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 356 all = 1; 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 357 if (prediv2) 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 358 div = (2 * all + prediv2 * p5en); 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 359 else 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 360 div = all; 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 361 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 362 return DIV_ROUND_UP_ULL((u64)parent_rate, div); 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 363 } 8b5383767cb4c8 Shubhrajyoti Datta 2020-03-31 364 :::::: The code at line 230 was first introduced by commit :::::: 8b5383767cb4c856283824baee568f4286ecc0db clocking-wizard: Add versal clocking wizard support :::::: TO: Shubhrajyoti Datta <[email protected]> :::::: CC: Michal Simek <[email protected]> -- 0-DAY CI Kernel Test Service https://01.org/lkp _______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
