clk: Compute masks for fractional_divider clk when needed.
authorChristophe JAILLET <christophe.jaillet@wanadoo.fr>
Sun, 2 Apr 2023 09:42:04 +0000 (11:42 +0200)
committerStephen Boyd <sboyd@kernel.org>
Wed, 5 Apr 2023 19:09:26 +0000 (12:09 -0700)
There is no real need to pre-compute mmask and nmask when handling
fractional_divider clk.

They can be computed when needed.

Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Link: https://lore.kernel.org/r/0fd6357242c974259c9e034c6e28a0391c480bf0.1680423909.git.christophe.jaillet@wanadoo.fr
Reviewed-by: Heiko Stuebner <heiko@sntech.de>
Signed-off-by: Stephen Boyd <sboyd@kernel.org>
drivers/clk/clk-fractional-divider.c

index 6affe35..4792977 100644 (file)
@@ -71,6 +71,7 @@ static void clk_fd_get_div(struct clk_hw *hw, struct u32_fract *fract)
        struct clk_fractional_divider *fd = to_clk_fd(hw);
        unsigned long flags = 0;
        unsigned long m, n;
+       u32 mmask, nmask;
        u32 val;
 
        if (fd->lock)
@@ -85,8 +86,11 @@ static void clk_fd_get_div(struct clk_hw *hw, struct u32_fract *fract)
        else
                __release(fd->lock);
 
-       m = (val & fd->mmask) >> fd->mshift;
-       n = (val & fd->nmask) >> fd->nshift;
+       mmask = GENMASK(fd->mwidth - 1, 0) << fd->mshift;
+       nmask = GENMASK(fd->nwidth - 1, 0) << fd->nshift;
+
+       m = (val & mmask) >> fd->mshift;
+       n = (val & nmask) >> fd->nshift;
 
        if (fd->flags & CLK_FRAC_DIVIDER_ZERO_BASED) {
                m++;
@@ -166,6 +170,7 @@ static int clk_fd_set_rate(struct clk_hw *hw, unsigned long rate,
        struct clk_fractional_divider *fd = to_clk_fd(hw);
        unsigned long flags = 0;
        unsigned long m, n;
+       u32 mmask, nmask;
        u32 val;
 
        rational_best_approximation(rate, parent_rate,
@@ -182,8 +187,11 @@ static int clk_fd_set_rate(struct clk_hw *hw, unsigned long rate,
        else
                __acquire(fd->lock);
 
+       mmask = GENMASK(fd->mwidth - 1, 0) << fd->mshift;
+       nmask = GENMASK(fd->nwidth - 1, 0) << fd->nshift;
+
        val = clk_fd_readl(fd);
-       val &= ~(fd->mmask | fd->nmask);
+       val &= ~(mmask | nmask);
        val |= (m << fd->mshift) | (n << fd->nshift);
        clk_fd_writel(fd, val);
 
@@ -260,10 +268,8 @@ struct clk_hw *clk_hw_register_fractional_divider(struct device *dev,
        fd->reg = reg;
        fd->mshift = mshift;
        fd->mwidth = mwidth;
-       fd->mmask = GENMASK(mwidth - 1, 0) << mshift;
        fd->nshift = nshift;
        fd->nwidth = nwidth;
-       fd->nmask = GENMASK(nwidth - 1, 0) << nshift;
        fd->flags = clk_divider_flags;
        fd->lock = lock;
        fd->hw.init = &init;