.div = 1,
        .hw.init = &(struct clk_init_data){
                .name = "xo",
-               .parent_names = (const char *[]){ "xo_board" },
+               .parent_data = &(const struct clk_parent_data) {
+                       .fw_name = "xo"
+               },
                .num_parents = 1,
                .ops = &clk_fixed_factor_ops,
        },
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gpll0_early",
-                       .parent_names = (const char *[]){ "xo" },
+                       .parent_data = &(const struct clk_parent_data){
+                               .fw_name = "xo",
+                       },
                        .num_parents = 1,
                        .ops = &clk_alpha_pll_ops,
                },
        .div = 2,
        .hw.init = &(struct clk_init_data){
                .name = "gpll0_early_div",
-               .parent_names = (const char *[]){ "gpll0_early" },
+               .parent_hws = (const struct clk_hw*[]){
+                       &gpll0_early.clkr.hw,
+               },
                .num_parents = 1,
                .ops = &clk_fixed_factor_ops,
        },
        .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
        .clkr.hw.init = &(struct clk_init_data){
                .name = "gpll0",
-               .parent_names = (const char *[]){ "gpll0_early" },
+               .parent_hws = (const struct clk_hw*[]){
+                       &gpll0_early.clkr.hw,
+               },
                .num_parents = 1,
                .ops = &clk_alpha_pll_postdiv_ops,
        },
                .enable_mask = BIT(1),
                .hw.init = &(struct clk_init_data){
                        .name = "gpll1_early",
-                       .parent_names = (const char *[]){ "xo" },
+                       .parent_data = &(const struct clk_parent_data){
+                               .fw_name = "xo",
+                       },
                        .num_parents = 1,
                        .ops = &clk_alpha_pll_ops,
                },
        .div = 2,
        .hw.init = &(struct clk_init_data){
                .name = "gpll1_early_div",
-               .parent_names = (const char *[]){ "gpll1_early" },
+               .parent_hws = (const struct clk_hw*[]){
+                       &gpll1_early.clkr.hw,
+               },
                .num_parents = 1,
                .ops = &clk_fixed_factor_ops,
        },
        .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
        .clkr.hw.init = &(struct clk_init_data){
                .name = "gpll1",
-               .parent_names = (const char *[]){ "gpll1_early" },
+               .parent_hws = (const struct clk_hw*[]){
+                       &gpll1_early.clkr.hw,
+               },
                .num_parents = 1,
                .ops = &clk_alpha_pll_postdiv_ops,
        },
                .enable_mask = BIT(4),
                .hw.init = &(struct clk_init_data){
                        .name = "gpll4_early",
-                       .parent_names = (const char *[]){ "xo" },
+                       .parent_data = &(const struct clk_parent_data){
+                               .fw_name = "xo",
+                       },
                        .num_parents = 1,
                        .ops = &clk_alpha_pll_ops,
                },
        .clkr.hw.init = &(struct clk_init_data)
        {
                .name = "gpll4",
-               .parent_names = (const char *[]) { "gpll4_early" },
+               .parent_hws = (const struct clk_hw*[]){
+                       &gpll4_early.clkr.hw,
+               },
                .num_parents = 1,
                .ops = &clk_alpha_pll_postdiv_ops,
        },
        { P_GPLL0_EARLY_DIV, 6 },
 };
 
