Lines Matching +full:sel +full:- +full:clk
1 // SPDX-License-Identifier: GPL-2.0
10 #include <linux/clk-provider.h>
13 #include <asm/krait-l2-accessors.h>
15 #include "clk-krait.h"
23 static void __krait_mux_set_sel(struct krait_mux_clk *mux, int sel) in __krait_mux_set_sel() argument
30 regval = krait_get_l2_indirect_reg(mux->offset); in __krait_mux_set_sel()
33 if (mux->disable_sec_src_gating) { in __krait_mux_set_sel()
35 krait_set_l2_indirect_reg(mux->offset, regval); in __krait_mux_set_sel()
38 regval &= ~(mux->mask << mux->shift); in __krait_mux_set_sel()
39 regval |= (sel & mux->mask) << mux->shift; in __krait_mux_set_sel()
40 if (mux->lpl) { in __krait_mux_set_sel()
41 regval &= ~(mux->mask << (mux->shift + LPL_SHIFT)); in __krait_mux_set_sel()
42 regval |= (sel & mux->mask) << (mux->shift + LPL_SHIFT); in __krait_mux_set_sel()
44 krait_set_l2_indirect_reg(mux->offset, regval); in __krait_mux_set_sel()
46 /* apq/ipq8064 Errata: re-enabled sec_src clock gating. */ in __krait_mux_set_sel()
47 if (mux->disable_sec_src_gating) { in __krait_mux_set_sel()
49 krait_set_l2_indirect_reg(mux->offset, regval); in __krait_mux_set_sel()
66 u32 sel; in krait_mux_set_parent() local
68 sel = clk_mux_index_to_val(mux->parent_map, 0, index); in krait_mux_set_parent()
69 mux->en_mask = sel; in krait_mux_set_parent()
71 if (__clk_is_enabled(hw->clk)) in krait_mux_set_parent()
72 __krait_mux_set_sel(mux, sel); in krait_mux_set_parent()
74 mux->reparent = true; in krait_mux_set_parent()
82 u32 sel; in krait_mux_get_parent() local
84 sel = krait_get_l2_indirect_reg(mux->offset); in krait_mux_get_parent()
85 sel >>= mux->shift; in krait_mux_get_parent()
86 sel &= mux->mask; in krait_mux_get_parent()
87 mux->en_mask = sel; in krait_mux_get_parent()
89 return clk_mux_val_to_index(hw, mux->parent_map, 0, sel); in krait_mux_get_parent()
99 /* The divider can divide by 2, 4, 6 and 8. But we only really need div-2. */
102 req->best_parent_rate = clk_hw_round_rate(clk_hw_get_parent(hw), req->rate * 2); in krait_div2_determine_rate()
103 req->rate = DIV_ROUND_UP(req->best_parent_rate, 2); in krait_div2_determine_rate()
113 u32 mask = BIT(d->width) - 1; in krait_div2_set_rate()
115 if (d->lpl) in krait_div2_set_rate()
116 mask = mask << (d->shift + LPL_SHIFT) | mask << d->shift; in krait_div2_set_rate()
118 mask <<= d->shift; in krait_div2_set_rate()
121 val = krait_get_l2_indirect_reg(d->offset); in krait_div2_set_rate()
123 krait_set_l2_indirect_reg(d->offset, val); in krait_div2_set_rate()
133 u32 mask = BIT(d->width) - 1; in krait_div2_recalc_rate()
136 div = krait_get_l2_indirect_reg(d->offset); in krait_div2_recalc_rate()
137 div >>= d->shift; in krait_div2_recalc_rate()