]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blob - releases/4.4.13/clk-bcm2835-divider-value-has-to-be-1-or-more.patch
4.9-stable patches
[thirdparty/kernel/stable-queue.git] / releases / 4.4.13 / clk-bcm2835-divider-value-has-to-be-1-or-more.patch
1 From 997f16bd5d2e9b3456027f96fcadfe1e2bf12f4e Mon Sep 17 00:00:00 2001
2 From: Martin Sperl <kernel@martin.sperl.org>
3 Date: Mon, 29 Feb 2016 11:39:20 +0000
4 Subject: clk: bcm2835: divider value has to be 1 or more
5
6 From: Martin Sperl <kernel@martin.sperl.org>
7
8 commit 997f16bd5d2e9b3456027f96fcadfe1e2bf12f4e upstream.
9
10 Current clamping of a normal divider allows a value < 1 to be valid.
11
12 A divider of < 1 would actually only be possible if we had a PLL...
13
14 So this patch clamps the divider to 1.
15
16 Fixes: 41691b8862e2 ("clk: bcm2835: Add support for programming the
17 audio domain clocks")
18
19 Signed-off-by: Martin Sperl <kernel@martin.sperl.org>
20 Signed-off-by: Eric Anholt <eric@anholt.net>
21 Reviewed-by: Eric Anholt <eric@anholt.net>
22 Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
23
24 ---
25 drivers/clk/bcm/clk-bcm2835.c | 5 +++--
26 1 file changed, 3 insertions(+), 2 deletions(-)
27
28 --- a/drivers/clk/bcm/clk-bcm2835.c
29 +++ b/drivers/clk/bcm/clk-bcm2835.c
30 @@ -1181,8 +1181,9 @@ static u32 bcm2835_clock_choose_div(stru
31 div &= ~unused_frac_mask;
32 }
33
34 - /* Clamp to the limits. */
35 - div = max(div, unused_frac_mask + 1);
36 + /* clamp to min divider of 1 */
37 + div = max_t(u32, div, 1 << CM_DIV_FRAC_BITS);
38 + /* clamp to the highest possible fractional divider */
39 div = min_t(u32, div, GENMASK(data->int_bits + CM_DIV_FRAC_BITS - 1,
40 CM_DIV_FRAC_BITS - data->frac_bits));
41