clk: sunxi-ng: nkmp: Add constraint for maximum rate
authorJernej Skrabec <jernej.skrabec@siol.net>
Thu, 9 Aug 2018 16:52:16 +0000 (18:52 +0200)
committerMaxime Ripard <maxime.ripard@bootlin.com>
Mon, 27 Aug 2018 07:18:10 +0000 (09:18 +0200)
Some, if not most, NKMP PLLs can be set to higher rate that is really
supported by HW.

Implement support for maximum frequency constrain for NKMP PLLs.

Signed-off-by: Jernej Skrabec <jernej.skrabec@siol.net>
Signed-off-by: Maxime Ripard <maxime.ripard@bootlin.com>
drivers/clk/sunxi-ng/ccu_nkmp.c
drivers/clk/sunxi-ng/ccu_nkmp.h

index ebd9436d2c7cd382ed86a3bee1957a5db48b7530..9b49adb20d07c68ef8ddd01f8d35e73ed746f64f 100644 (file)
@@ -137,6 +137,13 @@ static long ccu_nkmp_round_rate(struct clk_hw *hw, unsigned long rate,
        if (nkmp->common.features & CCU_FEATURE_FIXED_POSTDIV)
                rate *= nkmp->fixed_post_div;
 
+       if (nkmp->max_rate && rate > nkmp->max_rate) {
+               rate = nkmp->max_rate;
+               if (nkmp->common.features & CCU_FEATURE_FIXED_POSTDIV)
+                       rate /= nkmp->fixed_post_div;
+               return rate;
+       }
+
        _nkmp.min_n = nkmp->n.min ?: 1;
        _nkmp.max_n = nkmp->n.max ?: 1 << nkmp->n.width;
        _nkmp.min_k = nkmp->k.min ?: 1;
index 6940503e7fc4665d36fd889e3ec25fa258a14f40..a9f8c116a7453b969019dfda27c4b340604e35dc 100644 (file)
@@ -35,6 +35,7 @@ struct ccu_nkmp {
        struct ccu_div_internal         p;
 
        unsigned int            fixed_post_div;
+       unsigned int            max_rate;
 
        struct ccu_common       common;
 };