Hi Javier,

[auto build test WARNING on clk/clk-next -- if it's inappropriate base, please 
suggest rules for selecting the more suitable base]

url:    
https://github.com/0day-ci/linux/commits/Javier-Martinez-Canillas/clk-Allow-drivers-to-build-if-COMPILE_TEST-is-enabled/20151013-222133
reproduce:
        # apt-get install sparse
        make ARCH=x86_64 allmodconfig
        make C=1 CF=-D__CHECK_ENDIAN__


sparse warnings: (new ones prefixed by >>)

>> drivers/clk/clk-xgene.c:217:12: sparse: context imbalance in 
>> 'xgene_clk_enable' - different lock contexts for basic block
>> drivers/clk/clk-xgene.c:285:9: sparse: context imbalance in 
>> 'xgene_clk_disable' - different lock contexts for basic block
>> drivers/clk/clk-xgene.c:368:9: sparse: context imbalance in 
>> 'xgene_clk_set_rate' - different lock contexts for basic block
--
>> drivers/clk/keystone/gate.c:117:12: sparse: context imbalance in 
>> 'keystone_clk_enable' - different lock contexts for basic block
>> drivers/clk/keystone/gate.c:147:9: sparse: context imbalance in 
>> 'keystone_clk_disable' - different lock contexts for basic block

vim +/xgene_clk_enable +217 drivers/clk/clk-xgene.c

