Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

clk: mmp: Switch to use struct u32_fract instead of custom one

The struct mmp_clk_factor_tbl repeats the generic struct u32_fract.
Kill the custom one and use the generic one instead.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Tested-by: Duje Mihanović <duje.mihanovic@skole.hr>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Reviewed-by: Stephen Boyd <sboyd@kernel.org>
Signed-off-by: Duje Mihanović <duje.mihanovic@skole.hr>
Link: https://lore.kernel.org/r/20241104-pxa1908-lkml-v13-1-e050609b8d6c@skole.hr
Signed-off-by: Stephen Boyd <sboyd@kernel.org>

authored by

Andy Shevchenko and committed by
Stephen Boyd
4d6da823 9852d85e

+51 -56
+28 -29
drivers/clk/mmp/clk-frac.c
··· 26 26 { 27 27 struct mmp_clk_factor *factor = to_clk_factor(hw); 28 28 u64 rate = 0, prev_rate; 29 + struct u32_fract *d; 29 30 int i; 30 31 31 32 for (i = 0; i < factor->ftbl_cnt; i++) { 32 - prev_rate = rate; 33 - rate = *prate; 34 - rate *= factor->ftbl[i].den; 35 - do_div(rate, factor->ftbl[i].num * factor->masks->factor); 33 + d = &factor->ftbl[i]; 36 34 35 + prev_rate = rate; 36 + rate = (u64)(*prate) * d->denominator; 37 + do_div(rate, d->numerator * factor->masks->factor); 37 38 if (rate > drate) 38 39 break; 39 40 } ··· 53 52 { 54 53 struct mmp_clk_factor *factor = to_clk_factor(hw); 55 54 struct mmp_clk_factor_masks *masks = factor->masks; 56 - unsigned int val, num, den; 55 + struct u32_fract d; 56 + unsigned int val; 57 57 u64 rate; 58 58 59 59 val = readl_relaxed(factor->base); 60 60 61 61 /* calculate numerator */ 62 - num = (val >> masks->num_shift) & masks->num_mask; 62 + d.numerator = (val >> masks->num_shift) & masks->num_mask; 63 63 64 64 /* calculate denominator */ 65 - den = (val >> masks->den_shift) & masks->den_mask; 66 - 67 - if (!den) 65 + d.denominator = (val >> masks->den_shift) & masks->den_mask; 66 + if (!d.denominator) 68 67 return 0; 69 68 70 - rate = parent_rate; 71 - rate *= den; 72 - do_div(rate, num * factor->masks->factor); 69 + rate = (u64)parent_rate * d.denominator; 70 + do_div(rate, d.numerator * factor->masks->factor); 73 71 74 72 return rate; 75 73 } ··· 82 82 int i; 83 83 unsigned long val; 84 84 unsigned long flags = 0; 85 + struct u32_fract *d; 85 86 u64 rate = 0; 86 87 87 88 for (i = 0; i < factor->ftbl_cnt; i++) { 88 - rate = prate; 89 - rate *= factor->ftbl[i].den; 90 - do_div(rate, factor->ftbl[i].num * factor->masks->factor); 89 + d = &factor->ftbl[i]; 91 90 91 + rate = (u64)prate * d->denominator; 92 + do_div(rate, d->numerator * factor->masks->factor); 92 93 if (rate > drate) 93 94 break; 94 95 } 95 - if (i > 0) 96 - i--; 96 + d = i ? &factor->ftbl[i - 1] : &factor->ftbl[0]; 97 97 98 98 if (factor->lock) 99 99 spin_lock_irqsave(factor->lock, flags); ··· 101 101 val = readl_relaxed(factor->base); 102 102 103 103 val &= ~(masks->num_mask << masks->num_shift); 104 - val |= (factor->ftbl[i].num & masks->num_mask) << masks->num_shift; 104 + val |= (d->numerator & masks->num_mask) << masks->num_shift; 105 105 106 106 val &= ~(masks->den_mask << masks->den_shift); 107 - val |= (factor->ftbl[i].den & masks->den_mask) << masks->den_shift; 107 + val |= (d->denominator & masks->den_mask) << masks->den_shift; 108 108 109 109 writel_relaxed(val, factor->base); 110 110 ··· 118 118 { 119 119 struct mmp_clk_factor *factor = to_clk_factor(hw); 120 120 struct mmp_clk_factor_masks *masks = factor->masks; 121 - u32 val, num, den; 121 + struct u32_fract d; 122 + u32 val; 122 123 int i; 123 124 unsigned long flags = 0; 124 125 ··· 129 128 val = readl(factor->base); 130 129 131 130 /* calculate numerator */ 132 - num = (val >> masks->num_shift) & masks->num_mask; 131 + d.numerator = (val >> masks->num_shift) & masks->num_mask; 133 132 134 133 /* calculate denominator */ 135 - den = (val >> masks->den_shift) & masks->den_mask; 134 + d.denominator = (val >> masks->den_shift) & masks->den_mask; 136 135 137 136 for (i = 0; i < factor->ftbl_cnt; i++) 138 - if (den == factor->ftbl[i].den && num == factor->ftbl[i].num) 137 + if (d.denominator == factor->ftbl[i].denominator && 138 + d.numerator == factor->ftbl[i].numerator) 139 139 break; 140 140 141 141 if (i >= factor->ftbl_cnt) { 142 142 val &= ~(masks->num_mask << masks->num_shift); 143 - val |= (factor->ftbl[0].num & masks->num_mask) << 144 - masks->num_shift; 143 + val |= (factor->ftbl[0].numerator & masks->num_mask) << masks->num_shift; 145 144 146 145 val &= ~(masks->den_mask << masks->den_shift); 147 - val |= (factor->ftbl[0].den & masks->den_mask) << 148 - masks->den_shift; 146 + val |= (factor->ftbl[0].denominator & masks->den_mask) << masks->den_shift; 149 147 } 150 148 151 149 if (!(val & masks->enable_mask) || i >= factor->ftbl_cnt) { ··· 168 168 struct clk *mmp_clk_register_factor(const char *name, const char *parent_name, 169 169 unsigned long flags, void __iomem *base, 170 170 struct mmp_clk_factor_masks *masks, 171 - struct mmp_clk_factor_tbl *ftbl, 172 - unsigned int ftbl_cnt, spinlock_t *lock) 171 + struct u32_fract *ftbl, unsigned int ftbl_cnt, spinlock_t *lock) 173 172 { 174 173 struct mmp_clk_factor *factor; 175 174 struct clk_init_data init;
+13 -13
drivers/clk/mmp/clk-of-mmp2.c
··· 143 143 .den_shift = 0, 144 144 }; 145 145 146 - static struct mmp_clk_factor_tbl uart_factor_tbl[] = { 147 - {.num = 8125, .den = 1536}, /*14.745MHZ */ 148 - {.num = 3521, .den = 689}, /*19.23MHZ */ 146 + static struct u32_fract uart_factor_tbl[] = { 147 + { .numerator = 8125, .denominator = 1536 }, /* 14.745MHZ */ 148 + { .numerator = 3521, .denominator = 689 }, /* 19.23MHZ */ 149 149 }; 150 150 151 151 static struct mmp_clk_factor_masks i2s_factor_masks = { ··· 157 157 .enable_mask = 0xd0000000, 158 158 }; 159 159 160 - static struct mmp_clk_factor_tbl i2s_factor_tbl[] = { 161 - {.num = 24868, .den = 511}, /* 2.0480 MHz */ 162 - {.num = 28003, .den = 793}, /* 2.8224 MHz */ 163 - {.num = 24941, .den = 1025}, /* 4.0960 MHz */ 164 - {.num = 28003, .den = 1586}, /* 5.6448 MHz */ 165 - {.num = 31158, .den = 2561}, /* 8.1920 MHz */ 166 - {.num = 16288, .den = 1845}, /* 11.2896 MHz */ 167 - {.num = 20772, .den = 2561}, /* 12.2880 MHz */ 168 - {.num = 8144, .den = 1845}, /* 22.5792 MHz */ 169 - {.num = 10386, .den = 2561}, /* 24.5760 MHz */ 160 + static struct u32_fract i2s_factor_tbl[] = { 161 + { .numerator = 24868, .denominator = 511 }, /* 2.0480 MHz */ 162 + { .numerator = 28003, .denominator = 793 }, /* 2.8224 MHz */ 163 + { .numerator = 24941, .denominator = 1025 }, /* 4.0960 MHz */ 164 + { .numerator = 28003, .denominator = 1586 }, /* 5.6448 MHz */ 165 + { .numerator = 31158, .denominator = 2561 }, /* 8.1920 MHz */ 166 + { .numerator = 16288, .denominator = 1845 }, /* 11.2896 MHz */ 167 + { .numerator = 20772, .denominator = 2561 }, /* 12.2880 MHz */ 168 + { .numerator = 8144, .denominator = 1845 }, /* 22.5792 MHz */ 169 + { .numerator = 10386, .denominator = 2561 }, /* 24.5760 MHz */ 170 170 }; 171 171 172 172 static DEFINE_SPINLOCK(acgr_lock);
+2 -2
drivers/clk/mmp/clk-of-pxa168.c
··· 106 106 .den_shift = 0, 107 107 }; 108 108 109 - static struct mmp_clk_factor_tbl uart_factor_tbl[] = { 110 - {.num = 8125, .den = 1536}, /*14.745MHZ */ 109 + static struct u32_fract uart_factor_tbl[] = { 110 + { .numerator = 8125, .denominator = 1536 }, /* 14.745MHZ */ 111 111 }; 112 112 113 113 static void pxa168_pll_init(struct pxa168_clk_unit *pxa_unit)
+3 -3
drivers/clk/mmp/clk-of-pxa1928.c
··· 61 61 .den_shift = 0, 62 62 }; 63 63 64 - static struct mmp_clk_factor_tbl uart_factor_tbl[] = { 65 - {.num = 832, .den = 234}, /*58.5MHZ */ 66 - {.num = 1, .den = 1}, /*26MHZ */ 64 + static struct u32_fract uart_factor_tbl[] = { 65 + { .numerator = 832, .denominator = 234 }, /* 58.5MHZ */ 66 + { .numerator = 1, .denominator = 1 }, /* 26MHZ */ 67 67 }; 68 68 69 69 static void pxa1928_pll_init(struct pxa1928_clk_unit *pxa_unit)
+2 -2
drivers/clk/mmp/clk-of-pxa910.c
··· 86 86 .den_shift = 0, 87 87 }; 88 88 89 - static struct mmp_clk_factor_tbl uart_factor_tbl[] = { 90 - {.num = 8125, .den = 1536}, /*14.745MHZ */ 89 + static struct u32_fract uart_factor_tbl[] = { 90 + { .numerator = 8125, .denominator = 1536 }, /* 14.745MHZ */ 91 91 }; 92 92 93 93 static void pxa910_pll_init(struct pxa910_clk_unit *pxa_unit)
+3 -7
drivers/clk/mmp/clk.h
··· 3 3 #define __MACH_MMP_CLK_H 4 4 5 5 #include <linux/clk-provider.h> 6 + #include <linux/math.h> 6 7 #include <linux/pm_domain.h> 7 8 #include <linux/clkdev.h> 8 9 ··· 21 20 unsigned int enable_mask; 22 21 }; 23 22 24 - struct mmp_clk_factor_tbl { 25 - unsigned int num; 26 - unsigned int den; 27 - }; 28 - 29 23 struct mmp_clk_factor { 30 24 struct clk_hw hw; 31 25 void __iomem *base; 32 26 struct mmp_clk_factor_masks *masks; 33 - struct mmp_clk_factor_tbl *ftbl; 27 + struct u32_fract *ftbl; 34 28 unsigned int ftbl_cnt; 35 29 spinlock_t *lock; 36 30 }; ··· 33 37 extern struct clk *mmp_clk_register_factor(const char *name, 34 38 const char *parent_name, unsigned long flags, 35 39 void __iomem *base, struct mmp_clk_factor_masks *masks, 36 - struct mmp_clk_factor_tbl *ftbl, unsigned int ftbl_cnt, 40 + struct u32_fract *ftbl, unsigned int ftbl_cnt, 37 41 spinlock_t *lock); 38 42 39 43 /* Clock type "mix" */