-static const char * const gcc_parent_names_xo_gpll0_gpll0_early_div[] = {
-       "xo",
-       "gpll0",
-       "gpll0_early_div",
+static const struct clk_parent_data gcc_parent_data_xo_gpll0_gpll0_early_div[] = {
+       { .fw_name = "xo" },
+       { .hw = &gpll0.clkr.hw },
+       { .hw = &gpll0_early_div.hw },
 };
 
 static const struct parent_map gcc_parent_map_xo_gpll0[] = {
        { P_GPLL0, 1 },
 };
 
-static const char * const gcc_parent_names_xo_gpll0[] = {
-       "xo",
-       "gpll0",
+static const struct clk_parent_data gcc_parent_data_xo_gpll0[] = {
+       { .fw_name = "xo" },
+       { .hw = &gpll0.clkr.hw },
 };
 
 static const struct parent_map gcc_parent_map_xo_gpll0_sleep_clk_gpll0_early_div[] = {
        { P_GPLL0_EARLY_DIV, 6 },
 };
 
-static const char * const gcc_parent_names_xo_gpll0_sleep_clk_gpll0_early_div[] = {
-       "xo",
-       "gpll0",
-       "sleep_clk",
-       "gpll0_early_div",
+static const struct clk_parent_data gcc_parent_data_xo_gpll0_sleep_clk_gpll0_early_div[] = {
+       { .fw_name = "xo" },
+       { .hw = &gpll0.clkr.hw },
+       { .fw_name = "sleep_clk" },
+       { .hw = &gpll0_early_div.hw },
 };
 
 static const struct parent_map gcc_parent_map_xo_sleep_clk[] = {
        { P_SLEEP_CLK, 5 },
 };
 
-static const char * const gcc_parent_names_xo_sleep_clk[] = {
-       "xo",
-       "sleep_clk",
+static const struct clk_parent_data gcc_parent_data_xo_sleep_clk[] = {
+       { .fw_name = "xo" },
+       { .fw_name = "sleep_clk" },
 };
 
 static const struct parent_map gcc_parent_map_xo_gpll4[] = {
        { P_GPLL4, 5 },
 };
 
-static const char * const gcc_parent_names_xo_gpll4[] = {
-       "xo",
-       "gpll4",
+static const struct clk_parent_data gcc_parent_data_xo_gpll4[] = {
+       { .fw_name = "xo" },
+       { .hw = &gpll4.clkr.hw },
 };
 
 static const struct parent_map gcc_parent_map_xo_gpll0_gpll0_early_div_gpll1_gpll4_gpll1_early_div[] = {
        { P_GPLL1_EARLY_DIV, 6 },
 };
 
-static const char * const gcc_parent_names_xo_gpll0_gpll0_early_div_gpll1_gpll4_gpll1_early_div[] = {
-       "xo",
-       "gpll0",
-       "gpll0_early_div",
-       "gpll1",
-       "gpll4",
-       "gpll1_early_div",
+static const struct clk_parent_data gcc_parent_data_xo_gpll0_gpll0_early_div_gpll1_gpll4_gpll1_early_div[] = {
+       { .fw_name = "xo" },
+       { .hw = &gpll0.clkr.hw },
+       { .hw = &gpll0_early_div.hw },
+       { .hw = &gpll1.clkr.hw },
+       { .hw = &gpll4.clkr.hw },
+       { .hw = &gpll1_early_div.hw },
 };
 
 static const struct parent_map gcc_parent_map_xo_gpll0_gpll4_gpll0_early_div[] = {
        { P_GPLL0_EARLY_DIV, 6 },
 };
 
-static const char * const gcc_parent_names_xo_gpll0_gpll4_gpll0_early_div[] = {
-       "xo",
-       "gpll0",
-       "gpll4",
-       "gpll0_early_div",
+static const struct clk_parent_data gcc_parent_data_xo_gpll0_gpll4_gpll0_early_div[] = {
+       { .fw_name = "xo" },
+       { .hw = &gpll0.clkr.hw },
+       { .hw = &gpll4.clkr.hw },
+       { .hw = &gpll0_early_div.hw },
 };
 
 static const struct parent_map gcc_parent_map_xo_gpll0_gpll0_early_div_gpll4[] = {
        { P_GPLL4, 5 },
 };
 
-static const char * const gcc_parent_names_xo_gpll0_gpll0_early_div_gpll4[] = {
-       "xo",
-       "gpll0",
-       "gpll0_early_div",
-       "gpll4",
+static const struct clk_parent_data gcc_parent_data_xo_gpll0_gpll0_early_div_gpll4[] = {
+       { .fw_name = "xo" },
+       { .hw = &gpll0.clkr.hw },
+       { .hw = &gpll0_early_div.hw },
+       { .hw = &gpll4.clkr.hw },
 };
 
 static const struct freq_tbl ftbl_blsp1_qup1_i2c_apps_clk_src[] = {
        .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
        .clkr.hw.init = &(struct clk_init_data){
                .name = "blsp1_qup1_i2c_apps_clk_src",
-               .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
+               .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
                .num_parents = 3,
                .ops = &clk_rcg2_ops,
        },
        .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
        .clkr.hw.init = &(struct clk_init_data){
                .name = "blsp1_qup1_spi_apps_clk_src",
-               .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
+               .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
                .num_parents = 3,
                .ops = &clk_rcg2_ops,
        },
        .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
        .clkr.hw.init = &(struct clk_init_data){
                .name = "blsp1_qup2_i2c_apps_clk_src",
-               .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
+               .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
                .num_parents = 3,
                .ops = &clk_rcg2_ops,
        },
        .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
        .clkr.hw.init = &(struct clk_init_data){
                .name = "blsp1_qup2_spi_apps_clk_src",
-               .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
+               .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
                .num_parents = 3,
                .ops = &clk_rcg2_ops,
        },
        .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
        .clkr.hw.init = &(struct clk_init_data){
                .name = "blsp1_qup3_i2c_apps_clk_src",
-               .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
+               .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
                .num_parents = 3,
                .ops = &clk_rcg2_ops,
        },
        .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
        .clkr.hw.init = &(struct clk_init_data){
                .name = "blsp1_qup3_spi_apps_clk_src",
-               .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
+               .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
                .num_parents = 3,
                .ops = &clk_rcg2_ops,
        },
        .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
        .clkr.hw.init = &(struct clk_init_data){
                .name = "blsp1_qup4_i2c_apps_clk_src",
-               .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
+               .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
                .num_parents = 3,
                .ops = &clk_rcg2_ops,
        },
        .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
        .clkr.hw.init = &(struct clk_init_data){
                .name = "blsp1_qup4_spi_apps_clk_src",
-               .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
+               .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
                .num_parents = 3,
                .ops = &clk_rcg2_ops,
        },
        .freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
        .clkr.hw.init = &(struct clk_init_data){
                .name = "blsp1_uart1_apps_clk_src",
-               .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
+               .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
                .num_parents = 3,
                .ops = &clk_rcg2_ops,
        },
        .freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
        .clkr.hw.init = &(struct clk_init_data){
                .name = "blsp1_uart2_apps_clk_src",
-               .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
+               .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
                .num_parents = 3,
                .ops = &clk_rcg2_ops,
        },
        .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
        .clkr.hw.init = &(struct clk_init_data){
                .name = "blsp2_qup1_i2c_apps_clk_src",
-               .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
+               .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
                .num_parents = 3,
                .ops = &clk_rcg2_ops,
        },
        .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
        .clkr.hw.init = &(struct clk_init_data){
                .name = "blsp2_qup1_spi_apps_clk_src",
-               .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
+               .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
                .num_parents = 3,
                .ops = &clk_rcg2_ops,
        },
        .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
        .clkr.hw.init = &(struct clk_init_data){
                .name = "blsp2_qup2_i2c_apps_clk_src",
-               .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
+               .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
                .num_parents = 3,
                .ops = &clk_rcg2_ops,
        },
        .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
        .clkr.hw.init = &(struct clk_init_data){
                .name = "blsp2_qup2_spi_apps_clk_src",
-               .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
+               .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
                .num_parents = 3,
                .ops = &clk_rcg2_ops,
        },
        .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
        .clkr.hw.init = &(struct clk_init_data){
                .name = "blsp2_qup3_i2c_apps_clk_src",
-               .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
+               .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
                .num_parents = 3,
                .ops = &clk_rcg2_ops,
        },
        .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
        .clkr.hw.init = &(struct clk_init_data){
                .name = "blsp2_qup3_spi_apps_clk_src",
-               .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
+               .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
                .num_parents = 3,
                .ops = &clk_rcg2_ops,
        },
        .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
        .clkr.hw.init = &(struct clk_init_data){
                .name = "blsp2_qup4_i2c_apps_clk_src",
-               .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
+               .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
                .num_parents = 3,
                .ops = &clk_rcg2_ops,
        },
        .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
        .clkr.hw.init = &(struct clk_init_data){
                .name = "blsp2_qup4_spi_apps_clk_src",
-               .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
+               .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
                .num_parents = 3,
                .ops = &clk_rcg2_ops,
        },
        .freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
        .clkr.hw.init = &(struct clk_init_data){
                .name = "blsp2_uart1_apps_clk_src",
-               .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
+               .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
                .num_parents = 3,
                .ops = &clk_rcg2_ops,
        },
        .freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
        .clkr.hw.init = &(struct clk_init_data){
                .name = "blsp2_uart2_apps_clk_src",
-               .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
+               .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
                .num_parents = 3,
                .ops = &clk_rcg2_ops,
        },
        .freq_tbl = ftbl_gp1_clk_src,
        .clkr.hw.init = &(struct clk_init_data){
                .name = "gp1_clk_src",
-               .parent_names = gcc_parent_names_xo_gpll0_sleep_clk_gpll0_early_div,
+               .parent_data = gcc_parent_data_xo_gpll0_sleep_clk_gpll0_early_div,
                .num_parents = 4,
                .ops = &clk_rcg2_ops,
        },
        .freq_tbl = ftbl_gp1_clk_src,
        .clkr.hw.init = &(struct clk_init_data){
                .name = "gp2_clk_src",
-               .parent_names = gcc_parent_names_xo_gpll0_sleep_clk_gpll0_early_div,
+               .parent_data = gcc_parent_data_xo_gpll0_sleep_clk_gpll0_early_div,
                .num_parents = 4,
                .ops = &clk_rcg2_ops,
        },
        .freq_tbl = ftbl_gp1_clk_src,
        .clkr.hw.init = &(struct clk_init_data){
                .name = "gp3_clk_src",
-               .parent_names = gcc_parent_names_xo_gpll0_sleep_clk_gpll0_early_div,
+               .parent_data = gcc_parent_data_xo_gpll0_sleep_clk_gpll0_early_div,
                .num_parents = 4,
                .ops = &clk_rcg2_ops,
        },
        .freq_tbl = ftbl_hmss_gpll0_clk_src,
        .clkr.hw.init = &(struct clk_init_data){
                .name = "hmss_gpll0_clk_src",
-               .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
+               .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
                .num_parents = 3,
                .ops = &clk_rcg2_ops,
        },
        .freq_tbl = ftbl_hmss_gpll4_clk_src,
        .clkr.hw.init = &(struct clk_init_data){
                .name = "hmss_gpll4_clk_src",
-               .parent_names = gcc_parent_names_xo_gpll4,
+               .parent_data = gcc_parent_data_xo_gpll4,
                .num_parents = 2,
                .ops = &clk_rcg2_ops,
        },
        .freq_tbl = ftbl_hmss_rbcpr_clk_src,
        .clkr.hw.init = &(struct clk_init_data){
                .name = "hmss_rbcpr_clk_src",
-               .parent_names = gcc_parent_names_xo_gpll0,
+               .parent_data = gcc_parent_data_xo_gpll0,
                .num_parents = 2,
                .ops = &clk_rcg2_ops,
        },
        .freq_tbl = ftbl_pdm2_clk_src,
        .clkr.hw.init = &(struct clk_init_data){
                .name = "pdm2_clk_src",
-               .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
+               .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
                .num_parents = 3,
                .ops = &clk_rcg2_ops,
        },
        .freq_tbl = ftbl_qspi_ser_clk_src,
        .clkr.hw.init = &(struct clk_init_data){
                .name = "qspi_ser_clk_src",
-               .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div_gpll1_gpll4_gpll1_early_div,
+               .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div_gpll1_gpll4_gpll1_early_div,
                .num_parents = 6,
                .ops = &clk_rcg2_ops,
        },
        .freq_tbl = ftbl_sdcc1_apps_clk_src,
        .clkr.hw.init = &(struct clk_init_data){
                .name = "sdcc1_apps_clk_src",
-               .parent_names = gcc_parent_names_xo_gpll0_gpll4_gpll0_early_div,
+               .parent_data = gcc_parent_data_xo_gpll0_gpll4_gpll0_early_div,
                .num_parents = 4,
                .ops = &clk_rcg2_ops,
        },
        .freq_tbl = ftbl_sdcc1_ice_core_clk_src,
        .clkr.hw.init = &(struct clk_init_data){
                .name = "sdcc1_ice_core_clk_src",
-               .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
+               .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
                .num_parents = 3,
                .ops = &clk_rcg2_ops,
        },
        .freq_tbl = ftbl_sdcc2_apps_clk_src,
        .clkr.hw.init = &(struct clk_init_data){
                .name = "sdcc2_apps_clk_src",
-               .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div_gpll4,
+               .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div_gpll4,
                .num_parents = 4,
                .ops = &clk_rcg2_floor_ops,
        },
        .freq_tbl = ftbl_ufs_axi_clk_src,
        .clkr.hw.init = &(struct clk_init_data){
                .name = "ufs_axi_clk_src",
-               .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
+               .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
                .num_parents = 3,
                .ops = &clk_rcg2_ops,
        },
        .freq_tbl = ftbl_ufs_ice_core_clk_src,
        .clkr.hw.init = &(struct clk_init_data){
                .name = "ufs_ice_core_clk_src",
-               .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
+               .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
                .num_parents = 3,
                .ops = &clk_rcg2_ops,
        },
        .freq_tbl = ftbl_hmss_rbcpr_clk_src,
        .clkr.hw.init = &(struct clk_init_data){
                .name = "ufs_phy_aux_clk_src",
-               .parent_names = gcc_parent_names_xo_sleep_clk,
+               .parent_data = gcc_parent_data_xo_sleep_clk,
                .num_parents = 2,
                .ops = &clk_rcg2_ops,
        },
        .freq_tbl = ftbl_ufs_unipro_core_clk_src,
        .clkr.hw.init = &(struct clk_init_data){
                .name = "ufs_unipro_core_clk_src",
-               .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
+               .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
                .num_parents = 3,
                .ops = &clk_rcg2_ops,
        },
        .freq_tbl = ftbl_usb20_master_clk_src,
        .clkr.hw.init = &(struct clk_init_data){
                .name = "usb20_master_clk_src",
-               .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
+               .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
                .num_parents = 3,
                .ops = &clk_rcg2_ops,
        },
        .freq_tbl = ftbl_usb20_mock_utmi_clk_src,
        .clkr.hw.init = &(struct clk_init_data){
                .name = "usb20_mock_utmi_clk_src",
-               .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
+               .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
                .num_parents = 3,
                .ops = &clk_rcg2_ops,
        },
        .freq_tbl = ftbl_usb30_master_clk_src,
        .clkr.hw.init = &(struct clk_init_data){
                .name = "usb30_master_clk_src",
-               .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
+               .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
                .num_parents = 3,
                .ops = &clk_rcg2_ops,
        },
        .freq_tbl = ftbl_usb30_mock_utmi_clk_src,
        .clkr.hw.init = &(struct clk_init_data){
                .name = "usb30_mock_utmi_clk_src",
-               .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
+               .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
                .num_parents = 3,
                .ops = &clk_rcg2_ops,
        },
        .freq_tbl = ftbl_usb3_phy_aux_clk_src,
        .clkr.hw.init = &(struct clk_init_data){
                .name = "usb3_phy_aux_clk_src",
-               .parent_names = gcc_parent_names_xo_sleep_clk,
+               .parent_data = gcc_parent_data_xo_sleep_clk,
                .num_parents = 2,
                .ops = &clk_rcg2_ops,
        },
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_aggre2_ufs_axi_clk",
-                       .parent_names = (const char *[]){
-                               "ufs_axi_clk_src",
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &ufs_axi_clk_src.clkr.hw,
                        },
                        .num_parents = 1,
                        .ops = &clk_branch2_ops,
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_aggre2_usb3_axi_clk",
-                       .parent_names = (const char *[]){
-                               "usb30_master_clk_src",
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &usb30_master_clk_src.clkr.hw,
                        },
                        .num_parents = 1,
                        .ops = &clk_branch2_ops,
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_blsp1_qup1_i2c_apps_clk",
-                       .parent_names = (const char *[]){
-                               "blsp1_qup1_i2c_apps_clk_src",
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &blsp1_qup1_i2c_apps_clk_src.clkr.hw,
                        },
                        .num_parents = 1,
                        .flags = CLK_SET_RATE_PARENT,
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_blsp1_qup1_spi_apps_clk",
-                       .parent_names = (const char *[]){
-                               "blsp1_qup1_spi_apps_clk_src",
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &blsp1_qup1_spi_apps_clk_src.clkr.hw,
                        },
                        .num_parents = 1,
                        .flags = CLK_SET_RATE_PARENT,
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_blsp1_qup2_i2c_apps_clk",
-                       .parent_names = (const char *[]){
-                               "blsp1_qup2_i2c_apps_clk_src",
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &blsp1_qup2_i2c_apps_clk_src.clkr.hw,
                        },
                        .num_parents = 1,
                        .flags = CLK_SET_RATE_PARENT,
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_blsp1_qup2_spi_apps_clk",
-                       .parent_names = (const char *[]){
-                               "blsp1_qup2_spi_apps_clk_src",
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &blsp1_qup2_spi_apps_clk_src.clkr.hw,
                        },
                        .num_parents = 1,
                        .flags = CLK_SET_RATE_PARENT,
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_blsp1_qup3_i2c_apps_clk",
-                       .parent_names = (const char *[]){
-                               "blsp1_qup3_i2c_apps_clk_src",
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &blsp1_qup3_i2c_apps_clk_src.clkr.hw,
                        },
                        .num_parents = 1,
                        .flags = CLK_SET_RATE_PARENT,
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_blsp1_qup3_spi_apps_clk",
-                       .parent_names = (const char *[]){
-                               "blsp1_qup3_spi_apps_clk_src",
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &blsp1_qup3_spi_apps_clk_src.clkr.hw,
                        },
                        .num_parents = 1,
                        .flags = CLK_SET_RATE_PARENT,
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_blsp1_qup4_i2c_apps_clk",
-                       .parent_names = (const char *[]){
-                               "blsp1_qup4_i2c_apps_clk_src",
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &blsp1_qup4_i2c_apps_clk_src.clkr.hw,
                        },
                        .num_parents = 1,
                        .flags = CLK_SET_RATE_PARENT,
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_blsp1_qup4_spi_apps_clk",
-                       .parent_names = (const char *[]){
-                               "blsp1_qup4_spi_apps_clk_src",
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &blsp1_qup4_spi_apps_clk_src.clkr.hw,
                        },
                        .num_parents = 1,
                        .flags = CLK_SET_RATE_PARENT,
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_blsp1_uart1_apps_clk",
-                       .parent_names = (const char *[]){
-                               "blsp1_uart1_apps_clk_src",
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &blsp1_uart1_apps_clk_src.clkr.hw,
                        },
                        .num_parents = 1,
                        .flags = CLK_SET_RATE_PARENT,
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_blsp1_uart2_apps_clk",
-                       .parent_names = (const char *[]){
-                               "blsp1_uart2_apps_clk_src",
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &blsp1_uart2_apps_clk_src.clkr.hw,
                        },
                        .num_parents = 1,
                        .flags = CLK_SET_RATE_PARENT,
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_blsp2_qup1_i2c_apps_clk",
-                       .parent_names = (const char *[]){
-                               "blsp2_qup1_i2c_apps_clk_src",
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &blsp2_qup1_i2c_apps_clk_src.clkr.hw,
                        },
                        .num_parents = 1,
                        .flags = CLK_SET_RATE_PARENT,
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_blsp2_qup1_spi_apps_clk",
-                       .parent_names = (const char *[]){
-                               "blsp2_qup1_spi_apps_clk_src",
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &blsp2_qup1_spi_apps_clk_src.clkr.hw,
                        },
                        .num_parents = 1,
                        .flags = CLK_SET_RATE_PARENT,
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_blsp2_qup2_i2c_apps_clk",
-                       .parent_names = (const char *[]){
-                               "blsp2_qup2_i2c_apps_clk_src",
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &blsp2_qup2_i2c_apps_clk_src.clkr.hw,
                        },
                        .num_parents = 1,
                        .flags = CLK_SET_RATE_PARENT,
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_blsp2_qup2_spi_apps_clk",
-                       .parent_names = (const char *[]){
-                               "blsp2_qup2_spi_apps_clk_src",
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &blsp2_qup2_spi_apps_clk_src.clkr.hw,
                        },
                        .num_parents = 1,
                        .flags = CLK_SET_RATE_PARENT,
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_blsp2_qup3_i2c_apps_clk",
-                       .parent_names = (const char *[]){
-                               "blsp2_qup3_i2c_apps_clk_src",
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &blsp2_qup3_i2c_apps_clk_src.clkr.hw,
                        },
                        .num_parents = 1,
                        .flags = CLK_SET_RATE_PARENT,
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_blsp2_qup3_spi_apps_clk",
-                       .parent_names = (const char *[]){
-                               "blsp2_qup3_spi_apps_clk_src",
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &blsp2_qup3_spi_apps_clk_src.clkr.hw,
                        },
                        .num_parents = 1,
                        .flags = CLK_SET_RATE_PARENT,
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_blsp2_qup4_i2c_apps_clk",
-                       .parent_names = (const char *[]){
-                               "blsp2_qup4_i2c_apps_clk_src",
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &blsp2_qup4_i2c_apps_clk_src.clkr.hw,
                        },
                        .num_parents = 1,
                        .flags = CLK_SET_RATE_PARENT,
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_blsp2_qup4_spi_apps_clk",
-                       .parent_names = (const char *[]){
-                               "blsp2_qup4_spi_apps_clk_src",
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &blsp2_qup4_spi_apps_clk_src.clkr.hw,
                        },
                        .num_parents = 1,
                        .flags = CLK_SET_RATE_PARENT,
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_blsp2_uart1_apps_clk",
-                       .parent_names = (const char *[]){
-                               "blsp2_uart1_apps_clk_src",
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &blsp2_uart1_apps_clk_src.clkr.hw,
                        },
                        .num_parents = 1,
                        .flags = CLK_SET_RATE_PARENT,
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_blsp2_uart2_apps_clk",
-                       .parent_names = (const char *[]){
-                               "blsp2_uart2_apps_clk_src",
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &blsp2_uart2_apps_clk_src.clkr.hw,
                        },
                        .num_parents = 1,
                        .flags = CLK_SET_RATE_PARENT,
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_cfg_noc_usb2_axi_clk",
-                       .parent_names = (const char *[]){
-                               "usb20_master_clk_src",
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &usb20_master_clk_src.clkr.hw,
                        },
                        .num_parents = 1,
                        .ops = &clk_branch2_ops,
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_cfg_noc_usb3_axi_clk",
-                       .parent_names = (const char *[]){
-                               "usb30_master_clk_src",
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &usb30_master_clk_src.clkr.hw,
                        },
                        .num_parents = 1,
                        .ops = &clk_branch2_ops,
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_gp1_clk",
-                       .parent_names = (const char *[]){
-                               "gp1_clk_src",
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &gp1_clk_src.clkr.hw,
                        },
                        .num_parents = 1,
                        .flags = CLK_SET_RATE_PARENT,
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_gp2_clk",
-                       .parent_names = (const char *[]){
-                               "gp2_clk_src",
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &gp2_clk_src.clkr.hw,
                        },
                        .num_parents = 1,
                        .flags = CLK_SET_RATE_PARENT,
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_gp3_clk",
-                       .parent_names = (const char *[]){
-                               "gp3_clk_src",
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &gp3_clk_src.clkr.hw,
                        },
                        .num_parents = 1,
                        .flags = CLK_SET_RATE_PARENT,
                .enable_mask = BIT(4),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_gpu_gpll0_clk",
-                       .parent_names = (const char *[]){
-                               "gpll0",
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &gpll0.clkr.hw,
                        },
                        .num_parents = 1,
                        .ops = &clk_branch2_ops,
                .enable_mask = BIT(3),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_gpu_gpll0_div_clk",
-                       .parent_names = (const char *[]){
-                               "gpll0_early_div",
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &gpll0_early_div.hw,
                        },
                        .num_parents = 1,
                        .ops = &clk_branch2_ops,
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_hmss_rbcpr_clk",
-                       .parent_names = (const char *[]){
-                               "hmss_rbcpr_clk_src",
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &hmss_rbcpr_clk_src.clkr.hw,
                        },
                        .num_parents = 1,
                        .flags = CLK_SET_RATE_PARENT,
                .enable_mask = BIT(1),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_mmss_gpll0_clk",
-                       .parent_names = (const char *[]){
-                               "gpll0",
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &gpll0.clkr.hw,
                        },
                        .num_parents = 1,
                        .ops = &clk_branch2_ops,
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_mmss_gpll0_div_clk",
-                       .parent_names = (const char *[]){
-                               "gpll0_early_div",
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &gpll0_early_div.hw,
                        },
                        .num_parents = 1,
                        .ops = &clk_branch2_ops,
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_pdm2_clk",
-                       .parent_names = (const char *[]){
-                               "pdm2_clk_src",
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &pdm2_clk_src.clkr.hw,
                        },
                        .num_parents = 1,
                        .flags = CLK_SET_RATE_PARENT,
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_qspi_ser_clk",
-                       .parent_names = (const char *[]){
-                               "qspi_ser_clk_src",
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &qspi_ser_clk_src.clkr.hw,
                        },
                        .num_parents = 1,
                        .flags = CLK_SET_RATE_PARENT,
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_sdcc1_apps_clk",
-                       .parent_names = (const char *[]){
-                               "sdcc1_apps_clk_src",
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &sdcc1_apps_clk_src.clkr.hw,
                        },
                        .num_parents = 1,
                        .flags = CLK_SET_RATE_PARENT,
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_sdcc1_ice_core_clk",
-                       .parent_names = (const char *[]){
-                               "sdcc1_ice_core_clk_src",
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &sdcc1_ice_core_clk_src.clkr.hw,
                        },
                        .num_parents = 1,
                        .flags = CLK_SET_RATE_PARENT,
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_sdcc2_apps_clk",
-                       .parent_names = (const char *[]){
-                               "sdcc2_apps_clk_src",
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &sdcc2_apps_clk_src.clkr.hw,
                        },
                        .num_parents = 1,
                        .flags = CLK_SET_RATE_PARENT,
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_ufs_axi_clk",
-                       .parent_names = (const char *[]){
-                               "ufs_axi_clk_src",
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &ufs_axi_clk_src.clkr.hw,
                        },
                        .num_parents = 1,
                        .flags = CLK_SET_RATE_PARENT,
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_ufs_ice_core_clk",
-                       .parent_names = (const char *[]){
-                               "ufs_ice_core_clk_src",
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &ufs_ice_core_clk_src.clkr.hw,
                        },
                        .num_parents = 1,
                        .flags = CLK_SET_RATE_PARENT,
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_ufs_phy_aux_clk",
-                       .parent_names = (const char *[]){
-                               "ufs_phy_aux_clk_src",
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &ufs_phy_aux_clk_src.clkr.hw,
                        },
                        .num_parents = 1,
                        .flags = CLK_SET_RATE_PARENT,
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_ufs_unipro_core_clk",
-                       .parent_names = (const char *[]){
-                               "ufs_unipro_core_clk_src",
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &ufs_unipro_core_clk_src.clkr.hw,
                        },
                        .flags = CLK_SET_RATE_PARENT,
                        .num_parents = 1,
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_usb20_master_clk",
-                       .parent_names = (const char *[]){
-                               "usb20_master_clk_src"
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &usb20_master_clk_src.clkr.hw,
                        },
                        .flags = CLK_SET_RATE_PARENT,
                        .num_parents = 1,
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_usb20_mock_utmi_clk",
-                       .parent_names = (const char *[]){
-                               "usb20_mock_utmi_clk_src",
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &usb20_mock_utmi_clk_src.clkr.hw,
                        },
                        .num_parents = 1,
                        .flags = CLK_SET_RATE_PARENT,
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_usb30_master_clk",
-                       .parent_names = (const char *[]){
-                               "usb30_master_clk_src",
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &usb30_master_clk_src.clkr.hw,
                        },
                        .num_parents = 1,
                        .flags = CLK_SET_RATE_PARENT,
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_usb30_mock_utmi_clk",
-                       .parent_names = (const char *[]){
-                               "usb30_mock_utmi_clk_src",
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &usb30_mock_utmi_clk_src.clkr.hw,
                        },
                        .num_parents = 1,
                        .flags = CLK_SET_RATE_PARENT,
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_usb3_phy_aux_clk",
-                       .parent_names = (const char *[]){
-                               "usb3_phy_aux_clk_src",
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &usb3_phy_aux_clk_src.clkr.hw,
                        },
                        .num_parents = 1,
                        .flags = CLK_SET_RATE_PARENT,