All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/8] clk: vc5: Prevent division by zero on unconfigured outputs
@ 2017-06-29 10:18 Marek Vasut
  2017-06-29 10:18 ` [PATCH 2/8] clk: vc5: Fix trivial typo Marek Vasut
                   ` (7 more replies)
  0 siblings, 8 replies; 17+ messages in thread
From: Marek Vasut @ 2017-06-29 10:18 UTC (permalink / raw)
  To: linux-clk
  Cc: Marek Vasut, Stephen Boyd, Alexey Firago, Michael Turquette,
	Laurent Pinchart, linux-renesas-soc

From: Marek Vasut <marek.vasut+renesas@gmail.com>

In case the initial values of the FOD registers are not configured in
the OTP or by the bootloader, it is possible that the FOD registers
will contain zeroes. The code in vc5_fod_recalc_rate() immediately
feeds the FOD divider value obtained from the FOD registers into the
div64_u64() and if the FOD divider value is zero, triggers division
by zero exception.

Check if the FOD divider value is zero and return the frequency of
the FOD output as 0 Hz if it is so. This prevents the division by
zero exception.

Signed-off-by: Marek Vasut <marek.vasut+renesas@gmail.com>
Cc: Stephen Boyd <sboyd@codeaurora.org>
Cc: Alexey Firago <alexey_firago@mentor.com>
Cc: Michael Turquette <mturquette@baylibre.com>
Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Cc: linux-renesas-soc@vger.kernel.org
---
 drivers/clk/clk-versaclock5.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/clk/clk-versaclock5.c b/drivers/clk/clk-versaclock5.c
index ea7d552a2f2b..60bf4afb51bd 100644
--- a/drivers/clk/clk-versaclock5.c
+++ b/drivers/clk/clk-versaclock5.c
@@ -426,6 +426,10 @@ static unsigned long vc5_fod_recalc_rate(struct clk_hw *hw,
 	div_frc = (od_frc[0] << 22) | (od_frc[1] << 14) |
 		  (od_frc[2] << 6) | (od_frc[3] >> 2);
 
+	/* Avoid division by zero if the output is not configured. */
+	if ((div_int == 0) && (div_frc == 0))
+		return 0;
+
 	/* The PLL divider has 12 integer bits and 30 fractional bits */
 	return div64_u64((u64)f_in << 24ULL, ((u64)div_int << 24ULL) + div_frc);
 }
-- 
2.11.0

^ permalink raw reply related	[flat|nested] 17+ messages in thread
* [PATCH 1/8] clk: vc5: Prevent division by zero on unconfigured outputs
@ 2017-07-01 20:04 Marek Vasut
  2017-07-01 20:04 ` [PATCH 4/8] clk: vc5: Configure the output buffer input mux on prepare Marek Vasut
  0 siblings, 1 reply; 17+ messages in thread
From: Marek Vasut @ 2017-07-01 20:04 UTC (permalink / raw)
  To: linux-clk
  Cc: Marek Vasut, Stephen Boyd, Alexey Firago, Michael Turquette,
	Laurent Pinchart, linux-renesas-soc

In case the initial values of the FOD registers are not configured in
the OTP or by the bootloader, it is possible that the FOD registers
will contain zeroes. The code in vc5_fod_recalc_rate() immediately
feeds the FOD divider value obtained from the FOD registers into the
div64_u64() and if the FOD divider value is zero, triggers division
by zero exception.

Check if the FOD divider value is zero and return the frequency of
the FOD output as 0 Hz if it is so. This prevents the division by
zero exception.

Signed-off-by: Marek Vasut <marek.vasut+renesas@gmail.com>
Cc: Stephen Boyd <sboyd@codeaurora.org>
Cc: Alexey Firago <alexey_firago@mentor.com>
Cc: Michael Turquette <mturquette@baylibre.com>
Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Cc: linux-renesas-soc@vger.kernel.org
Tested-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
on Salvator-XS with the display LVDS output.
---
 drivers/clk/clk-versaclock5.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/clk/clk-versaclock5.c b/drivers/clk/clk-versaclock5.c
index ea7d552a2f2b..60bf4afb51bd 100644
--- a/drivers/clk/clk-versaclock5.c
+++ b/drivers/clk/clk-versaclock5.c
@@ -426,6 +426,10 @@ static unsigned long vc5_fod_recalc_rate(struct clk_hw *hw,
 	div_frc = (od_frc[0] << 22) | (od_frc[1] << 14) |
 		  (od_frc[2] << 6) | (od_frc[3] >> 2);
 
+	/* Avoid division by zero if the output is not configured. */
+	if ((div_int == 0) && (div_frc == 0))
+		return 0;
+
 	/* The PLL divider has 12 integer bits and 30 fractional bits */
 	return div64_u64((u64)f_in << 24ULL, ((u64)div_int << 24ULL) + div_frc);
 }
-- 
2.11.0

^ permalink raw reply related	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2017-07-01 20:05 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-06-29 10:18 [PATCH 1/8] clk: vc5: Prevent division by zero on unconfigured outputs Marek Vasut
2017-06-29 10:18 ` [PATCH 2/8] clk: vc5: Fix trivial typo Marek Vasut
2017-06-29 10:18 ` [PATCH 3/8] clk: vc5: Do not warn about disabled output buffer input muxes Marek Vasut
2017-06-30 19:26   ` Stephen Boyd
2017-07-01 20:00     ` Marek Vasut
2017-06-29 10:18 ` [PATCH 4/8] clk: vc5: Configure the output buffer input mux on prepare Marek Vasut
2017-06-29 10:18 ` [PATCH 5/8] clk: vc5: Split clock input mux and predivider Marek Vasut
2017-06-29 10:18 ` [PATCH 6/8] clk: vc5: Add support for the input frequency doubler Marek Vasut
2017-06-29 10:18 ` [PATCH 7/8] clk: vc5: Add bindings for IDT VersaClock 5P49V6901 Marek Vasut
2017-06-29 11:38   ` Geert Uytterhoeven
2017-06-29 15:49     ` Marek Vasut
2017-06-29 16:27       ` Geert Uytterhoeven
2017-06-29 10:18 ` [PATCH 8/8] clk: vc5: Add support " Marek Vasut
2017-06-29 11:41   ` Geert Uytterhoeven
2017-06-29 15:54     ` Marek Vasut
2017-06-29 10:26 ` [PATCH 1/8] clk: vc5: Prevent division by zero on unconfigured outputs Laurent Pinchart
2017-07-01 20:04 Marek Vasut
2017-07-01 20:04 ` [PATCH 4/8] clk: vc5: Configure the output buffer input mux on prepare Marek Vasut

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.