Message ID | 20240909112119.249479-1-arnd@kernel.org (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | can: rockchip_canfd: avoids 64-bit division | expand |
On 09.09.2024 11:21:04, Arnd Bergmann wrote: > From: Arnd Bergmann <arnd@arndb.de> > > The new driver fails to build on some 32-bit configurations: > > arm-linux-gnueabi-ld: drivers/net/can/rockchip/rockchip_canfd-timestamp.o: in function `rkcanfd_timestamp_init': > rockchip_canfd-timestamp.c:(.text+0x14a): undefined reference to `__aeabi_ldivmod' > > Rework the delay calculation to only require a single 64-bit > division. > > Fixes: 4e1a18bab124 ("can: rockchip_canfd: add hardware timestamping support") > Signed-off-by: Arnd Bergmann <arnd@arndb.de> I've already send a PR which replaces the division by div_u64(), so not as elaborate as yours: | https://lore.kernel.org/all/20240909-can-rockchip_canfd-fix-64-bit-division-v1-1-2748d9422b00@pengutronix.de/ I'll port your patch on top of mine and include it in my next PR. regards, Marc
diff --git a/drivers/net/can/rockchip/rockchip_canfd-timestamp.c b/drivers/net/can/rockchip/rockchip_canfd-timestamp.c index 81cccc5fd838..43d4b5721812 100644 --- a/drivers/net/can/rockchip/rockchip_canfd-timestamp.c +++ b/drivers/net/can/rockchip/rockchip_canfd-timestamp.c @@ -71,8 +71,8 @@ void rkcanfd_timestamp_init(struct rkcanfd_priv *priv) max_cycles = div_u64(ULLONG_MAX, cc->mult); max_cycles = min(max_cycles, cc->mask); - work_delay_ns = clocksource_cyc2ns(max_cycles, cc->mult, cc->shift) / 3; - priv->work_delay_jiffies = nsecs_to_jiffies(work_delay_ns); + work_delay_ns = clocksource_cyc2ns(max_cycles, cc->mult, cc->shift); + priv->work_delay_jiffies = div_u64(work_delay_ns, 3u * NSEC_PER_SEC / HZ); INIT_DELAYED_WORK(&priv->timestamp, rkcanfd_timestamp_work); netdev_dbg(priv->ndev, "clock=%lu.%02luMHz bitrate=%lu.%02luMBit/s div=%u rate=%lu.%02luMHz mult=%u shift=%u delay=%lus\n",