.hw.init = &(struct clk_init_data){
                .name = "fixed_pll_dco",
                .ops = &meson_clk_pll_ro_ops,
-               .parent_hws = (const struct clk_hw *[]) {
-                       &meson8b_xtal.hw
+               .parent_data = &(const struct clk_parent_data) {
+                       .fw_name = "xtal",
+                       .name = "xtal",
+                       .index = -1,
                },
                .num_parents = 1,
        },
                /* sometimes also called "HPLL" or "HPLL PLL" */
                .name = "hdmi_pll_dco",
                .ops = &meson_clk_pll_ro_ops,
-               .parent_hws = (const struct clk_hw *[]) {
-                       &meson8b_xtal.hw
+               .parent_data = &(const struct clk_parent_data) {
+                       .fw_name = "xtal",
+                       .name = "xtal",
+                       .index = -1,
                },
                .num_parents = 1,
        },
        .hw.init = &(struct clk_init_data){
                .name = "sys_pll_dco",
                .ops = &meson_clk_pll_ops,
-               .parent_hws = (const struct clk_hw *[]) {
-                       &meson8b_xtal.hw
+               .parent_data = &(const struct clk_parent_data) {
+                       .fw_name = "xtal",
+                       .name = "xtal",
+                       .index = -1,
                },
                .num_parents = 1,
        },
        .hw.init = &(struct clk_init_data){
                .name = "cpu_in_sel",
                .ops = &clk_regmap_mux_ops,
-               .parent_hws = (const struct clk_hw *[]) {
-                       &meson8b_xtal.hw,
-                       &meson8b_sys_pll.hw,
+               .parent_data = (const struct clk_parent_data[]) {
+                       { .fw_name = "xtal", .name = "xtal", .index = -1, },
+                       { .hw = &meson8b_sys_pll.hw, },
                },
                .num_parents = 2,
                .flags = (CLK_SET_RATE_PARENT |
        .hw.init = &(struct clk_init_data){
                .name = "cpu_clk",
                .ops = &clk_regmap_mux_ops,
-               .parent_hws = (const struct clk_hw *[]) {
-                       &meson8b_xtal.hw,
-                       &meson8b_cpu_scale_out_sel.hw,
+               .parent_data = (const struct clk_parent_data[]) {
+                       { .fw_name = "xtal", .name = "xtal", .index = -1, },
+                       { .hw = &meson8b_cpu_scale_out_sel.hw, },
                },
                .num_parents = 2,
                .flags = (CLK_SET_RATE_PARENT |
                .name = "nand_clk_sel",
                .ops = &clk_regmap_mux_ops,
                /* FIXME all other parents are unknown: */
-               .parent_hws = (const struct clk_hw *[]) {
-                       &meson8b_fclk_div4.hw,
-                       &meson8b_fclk_div3.hw,
-                       &meson8b_fclk_div5.hw,
-                       &meson8b_fclk_div7.hw,
-                       &meson8b_xtal.hw,
+               .parent_data = (const struct clk_parent_data[]) {
+                       { .hw = &meson8b_fclk_div4.hw, },
+                       { .hw = &meson8b_fclk_div3.hw, },
+                       { .hw = &meson8b_fclk_div5.hw, },
+                       { .hw = &meson8b_fclk_div7.hw, },
+                       { .fw_name = "xtal", .name = "xtal", .index = -1, },
                },
                .num_parents = 5,
                .flags = CLK_SET_RATE_PARENT,
                .name = "hdmi_sys_sel",
                .ops = &clk_regmap_mux_ro_ops,
                /* FIXME: all other parents are unknown */
-               .parent_hws = (const struct clk_hw *[]) {
-                       &meson8b_xtal.hw
+               .parent_data = &(const struct clk_parent_data) {
+                       .fw_name = "xtal",
+                       .name = "xtal",
+                       .index = -1,
                },
                .num_parents = 1,
                .flags = CLK_SET_RATE_NO_REPARENT,
  * muxed by a glitch-free switch on Meson8b and Meson8m2. Meson8 only
  * has mali_0 and no glitch-free mux.
  */
-static const struct clk_hw *meson8b_mali_0_1_parent_hws[] = {
-       &meson8b_xtal.hw,
-       &meson8b_mpll2.hw,
-       &meson8b_mpll1.hw,
-       &meson8b_fclk_div7.hw,
-       &meson8b_fclk_div4.hw,
-       &meson8b_fclk_div3.hw,
-       &meson8b_fclk_div5.hw,
+static const struct clk_parent_data meson8b_mali_0_1_parent_data[] = {
+       { .fw_name = "xtal", .name = "xtal", .index = -1, },
+       { .hw = &meson8b_mpll2.hw, },
+       { .hw = &meson8b_mpll1.hw, },
+       { .hw = &meson8b_fclk_div7.hw, },
+       { .hw = &meson8b_fclk_div4.hw, },
+       { .hw = &meson8b_fclk_div3.hw, },
+       { .hw = &meson8b_fclk_div5.hw, },
 };
 
 static u32 meson8b_mali_0_1_mux_table[] = { 0, 2, 3, 4, 5, 6, 7 };
        .hw.init = &(struct clk_init_data){
                .name = "mali_0_sel",
                .ops = &clk_regmap_mux_ops,
-               .parent_hws = meson8b_mali_0_1_parent_hws,
-               .num_parents = ARRAY_SIZE(meson8b_mali_0_1_parent_hws),
+               .parent_data = meson8b_mali_0_1_parent_data,
+               .num_parents = ARRAY_SIZE(meson8b_mali_0_1_parent_data),
                /*
                 * Don't propagate rate changes up because the only changeable
                 * parents are mpll1 and mpll2 but we need those for audio and
        .hw.init = &(struct clk_init_data){
                .name = "mali_1_sel",
                .ops = &clk_regmap_mux_ops,
-               .parent_hws = meson8b_mali_0_1_parent_hws,
-               .num_parents = ARRAY_SIZE(meson8b_mali_0_1_parent_hws),
+               .parent_data = meson8b_mali_0_1_parent_data,
+               .num_parents = ARRAY_SIZE(meson8b_mali_0_1_parent_data),
                /*
                 * Don't propagate rate changes up because the only changeable
                 * parents are mpll1 and mpll2 but we need those for audio and
        .hw.init = &(struct clk_init_data){
                .name = "gp_pll_dco",
                .ops = &meson_clk_pll_ops,
-               .parent_hws = (const struct clk_hw *[]) {
-                       &meson8b_xtal.hw
+               .parent_data = &(const struct clk_parent_data) {
+                       .fw_name = "xtal",
+                       .name = "xtal",
+                       .index = -1,
                },
                .num_parents = 1,
        },