[xlnx:master 58/146] drivers/clk/clk-xlnx-clock-wizard.c:184: undefined reference to `__udivdi3'
kernel test robot
lkp at intel.com
Mon Sep 21 12:04:57 EDT 2020
tree: https://github.com/Xilinx/linux-xlnx master
head: 3cb48250f25110e9aed4699c993e1b229e363402
commit: b271f193cc94e177383886cc00e3bc62a7c3ead7 [58/146] clk: clock-wizard: Use all stages of the MMCM
config: i386-randconfig-s002-20200921 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0
reproduce:
# apt-get install sparse
# sparse version: v0.6.2-201-g24bdaac6-dirty
git checkout b271f193cc94e177383886cc00e3bc62a7c3ead7
# save the attached .config to linux build tree
make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=i386
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp at intel.com>
All errors (new ones prefixed by >>):
ld: drivers/clk/clk-xlnx-clock-wizard.o: in function `clk_wzrd_calc_hints':
>> drivers/clk/clk-xlnx-clock-wizard.c:184: undefined reference to `__udivdi3'
>> ld: drivers/clk/clk-xlnx-clock-wizard.c:186: undefined reference to `__udivdi3'
ld: drivers/clk/clk-xlnx-clock-wizard.c:207: undefined reference to `__udivdi3'
ld: drivers/clk/clk-xlnx-clock-wizard.c:198: undefined reference to `__udivdi3'
# https://github.com/Xilinx/linux-xlnx/commit/b271f193cc94e177383886cc00e3bc62a7c3ead7
git remote add xlnx https://github.com/Xilinx/linux-xlnx
git fetch --no-tags xlnx master
git checkout b271f193cc94e177383886cc00e3bc62a7c3ead7
vim +184 drivers/clk/clk-xlnx-clock-wizard.c
150
151 /*
152 * This is where all the magic happens. For arbitrary frequency generation
153 * applications all of the knobs for adjusting the frequency must be
154 * considered together. Nothing is set in this function we just provide
155 * hints for use by the actual set_rate functions. If things don't match
156 * up the hints can always be ignored
157 */
158 static void clk_wzrd_calc_hints(struct clk_wzrd *clk_wzrd, unsigned long rate,
159 unsigned long in_rate)
160 {
161 int i, j;
162
163 unsigned int divclk_divide_max, divclk_divide_max_calc;
164 unsigned int clkbout_min, clkbout_max;
165 unsigned int clkout_divide = 1;
166 unsigned int best_divclk = 1;
167 unsigned int best_clkfbout_mult_f = 1;
168 unsigned int best_clkout_divide = 1;
169 unsigned int best_out_freq = 1;
170 u64 vco_freq, best_vco_freq = 1;
171 u64 out_freq = 1;
172 u64 error;
173 u64 min_error = 100000000000;
174
175 clk_wzrd->hints.valid_rate = false;
176
177 divclk_divide_max_calc = in_rate / MIN_IN_FREQ;
178 divclk_divide_max = min(DIVCLK_DIVIDE_MAX,
179 divclk_divide_max_calc);
180
181 /* First go through all possible DIVCLK_DIVIDE values */
182 for (i = 1; i <= divclk_divide_max; i++) {
183 /* 8*125 is x1000 */
> 184 clkbout_min = DIV_ROUND_UP(MIN_VCO_FREQ * i * 8, in_rate) *
185 125;
> 186 clkbout_max = (MAX_VCO_FREQ * i * 8 / in_rate) * 125;
187 clkbout_min = max(CLKFBOUT_MULT_F_MIN, clkbout_min);
188 clkbout_max = min(CLKFBOUT_MULT_F_MAX, clkbout_max);
189 /* Second go through all CLKFBOUT_MULT values */
190 for (j = clkbout_min; j <= clkbout_max; j += 125) {
191 vco_freq = in_rate * j / i;
192 /*
193 * Finally calculate out the CLKOUT_DIVIDE
194 * there is no need to iterate here
195 * just calculate the closest
196 */
197 clkout_divide =
198 DIV_ROUND_CLOSEST(vco_freq,
199 (u64)rate * 125) * 125;
200 clkout_divide = clamp(clkout_divide,
201 CLKOUT_DIVIDE_F_MIN,
202 CLKOUT_DIVIDE_F_MAX);
203 out_freq = in_rate * j / i / clkout_divide;
204 error = abs(rate - out_freq);
205 if (error < min_error) {
206 min_error = error;
207 best_vco_freq = vco_freq / 1000;
208 best_out_freq = out_freq;
209 best_divclk = i;
210 best_clkfbout_mult_f = j;
211 best_clkout_divide = clkout_divide;
212 }
213 }
214 }
215
216 clk_wzrd->hints.req_rate = rate;
217 clk_wzrd->hints.vco_rate = best_vco_freq;
218 clk_wzrd->hints.div_rate = in_rate / best_divclk;
219 clk_wzrd->hints.best_rate = best_out_freq;
220 clk_wzrd->hints.divclk_divide = best_divclk;
221 clk_wzrd->hints.clkfbout_mult_f = best_clkfbout_mult_f;
222 clk_wzrd->hints.clkout_divide = best_clkout_divide;
223 clk_wzrd->hints.valid_rate = true;
224
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 35501 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20200922/df0b6569/attachment-0001.gz>
More information about the linux-arm-kernel
mailing list