[PATCH 1/7] wdt: dw: Switch to using fls for log2

Heinrich Schuchardt
2020-08-05T21:06:55Z

On 8/5/20 9:14 PM, Sean Anderson wrote:
> log_2_n_round_up is only found in arm. fls performs the same job and is
> generic.
>
> Signed-off-by: Sean Anderson <seanga2@gmail.com>
> ---
>
> drivers/watchdog/designware_wdt.c | 3 +--
> 1 file changed, 1 insertion(+), 2 deletions(-)
>
> diff --git a/drivers/watchdog/designware_wdt.c b/drivers/watchdog/designware_wdt.c
> index 12f09a7a39..5684acefd2 100644
> --- a/drivers/watchdog/designware_wdt.c
> +++ b/drivers/watchdog/designware_wdt.c
> @@ -9,7 +9,6 @@
> #include <reset.h>
> #include <wdt.h>
> #include <asm/io.h>
> -#include <asm/utils.h>
> #include <linux/bitops.h>
>
> #define DW_WDT_CR 0x00
> @@ -35,7 +34,7 @@ static int designware_wdt_settimeout(void __iomem *base, unsigned int clk_khz,
> signed int i;
>
> /* calculate the timeout range value */
> - i = log_2_n_round_up(timeout * clk_khz) - 16;
> + i = fls(timeout * clk_khz) - 16;

The two functions create different results:

generic_fls(15) = 4, log_2_n_round_up(15) = 4
generic_fls(16) = 5, log_2_n_round_up(16) = 4
generic_fls(17) = 5, log_2_n_round_up(17) = 5

Please, describe the effect of your change in the commit message.

Best regards

Heinrich

> i = clamp(i, 0, 15);
>
> writel(i | (i << 4), base + DW_WDT_TORR);
>