1 // SPDX-License-Identifier: GPL-2.0
7 #include <clk-uclass.h>
11 #include <firmware/imx/sci/sci.h>
12 #include <asm/arch/clock.h>
13 #include <dt-bindings/clock/imx8qxp-clock.h>
14 #include <dt-bindings/soc/imx_rsrc.h>
19 __weak ulong imx8_clk_get_rate(struct clk *clk)
24 __weak ulong imx8_clk_set_rate(struct clk *clk, unsigned long rate)
29 __weak int __imx8_clk_enable(struct clk *clk, bool enable)
34 static int imx8_clk_disable(struct clk *clk)
36 return __imx8_clk_enable(clk, 0);
39 static int imx8_clk_enable(struct clk *clk)
41 return __imx8_clk_enable(clk, 1);
44 #if IS_ENABLED(CONFIG_CMD_CLK)
45 static void imx8_clk_dump(struct udevice *dev)
51 printf("Clk\t\tHz\n");
53 for (i = 0; i < num_clks; i++) {
54 clk.id = imx8_clk_names[i].id;
55 ret = clk_request(dev, &clk);
57 debug("%s clk_request() failed: %d\n", __func__, ret);
61 ret = clk_get_rate(&clk);
65 printf("clk ID %lu not supported yet\n",
66 imx8_clk_names[i].id);
70 printf("%s %lu: get_rate err: %d\n",
71 __func__, imx8_clk_names[i].id, ret);
75 printf("%s(%3lu):\t%lu\n",
76 imx8_clk_names[i].name, imx8_clk_names[i].id, rate);
81 static struct clk_ops imx8_clk_ops = {
82 .set_rate = imx8_clk_set_rate,
83 .get_rate = imx8_clk_get_rate,
84 .enable = imx8_clk_enable,
85 .disable = imx8_clk_disable,
86 #if IS_ENABLED(CONFIG_CMD_CLK)
87 .dump = imx8_clk_dump,
91 static int imx8_clk_probe(struct udevice *dev)
96 static const struct udevice_id imx8_clk_ids[] = {
97 { .compatible = "fsl,imx8qxp-clk" },
98 { .compatible = "fsl,imx8qm-clk" },
102 U_BOOT_DRIVER(imx8_clk) = {
105 .of_match = imx8_clk_ids,
106 .ops = &imx8_clk_ops,
107 .probe = imx8_clk_probe,
108 .flags = DM_FLAG_PRE_RELOC,