struct clk *div, struct clk *mux, struct clk *pll,
                struct clk *step);
 
-struct clk *imx8m_clk_composite_flags(const char *name,
-                                       const char * const *parent_names,
-                                       int num_parents, void __iomem *reg,
-                                       unsigned long flags);
-
-#define __imx8m_clk_composite(name, parent_names, reg, flags) \
-       imx8m_clk_composite_flags(name, parent_names, \
+struct clk_hw *imx8m_clk_hw_composite_flags(const char *name,
+                                           const char * const *parent_names,
+                                           int num_parents,
+                                           void __iomem *reg,
+                                           unsigned long flags);
+
+#define imx8m_clk_composite_flags(name, parent_names, num_parents, reg, \
+                                 flags) \
+       to_clk(imx8m_clk_hw_composite_flags(name, parent_names, \
+                               num_parents, reg, flags))
+
+#define __imx8m_clk_hw_composite(name, parent_names, reg, flags) \
+       imx8m_clk_hw_composite_flags(name, parent_names, \
                ARRAY_SIZE(parent_names), reg, \
                flags | CLK_SET_RATE_NO_REPARENT | CLK_OPS_PARENT_ENABLE)
 
+#define __imx8m_clk_composite(name, parent_names, reg, flags) \
+       to_clk(__imx8m_clk_hw_composite(name, parent_names, reg, flags))
+
+#define imx8m_clk_hw_composite(name, parent_names, reg) \
+       __imx8m_clk_hw_composite(name, parent_names, reg, 0)
+
 #define imx8m_clk_composite(name, parent_names, reg) \
        __imx8m_clk_composite(name, parent_names, reg, 0)
 
+#define imx8m_clk_hw_composite_critical(name, parent_names, reg) \
+       __imx8m_clk_hw_composite(name, parent_names, reg, CLK_IS_CRITICAL)
+
 #define imx8m_clk_composite_critical(name, parent_names, reg) \
        __imx8m_clk_composite(name, parent_names, reg, CLK_IS_CRITICAL)