diff mbox series

[1/1] k210: fix k210_pll_calc_config()

Message ID 20221016071035.461454-1-heinrich.schuchardt@canonical.com
State Superseded, archived
Headers show
Series [1/1] k210: fix k210_pll_calc_config() | expand

Commit Message

Heinrich Schuchardt Oct. 16, 2022, 7:10 a.m. UTC
The k210 driver is selected by sandbox_defconfig.
Building the sandbox on 32bit systems fails with:

test/dm/k210_pll.c: In function ‘dm_test_k210_pll_calc_config’:
include/linux/bitops.h:11:38: warning:
left shift count >= width of type [-Wshift-count-overflow]
   11 | #define BIT(nr)         (1UL << (nr))
      |                              ^~
test/dm/k210_pll.c:36:54: note: in expansion of macro ‘BIT’
   36 |                         error = abs((error - BIT(32))) >> 16;
      |                                              ^~~

Use the BIT_ULL() macro to create a u64 value.

Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
---
 drivers/clk/clk_k210.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Heinrich Schuchardt Oct. 16, 2022, 12:22 p.m. UTC | #1
On 10/16/22 09:10, Heinrich Schuchardt wrote:
> The k210 driver is selected by sandbox_defconfig.
> Building the sandbox on 32bit systems fails with:
> 
> test/dm/k210_pll.c: In function ‘dm_test_k210_pll_calc_config’:
> include/linux/bitops.h:11:38: warning:
> left shift count >= width of type [-Wshift-count-overflow]
>     11 | #define BIT(nr)         (1UL << (nr))
>        |                              ^~
> test/dm/k210_pll.c:36:54: note: in expansion of macro ‘BIT’
>     36 |                         error = abs((error - BIT(32))) >> 16;
>        |                                              ^~~
> 
> Use the BIT_ULL() macro to create a u64 value.
> 
> Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
> ---
>   drivers/clk/clk_k210.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/clk/clk_k210.c b/drivers/clk/clk_k210.c
> index 1961efaa5e..89195bdda6 100644
> --- a/drivers/clk/clk_k210.c
> +++ b/drivers/clk/clk_k210.c
> @@ -846,7 +846,7 @@ again:
>   
>   		error = DIV_ROUND_CLOSEST_ULL(f * inv_ratio, r * od);
>   		/* The lower 16 bits are spurious */
> -		error = abs((error - BIT(32))) >> 16;
> +		error = abs((error - BIT_ULL(32))) >> 16;

To get correct results on 32bit systems we must use abs64() instead of 
abs(). There is also a unit test to fix.

See review comments in
https://lists.denx.de/pipermail/u-boot/2022-October/497373.html

Best regards

Heinrich

>   
>   		if (error < best_error) {
>   			best->r = r;
diff mbox series

Patch

diff --git a/drivers/clk/clk_k210.c b/drivers/clk/clk_k210.c
index 1961efaa5e..89195bdda6 100644
--- a/drivers/clk/clk_k210.c
+++ b/drivers/clk/clk_k210.c
@@ -846,7 +846,7 @@  again:
 
 		error = DIV_ROUND_CLOSEST_ULL(f * inv_ratio, r * od);
 		/* The lower 16 bits are spurious */
-		error = abs((error - BIT(32))) >> 16;
+		error = abs((error - BIT_ULL(32))) >> 16;
 
 		if (error < best_error) {
 			best->r = r;