clk: rockchip: Add support for multiple clock providers
There are need to support Multi-CRUs probability in future, but it is not supported on the current Rockchip Clock Framework. Therefore, this patch add support a provider as the parameter handler when we call the clock register functions for per CRU. Signed-off-by: Xing Zheng <zhengxing@rock-chips.com> Signed-off-by: Heiko Stuebner <heiko@sntech.de>
This commit is contained in:

committed by
Heiko Stuebner

parent
268aebaa24
commit
ef1d9feecc
@@ -759,57 +759,74 @@ static const char *const rk3188_critical_clocks[] __initconst = {
|
||||
"hclk_cpubus"
|
||||
};
|
||||
|
||||
static void __init rk3188_common_clk_init(struct device_node *np)
|
||||
static struct rockchip_clk_provider *__init rk3188_common_clk_init(struct device_node *np)
|
||||
{
|
||||
struct rockchip_clk_provider *ctx;
|
||||
void __iomem *reg_base;
|
||||
|
||||
reg_base = of_iomap(np, 0);
|
||||
if (!reg_base) {
|
||||
pr_err("%s: could not map cru region\n", __func__);
|
||||
return;
|
||||
return ERR_PTR(-ENOMEM);
|
||||
}
|
||||
|
||||
rockchip_clk_init(np, reg_base, CLK_NR_CLKS);
|
||||
ctx = rockchip_clk_init(np, reg_base, CLK_NR_CLKS);
|
||||
if (IS_ERR(ctx)) {
|
||||
pr_err("%s: rockchip clk init failed\n", __func__);
|
||||
return ERR_PTR(-ENOMEM);
|
||||
}
|
||||
|
||||
rockchip_clk_register_branches(common_clk_branches,
|
||||
rockchip_clk_register_branches(ctx, common_clk_branches,
|
||||
ARRAY_SIZE(common_clk_branches));
|
||||
|
||||
rockchip_register_softrst(np, 9, reg_base + RK2928_SOFTRST_CON(0),
|
||||
ROCKCHIP_SOFTRST_HIWORD_MASK);
|
||||
|
||||
rockchip_register_restart_notifier(RK2928_GLB_SRST_FST, NULL);
|
||||
rockchip_register_restart_notifier(ctx, RK2928_GLB_SRST_FST, NULL);
|
||||
|
||||
return ctx;
|
||||
}
|
||||
|
||||
static void __init rk3066a_clk_init(struct device_node *np)
|
||||
{
|
||||
rk3188_common_clk_init(np);
|
||||
rockchip_clk_register_plls(rk3066_pll_clks,
|
||||
struct rockchip_clk_provider *ctx;
|
||||
|
||||
ctx = rk3188_common_clk_init(np);
|
||||
if (IS_ERR(ctx))
|
||||
return;
|
||||
|
||||
rockchip_clk_register_plls(ctx, rk3066_pll_clks,
|
||||
ARRAY_SIZE(rk3066_pll_clks),
|
||||
RK3066_GRF_SOC_STATUS);
|
||||
rockchip_clk_register_branches(rk3066a_clk_branches,
|
||||
rockchip_clk_register_branches(ctx, rk3066a_clk_branches,
|
||||
ARRAY_SIZE(rk3066a_clk_branches));
|
||||
rockchip_clk_register_armclk(ARMCLK, "armclk",
|
||||
rockchip_clk_register_armclk(ctx, ARMCLK, "armclk",
|
||||
mux_armclk_p, ARRAY_SIZE(mux_armclk_p),
|
||||
&rk3066_cpuclk_data, rk3066_cpuclk_rates,
|
||||
ARRAY_SIZE(rk3066_cpuclk_rates));
|
||||
rockchip_clk_protect_critical(rk3188_critical_clocks,
|
||||
ARRAY_SIZE(rk3188_critical_clocks));
|
||||
rockchip_clk_of_add_provider(np, ctx);
|
||||
}
|
||||
CLK_OF_DECLARE(rk3066a_cru, "rockchip,rk3066a-cru", rk3066a_clk_init);
|
||||
|
||||
static void __init rk3188a_clk_init(struct device_node *np)
|
||||
{
|
||||
struct rockchip_clk_provider *ctx;
|
||||
struct clk *clk1, *clk2;
|
||||
unsigned long rate;
|
||||
int ret;
|
||||
|
||||
rk3188_common_clk_init(np);
|
||||
rockchip_clk_register_plls(rk3188_pll_clks,
|
||||
ctx = rk3188_common_clk_init(np);
|
||||
if (IS_ERR(ctx))
|
||||
return;
|
||||
|
||||
rockchip_clk_register_plls(ctx, rk3188_pll_clks,
|
||||
ARRAY_SIZE(rk3188_pll_clks),
|
||||
RK3188_GRF_SOC_STATUS);
|
||||
rockchip_clk_register_branches(rk3188_clk_branches,
|
||||
rockchip_clk_register_branches(ctx, rk3188_clk_branches,
|
||||
ARRAY_SIZE(rk3188_clk_branches));
|
||||
rockchip_clk_register_armclk(ARMCLK, "armclk",
|
||||
rockchip_clk_register_armclk(ctx, ARMCLK, "armclk",
|
||||
mux_armclk_p, ARRAY_SIZE(mux_armclk_p),
|
||||
&rk3188_cpuclk_data, rk3188_cpuclk_rates,
|
||||
ARRAY_SIZE(rk3188_cpuclk_rates));
|
||||
@@ -833,6 +850,7 @@ static void __init rk3188a_clk_init(struct device_node *np)
|
||||
|
||||
rockchip_clk_protect_critical(rk3188_critical_clocks,
|
||||
ARRAY_SIZE(rk3188_critical_clocks));
|
||||
rockchip_clk_of_add_provider(np, ctx);
|
||||
}
|
||||
CLK_OF_DECLARE(rk3188a_cru, "rockchip,rk3188a-cru", rk3188a_clk_init);
|
||||
|
||||
|
Reference in New Issue
Block a user