|
@@ -201,7 +201,7 @@ static struct rockchip_clk_branch rk3128_uart2_fracmux __initdata =
|
|
|
MUX(SCLK_UART2, "sclk_uart2", mux_uart2_p, CLK_SET_RATE_PARENT,
|
|
|
RK2928_CLKSEL_CON(15), 8, 2, MFLAGS);
|
|
|
|
|
|
-static struct rockchip_clk_branch rk3128_clk_branches[] __initdata = {
|
|
|
+static struct rockchip_clk_branch common_clk_branches[] __initdata = {
|
|
|
/*
|
|
|
* Clock-Architecture Diagram 1
|
|
|
*/
|
|
@@ -459,10 +459,6 @@ static struct rockchip_clk_branch rk3128_clk_branches[] __initdata = {
|
|
|
RK2928_CLKSEL_CON(2), 14, 2, MFLAGS, 8, 5, DFLAGS,
|
|
|
RK2928_CLKGATE_CON(10), 15, GFLAGS),
|
|
|
|
|
|
- COMPOSITE(SCLK_SFC, "sclk_sfc", mux_sclk_sfc_src_p, 0,
|
|
|
- RK2928_CLKSEL_CON(11), 14, 2, MFLAGS, 8, 5, DFLAGS,
|
|
|
- RK2928_CLKGATE_CON(3), 15, GFLAGS),
|
|
|
-
|
|
|
COMPOSITE_NOMUX(PCLK_PMU_PRE, "pclk_pmu_pre", "cpll", 0,
|
|
|
RK2928_CLKSEL_CON(29), 8, 6, DFLAGS,
|
|
|
RK2928_CLKGATE_CON(1), 0, GFLAGS),
|
|
@@ -495,7 +491,6 @@ static struct rockchip_clk_branch rk3128_clk_branches[] __initdata = {
|
|
|
GATE(ACLK_DMAC, "aclk_dmac", "aclk_peri", 0, RK2928_CLKGATE_CON(5), 1, GFLAGS),
|
|
|
GATE(0, "aclk_peri_niu", "aclk_peri", CLK_IGNORE_UNUSED, RK2928_CLKGATE_CON(9), 15, GFLAGS),
|
|
|
GATE(0, "aclk_cpu_to_peri", "aclk_peri", CLK_IGNORE_UNUSED, RK2928_CLKGATE_CON(4), 2, GFLAGS),
|
|
|
- GATE(HCLK_GPS, "hclk_gps", "aclk_peri", 0, RK2928_CLKGATE_CON(3), 14, GFLAGS),
|
|
|
|
|
|
GATE(HCLK_I2S_8CH, "hclk_i2s_8ch", "hclk_peri", 0, RK2928_CLKGATE_CON(7), 4, GFLAGS),
|
|
|
GATE(0, "hclk_peri_matrix", "hclk_peri", CLK_IGNORE_UNUSED, RK2928_CLKGATE_CON(4), 0, GFLAGS),
|
|
@@ -541,7 +536,6 @@ static struct rockchip_clk_branch rk3128_clk_branches[] __initdata = {
|
|
|
GATE(0, "hclk_rom", "hclk_cpu", CLK_IGNORE_UNUSED, RK2928_CLKGATE_CON(5), 6, GFLAGS),
|
|
|
GATE(HCLK_CRYPTO, "hclk_crypto", "hclk_cpu", 0, RK2928_CLKGATE_CON(3), 5, GFLAGS),
|
|
|
|
|
|
- GATE(PCLK_HDMI, "pclk_hdmi", "pclk_cpu", 0, RK2928_CLKGATE_CON(3), 8, GFLAGS),
|
|
|
GATE(PCLK_ACODEC, "pclk_acodec", "pclk_cpu", 0, RK2928_CLKGATE_CON(5), 14, GFLAGS),
|
|
|
GATE(0, "pclk_ddrupctl", "pclk_cpu", CLK_IGNORE_UNUSED, RK2928_CLKGATE_CON(5), 7, GFLAGS),
|
|
|
GATE(0, "pclk_grf", "pclk_cpu", CLK_IGNORE_UNUSED, RK2928_CLKGATE_CON(5), 4, GFLAGS),
|
|
@@ -561,6 +555,21 @@ static struct rockchip_clk_branch rk3128_clk_branches[] __initdata = {
|
|
|
MMC(SCLK_EMMC_SAMPLE, "emmc_sample", "sclk_emmc", RK3228_EMMC_CON1, 0),
|
|
|
};
|
|
|
|
|
|
+static struct rockchip_clk_branch rk3126_clk_branches[] __initdata = {
|
|
|
+ GATE(0, "pclk_stimer", "pclk_cpu", CLK_IGNORE_UNUSED, RK2928_CLKGATE_CON(3), 15, GFLAGS),
|
|
|
+ GATE(0, "pclk_s_efuse", "pclk_cpu", CLK_IGNORE_UNUSED, RK2928_CLKGATE_CON(3), 14, GFLAGS),
|
|
|
+ GATE(0, "pclk_sgrf", "pclk_cpu", CLK_IGNORE_UNUSED, RK2928_CLKGATE_CON(3), 8, GFLAGS),
|
|
|
+};
|
|
|
+
|
|
|
+static struct rockchip_clk_branch rk3128_clk_branches[] __initdata = {
|
|
|
+ COMPOSITE(SCLK_SFC, "sclk_sfc", mux_sclk_sfc_src_p, 0,
|
|
|
+ RK2928_CLKSEL_CON(11), 14, 2, MFLAGS, 8, 5, DFLAGS,
|
|
|
+ RK2928_CLKGATE_CON(3), 15, GFLAGS),
|
|
|
+
|
|
|
+ GATE(HCLK_GPS, "hclk_gps", "aclk_peri", 0, RK2928_CLKGATE_CON(3), 14, GFLAGS),
|
|
|
+ GATE(PCLK_HDMI, "pclk_hdmi", "pclk_cpu", 0, RK2928_CLKGATE_CON(3), 8, GFLAGS),
|
|
|
+};
|
|
|
+
|
|
|
static const char *const rk3128_critical_clocks[] __initconst = {
|
|
|
"aclk_cpu",
|
|
|
"hclk_cpu",
|
|
@@ -570,7 +579,7 @@ static const char *const rk3128_critical_clocks[] __initconst = {
|
|
|
"pclk_peri",
|
|
|
};
|
|
|
|
|
|
-static void __init rk3128_clk_init(struct device_node *np)
|
|
|
+static struct rockchip_clk_provider *__init rk3128_common_clk_init(struct device_node *np)
|
|
|
{
|
|
|
struct rockchip_clk_provider *ctx;
|
|
|
void __iomem *reg_base;
|
|
@@ -578,23 +587,21 @@ static void __init rk3128_clk_init(struct device_node *np)
|
|
|
reg_base = of_iomap(np, 0);
|
|
|
if (!reg_base) {
|
|
|
pr_err("%s: could not map cru region\n", __func__);
|
|
|
- return;
|
|
|
+ return ERR_PTR(-ENOMEM);
|
|
|
}
|
|
|
|
|
|
ctx = rockchip_clk_init(np, reg_base, CLK_NR_CLKS);
|
|
|
if (IS_ERR(ctx)) {
|
|
|
pr_err("%s: rockchip clk init failed\n", __func__);
|
|
|
iounmap(reg_base);
|
|
|
- return;
|
|
|
+ return ERR_PTR(-ENOMEM);
|
|
|
}
|
|
|
|
|
|
rockchip_clk_register_plls(ctx, rk3128_pll_clks,
|
|
|
ARRAY_SIZE(rk3128_pll_clks),
|
|
|
RK3128_GRF_SOC_STATUS0);
|
|
|
- rockchip_clk_register_branches(ctx, rk3128_clk_branches,
|
|
|
- ARRAY_SIZE(rk3128_clk_branches));
|
|
|
- rockchip_clk_protect_critical(rk3128_critical_clocks,
|
|
|
- ARRAY_SIZE(rk3128_critical_clocks));
|
|
|
+ rockchip_clk_register_branches(ctx, common_clk_branches,
|
|
|
+ ARRAY_SIZE(common_clk_branches));
|
|
|
|
|
|
rockchip_clk_register_armclk(ctx, ARMCLK, "armclk",
|
|
|
mux_armclk_p, ARRAY_SIZE(mux_armclk_p),
|
|
@@ -606,6 +613,40 @@ static void __init rk3128_clk_init(struct device_node *np)
|
|
|
|
|
|
rockchip_register_restart_notifier(ctx, RK2928_GLB_SRST_FST, NULL);
|
|
|
|
|
|
+ return ctx;
|
|
|
+}
|
|
|
+
|
|
|
+static void __init rk3126_clk_init(struct device_node *np)
|
|
|
+{
|
|
|
+ struct rockchip_clk_provider *ctx;
|
|
|
+
|
|
|
+ ctx = rk3128_common_clk_init(np);
|
|
|
+ if (IS_ERR(ctx))
|
|
|
+ return;
|
|
|
+
|
|
|
+ rockchip_clk_register_branches(ctx, rk3126_clk_branches,
|
|
|
+ ARRAY_SIZE(rk3126_clk_branches));
|
|
|
+ rockchip_clk_protect_critical(rk3128_critical_clocks,
|
|
|
+ ARRAY_SIZE(rk3128_critical_clocks));
|
|
|
+
|
|
|
+ rockchip_clk_of_add_provider(np, ctx);
|
|
|
+}
|
|
|
+
|
|
|
+CLK_OF_DECLARE(rk3126_cru, "rockchip,rk3126-cru", rk3126_clk_init);
|
|
|
+
|
|
|
+static void __init rk3128_clk_init(struct device_node *np)
|
|
|
+{
|
|
|
+ struct rockchip_clk_provider *ctx;
|
|
|
+
|
|
|
+ ctx = rk3128_common_clk_init(np);
|
|
|
+ if (IS_ERR(ctx))
|
|
|
+ return;
|
|
|
+
|
|
|
+ rockchip_clk_register_branches(ctx, rk3128_clk_branches,
|
|
|
+ ARRAY_SIZE(rk3128_clk_branches));
|
|
|
+ rockchip_clk_protect_critical(rk3128_critical_clocks,
|
|
|
+ ARRAY_SIZE(rk3128_critical_clocks));
|
|
|
+
|
|
|
rockchip_clk_of_add_provider(np, ctx);
|
|
|
}
|
|
|
|