Commit 762d961a authored by Dinh Nguyen's avatar Dinh Nguyen Committed by Stephen Boyd

clk: socfpga: stratix10: use new parent data scheme

Convert, where possible, the stratix10 clock driver to the new parent
data scheme by specifying the parent data for clocks that have multiple
parents.
Signed-off-by: default avatarDinh Nguyen <dinguyen@kernel.org>
Link: https://lkml.kernel.org/r/20200512181647.5071-1-dinguyen@kernel.orgSigned-off-by: default avatarStephen Boyd <sboyd@kernel.org>
parent 8f3d9f35
...@@ -70,7 +70,6 @@ struct clk *s10_register_gate(const struct stratix10_gate_clock *clks, void __io ...@@ -70,7 +70,6 @@ struct clk *s10_register_gate(const struct stratix10_gate_clock *clks, void __io
struct clk *clk; struct clk *clk;
struct socfpga_gate_clk *socfpga_clk; struct socfpga_gate_clk *socfpga_clk;
struct clk_init_data init; struct clk_init_data init;
const char * const *parent_names = clks->parent_names;
const char *parent_name = clks->parent_name; const char *parent_name = clks->parent_name;
socfpga_clk = kzalloc(sizeof(*socfpga_clk), GFP_KERNEL); socfpga_clk = kzalloc(sizeof(*socfpga_clk), GFP_KERNEL);
...@@ -108,7 +107,9 @@ struct clk *s10_register_gate(const struct stratix10_gate_clock *clks, void __io ...@@ -108,7 +107,9 @@ struct clk *s10_register_gate(const struct stratix10_gate_clock *clks, void __io
init.flags = clks->flags; init.flags = clks->flags;
init.num_parents = clks->num_parents; init.num_parents = clks->num_parents;
init.parent_names = parent_names ? parent_names : &parent_name; init.parent_names = parent_name ? &parent_name : NULL;
if (init.parent_names == NULL)
init.parent_data = clks->parent_data;
socfpga_clk->hw.hw.init = &init; socfpga_clk->hw.hw.init = &init;
clk = clk_register(NULL, &socfpga_clk->hw.hw); clk = clk_register(NULL, &socfpga_clk->hw.hw);
......
...@@ -81,7 +81,6 @@ struct clk *s10_register_periph(const struct stratix10_perip_c_clock *clks, ...@@ -81,7 +81,6 @@ struct clk *s10_register_periph(const struct stratix10_perip_c_clock *clks,
struct clk_init_data init; struct clk_init_data init;
const char *name = clks->name; const char *name = clks->name;
const char *parent_name = clks->parent_name; const char *parent_name = clks->parent_name;
const char * const *parent_names = clks->parent_names;
periph_clk = kzalloc(sizeof(*periph_clk), GFP_KERNEL); periph_clk = kzalloc(sizeof(*periph_clk), GFP_KERNEL);
if (WARN_ON(!periph_clk)) if (WARN_ON(!periph_clk))
...@@ -94,7 +93,9 @@ struct clk *s10_register_periph(const struct stratix10_perip_c_clock *clks, ...@@ -94,7 +93,9 @@ struct clk *s10_register_periph(const struct stratix10_perip_c_clock *clks,
init.flags = clks->flags; init.flags = clks->flags;
init.num_parents = clks->num_parents; init.num_parents = clks->num_parents;
init.parent_names = parent_names ? parent_names : &parent_name; init.parent_names = parent_name ? &parent_name : NULL;
if (init.parent_names == NULL)
init.parent_data = clks->parent_data;
periph_clk->hw.hw.init = &init; periph_clk->hw.hw.init = &init;
...@@ -114,7 +115,6 @@ struct clk *s10_register_cnt_periph(const struct stratix10_perip_cnt_clock *clks ...@@ -114,7 +115,6 @@ struct clk *s10_register_cnt_periph(const struct stratix10_perip_cnt_clock *clks
struct clk_init_data init; struct clk_init_data init;
const char *name = clks->name; const char *name = clks->name;
const char *parent_name = clks->parent_name; const char *parent_name = clks->parent_name;
const char * const *parent_names = clks->parent_names;
periph_clk = kzalloc(sizeof(*periph_clk), GFP_KERNEL); periph_clk = kzalloc(sizeof(*periph_clk), GFP_KERNEL);
if (WARN_ON(!periph_clk)) if (WARN_ON(!periph_clk))
...@@ -137,7 +137,9 @@ struct clk *s10_register_cnt_periph(const struct stratix10_perip_cnt_clock *clks ...@@ -137,7 +137,9 @@ struct clk *s10_register_cnt_periph(const struct stratix10_perip_cnt_clock *clks
init.flags = clks->flags; init.flags = clks->flags;
init.num_parents = clks->num_parents; init.num_parents = clks->num_parents;
init.parent_names = parent_names ? parent_names : &parent_name; init.parent_names = parent_name ? &parent_name : NULL;
if (init.parent_names == NULL)
init.parent_data = clks->parent_data;
periph_clk->hw.hw.init = &init; periph_clk->hw.hw.init = &init;
......
...@@ -117,7 +117,6 @@ struct clk *s10_register_pll(const struct stratix10_pll_clock *clks, ...@@ -117,7 +117,6 @@ struct clk *s10_register_pll(const struct stratix10_pll_clock *clks,
struct socfpga_pll *pll_clk; struct socfpga_pll *pll_clk;
struct clk_init_data init; struct clk_init_data init;
const char *name = clks->name; const char *name = clks->name;
const char * const *parent_names = clks->parent_names;
pll_clk = kzalloc(sizeof(*pll_clk), GFP_KERNEL); pll_clk = kzalloc(sizeof(*pll_clk), GFP_KERNEL);
if (WARN_ON(!pll_clk)) if (WARN_ON(!pll_clk))
...@@ -134,7 +133,8 @@ struct clk *s10_register_pll(const struct stratix10_pll_clock *clks, ...@@ -134,7 +133,8 @@ struct clk *s10_register_pll(const struct stratix10_pll_clock *clks,
init.flags = clks->flags; init.flags = clks->flags;
init.num_parents = clks->num_parents; init.num_parents = clks->num_parents;
init.parent_names = parent_names; init.parent_names = NULL;
init.parent_data = clks->parent_data;
pll_clk->hw.hw.init = &init; pll_clk->hw.hw.init = &init;
pll_clk->hw.bit_idx = SOCFPGA_PLL_POWER; pll_clk->hw.bit_idx = SOCFPGA_PLL_POWER;
......
...@@ -12,35 +12,137 @@ ...@@ -12,35 +12,137 @@
#include "stratix10-clk.h" #include "stratix10-clk.h"
static const char * const pll_mux[] = { "osc1", "cb-intosc-hs-div2-clk", static const struct clk_parent_data pll_mux[] = {
"f2s-free-clk",}; { .fw_name = "osc1",
static const char * const cntr_mux[] = { "main_pll", "periph_pll", .name = "osc1" },
"osc1", "cb-intosc-hs-div2-clk", { .fw_name = "cb-intosc-hs-div2-clk",
"f2s-free-clk"}; .name = "cb-intosc-hs-div2-clk" },
static const char * const boot_mux[] = { "osc1", "cb-intosc-hs-div2-clk",}; { .fw_name = "f2s-free-clk",
.name = "f2s-free-clk" },
static const char * const noc_free_mux[] = {"main_noc_base_clk", };
"peri_noc_base_clk",
"osc1", "cb-intosc-hs-div2-clk", static const struct clk_parent_data cntr_mux[] = {
"f2s-free-clk"}; { .fw_name = "main_pll",
.name = "main_pll", },
static const char * const emaca_free_mux[] = {"peri_emaca_clk", "boot_clk"}; { .fw_name = "periph_pll",
static const char * const emacb_free_mux[] = {"peri_emacb_clk", "boot_clk"}; .name = "periph_pll", },
static const char * const emac_ptp_free_mux[] = {"peri_emac_ptp_clk", "boot_clk"}; { .fw_name = "osc1",
static const char * const gpio_db_free_mux[] = {"peri_gpio_db_clk", "boot_clk"}; .name = "osc1", },
static const char * const sdmmc_free_mux[] = {"main_sdmmc_clk", "boot_clk"}; { .fw_name = "cb-intosc-hs-div2-clk",
static const char * const s2f_usr1_free_mux[] = {"peri_s2f_usr1_clk", "boot_clk"}; .name = "cb-intosc-hs-div2-clk", },
static const char * const psi_ref_free_mux[] = {"peri_psi_ref_clk", "boot_clk"}; { .fw_name = "f2s-free-clk",
static const char * const mpu_mux[] = { "mpu_free_clk", "boot_clk",}; .name = "f2s-free-clk", },
};
static const char * const s2f_usr0_mux[] = {"f2s-free-clk", "boot_clk"};
static const char * const emac_mux[] = {"emaca_free_clk", "emacb_free_clk"}; static const struct clk_parent_data boot_mux[] = {
static const char * const noc_mux[] = {"noc_free_clk", "boot_clk"}; { .fw_name = "osc1",
.name = "osc1" },
static const char * const mpu_free_mux[] = {"main_mpu_base_clk", { .fw_name = "cb-intosc-hs-div2-clk",
"peri_mpu_base_clk", .name = "cb-intosc-hs-div2-clk" },
"osc1", "cb-intosc-hs-div2-clk", };
"f2s-free-clk"};
static const struct clk_parent_data noc_free_mux[] = {
{ .fw_name = "main_noc_base_clk",
.name = "main_noc_base_clk", },
{ .fw_name = "peri_noc_base_clk",
.name = "peri_noc_base_clk", },
{ .fw_name = "osc1",
.name = "osc1", },
{ .fw_name = "cb-intosc-hs-div2-clk",
.name = "cb-intosc-hs-div2-clk", },
{ .fw_name = "f2s-free-clk",
.name = "f2s-free-clk", },
};
static const struct clk_parent_data emaca_free_mux[] = {
{ .fw_name = "peri_emaca_clk",
.name = "peri_emaca_clk", },
{ .fw_name = "boot_clk",
.name = "boot_clk", },
};
static const struct clk_parent_data emacb_free_mux[] = {
{ .fw_name = "peri_emacb_clk",
.name = "peri_emacb_clk", },
{ .fw_name = "boot_clk",
.name = "boot_clk", },
};
static const struct clk_parent_data emac_ptp_free_mux[] = {
{ .fw_name = "peri_emac_ptp_clk",
.name = "peri_emac_ptp_clk", },
{ .fw_name = "boot_clk",
.name = "boot_clk", },
};
static const struct clk_parent_data gpio_db_free_mux[] = {
{ .fw_name = "peri_gpio_db_clk",
.name = "peri_gpio_db_clk", },
{ .fw_name = "boot_clk",
.name = "boot_clk", },
};
static const struct clk_parent_data sdmmc_free_mux[] = {
{ .fw_name = "main_sdmmc_clk",
.name = "main_sdmmc_clk", },
{ .fw_name = "boot_clk",
.name = "boot_clk", },
};
static const struct clk_parent_data s2f_usr1_free_mux[] = {
{ .fw_name = "peri_s2f_usr1_clk",
.name = "peri_s2f_usr1_clk", },
{ .fw_name = "boot_clk",
.name = "boot_clk", },
};
static const struct clk_parent_data psi_ref_free_mux[] = {
{ .fw_name = "peri_psi_ref_clk",
.name = "peri_psi_ref_clk", },
{ .fw_name = "boot_clk",
.name = "boot_clk", },
};
static const struct clk_parent_data mpu_mux[] = {
{ .fw_name = "mpu_free_clk",
.name = "mpu_free_clk", },
{ .fw_name = "boot_clk",
.name = "boot_clk", },
};
static const struct clk_parent_data s2f_usr0_mux[] = {
{ .fw_name = "f2s-free-clk",
.name = "f2s-free-clk", },
{ .fw_name = "boot_clk",
.name = "boot_clk", },
};
static const struct clk_parent_data emac_mux[] = {
{ .fw_name = "emaca_free_clk",
.name = "emaca_free_clk", },
{ .fw_name = "emacb_free_clk",
.name = "emacb_free_clk", },
};
static const struct clk_parent_data noc_mux[] = {
{ .fw_name = "noc_free_clk",
.name = "noc_free_clk", },
{ .fw_name = "boot_clk",
.name = "boot_clk", },
};
static const struct clk_parent_data mpu_free_mux[] = {
{ .fw_name = "main_mpu_base_clk",
.name = "main_mpu_base_clk", },
{ .fw_name = "peri_mpu_base_clk",
.name = "peri_mpu_base_clk", },
{ .fw_name = "osc1",
.name = "osc1", },
{ .fw_name = "cb-intosc-hs-div2-clk",
.name = "cb-intosc-hs-div2-clk", },
{ .fw_name = "f2s-free-clk",
.name = "f2s-free-clk", },
};
/* clocks in AO (always on) controller */ /* clocks in AO (always on) controller */
static const struct stratix10_pll_clock s10_pll_clks[] = { static const struct stratix10_pll_clock s10_pll_clks[] = {
......
...@@ -14,7 +14,7 @@ struct stratix10_clock_data { ...@@ -14,7 +14,7 @@ struct stratix10_clock_data {
struct stratix10_pll_clock { struct stratix10_pll_clock {
unsigned int id; unsigned int id;
const char *name; const char *name;
const char *const *parent_names; const struct clk_parent_data *parent_data;
u8 num_parents; u8 num_parents;
unsigned long flags; unsigned long flags;
unsigned long offset; unsigned long offset;
...@@ -24,7 +24,7 @@ struct stratix10_perip_c_clock { ...@@ -24,7 +24,7 @@ struct stratix10_perip_c_clock {
unsigned int id; unsigned int id;
const char *name; const char *name;
const char *parent_name; const char *parent_name;
const char *const *parent_names; const struct clk_parent_data *parent_data;
u8 num_parents; u8 num_parents;
unsigned long flags; unsigned long flags;
unsigned long offset; unsigned long offset;
...@@ -34,7 +34,7 @@ struct stratix10_perip_cnt_clock { ...@@ -34,7 +34,7 @@ struct stratix10_perip_cnt_clock {
unsigned int id; unsigned int id;
const char *name; const char *name;
const char *parent_name; const char *parent_name;
const char *const *parent_names; const struct clk_parent_data *parent_data;
u8 num_parents; u8 num_parents;
unsigned long flags; unsigned long flags;
unsigned long offset; unsigned long offset;
...@@ -47,7 +47,7 @@ struct stratix10_gate_clock { ...@@ -47,7 +47,7 @@ struct stratix10_gate_clock {
unsigned int id; unsigned int id;
const char *name; const char *name;
const char *parent_name; const char *parent_name;
const char *const *parent_names; const struct clk_parent_data *parent_data;
u8 num_parents; u8 num_parents;
unsigned long flags; unsigned long flags;
unsigned long gate_reg; unsigned long gate_reg;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment