Lines Matching full:clk

44 #include <dev/clk/clk.h>
45 #include <dev/clk/clk_fixed.h>
47 #include <dev/clk/xilinx/zynqmp_clk_mux.h>
48 #include <dev/clk/xilinx/zynqmp_clk_pll.h>
49 #include <dev/clk/xilinx/zynqmp_clk_fixed.h>
50 #include <dev/clk/xilinx/zynqmp_clk_div.h>
51 #include <dev/clk/xilinx/zynqmp_clk_gate.h>
113 struct zynqmp_clk *clk; member
119 zynqmp_clk_init(struct clknode *clk, device_t dev) in zynqmp_clk_init() argument
122 clknode_init_parent_idx(clk, 0); in zynqmp_clk_init()
219 sc->clk = clkdef; in zynqmp_clk_register()
225 zynqmp_fw_clk_get_name(struct zynqmp_clock_softc *sc, struct zynqmp_clk *clk, uint32_t id) in zynqmp_fw_clk_get_name() argument
238 clk->clkdef.name = clkname; in zynqmp_fw_clk_get_name()
243 zynqmp_fw_clk_get_attributes(struct zynqmp_clock_softc *sc, struct zynqmp_clk *clk, uint32_t id) in zynqmp_fw_clk_get_attributes() argument
251 clk->attributes = query_data[1]; in zynqmp_fw_clk_get_attributes()
256 zynqmp_fw_clk_get_parents(struct zynqmp_clock_softc *sc, struct zynqmp_clk *clk, uint32_t id) in zynqmp_fw_clk_get_parents() argument
262 clk->parentids[i] = -1; in zynqmp_fw_clk_get_parents()
263 clk->parentids[i + 1] = -1; in zynqmp_fw_clk_get_parents()
264 clk->parentids[i + 2] = -1; in zynqmp_fw_clk_get_parents()
266 clk->parentids[i] = query_data[1] & 0xFFFF; in zynqmp_fw_clk_get_parents()
267 clk->parentids[i + 1] = query_data[2] & 0xFFFF; in zynqmp_fw_clk_get_parents()
268 clk->parentids[i + 2] = query_data[3] & 0xFFFF; in zynqmp_fw_clk_get_parents()
270 clk->parentids[i] = -1; in zynqmp_fw_clk_get_parents()
273 clk->parentids[i] += 1; in zynqmp_fw_clk_get_parents()
274 clk->clkdef.parent_cnt++; in zynqmp_fw_clk_get_parents()
276 clk->parentids[i + 1] = -1; in zynqmp_fw_clk_get_parents()
279 clk->parentids[i + 1] += 1; in zynqmp_fw_clk_get_parents()
280 clk->clkdef.parent_cnt++; in zynqmp_fw_clk_get_parents()
282 clk->parentids[i + 2] = -1; in zynqmp_fw_clk_get_parents()
285 clk->parentids[i + 2] += 1; in zynqmp_fw_clk_get_parents()
286 clk->clkdef.parent_cnt++; in zynqmp_fw_clk_get_parents()
288 clk->parentids[i] = -2; in zynqmp_fw_clk_get_parents()
290 clk->parentids[i + 1] = -2; in zynqmp_fw_clk_get_parents()
292 clk->parentids[i + 2] = -2; in zynqmp_fw_clk_get_parents()
300 zynqmp_fw_clk_get_topology(struct zynqmp_clock_softc *sc, struct zynqmp_clk *clk, uint32_t id) in zynqmp_fw_clk_get_topology() argument
308 clk->topology[0] = query_data[1]; in zynqmp_fw_clk_get_topology()
309 clk->topology[1] = query_data[2]; in zynqmp_fw_clk_get_topology()
310 clk->topology[2] = query_data[3]; in zynqmp_fw_clk_get_topology()
316 clk->topology[3] = query_data[1]; in zynqmp_fw_clk_get_topology()
317 clk->topology[4] = query_data[2]; in zynqmp_fw_clk_get_topology()
318 clk->topology[5] = query_data[3]; in zynqmp_fw_clk_get_topology()
326 phandle_t *cells, struct clknode **clk) in zynqmp_clock_ofw_map() argument
331 *clk = clknode_find_by_id(clkdom, ZYNQMP_ID_TO_CLK(cells[0])); in zynqmp_clock_ofw_map()
332 if (*clk == NULL) in zynqmp_clock_ofw_map()
341 struct zynqmp_clk *clk, *tmp, *tmp2; in zynqmp_fw_clk_get_all() local
360 clk = malloc(sizeof(*clk), M_DEVBUF, M_WAITOK | M_ZERO); in zynqmp_fw_clk_get_all()
361 clk->clkdef.id = ZYNQMP_ID_TO_CLK(i); in zynqmp_fw_clk_get_all()
362 zynqmp_fw_clk_get_name(sc, clk, i); in zynqmp_fw_clk_get_all()
363 zynqmp_fw_clk_get_attributes(sc, clk, i); in zynqmp_fw_clk_get_all()
364 if ((clk->attributes & ZYNQMP_CLK_IS_VALID) == 0) { in zynqmp_fw_clk_get_all()
365 free(clk, M_DEVBUF); in zynqmp_fw_clk_get_all()
368 if (clk->attributes & ZYNQMP_CLK_IS_EXT) in zynqmp_fw_clk_get_all()
371 rv = zynqmp_fw_clk_get_parents(sc, clk, i); in zynqmp_fw_clk_get_all()
373 device_printf(sc->dev, "Cannot get parent for %s\n", clk->clkdef.name); in zynqmp_fw_clk_get_all()
374 free(clk, M_DEVBUF); in zynqmp_fw_clk_get_all()
378 rv = zynqmp_fw_clk_get_topology(sc, clk, i); in zynqmp_fw_clk_get_all()
380 device_printf(sc->dev, "Cannot get topology for %s\n", clk->clkdef.name); in zynqmp_fw_clk_get_all()
381 free(clk, M_DEVBUF); in zynqmp_fw_clk_get_all()
385 TAILQ_INSERT_TAIL(&clk_list, clk, next); in zynqmp_fw_clk_get_all()
389 clk = malloc(sizeof(*clk), M_DEVBUF, M_WAITOK | M_ZERO); in zynqmp_fw_clk_get_all()
391 clk->clkdef.name = (const char *)clkname; in zynqmp_fw_clk_get_all()
392 clk->clkdef.id = i; in zynqmp_fw_clk_get_all()
393 clk->attributes = ZYNQMP_CLK_IS_EXT; in zynqmp_fw_clk_get_all()
394 TAILQ_INSERT_TAIL(&clk_list, clk, next); in zynqmp_fw_clk_get_all()
397 TAILQ_FOREACH_SAFE(clk, &clk_list, next, tmp) { in zynqmp_fw_clk_get_all()
398 if (clk->attributes & ZYNQMP_CLK_IS_EXT) in zynqmp_fw_clk_get_all()
400clk->clkdef.parent_names = malloc(sizeof(char *) * clk->clkdef.parent_cnt, M_DEVBUF, M_ZERO | M_WA… in zynqmp_fw_clk_get_all()
402 if (clk->parentids[i] == -1) in zynqmp_fw_clk_get_all()
404 if (clk->parentids[i] == -2) { in zynqmp_fw_clk_get_all()
405 clk->clkdef.parent_names[i] = strdup("dummy", M_DEVBUF); in zynqmp_fw_clk_get_all()
409 if (tmp2->clkdef.id == clk->parentids[i]) { in zynqmp_fw_clk_get_all()
415 clk->clkdef.parent_names[i] = strdup("dummy", M_DEVBUF); in zynqmp_fw_clk_get_all()
417 clk->clkdef.parent_names[i] = strdup(tmp2->clkdef.name, M_DEVBUF); in zynqmp_fw_clk_get_all()
420 clk->clkdef.parent_names[i] = strdup(tmp2->clkdef.name, M_DEVBUF); in zynqmp_fw_clk_get_all()
433 TAILQ_FOREACH_SAFE(clk, &clk_list, next, tmp) { in zynqmp_fw_clk_get_all()
434 if (clk->attributes & ZYNQMP_CLK_IS_EXT) { in zynqmp_fw_clk_get_all()
435 if (strcmp(clk->clkdef.name, "dummy") == 0) { in zynqmp_fw_clk_get_all()
439 dummy.clkdef.id = clk->clkdef.id; in zynqmp_fw_clk_get_all()
445 zynqmp_clk_register(sc->clkdom, sc->parent, clk); in zynqmp_fw_clk_get_all()
447 TAILQ_REMOVE(&clk_list, clk, next); in zynqmp_fw_clk_get_all()
448 for (i = 0; i < clk->clkdef.parent_cnt; i++) in zynqmp_fw_clk_get_all()
449 free(__DECONST(char *, clk->clkdef.parent_names[i]), M_DEVBUF); in zynqmp_fw_clk_get_all()
450 free(clk->clkdef.parent_names, M_DEVBUF); in zynqmp_fw_clk_get_all()
451 free(__DECONST(char *, clk->clkdef.name), M_DEVBUF); in zynqmp_fw_clk_get_all()
452 free(clk, M_DEVBUF); in zynqmp_fw_clk_get_all()
470 if (!ofw_bus_is_compatible(dev, "xlnx,zynqmp-clk")) in zynqmp_clock_probe()