summaryrefslogtreecommitdiff
path: root/drivers/clk/imx/clk-imx8.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/clk/imx/clk-imx8.h')
-rw-r--r--drivers/clk/imx/clk-imx8.h83
1 files changed, 77 insertions, 6 deletions
diff --git a/drivers/clk/imx/clk-imx8.h b/drivers/clk/imx/clk-imx8.h
index 68ad6755e8..c0566f8117 100644
--- a/drivers/clk/imx/clk-imx8.h
+++ b/drivers/clk/imx/clk-imx8.h
@@ -4,16 +4,87 @@
* Peng Fan <peng.fan@nxp.com>
*/
-struct imx8_clks {
+#define CLK_IMX8_MAX_MUX_SEL 5
+
+#define FLAG_CLK_IMX8_IMX8QM BIT(0)
+#define FLAG_CLK_IMX8_IMX8QXP BIT(1)
+
+struct imx8_clk_header {
ulong id;
+#if CONFIG_IS_ENABLED(CMD_CLK)
const char *name;
+#endif
+};
+
+struct imx8_clks {
+ struct imx8_clk_header hdr;
+ u16 rsrc;
+ sc_pm_clk_t pm_clk;
+};
+
+struct imx8_fixed_clks {
+ struct imx8_clk_header hdr;
+ ulong rate;
+};
+
+struct imx8_gpr_clks {
+ struct imx8_clk_header hdr;
+ u16 rsrc;
+ sc_ctrl_t gpr_id;
+ ulong parent_id;
+};
+
+struct imx8_lpcg_clks {
+ struct imx8_clk_header hdr;
+ u8 bit_idx;
+ u32 lpcg;
+ ulong parent_id;
+};
+
+struct imx8_mux_clks {
+ struct imx8_clk_header hdr;
+ ulong slice_clk_id;
+ ulong parent_clks[CLK_IMX8_MAX_MUX_SEL];
+};
+
+enum imx8_clk_type {
+ IMX8_CLK_SLICE = 0,
+ IMX8_CLK_FIXED = 1,
+ IMX8_CLK_GPR = 2,
+ IMX8_CLK_LPCG = 3,
+ IMX8_CLK_MUX = 4,
+ IMX8_CLK_END = 5,
+};
+
+struct imx8_clk_pair {
+ void *type_clks;
+ u32 num;
+};
+
+struct imx8_clks_collect {
+ struct imx8_clk_pair clks[IMX8_CLK_END];
+ ulong match_flag;
};
#if CONFIG_IS_ENABLED(CMD_CLK)
-extern struct imx8_clks imx8_clk_names[];
-extern int num_clks;
+#define CLK_3(ID, NAME, MEM2) \
+ { { ID, NAME, }, MEM2, }
+#define CLK_4(ID, NAME, MEM2, MEM3) \
+ { { ID, NAME, }, MEM2, MEM3, }
+#define CLK_5(ID, NAME, MEM2, MEM3, MEM4) \
+ { { ID, NAME, }, MEM2, MEM3, MEM4, }
+#define CLK_MUX(ID, NAME, MEM2, MUX0, MUX1, MUX2, MUX3, MUX4) \
+ { { ID, NAME, }, MEM2, { MUX0, MUX1, MUX2, MUX3, MUX4} }
+#else
+#define CLK_3(ID, NAME, MEM2) \
+ { { ID, }, MEM2, }
+#define CLK_4(ID, NAME, MEM2, MEM3) \
+ { { ID, }, MEM2, MEM3, }
+#define CLK_5(ID, NAME, MEM2, MEM3, MEM4) \
+ { { ID, }, MEM2, MEM3, MEM4, }
+#define CLK_MUX(ID, NAME, MEM2, MUX0, MUX1, MUX2, MUX3, MUX4) \
+ { { ID, }, MEM2, { MUX0, MUX1, MUX2, MUX3, MUX4} }
#endif
-ulong imx8_clk_get_rate(struct clk *clk);
-ulong imx8_clk_set_rate(struct clk *clk, unsigned long rate);
-int __imx8_clk_enable(struct clk *clk, bool enable);
+extern struct imx8_clks_collect imx8qxp_clk_collect;
+extern struct imx8_clks_collect imx8qm_clk_collect;