From: Quanyang Wang <quanyang.w...@windriver.com> 64-bit division "(u64 A) / (u32 B)" will break linking on ARCH arm:
rm-linux-gnueabihf-ld: drivers/rtc/rtc-zynqmp.o: in function `xlnx_rtc_read_offset': rtc-zynqmp.c:(.text+0x48): undefined reference to `__aeabi_ldivmod' Fix this by using do_div. Signed-off-by: Quanyang Wang <quanyang.w...@windriver.com> --- drivers/rtc/rtc-zynqmp.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/rtc/rtc-zynqmp.c b/drivers/rtc/rtc-zynqmp.c index 0f0edbeec7cf9..6412179f5b223 100644 --- a/drivers/rtc/rtc-zynqmp.c +++ b/drivers/rtc/rtc-zynqmp.c @@ -193,9 +193,10 @@ static void xlnx_init_rtc(struct xlnx_rtc_dev *xrtcdev) static int xlnx_rtc_read_offset(struct device *dev, long *offset) { struct xlnx_rtc_dev *xrtcdev = dev_get_drvdata(dev); + unsigned long long rtc_ppb = RTC_PPB; long offset_val; unsigned int reg; - unsigned int tick_mult = RTC_PPB / xrtcdev->calibval; + unsigned int tick_mult = do_div(rtc_ppb, xrtcdev->calibval); reg = readl(xrtcdev->reg_base + RTC_CALIB_RD); @@ -216,11 +217,12 @@ static int xlnx_rtc_read_offset(struct device *dev, long *offset) static int xlnx_rtc_set_offset(struct device *dev, long offset) { struct xlnx_rtc_dev *xrtcdev = dev_get_drvdata(dev); + unsigned long long rtc_ppb = RTC_PPB; short int max_tick; unsigned char fract_tick = 0; unsigned int calibval; int fract_offset; - unsigned int tick_mult = RTC_PPB / xrtcdev->calibval; + unsigned int tick_mult = do_div(rtc_ppb, xrtcdev->calibval); /* Make sure offset value is within supported range */ if (offset < RTC_OFFSET_MIN || offset > RTC_OFFSET_MAX) -- 2.25.1
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#10102): https://lists.yoctoproject.org/g/linux-yocto/message/10102 Mute This Topic: https://lists.yoctoproject.org/mt/84148461/21656 Group Owner: linux-yocto+ow...@lists.yoctoproject.org Unsubscribe: https://lists.yoctoproject.org/g/linux-yocto/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-