Lines Matching +full:div +full:- +full:clk
1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
34 #include <dev/clk/clk.h>
36 #include <dev/clk/xilinx/zynqmp_clk_div.h>
50 zynqmp_clk_div_init(struct clknode *clk, device_t dev) in zynqmp_clk_div_init() argument
53 clknode_init_parent_idx(clk, 0); in zynqmp_clk_div_init()
58 zynqmp_clk_div_recalc(struct clknode *clk, uint64_t *freq) in zynqmp_clk_div_recalc() argument
61 uint32_t div; in zynqmp_clk_div_recalc() local
64 sc = clknode_get_softc(clk); in zynqmp_clk_div_recalc()
65 rv = ZYNQMP_FIRMWARE_CLOCK_GETDIVIDER(sc->firmware, sc->id, &div); in zynqmp_clk_div_recalc()
69 clknode_get_name(clk)); in zynqmp_clk_div_recalc()
73 if (sc->type == CLK_DIV_TYPE_DIV0) in zynqmp_clk_div_recalc()
74 div &= 0xFFFF; in zynqmp_clk_div_recalc()
76 div = div >> 16; in zynqmp_clk_div_recalc()
77 *freq = howmany((unsigned long long)*freq, div + 1); in zynqmp_clk_div_recalc()
82 zynqmp_clk_div_set_freq(struct clknode *clk, uint64_t fparent, uint64_t *fout, in zynqmp_clk_div_set_freq() argument
86 uint32_t div; in zynqmp_clk_div_set_freq() local
89 sc = clknode_get_softc(clk); in zynqmp_clk_div_set_freq()
91 div = DIV_ROUND_CLOSEST(fparent, *fout); in zynqmp_clk_div_set_freq()
92 if (sc->type == CLK_DIV_TYPE_DIV0) { in zynqmp_clk_div_set_freq()
93 div &= 0xFFFF; in zynqmp_clk_div_set_freq()
94 div |= 0xFFFF << 16; in zynqmp_clk_div_set_freq()
96 div <<= 16; in zynqmp_clk_div_set_freq()
97 div |= 0xFFFF; in zynqmp_clk_div_set_freq()
100 rv = ZYNQMP_FIRMWARE_CLOCK_SETDIVIDER(sc->firmware, sc->id, div); in zynqmp_clk_div_set_freq()
104 clknode_get_name(clk)); in zynqmp_clk_div_set_freq()
125 struct clknode *clk; in zynqmp_clk_div_register() local
129 fw_clk_id = clkdef->id - 1; in zynqmp_clk_div_register()
130 clkdef->id = 0; in zynqmp_clk_div_register()
131 clk = clknode_create(clkdom, &zynqmp_clk_div_clknode_class, clkdef); in zynqmp_clk_div_register()
132 if (clk == NULL) in zynqmp_clk_div_register()
134 sc = clknode_get_softc(clk); in zynqmp_clk_div_register()
135 sc->id = fw_clk_id; in zynqmp_clk_div_register()
136 sc->firmware = fw; in zynqmp_clk_div_register()
137 sc->type = type; in zynqmp_clk_div_register()
138 clknode_register(clkdom, clk); in zynqmp_clk_div_register()