[PATCH] media: amlogic: c3-mipi-csi2: Handle 64-bits division

Jacopo Mondi posted 1 patch 9 months ago
drivers/media/platform/amlogic/c3/mipi-csi2/c3-mipi-csi2.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
[PATCH] media: amlogic: c3-mipi-csi2: Handle 64-bits division
Posted by Jacopo Mondi 9 months ago
The kernel test robot reports the following error when building on
Hexagon with hexagon-allmodconfig.

ERROR: modpost: "__hexagon_divdi3"
[drivers/media/platform/amlogic/c3/mipi-csi2/c3-mipi-csi2.ko] undefined!

The error is caused by using DIV_ROUND_UP() with a 64 bits divisor with
a 32-bit dividend, which on Hexagon and clang-17 is resolved with a call
to the __hexagon_divdi3() helper function, part of the compiler support
library and not available when building Linux.

Use DIV_ROUND_UP_ULL() to fix the build error and avoid calling the
__hexagon_divdi3() helper function.

Reported-by: kernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202505101334.UHxNcUUO-lkp@intel.com/
Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
---
Hi Hans,
   this should likely be fast-tracked to land in v6.16 with the Amlogic
C3 ISP support.

Thanks
---
 drivers/media/platform/amlogic/c3/mipi-csi2/c3-mipi-csi2.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/media/platform/amlogic/c3/mipi-csi2/c3-mipi-csi2.c b/drivers/media/platform/amlogic/c3/mipi-csi2/c3-mipi-csi2.c
index f92815ffa4ae..1011ab3ebac7 100644
--- a/drivers/media/platform/amlogic/c3/mipi-csi2/c3-mipi-csi2.c
+++ b/drivers/media/platform/amlogic/c3/mipi-csi2/c3-mipi-csi2.c
@@ -5,6 +5,7 @@
 
 #include <linux/clk.h>
 #include <linux/device.h>
+#include <linux/math.h>
 #include <linux/module.h>
 #include <linux/mutex.h>
 #include <linux/platform_device.h>
@@ -321,7 +322,7 @@ static void c3_mipi_csi_cfg_dphy(struct c3_csi_device *csi, s64 rate)
 	u32 settle;
 
 	/* Calculate the high speed settle */
-	val = DIV_ROUND_UP(1000000000, rate);
+	val = DIV_ROUND_UP_ULL(1000000000, rate);
 	settle = (16 * val + 230) / 10;
 
 	c3_mipi_csi_write(csi, MIPI_PHY_CLK_LANE_CTRL,

---
base-commit: 3328eb4dfec23cb3055cda24087cd1cdee925676
change-id: 20250510-amlogic-div64-div-6d0d5a6ec566

Best regards,
-- 
Jacopo Mondi <jacopo.mondi@ideasonboard.com>
Re: [PATCH] media: amlogic: c3-mipi-csi2: Handle 64-bits division
Posted by Keke Li 9 months ago
Hi Jacopo

Thanks for your patch.

On 2025/5/10 16:48, Jacopo Mondi wrote:
> [ EXTERNAL EMAIL ]
>
> The kernel test robot reports the following error when building on
> Hexagon with hexagon-allmodconfig.
>
> ERROR: modpost: "__hexagon_divdi3"
> [drivers/media/platform/amlogic/c3/mipi-csi2/c3-mipi-csi2.ko] undefined!
>
> The error is caused by using DIV_ROUND_UP() with a 64 bits divisor with
> a 32-bit dividend, which on Hexagon and clang-17 is resolved with a call
> to the __hexagon_divdi3() helper function, part of the compiler support
> library and not available when building Linux.
>
> Use DIV_ROUND_UP_ULL() to fix the build error and avoid calling the
> __hexagon_divdi3() helper function.
>
> Reported-by: kernel test robot <lkp@intel.com>
> Closes: https://lore.kernel.org/oe-kbuild-all/202505101334.UHxNcUUO-lkp@intel.com/
> Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>


I agree with you.


Reviewed-by: Keke Li <keke.li@amlogic.com>

> ---
> Hi Hans,
>     this should likely be fast-tracked to land in v6.16 with the Amlogic
> C3 ISP support.
>
> Thanks
> ---
>   drivers/media/platform/amlogic/c3/mipi-csi2/c3-mipi-csi2.c | 3 ++-
>   1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/media/platform/amlogic/c3/mipi-csi2/c3-mipi-csi2.c b/drivers/media/platform/amlogic/c3/mipi-csi2/c3-mipi-csi2.c
> index f92815ffa4ae..1011ab3ebac7 100644
> --- a/drivers/media/platform/amlogic/c3/mipi-csi2/c3-mipi-csi2.c
> +++ b/drivers/media/platform/amlogic/c3/mipi-csi2/c3-mipi-csi2.c
> @@ -5,6 +5,7 @@
>
>   #include <linux/clk.h>
>   #include <linux/device.h>
> +#include <linux/math.h>
>   #include <linux/module.h>
>   #include <linux/mutex.h>
>   #include <linux/platform_device.h>
> @@ -321,7 +322,7 @@ static void c3_mipi_csi_cfg_dphy(struct c3_csi_device *csi, s64 rate)
>          u32 settle;
>
>          /* Calculate the high speed settle */
> -       val = DIV_ROUND_UP(1000000000, rate);
> +       val = DIV_ROUND_UP_ULL(1000000000, rate);
>          settle = (16 * val + 230) / 10;
>
>          c3_mipi_csi_write(csi, MIPI_PHY_CLK_LANE_CTRL,
>
> ---
> base-commit: 3328eb4dfec23cb3055cda24087cd1cdee925676
> change-id: 20250510-amlogic-div64-div-6d0d5a6ec566
>
> Best regards,
> --
> Jacopo Mondi <jacopo.mondi@ideasonboard.com>
>