| /kernel/linux/linux-6.6/drivers/clk/baikal-t1/ |
| D | ccu-div.c | 12 #define pr_fmt(fmt) "bt1-ccu-div: " fmt 27 #include "ccu-div.h" 61 unsigned long div) in ccu_div_lock_delay_ns() argument 63 u64 ns = 4ULL * (div ?: 1) * NSEC_PER_SEC; in ccu_div_lock_delay_ns() 71 unsigned long div) in ccu_div_calc_freq() argument 73 return ref_clk / (div ?: 1); in ccu_div_calc_freq() 76 static int ccu_div_var_update_clkdiv(struct ccu_div *div, in ccu_div_var_update_clkdiv() argument 87 if (div->features & CCU_DIV_LOCK_SHIFTED) in ccu_div_var_update_clkdiv() 92 regmap_update_bits(div->sys_regs, div->reg_ctl, in ccu_div_var_update_clkdiv() 102 regmap_read(div->sys_regs, div->reg_ctl, &val); in ccu_div_var_update_clkdiv() [all …]
|
| /kernel/linux/linux-5.10/drivers/clk/baikal-t1/ |
| D | ccu-div.c | 12 #define pr_fmt(fmt) "bt1-ccu-div: " fmt 27 #include "ccu-div.h" 62 unsigned long div) in ccu_div_lock_delay_ns() argument 64 u64 ns = 4ULL * (div ?: 1) * NSEC_PER_SEC; in ccu_div_lock_delay_ns() 72 unsigned long div) in ccu_div_calc_freq() argument 74 return ref_clk / (div ?: 1); in ccu_div_calc_freq() 77 static int ccu_div_var_update_clkdiv(struct ccu_div *div, in ccu_div_var_update_clkdiv() argument 88 if (div->features & CCU_DIV_LOCK_SHIFTED) in ccu_div_var_update_clkdiv() 93 regmap_update_bits(div->sys_regs, div->reg_ctl, in ccu_div_var_update_clkdiv() 103 regmap_read(div->sys_regs, div->reg_ctl, &val); in ccu_div_var_update_clkdiv() [all …]
|
| /kernel/linux/linux-6.6/drivers/clk/berlin/ |
| D | berlin2-div.c | 16 #include "berlin2-div.h" 36 * (D) constant div-by-3 clock divider 38 * (F) constant div-by-3 clock mux controlled by <D3Switch> 46 * Also, clock gate and pll mux is not available on every div cell, so 67 struct berlin2_div *div = to_berlin2_div(hw); in berlin2_div_is_enabled() local 68 struct berlin2_div_map *map = &div->map; in berlin2_div_is_enabled() 71 if (div->lock) in berlin2_div_is_enabled() 72 spin_lock(div->lock); in berlin2_div_is_enabled() 74 reg = readl_relaxed(div->base + map->gate_offs); in berlin2_div_is_enabled() 77 if (div->lock) in berlin2_div_is_enabled() [all …]
|
| /kernel/linux/linux-5.10/drivers/clk/berlin/ |
| D | berlin2-div.c | 16 #include "berlin2-div.h" 36 * (D) constant div-by-3 clock divider 38 * (F) constant div-by-3 clock mux controlled by <D3Switch> 46 * Also, clock gate and pll mux is not available on every div cell, so 67 struct berlin2_div *div = to_berlin2_div(hw); in berlin2_div_is_enabled() local 68 struct berlin2_div_map *map = &div->map; in berlin2_div_is_enabled() 71 if (div->lock) in berlin2_div_is_enabled() 72 spin_lock(div->lock); in berlin2_div_is_enabled() 74 reg = readl_relaxed(div->base + map->gate_offs); in berlin2_div_is_enabled() 77 if (div->lock) in berlin2_div_is_enabled() [all …]
|
| /kernel/linux/linux-5.10/drivers/clk/ |
| D | clk-divider.c | 50 for (clkt = table; clkt->div; clkt++) in _get_table_maxdiv() 51 if (clkt->div > maxdiv && clkt->val <= mask) in _get_table_maxdiv() 52 maxdiv = clkt->div; in _get_table_maxdiv() 61 for (clkt = table; clkt->div; clkt++) in _get_table_mindiv() 62 if (clkt->div < mindiv) in _get_table_mindiv() 63 mindiv = clkt->div; in _get_table_mindiv() 84 for (clkt = table; clkt->div; clkt++) in _get_table_div() 86 return clkt->div; in _get_table_div() 105 unsigned int div) in _get_table_val() argument 109 for (clkt = table; clkt->div; clkt++) in _get_table_val() [all …]
|
| D | clk-milbeaut.c | 83 u8 div; member 101 { .val = 0, .div = 8 }, 102 { .val = 1, .div = 9 }, 103 { .val = 2, .div = 10 }, 104 { .val = 3, .div = 15 }, 105 { .div = 0 }, 109 { .val = 1, .div = 2 }, 110 { .val = 3, .div = 4 }, 111 { .div = 0 }, 115 { .val = 3, .div = 4 }, [all …]
|
| D | clk-cdce706.c | 29 #define CDCE706_DIVIDER(div) (13 + (div)) argument 50 #define CDCE706_DIVIDER_PLL(div) (9 + (div) - ((div) > 2) - ((div) > 4)) argument 51 #define CDCE706_DIVIDER_PLL_SHIFT(div) ((div) < 2 ? 5 : 3 * ((div) & 1)) argument 52 #define CDCE706_DIVIDER_PLL_MASK(div) (0x7 << CDCE706_DIVIDER_PLL_SHIFT(div)) argument 72 unsigned div; member 168 "%s, pll: %d, mux: %d, mul: %u, div: %u\n", in cdce706_pll_recalc_rate() 169 __func__, hwd->idx, hwd->mux, hwd->mul, hwd->div); in cdce706_pll_recalc_rate() 172 if (hwd->div && hwd->mul) { in cdce706_pll_recalc_rate() 175 do_div(res, hwd->div); in cdce706_pll_recalc_rate() 179 if (hwd->div) in cdce706_pll_recalc_rate() [all …]
|
| /kernel/linux/linux-5.10/drivers/clk/imx/ |
| D | clk-divider-gate.c | 21 struct clk_divider *div = to_clk_divider(hw); in to_clk_divider_gate() local 23 return container_of(div, struct clk_divider_gate, divider); in to_clk_divider_gate() 29 struct clk_divider *div = to_clk_divider(hw); in clk_divider_gate_recalc_rate_ro() local 32 val = readl(div->reg) >> div->shift; in clk_divider_gate_recalc_rate_ro() 33 val &= clk_div_mask(div->width); in clk_divider_gate_recalc_rate_ro() 37 return divider_recalc_rate(hw, parent_rate, val, div->table, in clk_divider_gate_recalc_rate_ro() 38 div->flags, div->width); in clk_divider_gate_recalc_rate_ro() 45 struct clk_divider *div = to_clk_divider(hw); in clk_divider_gate_recalc_rate() local 49 spin_lock_irqsave(div->lock, flags); in clk_divider_gate_recalc_rate() 54 val = readl(div->reg) >> div->shift; in clk_divider_gate_recalc_rate() [all …]
|
| /kernel/linux/linux-6.6/drivers/clk/imx/ |
| D | clk-divider-gate.c | 21 struct clk_divider *div = to_clk_divider(hw); in to_clk_divider_gate() local 23 return container_of(div, struct clk_divider_gate, divider); in to_clk_divider_gate() 29 struct clk_divider *div = to_clk_divider(hw); in clk_divider_gate_recalc_rate_ro() local 32 val = readl(div->reg) >> div->shift; in clk_divider_gate_recalc_rate_ro() 33 val &= clk_div_mask(div->width); in clk_divider_gate_recalc_rate_ro() 37 return divider_recalc_rate(hw, parent_rate, val, div->table, in clk_divider_gate_recalc_rate_ro() 38 div->flags, div->width); in clk_divider_gate_recalc_rate_ro() 45 struct clk_divider *div = to_clk_divider(hw); in clk_divider_gate_recalc_rate() local 49 spin_lock_irqsave(div->lock, flags); in clk_divider_gate_recalc_rate() 54 val = readl(div->reg) >> div->shift; in clk_divider_gate_recalc_rate() [all …]
|
| /kernel/linux/linux-5.10/drivers/clk/ti/ |
| D | divider.c | 34 for (clkt = table; clkt->div; clkt++) in _get_table_div() 36 return clkt->div; in _get_table_div() 49 for (clkt = divider->table; clkt->div; clkt++) in _setup_mask() 80 unsigned int div) in _get_table_val() argument 84 for (clkt = table; clkt->div; clkt++) in _get_table_val() 85 if (clkt->div == div) in _get_table_val() 90 static unsigned int _get_val(struct clk_omap_divider *divider, u8 div) in _get_val() argument 93 return div; in _get_val() 95 return __ffs(div); in _get_val() 97 return _get_table_val(divider->table, div); in _get_val() [all …]
|
| /kernel/linux/linux-6.6/drivers/clk/ti/ |
| D | divider.c | 26 for (clkt = table; clkt->div; clkt++) in _get_table_div() 28 return clkt->div; in _get_table_div() 41 for (clkt = divider->table; clkt->div; clkt++) in _setup_mask() 72 unsigned int div) in _get_table_val() argument 76 for (clkt = table; clkt->div; clkt++) in _get_table_val() 77 if (clkt->div == div) in _get_table_val() 82 static unsigned int _get_val(struct clk_omap_divider *divider, u8 div) in _get_val() argument 85 return div; in _get_val() 87 return __ffs(div); in _get_val() 89 return _get_table_val(divider->table, div); in _get_val() [all …]
|
| /kernel/linux/linux-6.6/drivers/clk/ |
| D | clk-divider.c | 51 for (clkt = table; clkt->div; clkt++) in _get_table_maxdiv() 52 if (clkt->div > maxdiv && clkt->val <= mask) in _get_table_maxdiv() 53 maxdiv = clkt->div; in _get_table_maxdiv() 62 for (clkt = table; clkt->div; clkt++) in _get_table_mindiv() 63 if (clkt->div < mindiv) in _get_table_mindiv() 64 mindiv = clkt->div; in _get_table_mindiv() 85 for (clkt = table; clkt->div; clkt++) in _get_table_div() 87 return clkt->div; in _get_table_div() 106 unsigned int div) in _get_table_val() argument 110 for (clkt = table; clkt->div; clkt++) in _get_table_val() [all …]
|
| D | clk-fsl-flexspi.c | 14 { .val = 0, .div = 1, }, 15 { .val = 1, .div = 2, }, 16 { .val = 2, .div = 3, }, 17 { .val = 3, .div = 4, }, 18 { .val = 4, .div = 5, }, 19 { .val = 5, .div = 6, }, 20 { .val = 6, .div = 7, }, 21 { .val = 7, .div = 8, }, 22 { .val = 11, .div = 12, }, 23 { .val = 15, .div = 16, }, [all …]
|
| D | clk-milbeaut.c | 83 u8 div; member 101 { .val = 0, .div = 8 }, 102 { .val = 1, .div = 9 }, 103 { .val = 2, .div = 10 }, 104 { .val = 3, .div = 15 }, 105 { .div = 0 }, 109 { .val = 1, .div = 2 }, 110 { .val = 3, .div = 4 }, 111 { .div = 0 }, 115 { .val = 3, .div = 4 }, [all …]
|
| D | clk-cdce706.c | 29 #define CDCE706_DIVIDER(div) (13 + (div)) argument 50 #define CDCE706_DIVIDER_PLL(div) (9 + (div) - ((div) > 2) - ((div) > 4)) argument 51 #define CDCE706_DIVIDER_PLL_SHIFT(div) ((div) < 2 ? 5 : 3 * ((div) & 1)) argument 52 #define CDCE706_DIVIDER_PLL_MASK(div) (0x7 << CDCE706_DIVIDER_PLL_SHIFT(div)) argument 72 unsigned div; member 169 "%s, pll: %d, mux: %d, mul: %u, div: %u\n", in cdce706_pll_recalc_rate() 170 __func__, hwd->idx, hwd->mux, hwd->mul, hwd->div); in cdce706_pll_recalc_rate() 173 if (hwd->div && hwd->mul) { in cdce706_pll_recalc_rate() 176 do_div(res, hwd->div); in cdce706_pll_recalc_rate() 180 if (hwd->div) in cdce706_pll_recalc_rate() [all …]
|
| /kernel/linux/linux-5.10/drivers/clk/mxs/ |
| D | clk-div.c | 38 struct clk_div *div = to_clk_div(hw); in clk_div_recalc_rate() local 40 return div->ops->recalc_rate(&div->divider.hw, parent_rate); in clk_div_recalc_rate() 46 struct clk_div *div = to_clk_div(hw); in clk_div_round_rate() local 48 return div->ops->round_rate(&div->divider.hw, rate, prate); in clk_div_round_rate() 54 struct clk_div *div = to_clk_div(hw); in clk_div_set_rate() local 57 ret = div->ops->set_rate(&div->divider.hw, rate, parent_rate); in clk_div_set_rate() 59 ret = mxs_clk_wait(div->reg, div->busy); in clk_div_set_rate() 73 struct clk_div *div; in mxs_clk_div() local 77 div = kzalloc(sizeof(*div), GFP_KERNEL); in mxs_clk_div() 78 if (!div) in mxs_clk_div() [all …]
|
| /kernel/linux/linux-6.6/drivers/clk/mxs/ |
| D | clk-div.c | 38 struct clk_div *div = to_clk_div(hw); in clk_div_recalc_rate() local 40 return div->ops->recalc_rate(&div->divider.hw, parent_rate); in clk_div_recalc_rate() 46 struct clk_div *div = to_clk_div(hw); in clk_div_round_rate() local 48 return div->ops->round_rate(&div->divider.hw, rate, prate); in clk_div_round_rate() 54 struct clk_div *div = to_clk_div(hw); in clk_div_set_rate() local 57 ret = div->ops->set_rate(&div->divider.hw, rate, parent_rate); in clk_div_set_rate() 59 ret = mxs_clk_wait(div->reg, div->busy); in clk_div_set_rate() 73 struct clk_div *div; in mxs_clk_div() local 77 div = kzalloc(sizeof(*div), GFP_KERNEL); in mxs_clk_div() 78 if (!div) in mxs_clk_div() [all …]
|
| /kernel/linux/linux-6.6/drivers/clk/bcm/ |
| D | clk-iproc-asiu.c | 22 struct iproc_asiu_div div; member 82 val = readl(asiu->div_base + clk->div.offset); in iproc_asiu_clk_recalc_rate() 83 if ((val & (1 << clk->div.en_shift)) == 0) { in iproc_asiu_clk_recalc_rate() 89 div_h = (val >> clk->div.high_shift) & bit_mask(clk->div.high_width); in iproc_asiu_clk_recalc_rate() 91 div_l = (val >> clk->div.low_shift) & bit_mask(clk->div.low_width); in iproc_asiu_clk_recalc_rate() 104 unsigned int div; in iproc_asiu_clk_round_rate() local 112 div = DIV_ROUND_CLOSEST(*parent_rate, rate); in iproc_asiu_clk_round_rate() 113 if (div < 2) in iproc_asiu_clk_round_rate() 116 return *parent_rate / div; in iproc_asiu_clk_round_rate() 124 unsigned int div, div_h, div_l; in iproc_asiu_clk_set_rate() local [all …]
|
| /kernel/linux/linux-5.10/drivers/clk/bcm/ |
| D | clk-iproc-asiu.c | 32 struct iproc_asiu_div div; member 92 val = readl(asiu->div_base + clk->div.offset); in iproc_asiu_clk_recalc_rate() 93 if ((val & (1 << clk->div.en_shift)) == 0) { in iproc_asiu_clk_recalc_rate() 99 div_h = (val >> clk->div.high_shift) & bit_mask(clk->div.high_width); in iproc_asiu_clk_recalc_rate() 101 div_l = (val >> clk->div.low_shift) & bit_mask(clk->div.low_width); in iproc_asiu_clk_recalc_rate() 114 unsigned int div; in iproc_asiu_clk_round_rate() local 122 div = DIV_ROUND_CLOSEST(*parent_rate, rate); in iproc_asiu_clk_round_rate() 123 if (div < 2) in iproc_asiu_clk_round_rate() 126 return *parent_rate / div; in iproc_asiu_clk_round_rate() 134 unsigned int div, div_h, div_l; in iproc_asiu_clk_set_rate() local [all …]
|
| /kernel/linux/linux-5.10/drivers/clk/meson/ |
| D | clk-regmap.c | 63 struct clk_regmap_div_data *div = clk_get_regmap_div_data(clk); in clk_regmap_div_recalc_rate() local 67 ret = regmap_read(clk->map, div->offset, &val); in clk_regmap_div_recalc_rate() 72 val >>= div->shift; in clk_regmap_div_recalc_rate() 73 val &= clk_div_mask(div->width); in clk_regmap_div_recalc_rate() 74 return divider_recalc_rate(hw, prate, val, div->table, div->flags, in clk_regmap_div_recalc_rate() 75 div->width); in clk_regmap_div_recalc_rate() 82 struct clk_regmap_div_data *div = clk_get_regmap_div_data(clk); in clk_regmap_div_round_rate() local 87 if (div->flags & CLK_DIVIDER_READ_ONLY) { in clk_regmap_div_round_rate() 88 ret = regmap_read(clk->map, div->offset, &val); in clk_regmap_div_round_rate() 93 val >>= div->shift; in clk_regmap_div_round_rate() [all …]
|
| /kernel/linux/linux-6.6/drivers/clk/meson/ |
| D | clk-regmap.c | 63 struct clk_regmap_div_data *div = clk_get_regmap_div_data(clk); in clk_regmap_div_recalc_rate() local 67 ret = regmap_read(clk->map, div->offset, &val); in clk_regmap_div_recalc_rate() 72 val >>= div->shift; in clk_regmap_div_recalc_rate() 73 val &= clk_div_mask(div->width); in clk_regmap_div_recalc_rate() 74 return divider_recalc_rate(hw, prate, val, div->table, div->flags, in clk_regmap_div_recalc_rate() 75 div->width); in clk_regmap_div_recalc_rate() 82 struct clk_regmap_div_data *div = clk_get_regmap_div_data(clk); in clk_regmap_div_determine_rate() local 87 if (div->flags & CLK_DIVIDER_READ_ONLY) { in clk_regmap_div_determine_rate() 88 ret = regmap_read(clk->map, div->offset, &val); in clk_regmap_div_determine_rate() 92 val >>= div->shift; in clk_regmap_div_determine_rate() [all …]
|
| /kernel/linux/linux-6.6/Documentation/misc-devices/ |
| D | oxsemi-tornado.rst | 45 (tcr), the clock prescaler (cpr) and the divisor (div) produced by the 50 r: 15625000, a: 15625000.00, d: 0.0000%, tcr: 4, cpr: 1.000, div: 1 51 r: 12500000, a: 12500000.00, d: 0.0000%, tcr: 5, cpr: 1.000, div: 1 52 r: 10416666, a: 10416666.67, d: 0.0000%, tcr: 6, cpr: 1.000, div: 1 53 r: 8928571, a: 8928571.43, d: 0.0000%, tcr: 7, cpr: 1.000, div: 1 54 r: 7812500, a: 7812500.00, d: 0.0000%, tcr: 8, cpr: 1.000, div: 1 55 r: 4000000, a: 4000000.00, d: 0.0000%, tcr: 5, cpr: 3.125, div: 1 56 r: 3686400, a: 3676470.59, d: -0.2694%, tcr: 8, cpr: 2.125, div: 1 57 r: 3500000, a: 3496503.50, d: -0.0999%, tcr: 13, cpr: 1.375, div: 1 58 r: 3000000, a: 2976190.48, d: -0.7937%, tcr: 14, cpr: 1.500, div: 1 [all …]
|
| /kernel/linux/linux-6.6/drivers/clk/at91/ |
| D | clk-master.c | 39 u8 div; member 43 /* MCK div reference to be used by notifier. */ 87 u8 div; in clk_master_div_recalc_rate() local 101 div = (mckr >> MASTER_DIV_SHIFT) & MASTER_DIV_MASK; in clk_master_div_recalc_rate() 103 rate /= characteristics->divisors[div]; in clk_master_div_recalc_rate() 106 pr_warn("master clk div is underclocked"); in clk_master_div_recalc_rate() 108 pr_warn("master clk div is overclocked"); in clk_master_div_recalc_rate() 118 unsigned int mckr, div; in clk_master_div_save_context() local 125 div = (mckr >> MASTER_DIV_SHIFT) & MASTER_DIV_MASK; in clk_master_div_save_context() 126 div = master->characteristics->divisors[div]; in clk_master_div_save_context() [all …]
|
| /kernel/linux/linux-6.6/drivers/clk/sunxi/ |
| D | clk-sunxi.c | 35 u8 div; in sun4i_get_pll1_factors() local 38 div = req->rate / 6000000; in sun4i_get_pll1_factors() 39 req->rate = 6000000 * div; in sun4i_get_pll1_factors() 52 if (div < 10) in sun4i_get_pll1_factors() 56 else if (div < 20 || (div < 32 && (div & 1))) in sun4i_get_pll1_factors() 61 else if (div < 40 || (div < 64 && (div & 2))) in sun4i_get_pll1_factors() 69 div <<= req->p; in sun4i_get_pll1_factors() 70 div /= (req->k + 1); in sun4i_get_pll1_factors() 71 req->n = div / 4; in sun4i_get_pll1_factors() 159 u8 div; in sun8i_a23_get_pll1_factors() local [all …]
|
| /kernel/linux/linux-5.10/drivers/clk/sunxi/ |
| D | clk-sunxi.c | 35 u8 div; in sun4i_get_pll1_factors() local 38 div = req->rate / 6000000; in sun4i_get_pll1_factors() 39 req->rate = 6000000 * div; in sun4i_get_pll1_factors() 52 if (div < 10) in sun4i_get_pll1_factors() 56 else if (div < 20 || (div < 32 && (div & 1))) in sun4i_get_pll1_factors() 61 else if (div < 40 || (div < 64 && (div & 2))) in sun4i_get_pll1_factors() 69 div <<= req->p; in sun4i_get_pll1_factors() 70 div /= (req->k + 1); in sun4i_get_pll1_factors() 71 req->n = div / 4; in sun4i_get_pll1_factors() 159 u8 div; in sun8i_a23_get_pll1_factors() local [all …]
|