diff mbox

[U-Boot] bugfix i.mx6 pwm: prevent overflow of period_c * duty_ns

Message ID 1430899068-57264-1-git-send-email-bnrn@psicontrol.com
State Awaiting Upstream
Delegated to: Stefano Babic
Headers show

Commit Message

Brecht Neyrinck May 6, 2015, 7:57 a.m. UTC
Prevent overflow by casting duty_ns to ull first. This bug came up when trying to create a 200 Hz PWM

Signed-off-by: Brecht Neyrinck <bnrn@psicontrol.com>
---
 drivers/pwm/pwm-imx-util.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Heiko Schocher May 6, 2015, 8:14 a.m. UTC | #1
Hello Brecht Neyrinck,

Am 06.05.2015 09:57, schrieb Brecht Neyrinck:
> Prevent overflow by casting duty_ns to ull first. This bug came up when trying to create a 200 Hz PWM
>
> Signed-off-by: Brecht Neyrinck <bnrn@psicontrol.com>
> ---
>   drivers/pwm/pwm-imx-util.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)

Thanks!

Acked-by: Heiko Schocher<hs@denx.de>

bye,
Heiko
Stefano Babic May 15, 2015, 8:06 a.m. UTC | #2
On 06/05/2015 09:57, Brecht Neyrinck wrote:
> Prevent overflow by casting duty_ns to ull first. This bug came up when trying to create a 200 Hz PWM
> 
> Signed-off-by: Brecht Neyrinck <bnrn@psicontrol.com>
> ---
>  drivers/pwm/pwm-imx-util.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/pwm/pwm-imx-util.c b/drivers/pwm/pwm-imx-util.c
> index f1d0b35..79d86028 100644
> --- a/drivers/pwm/pwm-imx-util.c
> +++ b/drivers/pwm/pwm-imx-util.c
> @@ -56,7 +56,7 @@ int pwm_imx_get_parms(int period_ns, int duty_ns, unsigned long *period_c,
>  	*prescale = *period_c / 0x10000 + 1;
>  
>  	*period_c /= *prescale;
> -	c = (unsigned long long)(*period_c * duty_ns);
> +	c = *period_c * (unsigned long long)duty_ns;
>  	do_div(c, period_ns);
>  	*duty_c = c;
>  

Applied to u-boot-imx, thanks !

Best regards,
Stefano Babic
diff mbox

Patch

diff --git a/drivers/pwm/pwm-imx-util.c b/drivers/pwm/pwm-imx-util.c
index f1d0b35..79d86028 100644
--- a/drivers/pwm/pwm-imx-util.c
+++ b/drivers/pwm/pwm-imx-util.c
@@ -56,7 +56,7 @@  int pwm_imx_get_parms(int period_ns, int duty_ns, unsigned long *period_c,
 	*prescale = *period_c / 0x10000 + 1;
 
 	*period_c /= *prescale;
-	c = (unsigned long long)(*period_c * duty_ns);
+	c = *period_c * (unsigned long long)duty_ns;
 	do_div(c, period_ns);
 	*duty_c = c;