308964ca Loc Ho           2013-06-26  211       spinlock_t      *lock;
308964ca Loc Ho           2013-06-26  212       struct xgene_dev_parameters     
param;
308964ca Loc Ho           2013-06-26  213  };
308964ca Loc Ho           2013-06-26  214  
308964ca Loc Ho           2013-06-26  215  #define to_xgene_clk(_hw) 
container_of(_hw, struct xgene_clk, hw)
308964ca Loc Ho           2013-06-26  216  
308964ca Loc Ho           2013-06-26 @217  static int xgene_clk_enable(struct 
clk_hw *hw)
308964ca Loc Ho           2013-06-26  218  {
308964ca Loc Ho           2013-06-26  219       struct xgene_clk *pclk = 
to_xgene_clk(hw);
308964ca Loc Ho           2013-06-26  220       unsigned long flags = 0;
308964ca Loc Ho           2013-06-26  221       u32 data;
6ae5fd38 Stephen Boyd     2015-05-01  222       phys_addr_t reg;
308964ca Loc Ho           2013-06-26  223  
308964ca Loc Ho           2013-06-26  224       if (pclk->lock)
308964ca Loc Ho           2013-06-26  225               
spin_lock_irqsave(pclk->lock, flags);
308964ca Loc Ho           2013-06-26  226  
308964ca Loc Ho           2013-06-26  227       if (pclk->param.csr_reg != 
NULL) {
836ee0f7 Stephen Boyd     2015-08-12  228               pr_debug("%s clock 
enabled\n", clk_hw_get_name(hw));
6ae5fd38 Stephen Boyd     2015-05-01  229               reg = 
__pa(pclk->param.csr_reg);
308964ca Loc Ho           2013-06-26  230               /* First enable the 
clock */
308964ca Loc Ho           2013-06-26  231               data = 
xgene_clk_read(pclk->param.csr_reg +
308964ca Loc Ho           2013-06-26  232                                       
pclk->param.reg_clk_offset);
308964ca Loc Ho           2013-06-26  233               data |= 
pclk->param.reg_clk_mask;
308964ca Loc Ho           2013-06-26  234               xgene_clk_write(data, 
pclk->param.csr_reg +
308964ca Loc Ho           2013-06-26  235                                       
pclk->param.reg_clk_offset);
6ae5fd38 Stephen Boyd     2015-05-01  236               pr_debug("%s clock 
PADDR base %pa clk offset 0x%08X mask 0x%08X value 0x%08X\n",
836ee0f7 Stephen Boyd     2015-08-12  237                       
clk_hw_get_name(hw), &reg,
308964ca Loc Ho           2013-06-26  238                       
pclk->param.reg_clk_offset, pclk->param.reg_clk_mask,
308964ca Loc Ho           2013-06-26  239                       data);
308964ca Loc Ho           2013-06-26  240  
308964ca Loc Ho           2013-06-26  241               /* Second enable the 
CSR */
308964ca Loc Ho           2013-06-26  242               data = 
xgene_clk_read(pclk->param.csr_reg +
308964ca Loc Ho           2013-06-26  243                                       
pclk->param.reg_csr_offset);
308964ca Loc Ho           2013-06-26  244               data &= 
~pclk->param.reg_csr_mask;
308964ca Loc Ho           2013-06-26  245               xgene_clk_write(data, 
pclk->param.csr_reg +
308964ca Loc Ho           2013-06-26  246                                       
pclk->param.reg_csr_offset);
6ae5fd38 Stephen Boyd     2015-05-01  247               pr_debug("%s CSR RESET 
PADDR base %pa csr offset 0x%08X mask 0x%08X value 0x%08X\n",
836ee0f7 Stephen Boyd     2015-08-12  248                       
clk_hw_get_name(hw), &reg,
308964ca Loc Ho           2013-06-26  249                       
pclk->param.reg_csr_offset, pclk->param.reg_csr_mask,
308964ca Loc Ho           2013-06-26  250                       data);
308964ca Loc Ho           2013-06-26  251       }
308964ca Loc Ho           2013-06-26  252  
308964ca Loc Ho           2013-06-26  253       if (pclk->lock)
308964ca Loc Ho           2013-06-26  254               
spin_unlock_irqrestore(pclk->lock, flags);
308964ca Loc Ho           2013-06-26  255  
308964ca Loc Ho           2013-06-26  256       return 0;
308964ca Loc Ho           2013-06-26  257  }
308964ca Loc Ho           2013-06-26  258  
308964ca Loc Ho           2013-06-26  259  static void xgene_clk_disable(struct 
clk_hw *hw)
308964ca Loc Ho           2013-06-26  260  {
308964ca Loc Ho           2013-06-26  261       struct xgene_clk *pclk = 
to_xgene_clk(hw);
308964ca Loc Ho           2013-06-26  262       unsigned long flags = 0;
308964ca Loc Ho           2013-06-26  263       u32 data;
308964ca Loc Ho           2013-06-26  264  
308964ca Loc Ho           2013-06-26  265       if (pclk->lock)
308964ca Loc Ho           2013-06-26  266               
spin_lock_irqsave(pclk->lock, flags);
308964ca Loc Ho           2013-06-26  267  
308964ca Loc Ho           2013-06-26  268       if (pclk->param.csr_reg != 
NULL) {
836ee0f7 Stephen Boyd     2015-08-12  269               pr_debug("%s clock 
disabled\n", clk_hw_get_name(hw));
308964ca Loc Ho           2013-06-26  270               /* First put the CSR in 
reset */
308964ca Loc Ho           2013-06-26  271               data = 
xgene_clk_read(pclk->param.csr_reg +
308964ca Loc Ho           2013-06-26  272                                       
pclk->param.reg_csr_offset);
308964ca Loc Ho           2013-06-26  273               data |= 
pclk->param.reg_csr_mask;
308964ca Loc Ho           2013-06-26  274               xgene_clk_write(data, 
pclk->param.csr_reg +
308964ca Loc Ho           2013-06-26  275                                       
pclk->param.reg_csr_offset);
308964ca Loc Ho           2013-06-26  276  
308964ca Loc Ho           2013-06-26  277               /* Second disable the 
clock */
308964ca Loc Ho           2013-06-26  278               data = 
xgene_clk_read(pclk->param.csr_reg +
308964ca Loc Ho           2013-06-26  279                                       
pclk->param.reg_clk_offset);
308964ca Loc Ho           2013-06-26  280               data &= 
~pclk->param.reg_clk_mask;
308964ca Loc Ho           2013-06-26  281               xgene_clk_write(data, 
pclk->param.csr_reg +
308964ca Loc Ho           2013-06-26  282                                       
pclk->param.reg_clk_offset);
308964ca Loc Ho           2013-06-26  283       }
308964ca Loc Ho           2013-06-26  284  
308964ca Loc Ho           2013-06-26 @285       if (pclk->lock)
308964ca Loc Ho           2013-06-26  286               
spin_unlock_irqrestore(pclk->lock, flags);
308964ca Loc Ho           2013-06-26  287  }
308964ca Loc Ho           2013-06-26  288  
308964ca Loc Ho           2013-06-26  289  static int 
xgene_clk_is_enabled(struct clk_hw *hw)
308964ca Loc Ho           2013-06-26  290  {
308964ca Loc Ho           2013-06-26  291       struct xgene_clk *pclk = 
to_xgene_clk(hw);
308964ca Loc Ho           2013-06-26  292       u32 data = 0;
308964ca Loc Ho           2013-06-26  293  
308964ca Loc Ho           2013-06-26  294       if (pclk->param.csr_reg != 
NULL) {
836ee0f7 Stephen Boyd     2015-08-12  295               pr_debug("%s clock 
checking\n", clk_hw_get_name(hw));
308964ca Loc Ho           2013-06-26  296               data = 
xgene_clk_read(pclk->param.csr_reg +
308964ca Loc Ho           2013-06-26  297                                       
pclk->param.reg_clk_offset);
836ee0f7 Stephen Boyd     2015-08-12  298               pr_debug("%s clock is 
%s\n", clk_hw_get_name(hw),
308964ca Loc Ho           2013-06-26  299                       data & 
pclk->param.reg_clk_mask ? "enabled" :
308964ca Loc Ho           2013-06-26  300                                       
                "disabled");
308964ca Loc Ho           2013-06-26  301       }
308964ca Loc Ho           2013-06-26  302  
308964ca Loc Ho           2013-06-26  303       if (pclk->param.csr_reg == NULL)
308964ca Loc Ho           2013-06-26  304               return 1;
308964ca Loc Ho           2013-06-26  305       return data & 
pclk->param.reg_clk_mask ? 1 : 0;
308964ca Loc Ho           2013-06-26  306  }
308964ca Loc Ho           2013-06-26  307  
308964ca Loc Ho           2013-06-26  308  static unsigned long 
xgene_clk_recalc_rate(struct clk_hw *hw,
308964ca Loc Ho           2013-06-26  309                               
unsigned long parent_rate)
308964ca Loc Ho           2013-06-26  310  {
308964ca Loc Ho           2013-06-26  311       struct xgene_clk *pclk = 
to_xgene_clk(hw);
308964ca Loc Ho           2013-06-26  312       u32 data;
308964ca Loc Ho           2013-06-26  313  
308964ca Loc Ho           2013-06-26  314       if (pclk->param.divider_reg) {
308964ca Loc Ho           2013-06-26  315               data = 
xgene_clk_read(pclk->param.divider_reg +
308964ca Loc Ho           2013-06-26  316                                       
pclk->param.reg_divider_offset);
308964ca Loc Ho           2013-06-26  317               data >>= 
pclk->param.reg_divider_shift;
308964ca Loc Ho           2013-06-26  318               data &= (1 << 
pclk->param.reg_divider_width) - 1;
308964ca Loc Ho           2013-06-26  319  
308964ca Loc Ho           2013-06-26  320               pr_debug("%s clock 
recalc rate %ld parent %ld\n",
836ee0f7 Stephen Boyd     2015-08-12  321                       
clk_hw_get_name(hw),
78e50c6d Matthias Brugger 2015-06-17  322                       parent_rate / 
data, parent_rate);
78e50c6d Matthias Brugger 2015-06-17  323  
308964ca Loc Ho           2013-06-26  324               return parent_rate / 
data;
308964ca Loc Ho           2013-06-26  325       } else {
308964ca Loc Ho           2013-06-26  326               pr_debug("%s clock 
recalc rate %ld parent %ld\n",
836ee0f7 Stephen Boyd     2015-08-12  327                       
clk_hw_get_name(hw), parent_rate, parent_rate);
308964ca Loc Ho           2013-06-26  328               return parent_rate;
308964ca Loc Ho           2013-06-26  329       }
308964ca Loc Ho           2013-06-26  330  }
308964ca Loc Ho           2013-06-26  331  
308964ca Loc Ho           2013-06-26  332  static int xgene_clk_set_rate(struct 
clk_hw *hw, unsigned long rate,
308964ca Loc Ho           2013-06-26  333                               
unsigned long parent_rate)
308964ca Loc Ho           2013-06-26  334  {
308964ca Loc Ho           2013-06-26  335       struct xgene_clk *pclk = 
to_xgene_clk(hw);
308964ca Loc Ho           2013-06-26  336       unsigned long flags = 0;
308964ca Loc Ho           2013-06-26  337       u32 data;
308964ca Loc Ho           2013-06-26  338       u32 divider;
308964ca Loc Ho           2013-06-26  339       u32 divider_save;
308964ca Loc Ho           2013-06-26  340  
308964ca Loc Ho           2013-06-26  341       if (pclk->lock)
308964ca Loc Ho           2013-06-26  342               
spin_lock_irqsave(pclk->lock, flags);
308964ca Loc Ho           2013-06-26  343  
308964ca Loc Ho           2013-06-26  344       if (pclk->param.divider_reg) {
308964ca Loc Ho           2013-06-26  345               /* Let's compute the 
divider */
308964ca Loc Ho           2013-06-26  346               if (rate > parent_rate)
308964ca Loc Ho           2013-06-26  347                       rate = 
parent_rate;
308964ca Loc Ho           2013-06-26  348               divider_save = divider 
= parent_rate / rate; /* Rounded down */
308964ca Loc Ho           2013-06-26  349               divider &= (1 << 
pclk->param.reg_divider_width) - 1;
308964ca Loc Ho           2013-06-26  350               divider <<= 
pclk->param.reg_divider_shift;
308964ca Loc Ho           2013-06-26  351  
308964ca Loc Ho           2013-06-26  352               /* Set new divider */
308964ca Loc Ho           2013-06-26  353               data = 
xgene_clk_read(pclk->param.divider_reg +
308964ca Loc Ho           2013-06-26  354                               
pclk->param.reg_divider_offset);
308964ca Loc Ho           2013-06-26  355               data &= ~((1 << 
pclk->param.reg_divider_width) - 1);
308964ca Loc Ho           2013-06-26  356               data |= divider;
308964ca Loc Ho           2013-06-26  357               xgene_clk_write(data, 
pclk->param.divider_reg +
308964ca Loc Ho           2013-06-26  358                                       
pclk->param.reg_divider_offset);
836ee0f7 Stephen Boyd     2015-08-12  359               pr_debug("%s clock set 
rate %ld\n", clk_hw_get_name(hw),
308964ca Loc Ho           2013-06-26  360                       parent_rate / 
divider_save);
308964ca Loc Ho           2013-06-26  361       } else {
308964ca Loc Ho           2013-06-26  362               divider_save = 1;
308964ca Loc Ho           2013-06-26  363       }
308964ca Loc Ho           2013-06-26  364  
308964ca Loc Ho           2013-06-26  365       if (pclk->lock)
308964ca Loc Ho           2013-06-26  366               
spin_unlock_irqrestore(pclk->lock, flags);
308964ca Loc Ho           2013-06-26  367  
308964ca Loc Ho           2013-06-26 @368       return parent_rate / 
divider_save;
308964ca Loc Ho           2013-06-26  369  }
308964ca Loc Ho           2013-06-26  370  
308964ca Loc Ho           2013-06-26  371  static long 
xgene_clk_round_rate(struct clk_hw *hw, unsigned long rate,

:::::: The code at line 217 was first introduced by commit
:::::: 308964caeebc45eb7723c87818076f61fa1a2e1b clk: Add APM X-Gene SoC clock 
driver

:::::: TO: Loc Ho <l...@apm.com>
:::::: CC: Mike Turquette <mturque...@linaro.org>

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to