Re: [PATCH] pwm: bcm-iproc: handle clk_get_rate() return
On 2020-07-17 10:22 a.m., Ray Jui wrote: On 7/17/2020 10:07 AM, Scott Branden wrote: From: Rayagonda Kokatanur Handle clk_get_rate() returning <= 0 condition to avoid possible division by zero. Fixes: daa5abc41c80 ("pwm: Add support for Broadcom iProc PWM controller") Signed-off-by: Rayagonda Kokatanur Signed-off-by: Scott Branden --- drivers/pwm/pwm-bcm-iproc.c | 5 + 1 file changed, 5 insertions(+) diff --git a/drivers/pwm/pwm-bcm-iproc.c b/drivers/pwm/pwm-bcm-iproc.c index 1f829edd8ee7..72a8607b6c8d 100644 --- a/drivers/pwm/pwm-bcm-iproc.c +++ b/drivers/pwm/pwm-bcm-iproc.c @@ -86,6 +86,11 @@ static void iproc_pwmc_get_state(struct pwm_chip *chip, struct pwm_device *pwm, u32 value, prescale; rate = clk_get_rate(ip->clk); + if (rate == 0) { + state->period = 0; + state->duty_cycle = 0; + return; + } I'll move the logic after the polarity and enabled fields are populated. Based on the pwm core code, 'get_state' expects the following fields to be populated: 'polarity', 'enabled', 'period', and 'duty cycle'. The above logic will leave 'polarity' and 'enabled' completely unpopulated when clock rate is zero. value = readl(ip->base + IPROC_PWM_CTRL_OFFSET);
Re: [PATCH] pwm: bcm-iproc: handle clk_get_rate() return
On 7/17/2020 10:07 AM, Scott Branden wrote: > From: Rayagonda Kokatanur > > Handle clk_get_rate() returning <= 0 condition to avoid > possible division by zero. > > Fixes: daa5abc41c80 ("pwm: Add support for Broadcom iProc PWM controller") > Signed-off-by: Rayagonda Kokatanur > Signed-off-by: Scott Branden > --- > drivers/pwm/pwm-bcm-iproc.c | 5 + > 1 file changed, 5 insertions(+) > > diff --git a/drivers/pwm/pwm-bcm-iproc.c b/drivers/pwm/pwm-bcm-iproc.c > index 1f829edd8ee7..72a8607b6c8d 100644 > --- a/drivers/pwm/pwm-bcm-iproc.c > +++ b/drivers/pwm/pwm-bcm-iproc.c > @@ -86,6 +86,11 @@ static void iproc_pwmc_get_state(struct pwm_chip *chip, > struct pwm_device *pwm, > u32 value, prescale; > > rate = clk_get_rate(ip->clk); > + if (rate == 0) { > + state->period = 0; > + state->duty_cycle = 0; > + return; > + } Based on the pwm core code, 'get_state' expects the following fields to be populated: 'polarity', 'enabled', 'period', and 'duty cycle'. The above logic will leave 'polarity' and 'enabled' completely unpopulated when clock rate is zero. > > value = readl(ip->base + IPROC_PWM_CTRL_OFFSET); > >
[PATCH] pwm: bcm-iproc: handle clk_get_rate() return
From: Rayagonda Kokatanur Handle clk_get_rate() returning <= 0 condition to avoid possible division by zero. Fixes: daa5abc41c80 ("pwm: Add support for Broadcom iProc PWM controller") Signed-off-by: Rayagonda Kokatanur Signed-off-by: Scott Branden --- drivers/pwm/pwm-bcm-iproc.c | 5 + 1 file changed, 5 insertions(+) diff --git a/drivers/pwm/pwm-bcm-iproc.c b/drivers/pwm/pwm-bcm-iproc.c index 1f829edd8ee7..72a8607b6c8d 100644 --- a/drivers/pwm/pwm-bcm-iproc.c +++ b/drivers/pwm/pwm-bcm-iproc.c @@ -86,6 +86,11 @@ static void iproc_pwmc_get_state(struct pwm_chip *chip, struct pwm_device *pwm, u32 value, prescale; rate = clk_get_rate(ip->clk); + if (rate == 0) { + state->period = 0; + state->duty_cycle = 0; + return; + } value = readl(ip->base + IPROC_PWM_CTRL_OFFSET); -- 2.17.1