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

Reply via email to