CC: l...@lists.linux.dev CC: kbuild-...@lists.01.org BCC: l...@intel.com CC: Linux Memory Management List <linux...@kvack.org> TO: Sascha Hauer <s.ha...@pengutronix.de> CC: Abel Vesa <abel.v...@nxp.com>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master head: cb153b68ff91cbc434f3de70ac549e110543e1bb commit: b09c68dc57c9d44071d83bb935b733f53ea2b2b4 [10110/11353] clk: imx: pll14xx: Support dynamic rates :::::: branch date: 26 hours ago :::::: commit date: 5 days ago config: riscv-randconfig-c006-20220307 (https://download.01.org/0day-ci/archive/20220309/202203091812.ruvpyy0c-...@intel.com/config) compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project d271fc04d5b97b12e6b797c6067d3c96a8d7470e) 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 # install riscv cross compiling tool for clang build # apt-get install binutils-riscv64-linux-gnu # https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=b09c68dc57c9d44071d83bb935b733f53ea2b2b4 git remote add linux-next https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git git fetch --no-tags linux-next master git checkout b09c68dc57c9d44071d83bb935b733f53ea2b2b4 # save the config file to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=riscv clang-analyzer If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <l...@intel.com> clang-analyzer warnings: (new ones prefixed by >>) ^~~~~~~~~~ fs/jfs/xattr.c:681:2: note: Taking false branch if (xattr_size) { ^ fs/jfs/xattr.c:699:7: note: 'found' is 0 if (!found) { ^~~~~ fs/jfs/xattr.c:699:2: note: Taking true branch if (!found) { ^ fs/jfs/xattr.c:700:7: note: Assuming the condition is false if (flags & XATTR_REPLACE) { ^~~~~~~~~~~~~~~~~~~~~ fs/jfs/xattr.c:700:3: note: Taking false branch if (flags & XATTR_REPLACE) { ^ fs/jfs/xattr.c:704:7: note: Assuming 'value' is not equal to NULL if (value == NULL) { ^~~~~~~~~~~~~ fs/jfs/xattr.c:704:3: note: Taking false branch if (value == NULL) { ^ fs/jfs/xattr.c:709:6: note: 'value' is non-null if (value) ^~~~~ fs/jfs/xattr.c:709:2: note: Taking true branch if (value) ^ fs/jfs/xattr.c:712:6: note: Assuming 'new_size' is <= field 'max_size' if (new_size > ea_buf.max_size) { ^~~~~~~~~~~~~~~~~~~~~~~~~~ fs/jfs/xattr.c:712:2: note: Taking false branch if (new_size > ea_buf.max_size) { ^ fs/jfs/xattr.c:727:6: note: 'found' is 0 if (found) { ^~~~~ fs/jfs/xattr.c:727:2: note: Taking false branch if (found) { ^ fs/jfs/xattr.c:736:6: note: 'value' is non-null if (value) { ^~~~~ fs/jfs/xattr.c:736:2: note: Taking true branch if (value) { ^ fs/jfs/xattr.c:737:7: note: 'xattr_size' is equal to 0 if (xattr_size == 0) ^~~~~~~~~~ fs/jfs/xattr.c:737:3: note: Taking true branch if (xattr_size == 0) ^ fs/jfs/xattr.c:749:7: note: Assuming the condition is false if (value_len >= USHRT_MAX) { ^~~~~~~~~~~~~~~~~~~~~~ fs/jfs/xattr.c:749:3: note: Taking false branch if (value_len >= USHRT_MAX) { ^ fs/jfs/xattr.c:754:3: note: Null pointer value stored to 'ea' ea = (struct jfs_ea *) ((char *) ealist + xattr_size); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fs/jfs/xattr.c:755:12: note: Access to field 'flag' results in a dereference of a null pointer (loaded from variable 'ea') ea->flag = 0; ~~ ^ Suppressed 5 warnings (5 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 6 warnings generated. Suppressed 6 warnings (6 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 5 warnings generated. Suppressed 5 warnings (5 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 5 warnings generated. Suppressed 5 warnings (5 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 6 warnings generated. Suppressed 6 warnings (6 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 5 warnings generated. Suppressed 5 warnings (5 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 5 warnings generated. Suppressed 5 warnings (5 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 5 warnings generated. Suppressed 5 warnings (5 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 5 warnings generated. Suppressed 5 warnings (5 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 5 warnings generated. Suppressed 5 warnings (5 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 5 warnings generated. Suppressed 5 warnings (5 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 5 warnings generated. Suppressed 5 warnings (5 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 6 warnings generated. >> drivers/clk/imx/clk-pll14xx.c:166:2: warning: Value stored to 'pll_div_ctl1' >> is never read [clang-analyzer-deadcode.DeadStores] pll_div_ctl1 = readl_relaxed(pll->base + DIV_CTL1); ^ drivers/clk/imx/clk-pll14xx.c:166:2: note: Value stored to 'pll_div_ctl1' is never read Suppressed 5 warnings (5 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 5 warnings generated. Suppressed 5 warnings (5 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 6 warnings generated. Suppressed 6 warnings (6 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 6 warnings generated. Suppressed 6 warnings (6 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 6 warnings generated. drivers/clk/ingenic/cgu.c:512:10: warning: Division by zero [clang-analyzer-core.DivideZero] rate = DIV_ROUND_UP(parent_rate, div); ^ include/linux/math.h:36:22: note: expanded from macro 'DIV_ROUND_UP' #define DIV_ROUND_UP __KERNEL_DIV_ROUND_UP ^ include/uapi/linux/const.h:34:54: note: expanded from macro '__KERNEL_DIV_ROUND_UP' #define __KERNEL_DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d)) ~~~~~~~~~~~~~~~~^~~~~ drivers/clk/ingenic/cgu.c:510:6: note: Assuming the condition is true if (clk_info->type & CGU_CLK_DIV) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/clk/ingenic/cgu.c:510:2: note: Taking true branch if (clk_info->type & CGU_CLK_DIV) { ^ drivers/clk/ingenic/cgu.c:511:9: note: Calling 'ingenic_clk_calc_div' div = ingenic_clk_calc_div(hw, clk_info, parent_rate, req_rate); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/clk/ingenic/cgu.c:443:6: note: Assuming the condition is false if (clk_info->div.bypass_mask & BIT(parent)) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/clk/ingenic/cgu.c:443:2: note: Taking false branch if (clk_info->div.bypass_mask & BIT(parent)) ^ drivers/clk/ingenic/cgu.c:449:6: note: Assuming field 'div_table' is non-null if (clk_info->div.div_table) { ^~~~~~~~~~~~~~~~~~~~~~~ drivers/clk/ingenic/cgu.c:449:2: note: Taking true branch if (clk_info->div.div_table) { ^ drivers/clk/ingenic/cgu.c:450:12: note: Calling 'ingenic_clk_calc_hw_div' hw_div = ingenic_clk_calc_hw_div(clk_info, div); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/clk/ingenic/cgu.c:417:18: note: 'best_i' initialized to 0 unsigned int i, best_i = 0, best = (unsigned int)-1; ^~~~~~ drivers/clk/ingenic/cgu.c:419:14: note: Assuming the condition is true for (i = 0; i < (1 << clk_info->div.bits) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/clk/ingenic/cgu.c:419:14: note: Left side of '&&' is true drivers/clk/ingenic/cgu.c:419:2: note: Loop condition is false. Execution continues on line 431 for (i = 0; i < (1 << clk_info->div.bits) ^ drivers/clk/ingenic/cgu.c:431:2: note: Returning zero (loaded from 'best_i') return best_i; ^~~~~~~~~~~~~ drivers/clk/ingenic/cgu.c:450:12: note: Returning from 'ingenic_clk_calc_hw_div' hw_div = ingenic_clk_calc_hw_div(clk_info, div); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/clk/ingenic/cgu.c:450:3: note: The value 0 is assigned to 'hw_div' hw_div = ingenic_clk_calc_hw_div(clk_info, div); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/clk/ingenic/cgu.c:452:3: note: Returning zero return clk_info->div.div_table[hw_div]; ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/clk/ingenic/cgu.c:511:9: note: Returning from 'ingenic_clk_calc_div' div = ingenic_clk_calc_div(hw, clk_info, parent_rate, req_rate); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/clk/ingenic/cgu.c:511:3: note: The value 0 is assigned to 'div' div = ingenic_clk_calc_div(hw, clk_info, parent_rate, req_rate); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/clk/ingenic/cgu.c:512:10: note: Division by zero rate = DIV_ROUND_UP(parent_rate, div); ^ include/linux/math.h:36:22: note: expanded from macro 'DIV_ROUND_UP' #define DIV_ROUND_UP __KERNEL_DIV_ROUND_UP ^ include/uapi/linux/const.h:34:54: note: expanded from macro '__KERNEL_DIV_ROUND_UP' #define __KERNEL_DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d)) ~~~~~~~~~~~~~~~~^~~~~ Suppressed 5 warnings (5 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 14 warnings generated. Suppressed 14 warnings (14 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 7 warnings generated. Suppressed 7 warnings (7 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 16 warnings generated. kernel/bpf/btf.c:6739:3: warning: Address of stack memory associated with local variable 'local_cand' returned to caller [clang-analyzer-core.StackAddressEscape] return ERR_CAST(cands); ^ kernel/bpf/btf.c:6789:20: note: Assuming field 'kind' is not equal to BPF_CORE_TYPE_ID_LOCAL bool need_cands = relo->kind != BPF_CORE_TYPE_ID_LOCAL; ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ vim +/pll_div_ctl1 +166 drivers/clk/imx/clk-pll14xx.c b09c68dc57c9d44 Sascha Hauer 2022-03-04 128 b09c68dc57c9d44 Sascha Hauer 2022-03-04 129 static void imx_pll14xx_calc_settings(struct clk_pll14xx *pll, unsigned long rate, b09c68dc57c9d44 Sascha Hauer 2022-03-04 130 unsigned long prate, struct imx_pll14xx_rate_table *t) b09c68dc57c9d44 Sascha Hauer 2022-03-04 131 { b09c68dc57c9d44 Sascha Hauer 2022-03-04 132 u32 pll_div_ctl0, pll_div_ctl1; b09c68dc57c9d44 Sascha Hauer 2022-03-04 133 int mdiv, pdiv, sdiv, kdiv; b09c68dc57c9d44 Sascha Hauer 2022-03-04 134 long fvco, rate_min, rate_max, dist, best = LONG_MAX; b09c68dc57c9d44 Sascha Hauer 2022-03-04 135 const struct imx_pll14xx_rate_table *tt; b09c68dc57c9d44 Sascha Hauer 2022-03-04 136 b09c68dc57c9d44 Sascha Hauer 2022-03-04 137 /* b09c68dc57c9d44 Sascha Hauer 2022-03-04 138 * Fractional PLL constrains: b09c68dc57c9d44 Sascha Hauer 2022-03-04 139 * b09c68dc57c9d44 Sascha Hauer 2022-03-04 140 * a) 6MHz <= prate <= 25MHz b09c68dc57c9d44 Sascha Hauer 2022-03-04 141 * b) 1 <= p <= 63 (1 <= p <= 4 prate = 24MHz) b09c68dc57c9d44 Sascha Hauer 2022-03-04 142 * c) 64 <= m <= 1023 b09c68dc57c9d44 Sascha Hauer 2022-03-04 143 * d) 0 <= s <= 6 b09c68dc57c9d44 Sascha Hauer 2022-03-04 144 * e) -32768 <= k <= 32767 b09c68dc57c9d44 Sascha Hauer 2022-03-04 145 * b09c68dc57c9d44 Sascha Hauer 2022-03-04 146 * fvco = (m * 65536 + k) * prate / (p * 65536) b09c68dc57c9d44 Sascha Hauer 2022-03-04 147 */ b09c68dc57c9d44 Sascha Hauer 2022-03-04 148 b09c68dc57c9d44 Sascha Hauer 2022-03-04 149 /* First try if we can get the desired rate from one of the static entries */ b09c68dc57c9d44 Sascha Hauer 2022-03-04 150 tt = imx_get_pll_settings(pll, rate); b09c68dc57c9d44 Sascha Hauer 2022-03-04 151 if (tt) { b09c68dc57c9d44 Sascha Hauer 2022-03-04 152 pr_debug("%s: in=%ld, want=%ld, Using PLL setting from table\n", b09c68dc57c9d44 Sascha Hauer 2022-03-04 153 clk_hw_get_name(&pll->hw), prate, rate); b09c68dc57c9d44 Sascha Hauer 2022-03-04 154 t->rate = tt->rate; b09c68dc57c9d44 Sascha Hauer 2022-03-04 155 t->mdiv = tt->mdiv; b09c68dc57c9d44 Sascha Hauer 2022-03-04 156 t->pdiv = tt->pdiv; b09c68dc57c9d44 Sascha Hauer 2022-03-04 157 t->sdiv = tt->sdiv; b09c68dc57c9d44 Sascha Hauer 2022-03-04 158 t->kdiv = tt->kdiv; b09c68dc57c9d44 Sascha Hauer 2022-03-04 159 return; b09c68dc57c9d44 Sascha Hauer 2022-03-04 160 } b09c68dc57c9d44 Sascha Hauer 2022-03-04 161 b09c68dc57c9d44 Sascha Hauer 2022-03-04 162 pll_div_ctl0 = readl_relaxed(pll->base + DIV_CTL0); b09c68dc57c9d44 Sascha Hauer 2022-03-04 163 mdiv = FIELD_GET(MDIV_MASK, pll_div_ctl0); b09c68dc57c9d44 Sascha Hauer 2022-03-04 164 pdiv = FIELD_GET(PDIV_MASK, pll_div_ctl0); b09c68dc57c9d44 Sascha Hauer 2022-03-04 165 sdiv = FIELD_GET(SDIV_MASK, pll_div_ctl0); b09c68dc57c9d44 Sascha Hauer 2022-03-04 @166 pll_div_ctl1 = readl_relaxed(pll->base + DIV_CTL1); b09c68dc57c9d44 Sascha Hauer 2022-03-04 167 b09c68dc57c9d44 Sascha Hauer 2022-03-04 168 /* Then see if we can get the desired rate by only adjusting kdiv (glitch free) */ b09c68dc57c9d44 Sascha Hauer 2022-03-04 169 rate_min = pll14xx_calc_rate(pll, mdiv, pdiv, sdiv, KDIV_MIN, prate); b09c68dc57c9d44 Sascha Hauer 2022-03-04 170 rate_max = pll14xx_calc_rate(pll, mdiv, pdiv, sdiv, KDIV_MAX, prate); b09c68dc57c9d44 Sascha Hauer 2022-03-04 171 b09c68dc57c9d44 Sascha Hauer 2022-03-04 172 if (rate >= rate_min && rate <= rate_max) { b09c68dc57c9d44 Sascha Hauer 2022-03-04 173 kdiv = pll1443x_calc_kdiv(mdiv, pdiv, sdiv, rate, prate); b09c68dc57c9d44 Sascha Hauer 2022-03-04 174 pr_debug("%s: in=%ld, want=%ld Only adjust kdiv %ld -> %d\n", b09c68dc57c9d44 Sascha Hauer 2022-03-04 175 clk_hw_get_name(&pll->hw), prate, rate, b09c68dc57c9d44 Sascha Hauer 2022-03-04 176 FIELD_GET(KDIV_MASK, pll_div_ctl1), kdiv); b09c68dc57c9d44 Sascha Hauer 2022-03-04 177 fvco = pll14xx_calc_rate(pll, mdiv, pdiv, sdiv, kdiv, prate); b09c68dc57c9d44 Sascha Hauer 2022-03-04 178 t->rate = (unsigned int)fvco; b09c68dc57c9d44 Sascha Hauer 2022-03-04 179 t->mdiv = mdiv; b09c68dc57c9d44 Sascha Hauer 2022-03-04 180 t->pdiv = pdiv; b09c68dc57c9d44 Sascha Hauer 2022-03-04 181 t->sdiv = sdiv; b09c68dc57c9d44 Sascha Hauer 2022-03-04 182 t->kdiv = kdiv; b09c68dc57c9d44 Sascha Hauer 2022-03-04 183 return; b09c68dc57c9d44 Sascha Hauer 2022-03-04 184 } b09c68dc57c9d44 Sascha Hauer 2022-03-04 185 b09c68dc57c9d44 Sascha Hauer 2022-03-04 186 /* Finally calculate best values */ b09c68dc57c9d44 Sascha Hauer 2022-03-04 187 for (pdiv = 1; pdiv <= 7; pdiv++) { b09c68dc57c9d44 Sascha Hauer 2022-03-04 188 for (sdiv = 0; sdiv <= 6; sdiv++) { b09c68dc57c9d44 Sascha Hauer 2022-03-04 189 /* calc mdiv = round(rate * pdiv * 2^sdiv) / prate) */ b09c68dc57c9d44 Sascha Hauer 2022-03-04 190 mdiv = DIV_ROUND_CLOSEST(rate * (pdiv << sdiv), prate); b09c68dc57c9d44 Sascha Hauer 2022-03-04 191 mdiv = clamp(mdiv, 64, 1023); b09c68dc57c9d44 Sascha Hauer 2022-03-04 192 b09c68dc57c9d44 Sascha Hauer 2022-03-04 193 kdiv = pll1443x_calc_kdiv(mdiv, pdiv, sdiv, rate, prate); b09c68dc57c9d44 Sascha Hauer 2022-03-04 194 fvco = pll14xx_calc_rate(pll, mdiv, pdiv, sdiv, kdiv, prate); b09c68dc57c9d44 Sascha Hauer 2022-03-04 195 b09c68dc57c9d44 Sascha Hauer 2022-03-04 196 /* best match */ b09c68dc57c9d44 Sascha Hauer 2022-03-04 197 dist = abs((long)rate - (long)fvco); b09c68dc57c9d44 Sascha Hauer 2022-03-04 198 if (dist < best) { b09c68dc57c9d44 Sascha Hauer 2022-03-04 199 best = dist; b09c68dc57c9d44 Sascha Hauer 2022-03-04 200 t->rate = (unsigned int)fvco; b09c68dc57c9d44 Sascha Hauer 2022-03-04 201 t->mdiv = mdiv; b09c68dc57c9d44 Sascha Hauer 2022-03-04 202 t->pdiv = pdiv; b09c68dc57c9d44 Sascha Hauer 2022-03-04 203 t->sdiv = sdiv; b09c68dc57c9d44 Sascha Hauer 2022-03-04 204 t->kdiv = kdiv; b09c68dc57c9d44 Sascha Hauer 2022-03-04 205 b09c68dc57c9d44 Sascha Hauer 2022-03-04 206 if (!dist) b09c68dc57c9d44 Sascha Hauer 2022-03-04 207 goto found; b09c68dc57c9d44 Sascha Hauer 2022-03-04 208 } b09c68dc57c9d44 Sascha Hauer 2022-03-04 209 } b09c68dc57c9d44 Sascha Hauer 2022-03-04 210 } b09c68dc57c9d44 Sascha Hauer 2022-03-04 211 found: b09c68dc57c9d44 Sascha Hauer 2022-03-04 212 pr_debug("%s: in=%ld, want=%ld got=%d (pdiv=%d sdiv=%d mdiv=%d kdiv=%d)\n", b09c68dc57c9d44 Sascha Hauer 2022-03-04 213 clk_hw_get_name(&pll->hw), prate, rate, t->rate, t->pdiv, t->sdiv, b09c68dc57c9d44 Sascha Hauer 2022-03-04 214 t->mdiv, t->kdiv); b09c68dc57c9d44 Sascha Hauer 2022-03-04 215 } b09c68dc57c9d44 Sascha Hauer 2022-03-04 216 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-...@lists.01.org _______________________________________________ kbuild mailing list -- kbuild@lists.01.org To unsubscribe send an email to kbuild-le...@lists.01.org