[Intel-wired-lan] [jkirsher-next-queue:dev-queue 91/96] drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c:278: undefined reference to `__udivdi3'

kbuild test robot lkp at intel.com
Fri Apr 12 04:32:20 UTC 2019


tree:   https://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/next-queue.git dev-queue
head:   fa4bbb7d289c73c9aaaf2cf4711c5b98c3f0df6b
commit: 04a54c8cd7959b55778a0a0b2ff6fe8600999ff3 [91/96] ixgbe: implement support for SDP/PPS output on X550 hardware
config: i386-randconfig-j0-201914 (attached as .config)
compiler: gcc-7 (Debian 7.3.0-1) 7.3.0
reproduce:
        git checkout 04a54c8cd7959b55778a0a0b2ff6fe8600999ff3
        # save the attached .config to linux build tree
        make ARCH=i386 

All errors (new ones prefixed by >>):

   drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.o: In function `ixgbe_ptp_setup_sdp_X550':
>> drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c:278: undefined reference to `__udivdi3'

vim +278 drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c

   226	
   227	/**
   228	 * ixgbe_ptp_setup_sdp_X550
   229	 * @adapter: private adapter structure
   230	 *
   231	 * Enable or disable a clock output signal on SDP 0 for X550 hardware.
   232	 *
   233	 * Use the target time feature to align the output signal on the next full
   234	 * second.
   235	 *
   236	 * This works by using the cycle counter shift and mult values in reverse, and
   237	 * assumes that the values we're shifting will not overflow.
   238	 */
   239	static void ixgbe_ptp_setup_sdp_X550(struct ixgbe_adapter *adapter)
   240	{
   241		struct cyclecounter *cc = &adapter->hw_cc;
   242		struct ixgbe_hw *hw = &adapter->hw;
   243		u32 esdp, tsauxc, freqout, trgttiml, trgttimh, rem, tssdp;
   244		u64 ns = 0, clock_edge = 0;
   245		struct timespec64 ts;
   246		unsigned long flags;
   247	
   248		/* disable the pin first */
   249		IXGBE_WRITE_REG(hw, IXGBE_TSAUXC, 0x0);
   250		IXGBE_WRITE_FLUSH(hw);
   251	
   252		if (!(adapter->flags2 & IXGBE_FLAG2_PTP_PPS_ENABLED))
   253			return;
   254	
   255		esdp = IXGBE_READ_REG(hw, IXGBE_ESDP);
   256	
   257		/* enable the SDP0 pin as output, and connected to the
   258		 * native function for Timesync (ClockOut)
   259		 */
   260		esdp |= IXGBE_ESDP_SDP0_DIR |
   261			IXGBE_ESDP_SDP0_NATIVE;
   262	
   263		/* enable the Clock Out feature on SDP0, and use Target Time 0 to
   264		 * enable generation of interrupts on the clock change.
   265		 */
   266	#define IXGBE_TSAUXC_DIS_TS_CLEAR 0x40000000
   267		tsauxc = (IXGBE_TSAUXC_EN_CLK | IXGBE_TSAUXC_ST0 |
   268			  IXGBE_TSAUXC_EN_TT0 | IXGBE_TSAUXC_SDP0_INT |
   269			  IXGBE_TSAUXC_DIS_TS_CLEAR);
   270	
   271		tssdp = (IXGBE_TSSDP_TS_SDP0_EN |
   272			 IXGBE_TSSDP_TS_SDP0_CLK0);
   273	
   274		/* Determine the clock time period to use. This assumes that the
   275		 * cycle counter shift is small enough to avoid overflowing a 32bit
   276		 * value.
   277		 */
 > 278		freqout = (NS_PER_HALF_SEC << cc->shift) / cc->mult;
   279	
   280		/* Read the current clock time, and save the cycle counter value */
   281		spin_lock_irqsave(&adapter->tmreg_lock, flags);
   282		ns = timecounter_read(&adapter->hw_tc);
   283		clock_edge = adapter->hw_tc.cycle_last;
   284		spin_unlock_irqrestore(&adapter->tmreg_lock, flags);
   285	
   286		/* Figure out how far past the next second we are */
   287		div_u64_rem(ns, NS_PER_SEC, &rem);
   288	
   289		/* Figure out how many nanoseconds to add to round the clock edge up
   290		 * to the next full second
   291		 */
   292		rem = (NS_PER_SEC - rem);
   293	
   294		/* Adjust the clock edge to align with the next full second. This
   295		 * assumes that the cycle counter shift is small enough to avoid
   296		 * overflowing when shifting the remainder.
   297		 */
   298		clock_edge += div_u64((rem << cc->shift), cc->mult);
   299	
   300		/* X550 hardware stores the time in 32bits of 'billions of cycles' and
   301		 * 32bits of 'cycles'. There's no guarantee that cycles represents
   302		 * nanoseconds. However, we can use the math from a timespec64 to
   303		 * convert into the hardware representation.
   304		 *
   305		 * See ixgbe_ptp_read_X550() for more details.
   306		 */
   307		ts = ns_to_timespec64(clock_edge);
   308		trgttiml = (u32)ts.tv_nsec;
   309		trgttimh = (u32)ts.tv_sec;
   310	
   311		IXGBE_WRITE_REG(hw, IXGBE_FREQOUT0, freqout);
   312		IXGBE_WRITE_REG(hw, IXGBE_TRGTTIML0, trgttiml);
   313		IXGBE_WRITE_REG(hw, IXGBE_TRGTTIMH0, trgttimh);
   314	
   315		IXGBE_WRITE_REG(hw, IXGBE_ESDP, esdp);
   316		IXGBE_WRITE_REG(hw, IXGBE_TSSDP, tssdp);
   317		IXGBE_WRITE_REG(hw, IXGBE_TSAUXC, tsauxc);
   318	
   319		IXGBE_WRITE_FLUSH(hw);
   320	}
   321	

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 30061 bytes
Desc: not available
URL: <http://lists.osuosl.org/pipermail/intel-wired-lan/attachments/20190412/2e71c634/attachment-0001.bin>


More information about the Intel-wired-lan mailing list