162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Unisoc SC9863A clock driver 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright (C) 2019 Unisoc, Inc. 662306a36Sopenharmony_ci * Author: Chunyan Zhang <chunyan.zhang@unisoc.com> 762306a36Sopenharmony_ci */ 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#include <linux/clk-provider.h> 1062306a36Sopenharmony_ci#include <linux/err.h> 1162306a36Sopenharmony_ci#include <linux/io.h> 1262306a36Sopenharmony_ci#include <linux/module.h> 1362306a36Sopenharmony_ci#include <linux/platform_device.h> 1462306a36Sopenharmony_ci#include <linux/slab.h> 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_ci#include <dt-bindings/clock/sprd,sc9863a-clk.h> 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci#include "common.h" 1962306a36Sopenharmony_ci#include "composite.h" 2062306a36Sopenharmony_ci#include "div.h" 2162306a36Sopenharmony_ci#include "gate.h" 2262306a36Sopenharmony_ci#include "mux.h" 2362306a36Sopenharmony_ci#include "pll.h" 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ci/* mpll*_gate clocks control cpu cores, they were enabled by default */ 2662306a36Sopenharmony_cistatic SPRD_PLL_SC_GATE_CLK_FW_NAME(mpll0_gate, "mpll0-gate", "ext-26m", 0x94, 2762306a36Sopenharmony_ci 0x1000, BIT(0), CLK_IGNORE_UNUSED, 0, 240); 2862306a36Sopenharmony_cistatic SPRD_PLL_SC_GATE_CLK_FW_NAME(dpll0_gate, "dpll0-gate", "ext-26m", 0x98, 2962306a36Sopenharmony_ci 0x1000, BIT(0), 0, 0, 240); 3062306a36Sopenharmony_cistatic SPRD_PLL_SC_GATE_CLK_FW_NAME(lpll_gate, "lpll-gate", "ext-26m", 0x9c, 3162306a36Sopenharmony_ci 0x1000, BIT(0), 0, 0, 240); 3262306a36Sopenharmony_cistatic SPRD_PLL_SC_GATE_CLK_FW_NAME(gpll_gate, "gpll-gate", "ext-26m", 0xa8, 3362306a36Sopenharmony_ci 0x1000, BIT(0), 0, 0, 240); 3462306a36Sopenharmony_cistatic SPRD_PLL_SC_GATE_CLK_FW_NAME(dpll1_gate, "dpll1-gate", "ext-26m", 0x1dc, 3562306a36Sopenharmony_ci 0x1000, BIT(0), 0, 0, 240); 3662306a36Sopenharmony_cistatic SPRD_PLL_SC_GATE_CLK_FW_NAME(mpll1_gate, "mpll1-gate", "ext-26m", 0x1e0, 3762306a36Sopenharmony_ci 0x1000, BIT(0), CLK_IGNORE_UNUSED, 0, 240); 3862306a36Sopenharmony_cistatic SPRD_PLL_SC_GATE_CLK_FW_NAME(mpll2_gate, "mpll2-gate", "ext-26m", 0x1e4, 3962306a36Sopenharmony_ci 0x1000, BIT(0), CLK_IGNORE_UNUSED, 0, 240); 4062306a36Sopenharmony_cistatic SPRD_PLL_SC_GATE_CLK_FW_NAME(isppll_gate, "isppll-gate", "ext-26m", 4162306a36Sopenharmony_ci 0x1e8, 0x1000, BIT(0), 0, 0, 240); 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_cistatic struct sprd_clk_common *sc9863a_pmu_gate_clks[] = { 4462306a36Sopenharmony_ci /* address base is 0x402b0000 */ 4562306a36Sopenharmony_ci &mpll0_gate.common, 4662306a36Sopenharmony_ci &dpll0_gate.common, 4762306a36Sopenharmony_ci &lpll_gate.common, 4862306a36Sopenharmony_ci &gpll_gate.common, 4962306a36Sopenharmony_ci &dpll1_gate.common, 5062306a36Sopenharmony_ci &mpll1_gate.common, 5162306a36Sopenharmony_ci &mpll2_gate.common, 5262306a36Sopenharmony_ci &isppll_gate.common, 5362306a36Sopenharmony_ci}; 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_cistatic struct clk_hw_onecell_data sc9863a_pmu_gate_hws = { 5662306a36Sopenharmony_ci .hws = { 5762306a36Sopenharmony_ci [CLK_MPLL0_GATE] = &mpll0_gate.common.hw, 5862306a36Sopenharmony_ci [CLK_DPLL0_GATE] = &dpll0_gate.common.hw, 5962306a36Sopenharmony_ci [CLK_LPLL_GATE] = &lpll_gate.common.hw, 6062306a36Sopenharmony_ci [CLK_GPLL_GATE] = &gpll_gate.common.hw, 6162306a36Sopenharmony_ci [CLK_DPLL1_GATE] = &dpll1_gate.common.hw, 6262306a36Sopenharmony_ci [CLK_MPLL1_GATE] = &mpll1_gate.common.hw, 6362306a36Sopenharmony_ci [CLK_MPLL2_GATE] = &mpll2_gate.common.hw, 6462306a36Sopenharmony_ci [CLK_ISPPLL_GATE] = &isppll_gate.common.hw, 6562306a36Sopenharmony_ci }, 6662306a36Sopenharmony_ci .num = CLK_PMU_APB_NUM, 6762306a36Sopenharmony_ci}; 6862306a36Sopenharmony_ci 6962306a36Sopenharmony_cistatic const struct sprd_clk_desc sc9863a_pmu_gate_desc = { 7062306a36Sopenharmony_ci .clk_clks = sc9863a_pmu_gate_clks, 7162306a36Sopenharmony_ci .num_clk_clks = ARRAY_SIZE(sc9863a_pmu_gate_clks), 7262306a36Sopenharmony_ci .hw_clks = &sc9863a_pmu_gate_hws, 7362306a36Sopenharmony_ci}; 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_cistatic const u64 itable[5] = {4, 1000000000, 1200000000, 7662306a36Sopenharmony_ci 1400000000, 1600000000}; 7762306a36Sopenharmony_ci 7862306a36Sopenharmony_cistatic const struct clk_bit_field f_twpll[PLL_FACT_MAX] = { 7962306a36Sopenharmony_ci { .shift = 95, .width = 1 }, /* lock_done */ 8062306a36Sopenharmony_ci { .shift = 0, .width = 1 }, /* div_s */ 8162306a36Sopenharmony_ci { .shift = 1, .width = 1 }, /* mod_en */ 8262306a36Sopenharmony_ci { .shift = 2, .width = 1 }, /* sdm_en */ 8362306a36Sopenharmony_ci { .shift = 0, .width = 0 }, /* refin */ 8462306a36Sopenharmony_ci { .shift = 3, .width = 3 }, /* ibias */ 8562306a36Sopenharmony_ci { .shift = 8, .width = 11 }, /* n */ 8662306a36Sopenharmony_ci { .shift = 55, .width = 7 }, /* nint */ 8762306a36Sopenharmony_ci { .shift = 32, .width = 23}, /* kint */ 8862306a36Sopenharmony_ci { .shift = 0, .width = 0 }, /* prediv */ 8962306a36Sopenharmony_ci { .shift = 0, .width = 0 }, /* postdiv */ 9062306a36Sopenharmony_ci}; 9162306a36Sopenharmony_cistatic SPRD_PLL_FW_NAME(twpll, "twpll", "ext-26m", 0x4, 3, itable, 9262306a36Sopenharmony_ci f_twpll, 240, 1000, 1000, 0, 0); 9362306a36Sopenharmony_cistatic CLK_FIXED_FACTOR_HW(twpll_768m, "twpll-768m", &twpll.common.hw, 2, 1, 0); 9462306a36Sopenharmony_cistatic CLK_FIXED_FACTOR_HW(twpll_384m, "twpll-384m", &twpll.common.hw, 4, 1, 0); 9562306a36Sopenharmony_cistatic CLK_FIXED_FACTOR_HW(twpll_192m, "twpll-192m", &twpll.common.hw, 8, 1, 0); 9662306a36Sopenharmony_cistatic CLK_FIXED_FACTOR_HW(twpll_96m, "twpll-96m", &twpll.common.hw, 16, 1, 0); 9762306a36Sopenharmony_cistatic CLK_FIXED_FACTOR_HW(twpll_48m, "twpll-48m", &twpll.common.hw, 32, 1, 0); 9862306a36Sopenharmony_cistatic CLK_FIXED_FACTOR_HW(twpll_24m, "twpll-24m", &twpll.common.hw, 64, 1, 0); 9962306a36Sopenharmony_cistatic CLK_FIXED_FACTOR_HW(twpll_12m, "twpll-12m", &twpll.common.hw, 128, 1, 0); 10062306a36Sopenharmony_cistatic CLK_FIXED_FACTOR_HW(twpll_512m, "twpll-512m", &twpll.common.hw, 3, 1, 0); 10162306a36Sopenharmony_cistatic CLK_FIXED_FACTOR_HW(twpll_256m, "twpll-256m", &twpll.common.hw, 6, 1, 0); 10262306a36Sopenharmony_cistatic CLK_FIXED_FACTOR_HW(twpll_128m, "twpll-128m", &twpll.common.hw, 12, 1, 0); 10362306a36Sopenharmony_cistatic CLK_FIXED_FACTOR_HW(twpll_64m, "twpll-64m", &twpll.common.hw, 24, 1, 0); 10462306a36Sopenharmony_cistatic CLK_FIXED_FACTOR_HW(twpll_307m2, "twpll-307m2", &twpll.common.hw, 5, 1, 0); 10562306a36Sopenharmony_cistatic CLK_FIXED_FACTOR_HW(twpll_219m4, "twpll-219m4", &twpll.common.hw, 7, 1, 0); 10662306a36Sopenharmony_cistatic CLK_FIXED_FACTOR_HW(twpll_170m6, "twpll-170m6", &twpll.common.hw, 9, 1, 0); 10762306a36Sopenharmony_cistatic CLK_FIXED_FACTOR_HW(twpll_153m6, "twpll-153m6", &twpll.common.hw, 10, 1, 0); 10862306a36Sopenharmony_cistatic CLK_FIXED_FACTOR_HW(twpll_76m8, "twpll-76m8", &twpll.common.hw, 20, 1, 0); 10962306a36Sopenharmony_cistatic CLK_FIXED_FACTOR_HW(twpll_51m2, "twpll-51m2", &twpll.common.hw, 30, 1, 0); 11062306a36Sopenharmony_cistatic CLK_FIXED_FACTOR_HW(twpll_38m4, "twpll-38m4", &twpll.common.hw, 40, 1, 0); 11162306a36Sopenharmony_cistatic CLK_FIXED_FACTOR_HW(twpll_19m2, "twpll-19m2", &twpll.common.hw, 80, 1, 0); 11262306a36Sopenharmony_ci 11362306a36Sopenharmony_cistatic const struct clk_bit_field f_lpll[PLL_FACT_MAX] = { 11462306a36Sopenharmony_ci { .shift = 95, .width = 1 }, /* lock_done */ 11562306a36Sopenharmony_ci { .shift = 0, .width = 1 }, /* div_s */ 11662306a36Sopenharmony_ci { .shift = 1, .width = 1 }, /* mod_en */ 11762306a36Sopenharmony_ci { .shift = 2, .width = 1 }, /* sdm_en */ 11862306a36Sopenharmony_ci { .shift = 0, .width = 0 }, /* refin */ 11962306a36Sopenharmony_ci { .shift = 6, .width = 2 }, /* ibias */ 12062306a36Sopenharmony_ci { .shift = 8, .width = 11 }, /* n */ 12162306a36Sopenharmony_ci { .shift = 55, .width = 7 }, /* nint */ 12262306a36Sopenharmony_ci { .shift = 32, .width = 23}, /* kint */ 12362306a36Sopenharmony_ci { .shift = 0, .width = 0 }, /* prediv */ 12462306a36Sopenharmony_ci { .shift = 0, .width = 0 }, /* postdiv */ 12562306a36Sopenharmony_ci}; 12662306a36Sopenharmony_cistatic SPRD_PLL_HW(lpll, "lpll", &lpll_gate.common.hw, 0x20, 3, itable, 12762306a36Sopenharmony_ci f_lpll, 240, 1000, 1000, 0, 0); 12862306a36Sopenharmony_cistatic CLK_FIXED_FACTOR_HW(lpll_409m6, "lpll-409m6", &lpll.common.hw, 3, 1, 0); 12962306a36Sopenharmony_cistatic CLK_FIXED_FACTOR_HW(lpll_245m76, "lpll-245m76", &lpll.common.hw, 5, 1, 0); 13062306a36Sopenharmony_ci 13162306a36Sopenharmony_cistatic const struct clk_bit_field f_gpll[PLL_FACT_MAX] = { 13262306a36Sopenharmony_ci { .shift = 95, .width = 1 }, /* lock_done */ 13362306a36Sopenharmony_ci { .shift = 0, .width = 1 }, /* div_s */ 13462306a36Sopenharmony_ci { .shift = 1, .width = 1 }, /* mod_en */ 13562306a36Sopenharmony_ci { .shift = 2, .width = 1 }, /* sdm_en */ 13662306a36Sopenharmony_ci { .shift = 0, .width = 0 }, /* refin */ 13762306a36Sopenharmony_ci { .shift = 6, .width = 2 }, /* ibias */ 13862306a36Sopenharmony_ci { .shift = 8, .width = 11 }, /* n */ 13962306a36Sopenharmony_ci { .shift = 55, .width = 7 }, /* nint */ 14062306a36Sopenharmony_ci { .shift = 32, .width = 23}, /* kint */ 14162306a36Sopenharmony_ci { .shift = 0, .width = 0 }, /* prediv */ 14262306a36Sopenharmony_ci { .shift = 80, .width = 1 }, /* postdiv */ 14362306a36Sopenharmony_ci}; 14462306a36Sopenharmony_cistatic SPRD_PLL_HW(gpll, "gpll", &gpll_gate.common.hw, 0x38, 3, itable, 14562306a36Sopenharmony_ci f_gpll, 240, 1000, 1000, 1, 400000000); 14662306a36Sopenharmony_ci 14762306a36Sopenharmony_cistatic SPRD_PLL_HW(isppll, "isppll", &isppll_gate.common.hw, 0x50, 3, itable, 14862306a36Sopenharmony_ci f_gpll, 240, 1000, 1000, 0, 0); 14962306a36Sopenharmony_cistatic CLK_FIXED_FACTOR_HW(isppll_468m, "isppll-468m", &isppll.common.hw, 2, 1, 0); 15062306a36Sopenharmony_ci 15162306a36Sopenharmony_cistatic struct sprd_clk_common *sc9863a_pll_clks[] = { 15262306a36Sopenharmony_ci /* address base is 0x40353000 */ 15362306a36Sopenharmony_ci &twpll.common, 15462306a36Sopenharmony_ci &lpll.common, 15562306a36Sopenharmony_ci &gpll.common, 15662306a36Sopenharmony_ci &isppll.common, 15762306a36Sopenharmony_ci}; 15862306a36Sopenharmony_ci 15962306a36Sopenharmony_cistatic struct clk_hw_onecell_data sc9863a_pll_hws = { 16062306a36Sopenharmony_ci .hws = { 16162306a36Sopenharmony_ci [CLK_TWPLL] = &twpll.common.hw, 16262306a36Sopenharmony_ci [CLK_TWPLL_768M] = &twpll_768m.hw, 16362306a36Sopenharmony_ci [CLK_TWPLL_384M] = &twpll_384m.hw, 16462306a36Sopenharmony_ci [CLK_TWPLL_192M] = &twpll_192m.hw, 16562306a36Sopenharmony_ci [CLK_TWPLL_96M] = &twpll_96m.hw, 16662306a36Sopenharmony_ci [CLK_TWPLL_48M] = &twpll_48m.hw, 16762306a36Sopenharmony_ci [CLK_TWPLL_24M] = &twpll_24m.hw, 16862306a36Sopenharmony_ci [CLK_TWPLL_12M] = &twpll_12m.hw, 16962306a36Sopenharmony_ci [CLK_TWPLL_512M] = &twpll_512m.hw, 17062306a36Sopenharmony_ci [CLK_TWPLL_256M] = &twpll_256m.hw, 17162306a36Sopenharmony_ci [CLK_TWPLL_128M] = &twpll_128m.hw, 17262306a36Sopenharmony_ci [CLK_TWPLL_64M] = &twpll_64m.hw, 17362306a36Sopenharmony_ci [CLK_TWPLL_307M2] = &twpll_307m2.hw, 17462306a36Sopenharmony_ci [CLK_TWPLL_219M4] = &twpll_219m4.hw, 17562306a36Sopenharmony_ci [CLK_TWPLL_170M6] = &twpll_170m6.hw, 17662306a36Sopenharmony_ci [CLK_TWPLL_153M6] = &twpll_153m6.hw, 17762306a36Sopenharmony_ci [CLK_TWPLL_76M8] = &twpll_76m8.hw, 17862306a36Sopenharmony_ci [CLK_TWPLL_51M2] = &twpll_51m2.hw, 17962306a36Sopenharmony_ci [CLK_TWPLL_38M4] = &twpll_38m4.hw, 18062306a36Sopenharmony_ci [CLK_TWPLL_19M2] = &twpll_19m2.hw, 18162306a36Sopenharmony_ci [CLK_LPLL] = &lpll.common.hw, 18262306a36Sopenharmony_ci [CLK_LPLL_409M6] = &lpll_409m6.hw, 18362306a36Sopenharmony_ci [CLK_LPLL_245M76] = &lpll_245m76.hw, 18462306a36Sopenharmony_ci [CLK_GPLL] = &gpll.common.hw, 18562306a36Sopenharmony_ci [CLK_ISPPLL] = &isppll.common.hw, 18662306a36Sopenharmony_ci [CLK_ISPPLL_468M] = &isppll_468m.hw, 18762306a36Sopenharmony_ci 18862306a36Sopenharmony_ci }, 18962306a36Sopenharmony_ci .num = CLK_ANLG_PHY_G1_NUM, 19062306a36Sopenharmony_ci}; 19162306a36Sopenharmony_ci 19262306a36Sopenharmony_cistatic const struct sprd_clk_desc sc9863a_pll_desc = { 19362306a36Sopenharmony_ci .clk_clks = sc9863a_pll_clks, 19462306a36Sopenharmony_ci .num_clk_clks = ARRAY_SIZE(sc9863a_pll_clks), 19562306a36Sopenharmony_ci .hw_clks = &sc9863a_pll_hws, 19662306a36Sopenharmony_ci}; 19762306a36Sopenharmony_ci 19862306a36Sopenharmony_cistatic const u64 itable_mpll[6] = {5, 1000000000, 1200000000, 1400000000, 19962306a36Sopenharmony_ci 1600000000, 1800000000}; 20062306a36Sopenharmony_cistatic SPRD_PLL_HW(mpll0, "mpll0", &mpll0_gate.common.hw, 0x0, 3, itable_mpll, 20162306a36Sopenharmony_ci f_gpll, 240, 1000, 1000, 1, 1000000000); 20262306a36Sopenharmony_cistatic SPRD_PLL_HW(mpll1, "mpll1", &mpll1_gate.common.hw, 0x18, 3, itable_mpll, 20362306a36Sopenharmony_ci f_gpll, 240, 1000, 1000, 1, 1000000000); 20462306a36Sopenharmony_cistatic SPRD_PLL_HW(mpll2, "mpll2", &mpll2_gate.common.hw, 0x30, 3, itable_mpll, 20562306a36Sopenharmony_ci f_gpll, 240, 1000, 1000, 1, 1000000000); 20662306a36Sopenharmony_cistatic CLK_FIXED_FACTOR_HW(mpll2_675m, "mpll2-675m", &mpll2.common.hw, 2, 1, 0); 20762306a36Sopenharmony_ci 20862306a36Sopenharmony_cistatic struct sprd_clk_common *sc9863a_mpll_clks[] = { 20962306a36Sopenharmony_ci /* address base is 0x40359000 */ 21062306a36Sopenharmony_ci &mpll0.common, 21162306a36Sopenharmony_ci &mpll1.common, 21262306a36Sopenharmony_ci &mpll2.common, 21362306a36Sopenharmony_ci}; 21462306a36Sopenharmony_ci 21562306a36Sopenharmony_cistatic struct clk_hw_onecell_data sc9863a_mpll_hws = { 21662306a36Sopenharmony_ci .hws = { 21762306a36Sopenharmony_ci [CLK_MPLL0] = &mpll0.common.hw, 21862306a36Sopenharmony_ci [CLK_MPLL1] = &mpll1.common.hw, 21962306a36Sopenharmony_ci [CLK_MPLL2] = &mpll2.common.hw, 22062306a36Sopenharmony_ci [CLK_MPLL2_675M] = &mpll2_675m.hw, 22162306a36Sopenharmony_ci 22262306a36Sopenharmony_ci }, 22362306a36Sopenharmony_ci .num = CLK_ANLG_PHY_G4_NUM, 22462306a36Sopenharmony_ci}; 22562306a36Sopenharmony_ci 22662306a36Sopenharmony_cistatic const struct sprd_clk_desc sc9863a_mpll_desc = { 22762306a36Sopenharmony_ci .clk_clks = sc9863a_mpll_clks, 22862306a36Sopenharmony_ci .num_clk_clks = ARRAY_SIZE(sc9863a_mpll_clks), 22962306a36Sopenharmony_ci .hw_clks = &sc9863a_mpll_hws, 23062306a36Sopenharmony_ci}; 23162306a36Sopenharmony_ci 23262306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_FW_NAME(audio_gate, "audio-gate", "ext-26m", 23362306a36Sopenharmony_ci 0x4, 0x1000, BIT(8), 0, 0); 23462306a36Sopenharmony_ci 23562306a36Sopenharmony_cistatic SPRD_PLL_FW_NAME(rpll, "rpll", "ext-26m", 0x10, 23662306a36Sopenharmony_ci 3, itable, f_lpll, 240, 1000, 1000, 0, 0); 23762306a36Sopenharmony_ci 23862306a36Sopenharmony_cistatic CLK_FIXED_FACTOR_HW(rpll_390m, "rpll-390m", &rpll.common.hw, 2, 1, 0); 23962306a36Sopenharmony_cistatic CLK_FIXED_FACTOR_HW(rpll_260m, "rpll-260m", &rpll.common.hw, 3, 1, 0); 24062306a36Sopenharmony_cistatic CLK_FIXED_FACTOR_HW(rpll_195m, "rpll-195m", &rpll.common.hw, 4, 1, 0); 24162306a36Sopenharmony_cistatic CLK_FIXED_FACTOR_HW(rpll_26m, "rpll-26m", &rpll.common.hw, 30, 1, 0); 24262306a36Sopenharmony_ci 24362306a36Sopenharmony_cistatic struct sprd_clk_common *sc9863a_rpll_clks[] = { 24462306a36Sopenharmony_ci /* address base is 0x4035c000 */ 24562306a36Sopenharmony_ci &audio_gate.common, 24662306a36Sopenharmony_ci &rpll.common, 24762306a36Sopenharmony_ci}; 24862306a36Sopenharmony_ci 24962306a36Sopenharmony_cistatic struct clk_hw_onecell_data sc9863a_rpll_hws = { 25062306a36Sopenharmony_ci .hws = { 25162306a36Sopenharmony_ci [CLK_AUDIO_GATE] = &audio_gate.common.hw, 25262306a36Sopenharmony_ci [CLK_RPLL] = &rpll.common.hw, 25362306a36Sopenharmony_ci [CLK_RPLL_390M] = &rpll_390m.hw, 25462306a36Sopenharmony_ci [CLK_RPLL_260M] = &rpll_260m.hw, 25562306a36Sopenharmony_ci [CLK_RPLL_195M] = &rpll_195m.hw, 25662306a36Sopenharmony_ci [CLK_RPLL_26M] = &rpll_26m.hw, 25762306a36Sopenharmony_ci }, 25862306a36Sopenharmony_ci .num = CLK_ANLG_PHY_G5_NUM, 25962306a36Sopenharmony_ci}; 26062306a36Sopenharmony_ci 26162306a36Sopenharmony_cistatic const struct sprd_clk_desc sc9863a_rpll_desc = { 26262306a36Sopenharmony_ci .clk_clks = sc9863a_rpll_clks, 26362306a36Sopenharmony_ci .num_clk_clks = ARRAY_SIZE(sc9863a_rpll_clks), 26462306a36Sopenharmony_ci .hw_clks = &sc9863a_rpll_hws, 26562306a36Sopenharmony_ci}; 26662306a36Sopenharmony_ci 26762306a36Sopenharmony_cistatic const u64 itable_dpll[5] = {4, 1211000000, 1320000000, 1570000000, 26862306a36Sopenharmony_ci 1866000000}; 26962306a36Sopenharmony_cistatic SPRD_PLL_HW(dpll0, "dpll0", &dpll0_gate.common.hw, 0x0, 3, itable_dpll, 27062306a36Sopenharmony_ci f_lpll, 240, 1000, 1000, 0, 0); 27162306a36Sopenharmony_cistatic SPRD_PLL_HW(dpll1, "dpll1", &dpll1_gate.common.hw, 0x18, 3, itable_dpll, 27262306a36Sopenharmony_ci f_lpll, 240, 1000, 1000, 0, 0); 27362306a36Sopenharmony_ci 27462306a36Sopenharmony_cistatic CLK_FIXED_FACTOR_HW(dpll0_933m, "dpll0-933m", &dpll0.common.hw, 2, 1, 0); 27562306a36Sopenharmony_cistatic CLK_FIXED_FACTOR_HW(dpll0_622m3, "dpll0-622m3", &dpll0.common.hw, 3, 1, 0); 27662306a36Sopenharmony_cistatic CLK_FIXED_FACTOR_HW(dpll1_400m, "dpll1-400m", &dpll0.common.hw, 4, 1, 0); 27762306a36Sopenharmony_cistatic CLK_FIXED_FACTOR_HW(dpll1_266m7, "dpll1-266m7", &dpll0.common.hw, 6, 1, 0); 27862306a36Sopenharmony_cistatic CLK_FIXED_FACTOR_HW(dpll1_123m1, "dpll1-123m1", &dpll0.common.hw, 13, 1, 0); 27962306a36Sopenharmony_cistatic CLK_FIXED_FACTOR_HW(dpll1_50m, "dpll1-50m", &dpll0.common.hw, 32, 1, 0); 28062306a36Sopenharmony_ci 28162306a36Sopenharmony_cistatic struct sprd_clk_common *sc9863a_dpll_clks[] = { 28262306a36Sopenharmony_ci /* address base is 0x40363000 */ 28362306a36Sopenharmony_ci &dpll0.common, 28462306a36Sopenharmony_ci &dpll1.common, 28562306a36Sopenharmony_ci}; 28662306a36Sopenharmony_ci 28762306a36Sopenharmony_cistatic struct clk_hw_onecell_data sc9863a_dpll_hws = { 28862306a36Sopenharmony_ci .hws = { 28962306a36Sopenharmony_ci [CLK_DPLL0] = &dpll0.common.hw, 29062306a36Sopenharmony_ci [CLK_DPLL1] = &dpll1.common.hw, 29162306a36Sopenharmony_ci [CLK_DPLL0_933M] = &dpll0_933m.hw, 29262306a36Sopenharmony_ci [CLK_DPLL0_622M3] = &dpll0_622m3.hw, 29362306a36Sopenharmony_ci [CLK_DPLL0_400M] = &dpll1_400m.hw, 29462306a36Sopenharmony_ci [CLK_DPLL0_266M7] = &dpll1_266m7.hw, 29562306a36Sopenharmony_ci [CLK_DPLL0_123M1] = &dpll1_123m1.hw, 29662306a36Sopenharmony_ci [CLK_DPLL0_50M] = &dpll1_50m.hw, 29762306a36Sopenharmony_ci 29862306a36Sopenharmony_ci }, 29962306a36Sopenharmony_ci .num = CLK_ANLG_PHY_G7_NUM, 30062306a36Sopenharmony_ci}; 30162306a36Sopenharmony_ci 30262306a36Sopenharmony_cistatic const struct sprd_clk_desc sc9863a_dpll_desc = { 30362306a36Sopenharmony_ci .clk_clks = sc9863a_dpll_clks, 30462306a36Sopenharmony_ci .num_clk_clks = ARRAY_SIZE(sc9863a_dpll_clks), 30562306a36Sopenharmony_ci .hw_clks = &sc9863a_dpll_hws, 30662306a36Sopenharmony_ci}; 30762306a36Sopenharmony_ci 30862306a36Sopenharmony_cistatic CLK_FIXED_FACTOR_FW_NAME(clk_6m5, "clk-6m5", "ext-26m", 4, 1, 0); 30962306a36Sopenharmony_cistatic CLK_FIXED_FACTOR_FW_NAME(clk_4m3, "clk-4m3", "ext-26m", 6, 1, 0); 31062306a36Sopenharmony_cistatic CLK_FIXED_FACTOR_FW_NAME(clk_2m, "clk-2m", "ext-26m", 13, 1, 0); 31162306a36Sopenharmony_cistatic CLK_FIXED_FACTOR_FW_NAME(clk_250k, "clk-250k", "ext-26m", 104, 1, 0); 31262306a36Sopenharmony_cistatic CLK_FIXED_FACTOR_FW_NAME(rco_25m, "rco-25m", "rco-100m", 4, 1, 0); 31362306a36Sopenharmony_cistatic CLK_FIXED_FACTOR_FW_NAME(rco_4m, "rco-4m", "rco-100m", 25, 1, 0); 31462306a36Sopenharmony_cistatic CLK_FIXED_FACTOR_FW_NAME(rco_2m, "rco-2m", "rco-100m", 50, 1, 0); 31562306a36Sopenharmony_ci 31662306a36Sopenharmony_ci#define SC9863A_MUX_FLAG \ 31762306a36Sopenharmony_ci (CLK_GET_RATE_NOCACHE | CLK_SET_RATE_NO_REPARENT) 31862306a36Sopenharmony_ci 31962306a36Sopenharmony_cistatic CLK_FIXED_FACTOR_FW_NAME(clk_13m, "clk-13m", "ext-26m", 2, 1, 0); 32062306a36Sopenharmony_cistatic const struct clk_parent_data emc_clk_parents[] = { 32162306a36Sopenharmony_ci { .fw_name = "ext-26m" }, 32262306a36Sopenharmony_ci { .hw = &twpll_384m.hw }, 32362306a36Sopenharmony_ci { .hw = &twpll_512m.hw }, 32462306a36Sopenharmony_ci { .hw = &twpll_768m.hw }, 32562306a36Sopenharmony_ci { .hw = &twpll.common.hw }, 32662306a36Sopenharmony_ci}; 32762306a36Sopenharmony_cistatic SPRD_MUX_CLK_DATA(emc_clk, "emc-clk", emc_clk_parents, 0x220, 32862306a36Sopenharmony_ci 0, 3, SC9863A_MUX_FLAG); 32962306a36Sopenharmony_ci 33062306a36Sopenharmony_cistatic const struct clk_parent_data aon_apb_parents[] = { 33162306a36Sopenharmony_ci { .hw = &rco_4m.hw }, 33262306a36Sopenharmony_ci { .hw = &rco_25m.hw }, 33362306a36Sopenharmony_ci { .fw_name = "ext-26m" }, 33462306a36Sopenharmony_ci { .hw = &twpll_96m.hw }, 33562306a36Sopenharmony_ci { .fw_name = "rco-100m" }, 33662306a36Sopenharmony_ci { .hw = &twpll_128m.hw }, 33762306a36Sopenharmony_ci}; 33862306a36Sopenharmony_cistatic SPRD_COMP_CLK_DATA(aon_apb, "aon-apb", aon_apb_parents, 0x224, 33962306a36Sopenharmony_ci 0, 3, 8, 2, 0); 34062306a36Sopenharmony_ci 34162306a36Sopenharmony_cistatic const struct clk_parent_data adi_parents[] = { 34262306a36Sopenharmony_ci { .hw = &rco_4m.hw }, 34362306a36Sopenharmony_ci { .hw = &rco_25m.hw }, 34462306a36Sopenharmony_ci { .fw_name = "ext-26m" }, 34562306a36Sopenharmony_ci { .hw = &twpll_38m4.hw }, 34662306a36Sopenharmony_ci { .hw = &twpll_51m2.hw }, 34762306a36Sopenharmony_ci}; 34862306a36Sopenharmony_cistatic SPRD_MUX_CLK_DATA(adi_clk, "adi-clk", adi_parents, 0x228, 34962306a36Sopenharmony_ci 0, 3, SC9863A_MUX_FLAG); 35062306a36Sopenharmony_ci 35162306a36Sopenharmony_cistatic const struct clk_parent_data aux_parents[] = { 35262306a36Sopenharmony_ci { .fw_name = "ext-32k" }, 35362306a36Sopenharmony_ci { .hw = &rpll_26m.hw }, 35462306a36Sopenharmony_ci { .fw_name = "ext-26m" }, 35562306a36Sopenharmony_ci}; 35662306a36Sopenharmony_cistatic SPRD_COMP_CLK_DATA(aux0_clk, "aux0-clk", aux_parents, 0x22c, 35762306a36Sopenharmony_ci 0, 5, 8, 4, 0); 35862306a36Sopenharmony_cistatic SPRD_COMP_CLK_DATA(aux1_clk, "aux1-clk", aux_parents, 0x230, 35962306a36Sopenharmony_ci 0, 5, 8, 4, 0); 36062306a36Sopenharmony_cistatic SPRD_COMP_CLK_DATA(aux2_clk, "aux2-clk", aux_parents, 0x234, 36162306a36Sopenharmony_ci 0, 5, 8, 4, 0); 36262306a36Sopenharmony_cistatic SPRD_COMP_CLK_DATA(probe_clk, "probe-clk", aux_parents, 0x238, 36362306a36Sopenharmony_ci 0, 5, 8, 4, 0); 36462306a36Sopenharmony_ci 36562306a36Sopenharmony_cistatic const struct clk_parent_data pwm_parents[] = { 36662306a36Sopenharmony_ci { .fw_name = "ext-32k" }, 36762306a36Sopenharmony_ci { .hw = &rpll_26m.hw }, 36862306a36Sopenharmony_ci { .fw_name = "ext-26m" }, 36962306a36Sopenharmony_ci { .hw = &twpll_48m.hw }, 37062306a36Sopenharmony_ci}; 37162306a36Sopenharmony_cistatic SPRD_MUX_CLK_DATA(pwm0_clk, "pwm0-clk", pwm_parents, 0x23c, 37262306a36Sopenharmony_ci 0, 2, SC9863A_MUX_FLAG); 37362306a36Sopenharmony_cistatic SPRD_MUX_CLK_DATA(pwm1_clk, "pwm1-clk", pwm_parents, 0x240, 37462306a36Sopenharmony_ci 0, 2, SC9863A_MUX_FLAG); 37562306a36Sopenharmony_cistatic SPRD_MUX_CLK_DATA(pwm2_clk, "pwm2-clk", pwm_parents, 0x244, 37662306a36Sopenharmony_ci 0, 2, SC9863A_MUX_FLAG); 37762306a36Sopenharmony_ci 37862306a36Sopenharmony_cistatic const struct clk_parent_data aon_thm_parents[] = { 37962306a36Sopenharmony_ci { .fw_name = "ext-32k" }, 38062306a36Sopenharmony_ci { .hw = &clk_250k.hw }, 38162306a36Sopenharmony_ci}; 38262306a36Sopenharmony_cistatic SPRD_MUX_CLK_DATA(aon_thm_clk, "aon-thm-clk", aon_thm_parents, 0x25c, 38362306a36Sopenharmony_ci 0, 1, SC9863A_MUX_FLAG); 38462306a36Sopenharmony_ci 38562306a36Sopenharmony_cistatic const struct clk_parent_data audif_parents[] = { 38662306a36Sopenharmony_ci { .fw_name = "ext-26m" }, 38762306a36Sopenharmony_ci { .hw = &twpll_38m4.hw }, 38862306a36Sopenharmony_ci { .hw = &twpll_51m2.hw }, 38962306a36Sopenharmony_ci}; 39062306a36Sopenharmony_cistatic SPRD_MUX_CLK_DATA(audif_clk, "audif-clk", audif_parents, 0x264, 39162306a36Sopenharmony_ci 0, 2, SC9863A_MUX_FLAG); 39262306a36Sopenharmony_ci 39362306a36Sopenharmony_cistatic const struct clk_parent_data cpu_dap_parents[] = { 39462306a36Sopenharmony_ci { .hw = &rco_4m.hw }, 39562306a36Sopenharmony_ci { .hw = &rco_25m.hw }, 39662306a36Sopenharmony_ci { .fw_name = "ext-26m" }, 39762306a36Sopenharmony_ci { .hw = &twpll_76m8.hw }, 39862306a36Sopenharmony_ci { .fw_name = "rco-100m" }, 39962306a36Sopenharmony_ci { .hw = &twpll_128m.hw }, 40062306a36Sopenharmony_ci { .hw = &twpll_153m6.hw }, 40162306a36Sopenharmony_ci}; 40262306a36Sopenharmony_cistatic SPRD_MUX_CLK_DATA(cpu_dap_clk, "cpu-dap-clk", cpu_dap_parents, 0x26c, 40362306a36Sopenharmony_ci 0, 3, SC9863A_MUX_FLAG); 40462306a36Sopenharmony_ci 40562306a36Sopenharmony_cistatic const struct clk_parent_data cpu_ts_parents[] = { 40662306a36Sopenharmony_ci { .fw_name = "ext-32k" }, 40762306a36Sopenharmony_ci { .fw_name = "ext-26m" }, 40862306a36Sopenharmony_ci { .hw = &twpll_128m.hw }, 40962306a36Sopenharmony_ci { .hw = &twpll_153m6.hw }, 41062306a36Sopenharmony_ci}; 41162306a36Sopenharmony_cistatic SPRD_MUX_CLK_DATA(cpu_ts_clk, "cpu-ts-clk", cpu_ts_parents, 0x274, 41262306a36Sopenharmony_ci 0, 2, SC9863A_MUX_FLAG); 41362306a36Sopenharmony_ci 41462306a36Sopenharmony_cistatic const struct clk_parent_data djtag_tck_parents[] = { 41562306a36Sopenharmony_ci { .hw = &rco_4m.hw }, 41662306a36Sopenharmony_ci { .fw_name = "ext-26m" }, 41762306a36Sopenharmony_ci}; 41862306a36Sopenharmony_cistatic SPRD_MUX_CLK_DATA(djtag_tck_clk, "djtag-tck-clk", djtag_tck_parents, 0x28c, 41962306a36Sopenharmony_ci 0, 1, SC9863A_MUX_FLAG); 42062306a36Sopenharmony_ci 42162306a36Sopenharmony_cistatic const struct clk_parent_data emc_ref_parents[] = { 42262306a36Sopenharmony_ci { .hw = &clk_6m5.hw }, 42362306a36Sopenharmony_ci { .hw = &clk_13m.hw }, 42462306a36Sopenharmony_ci { .fw_name = "ext-26m" }, 42562306a36Sopenharmony_ci}; 42662306a36Sopenharmony_cistatic SPRD_MUX_CLK_DATA(emc_ref_clk, "emc-ref-clk", emc_ref_parents, 0x29c, 42762306a36Sopenharmony_ci 0, 2, SC9863A_MUX_FLAG); 42862306a36Sopenharmony_ci 42962306a36Sopenharmony_cistatic const struct clk_parent_data cssys_parents[] = { 43062306a36Sopenharmony_ci { .hw = &rco_4m.hw }, 43162306a36Sopenharmony_ci { .fw_name = "ext-26m" }, 43262306a36Sopenharmony_ci { .hw = &twpll_96m.hw }, 43362306a36Sopenharmony_ci { .fw_name = "rco-100m" }, 43462306a36Sopenharmony_ci { .hw = &twpll_128m.hw }, 43562306a36Sopenharmony_ci { .hw = &twpll_153m6.hw }, 43662306a36Sopenharmony_ci { .hw = &twpll_384m.hw }, 43762306a36Sopenharmony_ci { .hw = &twpll_512m.hw }, 43862306a36Sopenharmony_ci { .hw = &mpll2_675m.hw }, 43962306a36Sopenharmony_ci}; 44062306a36Sopenharmony_cistatic SPRD_COMP_CLK_DATA(cssys_clk, "cssys-clk", cssys_parents, 0x2a0, 44162306a36Sopenharmony_ci 0, 4, 8, 2, 0); 44262306a36Sopenharmony_ci 44362306a36Sopenharmony_cistatic const struct clk_parent_data aon_pmu_parents[] = { 44462306a36Sopenharmony_ci { .fw_name = "ext-32k" }, 44562306a36Sopenharmony_ci { .hw = &rco_4m.hw }, 44662306a36Sopenharmony_ci { .fw_name = "ext-4m" }, 44762306a36Sopenharmony_ci}; 44862306a36Sopenharmony_cistatic SPRD_MUX_CLK_DATA(aon_pmu_clk, "aon-pmu-clk", aon_pmu_parents, 0x2a8, 44962306a36Sopenharmony_ci 0, 2, SC9863A_MUX_FLAG); 45062306a36Sopenharmony_ci 45162306a36Sopenharmony_cistatic const struct clk_parent_data pmu_26m_parents[] = { 45262306a36Sopenharmony_ci { .hw = &rco_4m.hw }, 45362306a36Sopenharmony_ci { .hw = &rco_25m.hw }, 45462306a36Sopenharmony_ci { .fw_name = "ext-26m" }, 45562306a36Sopenharmony_ci}; 45662306a36Sopenharmony_cistatic SPRD_MUX_CLK_DATA(pmu_26m_clk, "26m-pmu-clk", pmu_26m_parents, 0x2ac, 45762306a36Sopenharmony_ci 0, 2, SC9863A_MUX_FLAG); 45862306a36Sopenharmony_ci 45962306a36Sopenharmony_cistatic const struct clk_parent_data aon_tmr_parents[] = { 46062306a36Sopenharmony_ci { .hw = &rco_4m.hw }, 46162306a36Sopenharmony_ci { .fw_name = "ext-26m" }, 46262306a36Sopenharmony_ci}; 46362306a36Sopenharmony_cistatic SPRD_MUX_CLK_DATA(aon_tmr_clk, "aon-tmr-clk", aon_tmr_parents, 0x2b0, 46462306a36Sopenharmony_ci 0, 1, SC9863A_MUX_FLAG); 46562306a36Sopenharmony_ci 46662306a36Sopenharmony_cistatic const struct clk_parent_data power_cpu_parents[] = { 46762306a36Sopenharmony_ci { .fw_name = "ext-26m" }, 46862306a36Sopenharmony_ci { .hw = &rco_25m.hw }, 46962306a36Sopenharmony_ci { .fw_name = "rco-100m" }, 47062306a36Sopenharmony_ci { .hw = &twpll_128m.hw }, 47162306a36Sopenharmony_ci}; 47262306a36Sopenharmony_cistatic SPRD_MUX_CLK_DATA(power_cpu_clk, "power-cpu-clk", power_cpu_parents, 0x2c4, 47362306a36Sopenharmony_ci 0, 2, SC9863A_MUX_FLAG); 47462306a36Sopenharmony_ci 47562306a36Sopenharmony_cistatic const struct clk_parent_data ap_axi_parents[] = { 47662306a36Sopenharmony_ci { .fw_name = "ext-26m" }, 47762306a36Sopenharmony_ci { .hw = &twpll_76m8.hw }, 47862306a36Sopenharmony_ci { .hw = &twpll_128m.hw }, 47962306a36Sopenharmony_ci { .hw = &twpll_256m.hw }, 48062306a36Sopenharmony_ci}; 48162306a36Sopenharmony_cistatic SPRD_MUX_CLK_DATA(ap_axi, "ap-axi", ap_axi_parents, 0x2c8, 48262306a36Sopenharmony_ci 0, 2, SC9863A_MUX_FLAG); 48362306a36Sopenharmony_ci 48462306a36Sopenharmony_cistatic const struct clk_parent_data sdio_parents[] = { 48562306a36Sopenharmony_ci { .fw_name = "ext-26m" }, 48662306a36Sopenharmony_ci { .hw = &twpll_307m2.hw }, 48762306a36Sopenharmony_ci { .hw = &twpll_384m.hw }, 48862306a36Sopenharmony_ci { .hw = &rpll_390m.hw }, 48962306a36Sopenharmony_ci { .hw = &dpll1_400m.hw }, 49062306a36Sopenharmony_ci { .hw = &lpll_409m6.hw }, 49162306a36Sopenharmony_ci}; 49262306a36Sopenharmony_cistatic SPRD_MUX_CLK_DATA(sdio0_2x, "sdio0-2x", sdio_parents, 0x2cc, 49362306a36Sopenharmony_ci 0, 3, SC9863A_MUX_FLAG); 49462306a36Sopenharmony_cistatic SPRD_MUX_CLK_DATA(sdio1_2x, "sdio1-2x", sdio_parents, 0x2d4, 49562306a36Sopenharmony_ci 0, 3, SC9863A_MUX_FLAG); 49662306a36Sopenharmony_cistatic SPRD_MUX_CLK_DATA(sdio2_2x, "sdio2-2x", sdio_parents, 0x2dc, 49762306a36Sopenharmony_ci 0, 3, SC9863A_MUX_FLAG); 49862306a36Sopenharmony_cistatic SPRD_MUX_CLK_DATA(emmc_2x, "emmc-2x", sdio_parents, 0x2e4, 49962306a36Sopenharmony_ci 0, 3, SC9863A_MUX_FLAG); 50062306a36Sopenharmony_ci 50162306a36Sopenharmony_cistatic const struct clk_parent_data dpu_parents[] = { 50262306a36Sopenharmony_ci { .hw = &twpll_153m6.hw }, 50362306a36Sopenharmony_ci { .hw = &twpll_192m.hw }, 50462306a36Sopenharmony_ci { .hw = &twpll_256m.hw }, 50562306a36Sopenharmony_ci { .hw = &twpll_384m.hw }, 50662306a36Sopenharmony_ci}; 50762306a36Sopenharmony_cistatic SPRD_MUX_CLK_DATA(dpu_clk, "dpu", dpu_parents, 0x2f4, 50862306a36Sopenharmony_ci 0, 2, SC9863A_MUX_FLAG); 50962306a36Sopenharmony_ci 51062306a36Sopenharmony_cistatic const struct clk_parent_data dpu_dpi_parents[] = { 51162306a36Sopenharmony_ci { .hw = &twpll_128m.hw }, 51262306a36Sopenharmony_ci { .hw = &twpll_153m6.hw }, 51362306a36Sopenharmony_ci { .hw = &twpll_192m.hw }, 51462306a36Sopenharmony_ci}; 51562306a36Sopenharmony_cistatic SPRD_COMP_CLK_DATA(dpu_dpi, "dpu-dpi", dpu_dpi_parents, 0x2f8, 51662306a36Sopenharmony_ci 0, 2, 8, 4, 0); 51762306a36Sopenharmony_ci 51862306a36Sopenharmony_cistatic const struct clk_parent_data otg_ref_parents[] = { 51962306a36Sopenharmony_ci { .hw = &twpll_12m.hw }, 52062306a36Sopenharmony_ci { .fw_name = "ext-26m" }, 52162306a36Sopenharmony_ci}; 52262306a36Sopenharmony_cistatic SPRD_MUX_CLK_DATA(otg_ref_clk, "otg-ref-clk", otg_ref_parents, 0x308, 52362306a36Sopenharmony_ci 0, 1, SC9863A_MUX_FLAG); 52462306a36Sopenharmony_ci 52562306a36Sopenharmony_cistatic const struct clk_parent_data sdphy_apb_parents[] = { 52662306a36Sopenharmony_ci { .fw_name = "ext-26m" }, 52762306a36Sopenharmony_ci { .hw = &twpll_48m.hw }, 52862306a36Sopenharmony_ci}; 52962306a36Sopenharmony_cistatic SPRD_MUX_CLK_DATA(sdphy_apb_clk, "sdphy-apb-clk", sdphy_apb_parents, 0x330, 53062306a36Sopenharmony_ci 0, 1, SC9863A_MUX_FLAG); 53162306a36Sopenharmony_ci 53262306a36Sopenharmony_cistatic const struct clk_parent_data alg_io_apb_parents[] = { 53362306a36Sopenharmony_ci { .hw = &rco_4m.hw }, 53462306a36Sopenharmony_ci { .fw_name = "ext-26m" }, 53562306a36Sopenharmony_ci { .hw = &twpll_48m.hw }, 53662306a36Sopenharmony_ci { .hw = &twpll_96m.hw }, 53762306a36Sopenharmony_ci}; 53862306a36Sopenharmony_cistatic SPRD_MUX_CLK_DATA(alg_io_apb_clk, "alg-io-apb-clk", alg_io_apb_parents, 0x33c, 53962306a36Sopenharmony_ci 0, 1, SC9863A_MUX_FLAG); 54062306a36Sopenharmony_ci 54162306a36Sopenharmony_cistatic const struct clk_parent_data gpu_parents[] = { 54262306a36Sopenharmony_ci { .hw = &twpll_153m6.hw }, 54362306a36Sopenharmony_ci { .hw = &twpll_192m.hw }, 54462306a36Sopenharmony_ci { .hw = &twpll_256m.hw }, 54562306a36Sopenharmony_ci { .hw = &twpll_307m2.hw }, 54662306a36Sopenharmony_ci { .hw = &twpll_384m.hw }, 54762306a36Sopenharmony_ci { .hw = &twpll_512m.hw }, 54862306a36Sopenharmony_ci { .hw = &gpll.common.hw }, 54962306a36Sopenharmony_ci}; 55062306a36Sopenharmony_cistatic SPRD_COMP_CLK_DATA(gpu_core, "gpu-core", gpu_parents, 0x344, 55162306a36Sopenharmony_ci 0, 3, 8, 2, 0); 55262306a36Sopenharmony_cistatic SPRD_COMP_CLK_DATA(gpu_soc, "gpu-soc", gpu_parents, 0x348, 55362306a36Sopenharmony_ci 0, 3, 8, 2, 0); 55462306a36Sopenharmony_ci 55562306a36Sopenharmony_cistatic const struct clk_parent_data mm_emc_parents[] = { 55662306a36Sopenharmony_ci { .fw_name = "ext-26m" }, 55762306a36Sopenharmony_ci { .hw = &twpll_384m.hw }, 55862306a36Sopenharmony_ci { .hw = &isppll_468m.hw }, 55962306a36Sopenharmony_ci { .hw = &twpll_512m.hw }, 56062306a36Sopenharmony_ci}; 56162306a36Sopenharmony_cistatic SPRD_MUX_CLK_DATA(mm_emc, "mm-emc", mm_emc_parents, 0x350, 56262306a36Sopenharmony_ci 0, 2, SC9863A_MUX_FLAG); 56362306a36Sopenharmony_ci 56462306a36Sopenharmony_cistatic const struct clk_parent_data mm_ahb_parents[] = { 56562306a36Sopenharmony_ci { .fw_name = "ext-26m" }, 56662306a36Sopenharmony_ci { .hw = &twpll_96m.hw }, 56762306a36Sopenharmony_ci { .hw = &twpll_128m.hw }, 56862306a36Sopenharmony_ci { .hw = &twpll_153m6.hw }, 56962306a36Sopenharmony_ci}; 57062306a36Sopenharmony_cistatic SPRD_MUX_CLK_DATA(mm_ahb, "mm-ahb", mm_ahb_parents, 0x354, 57162306a36Sopenharmony_ci 0, 2, SC9863A_MUX_FLAG); 57262306a36Sopenharmony_ci 57362306a36Sopenharmony_cistatic const struct clk_parent_data bpc_clk_parents[] = { 57462306a36Sopenharmony_ci { .hw = &twpll_192m.hw }, 57562306a36Sopenharmony_ci { .hw = &twpll_307m2.hw }, 57662306a36Sopenharmony_ci { .hw = &twpll_384m.hw }, 57762306a36Sopenharmony_ci { .hw = &isppll_468m.hw }, 57862306a36Sopenharmony_ci { .hw = &dpll0_622m3.hw }, 57962306a36Sopenharmony_ci}; 58062306a36Sopenharmony_cistatic SPRD_MUX_CLK_DATA(bpc_clk, "bpc-clk", bpc_clk_parents, 0x358, 58162306a36Sopenharmony_ci 0, 3, SC9863A_MUX_FLAG); 58262306a36Sopenharmony_ci 58362306a36Sopenharmony_cistatic const struct clk_parent_data dcam_if_parents[] = { 58462306a36Sopenharmony_ci { .hw = &twpll_192m.hw }, 58562306a36Sopenharmony_ci { .hw = &twpll_256m.hw }, 58662306a36Sopenharmony_ci { .hw = &twpll_307m2.hw }, 58762306a36Sopenharmony_ci { .hw = &twpll_384m.hw }, 58862306a36Sopenharmony_ci}; 58962306a36Sopenharmony_cistatic SPRD_MUX_CLK_DATA(dcam_if_clk, "dcam-if-clk", dcam_if_parents, 0x35c, 59062306a36Sopenharmony_ci 0, 2, SC9863A_MUX_FLAG); 59162306a36Sopenharmony_ci 59262306a36Sopenharmony_cistatic const struct clk_parent_data isp_parents[] = { 59362306a36Sopenharmony_ci { .hw = &twpll_128m.hw }, 59462306a36Sopenharmony_ci { .hw = &twpll_256m.hw }, 59562306a36Sopenharmony_ci { .hw = &twpll_307m2.hw }, 59662306a36Sopenharmony_ci { .hw = &twpll_384m.hw }, 59762306a36Sopenharmony_ci { .hw = &isppll_468m.hw }, 59862306a36Sopenharmony_ci}; 59962306a36Sopenharmony_cistatic SPRD_MUX_CLK_DATA(isp_clk, "isp-clk", isp_parents, 0x360, 60062306a36Sopenharmony_ci 0, 3, SC9863A_MUX_FLAG); 60162306a36Sopenharmony_ci 60262306a36Sopenharmony_cistatic const struct clk_parent_data jpg_parents[] = { 60362306a36Sopenharmony_ci { .hw = &twpll_76m8.hw }, 60462306a36Sopenharmony_ci { .hw = &twpll_128m.hw }, 60562306a36Sopenharmony_ci { .hw = &twpll_256m.hw }, 60662306a36Sopenharmony_ci { .hw = &twpll_307m2.hw }, 60762306a36Sopenharmony_ci}; 60862306a36Sopenharmony_cistatic SPRD_MUX_CLK_DATA(jpg_clk, "jpg-clk", jpg_parents, 0x364, 60962306a36Sopenharmony_ci 0, 2, SC9863A_MUX_FLAG); 61062306a36Sopenharmony_cistatic SPRD_MUX_CLK_DATA(cpp_clk, "cpp-clk", jpg_parents, 0x368, 61162306a36Sopenharmony_ci 0, 2, SC9863A_MUX_FLAG); 61262306a36Sopenharmony_ci 61362306a36Sopenharmony_cistatic const struct clk_parent_data sensor_parents[] = { 61462306a36Sopenharmony_ci { .fw_name = "ext-26m" }, 61562306a36Sopenharmony_ci { .hw = &twpll_48m.hw }, 61662306a36Sopenharmony_ci { .hw = &twpll_76m8.hw }, 61762306a36Sopenharmony_ci { .hw = &twpll_96m.hw }, 61862306a36Sopenharmony_ci}; 61962306a36Sopenharmony_cistatic SPRD_COMP_CLK_DATA(sensor0_clk, "sensor0-clk", sensor_parents, 0x36c, 62062306a36Sopenharmony_ci 0, 2, 8, 3, 0); 62162306a36Sopenharmony_cistatic SPRD_COMP_CLK_DATA(sensor1_clk, "sensor1-clk", sensor_parents, 0x370, 62262306a36Sopenharmony_ci 0, 2, 8, 3, 0); 62362306a36Sopenharmony_cistatic SPRD_COMP_CLK_DATA(sensor2_clk, "sensor2-clk", sensor_parents, 0x374, 62462306a36Sopenharmony_ci 0, 2, 8, 3, 0); 62562306a36Sopenharmony_ci 62662306a36Sopenharmony_cistatic const struct clk_parent_data mm_vemc_parents[] = { 62762306a36Sopenharmony_ci { .fw_name = "ext-26m" }, 62862306a36Sopenharmony_ci { .hw = &twpll_307m2.hw }, 62962306a36Sopenharmony_ci { .hw = &twpll_384m.hw }, 63062306a36Sopenharmony_ci { .hw = &isppll_468m.hw }, 63162306a36Sopenharmony_ci}; 63262306a36Sopenharmony_cistatic SPRD_MUX_CLK_DATA(mm_vemc, "mm-vemc", mm_vemc_parents, 0x378, 63362306a36Sopenharmony_ci 0, 2, SC9863A_MUX_FLAG); 63462306a36Sopenharmony_ci 63562306a36Sopenharmony_cistatic SPRD_MUX_CLK_DATA(mm_vahb, "mm-vahb", mm_ahb_parents, 0x37c, 63662306a36Sopenharmony_ci 0, 2, SC9863A_MUX_FLAG); 63762306a36Sopenharmony_ci 63862306a36Sopenharmony_cistatic const struct clk_parent_data vsp_parents[] = { 63962306a36Sopenharmony_ci { .hw = &twpll_76m8.hw }, 64062306a36Sopenharmony_ci { .hw = &twpll_128m.hw }, 64162306a36Sopenharmony_ci { .hw = &twpll_256m.hw }, 64262306a36Sopenharmony_ci { .hw = &twpll_307m2.hw }, 64362306a36Sopenharmony_ci { .hw = &twpll_384m.hw }, 64462306a36Sopenharmony_ci}; 64562306a36Sopenharmony_cistatic SPRD_MUX_CLK_DATA(clk_vsp, "vsp-clk", vsp_parents, 0x380, 64662306a36Sopenharmony_ci 0, 3, SC9863A_MUX_FLAG); 64762306a36Sopenharmony_ci 64862306a36Sopenharmony_cistatic const struct clk_parent_data core_parents[] = { 64962306a36Sopenharmony_ci { .fw_name = "ext-26m" }, 65062306a36Sopenharmony_ci { .hw = &twpll_512m.hw }, 65162306a36Sopenharmony_ci { .hw = &twpll_768m.hw }, 65262306a36Sopenharmony_ci { .hw = &lpll.common.hw }, 65362306a36Sopenharmony_ci { .hw = &dpll0.common.hw }, 65462306a36Sopenharmony_ci { .hw = &mpll2.common.hw }, 65562306a36Sopenharmony_ci { .hw = &mpll0.common.hw }, 65662306a36Sopenharmony_ci { .hw = &mpll1.common.hw }, 65762306a36Sopenharmony_ci}; 65862306a36Sopenharmony_cistatic SPRD_COMP_CLK_DATA(core0_clk, "core0-clk", core_parents, 0xa20, 65962306a36Sopenharmony_ci 0, 3, 8, 3, 0); 66062306a36Sopenharmony_cistatic SPRD_COMP_CLK_DATA(core1_clk, "core1-clk", core_parents, 0xa24, 66162306a36Sopenharmony_ci 0, 3, 8, 3, 0); 66262306a36Sopenharmony_cistatic SPRD_COMP_CLK_DATA(core2_clk, "core2-clk", core_parents, 0xa28, 66362306a36Sopenharmony_ci 0, 3, 8, 3, 0); 66462306a36Sopenharmony_cistatic SPRD_COMP_CLK_DATA(core3_clk, "core3-clk", core_parents, 0xa2c, 66562306a36Sopenharmony_ci 0, 3, 8, 3, 0); 66662306a36Sopenharmony_cistatic SPRD_COMP_CLK_DATA(core4_clk, "core4-clk", core_parents, 0xa30, 66762306a36Sopenharmony_ci 0, 3, 8, 3, 0); 66862306a36Sopenharmony_cistatic SPRD_COMP_CLK_DATA(core5_clk, "core5-clk", core_parents, 0xa34, 66962306a36Sopenharmony_ci 0, 3, 8, 3, 0); 67062306a36Sopenharmony_cistatic SPRD_COMP_CLK_DATA(core6_clk, "core6-clk", core_parents, 0xa38, 67162306a36Sopenharmony_ci 0, 3, 8, 3, 0); 67262306a36Sopenharmony_cistatic SPRD_COMP_CLK_DATA(core7_clk, "core7-clk", core_parents, 0xa3c, 67362306a36Sopenharmony_ci 0, 3, 8, 3, 0); 67462306a36Sopenharmony_cistatic SPRD_COMP_CLK_DATA(scu_clk, "scu-clk", core_parents, 0xa40, 67562306a36Sopenharmony_ci 0, 3, 8, 3, 0); 67662306a36Sopenharmony_ci 67762306a36Sopenharmony_cistatic SPRD_DIV_CLK_HW(ace_clk, "ace-clk", &scu_clk.common.hw, 0xa44, 67862306a36Sopenharmony_ci 8, 3, 0); 67962306a36Sopenharmony_cistatic SPRD_DIV_CLK_HW(axi_periph_clk, "axi-periph-clk", &scu_clk.common.hw, 0xa48, 68062306a36Sopenharmony_ci 8, 3, 0); 68162306a36Sopenharmony_cistatic SPRD_DIV_CLK_HW(axi_acp_clk, "axi-acp-clk", &scu_clk.common.hw, 0xa4c, 68262306a36Sopenharmony_ci 8, 3, 0); 68362306a36Sopenharmony_ci 68462306a36Sopenharmony_cistatic const struct clk_parent_data atb_parents[] = { 68562306a36Sopenharmony_ci { .fw_name = "ext-26m" }, 68662306a36Sopenharmony_ci { .hw = &twpll_384m.hw }, 68762306a36Sopenharmony_ci { .hw = &twpll_512m.hw }, 68862306a36Sopenharmony_ci { .hw = &mpll2.common.hw }, 68962306a36Sopenharmony_ci}; 69062306a36Sopenharmony_cistatic SPRD_COMP_CLK_DATA(atb_clk, "atb-clk", atb_parents, 0xa50, 69162306a36Sopenharmony_ci 0, 2, 8, 3, 0); 69262306a36Sopenharmony_cistatic SPRD_DIV_CLK_HW(debug_apb_clk, "debug-apb-clk", &atb_clk.common.hw, 0xa54, 69362306a36Sopenharmony_ci 8, 3, 0); 69462306a36Sopenharmony_ci 69562306a36Sopenharmony_cistatic const struct clk_parent_data gic_parents[] = { 69662306a36Sopenharmony_ci { .fw_name = "ext-26m" }, 69762306a36Sopenharmony_ci { .hw = &twpll_153m6.hw }, 69862306a36Sopenharmony_ci { .hw = &twpll_384m.hw }, 69962306a36Sopenharmony_ci { .hw = &twpll_512m.hw }, 70062306a36Sopenharmony_ci}; 70162306a36Sopenharmony_cistatic SPRD_COMP_CLK_DATA(gic_clk, "gic-clk", gic_parents, 0xa58, 70262306a36Sopenharmony_ci 0, 2, 8, 3, 0); 70362306a36Sopenharmony_cistatic SPRD_COMP_CLK_DATA(periph_clk, "periph-clk", gic_parents, 0xa5c, 70462306a36Sopenharmony_ci 0, 2, 8, 3, 0); 70562306a36Sopenharmony_ci 70662306a36Sopenharmony_cistatic struct sprd_clk_common *sc9863a_aon_clks[] = { 70762306a36Sopenharmony_ci /* address base is 0x402d0000 */ 70862306a36Sopenharmony_ci &emc_clk.common, 70962306a36Sopenharmony_ci &aon_apb.common, 71062306a36Sopenharmony_ci &adi_clk.common, 71162306a36Sopenharmony_ci &aux0_clk.common, 71262306a36Sopenharmony_ci &aux1_clk.common, 71362306a36Sopenharmony_ci &aux2_clk.common, 71462306a36Sopenharmony_ci &probe_clk.common, 71562306a36Sopenharmony_ci &pwm0_clk.common, 71662306a36Sopenharmony_ci &pwm1_clk.common, 71762306a36Sopenharmony_ci &pwm2_clk.common, 71862306a36Sopenharmony_ci &aon_thm_clk.common, 71962306a36Sopenharmony_ci &audif_clk.common, 72062306a36Sopenharmony_ci &cpu_dap_clk.common, 72162306a36Sopenharmony_ci &cpu_ts_clk.common, 72262306a36Sopenharmony_ci &djtag_tck_clk.common, 72362306a36Sopenharmony_ci &emc_ref_clk.common, 72462306a36Sopenharmony_ci &cssys_clk.common, 72562306a36Sopenharmony_ci &aon_pmu_clk.common, 72662306a36Sopenharmony_ci &pmu_26m_clk.common, 72762306a36Sopenharmony_ci &aon_tmr_clk.common, 72862306a36Sopenharmony_ci &power_cpu_clk.common, 72962306a36Sopenharmony_ci &ap_axi.common, 73062306a36Sopenharmony_ci &sdio0_2x.common, 73162306a36Sopenharmony_ci &sdio1_2x.common, 73262306a36Sopenharmony_ci &sdio2_2x.common, 73362306a36Sopenharmony_ci &emmc_2x.common, 73462306a36Sopenharmony_ci &dpu_clk.common, 73562306a36Sopenharmony_ci &dpu_dpi.common, 73662306a36Sopenharmony_ci &otg_ref_clk.common, 73762306a36Sopenharmony_ci &sdphy_apb_clk.common, 73862306a36Sopenharmony_ci &alg_io_apb_clk.common, 73962306a36Sopenharmony_ci &gpu_core.common, 74062306a36Sopenharmony_ci &gpu_soc.common, 74162306a36Sopenharmony_ci &mm_emc.common, 74262306a36Sopenharmony_ci &mm_ahb.common, 74362306a36Sopenharmony_ci &bpc_clk.common, 74462306a36Sopenharmony_ci &dcam_if_clk.common, 74562306a36Sopenharmony_ci &isp_clk.common, 74662306a36Sopenharmony_ci &jpg_clk.common, 74762306a36Sopenharmony_ci &cpp_clk.common, 74862306a36Sopenharmony_ci &sensor0_clk.common, 74962306a36Sopenharmony_ci &sensor1_clk.common, 75062306a36Sopenharmony_ci &sensor2_clk.common, 75162306a36Sopenharmony_ci &mm_vemc.common, 75262306a36Sopenharmony_ci &mm_vahb.common, 75362306a36Sopenharmony_ci &clk_vsp.common, 75462306a36Sopenharmony_ci &core0_clk.common, 75562306a36Sopenharmony_ci &core1_clk.common, 75662306a36Sopenharmony_ci &core2_clk.common, 75762306a36Sopenharmony_ci &core3_clk.common, 75862306a36Sopenharmony_ci &core4_clk.common, 75962306a36Sopenharmony_ci &core5_clk.common, 76062306a36Sopenharmony_ci &core6_clk.common, 76162306a36Sopenharmony_ci &core7_clk.common, 76262306a36Sopenharmony_ci &scu_clk.common, 76362306a36Sopenharmony_ci &ace_clk.common, 76462306a36Sopenharmony_ci &axi_periph_clk.common, 76562306a36Sopenharmony_ci &axi_acp_clk.common, 76662306a36Sopenharmony_ci &atb_clk.common, 76762306a36Sopenharmony_ci &debug_apb_clk.common, 76862306a36Sopenharmony_ci &gic_clk.common, 76962306a36Sopenharmony_ci &periph_clk.common, 77062306a36Sopenharmony_ci}; 77162306a36Sopenharmony_ci 77262306a36Sopenharmony_cistatic struct clk_hw_onecell_data sc9863a_aon_clk_hws = { 77362306a36Sopenharmony_ci .hws = { 77462306a36Sopenharmony_ci [CLK_13M] = &clk_13m.hw, 77562306a36Sopenharmony_ci [CLK_6M5] = &clk_6m5.hw, 77662306a36Sopenharmony_ci [CLK_4M3] = &clk_4m3.hw, 77762306a36Sopenharmony_ci [CLK_2M] = &clk_2m.hw, 77862306a36Sopenharmony_ci [CLK_250K] = &clk_250k.hw, 77962306a36Sopenharmony_ci [CLK_RCO_25M] = &rco_25m.hw, 78062306a36Sopenharmony_ci [CLK_RCO_4M] = &rco_4m.hw, 78162306a36Sopenharmony_ci [CLK_RCO_2M] = &rco_2m.hw, 78262306a36Sopenharmony_ci [CLK_EMC] = &emc_clk.common.hw, 78362306a36Sopenharmony_ci [CLK_AON_APB] = &aon_apb.common.hw, 78462306a36Sopenharmony_ci [CLK_ADI] = &adi_clk.common.hw, 78562306a36Sopenharmony_ci [CLK_AUX0] = &aux0_clk.common.hw, 78662306a36Sopenharmony_ci [CLK_AUX1] = &aux1_clk.common.hw, 78762306a36Sopenharmony_ci [CLK_AUX2] = &aux2_clk.common.hw, 78862306a36Sopenharmony_ci [CLK_PROBE] = &probe_clk.common.hw, 78962306a36Sopenharmony_ci [CLK_PWM0] = &pwm0_clk.common.hw, 79062306a36Sopenharmony_ci [CLK_PWM1] = &pwm1_clk.common.hw, 79162306a36Sopenharmony_ci [CLK_PWM2] = &pwm2_clk.common.hw, 79262306a36Sopenharmony_ci [CLK_AON_THM] = &aon_thm_clk.common.hw, 79362306a36Sopenharmony_ci [CLK_AUDIF] = &audif_clk.common.hw, 79462306a36Sopenharmony_ci [CLK_CPU_DAP] = &cpu_dap_clk.common.hw, 79562306a36Sopenharmony_ci [CLK_CPU_TS] = &cpu_ts_clk.common.hw, 79662306a36Sopenharmony_ci [CLK_DJTAG_TCK] = &djtag_tck_clk.common.hw, 79762306a36Sopenharmony_ci [CLK_EMC_REF] = &emc_ref_clk.common.hw, 79862306a36Sopenharmony_ci [CLK_CSSYS] = &cssys_clk.common.hw, 79962306a36Sopenharmony_ci [CLK_AON_PMU] = &aon_pmu_clk.common.hw, 80062306a36Sopenharmony_ci [CLK_PMU_26M] = &pmu_26m_clk.common.hw, 80162306a36Sopenharmony_ci [CLK_AON_TMR] = &aon_tmr_clk.common.hw, 80262306a36Sopenharmony_ci [CLK_POWER_CPU] = &power_cpu_clk.common.hw, 80362306a36Sopenharmony_ci [CLK_AP_AXI] = &ap_axi.common.hw, 80462306a36Sopenharmony_ci [CLK_SDIO0_2X] = &sdio0_2x.common.hw, 80562306a36Sopenharmony_ci [CLK_SDIO1_2X] = &sdio1_2x.common.hw, 80662306a36Sopenharmony_ci [CLK_SDIO2_2X] = &sdio2_2x.common.hw, 80762306a36Sopenharmony_ci [CLK_EMMC_2X] = &emmc_2x.common.hw, 80862306a36Sopenharmony_ci [CLK_DPU] = &dpu_clk.common.hw, 80962306a36Sopenharmony_ci [CLK_DPU_DPI] = &dpu_dpi.common.hw, 81062306a36Sopenharmony_ci [CLK_OTG_REF] = &otg_ref_clk.common.hw, 81162306a36Sopenharmony_ci [CLK_SDPHY_APB] = &sdphy_apb_clk.common.hw, 81262306a36Sopenharmony_ci [CLK_ALG_IO_APB] = &alg_io_apb_clk.common.hw, 81362306a36Sopenharmony_ci [CLK_GPU_CORE] = &gpu_core.common.hw, 81462306a36Sopenharmony_ci [CLK_GPU_SOC] = &gpu_soc.common.hw, 81562306a36Sopenharmony_ci [CLK_MM_EMC] = &mm_emc.common.hw, 81662306a36Sopenharmony_ci [CLK_MM_AHB] = &mm_ahb.common.hw, 81762306a36Sopenharmony_ci [CLK_BPC] = &bpc_clk.common.hw, 81862306a36Sopenharmony_ci [CLK_DCAM_IF] = &dcam_if_clk.common.hw, 81962306a36Sopenharmony_ci [CLK_ISP] = &isp_clk.common.hw, 82062306a36Sopenharmony_ci [CLK_JPG] = &jpg_clk.common.hw, 82162306a36Sopenharmony_ci [CLK_CPP] = &cpp_clk.common.hw, 82262306a36Sopenharmony_ci [CLK_SENSOR0] = &sensor0_clk.common.hw, 82362306a36Sopenharmony_ci [CLK_SENSOR1] = &sensor1_clk.common.hw, 82462306a36Sopenharmony_ci [CLK_SENSOR2] = &sensor2_clk.common.hw, 82562306a36Sopenharmony_ci [CLK_MM_VEMC] = &mm_vemc.common.hw, 82662306a36Sopenharmony_ci [CLK_MM_VAHB] = &mm_vahb.common.hw, 82762306a36Sopenharmony_ci [CLK_VSP] = &clk_vsp.common.hw, 82862306a36Sopenharmony_ci [CLK_CORE0] = &core0_clk.common.hw, 82962306a36Sopenharmony_ci [CLK_CORE1] = &core1_clk.common.hw, 83062306a36Sopenharmony_ci [CLK_CORE2] = &core2_clk.common.hw, 83162306a36Sopenharmony_ci [CLK_CORE3] = &core3_clk.common.hw, 83262306a36Sopenharmony_ci [CLK_CORE4] = &core4_clk.common.hw, 83362306a36Sopenharmony_ci [CLK_CORE5] = &core5_clk.common.hw, 83462306a36Sopenharmony_ci [CLK_CORE6] = &core6_clk.common.hw, 83562306a36Sopenharmony_ci [CLK_CORE7] = &core7_clk.common.hw, 83662306a36Sopenharmony_ci [CLK_SCU] = &scu_clk.common.hw, 83762306a36Sopenharmony_ci [CLK_ACE] = &ace_clk.common.hw, 83862306a36Sopenharmony_ci [CLK_AXI_PERIPH] = &axi_periph_clk.common.hw, 83962306a36Sopenharmony_ci [CLK_AXI_ACP] = &axi_acp_clk.common.hw, 84062306a36Sopenharmony_ci [CLK_ATB] = &atb_clk.common.hw, 84162306a36Sopenharmony_ci [CLK_DEBUG_APB] = &debug_apb_clk.common.hw, 84262306a36Sopenharmony_ci [CLK_GIC] = &gic_clk.common.hw, 84362306a36Sopenharmony_ci [CLK_PERIPH] = &periph_clk.common.hw, 84462306a36Sopenharmony_ci }, 84562306a36Sopenharmony_ci .num = CLK_AON_CLK_NUM, 84662306a36Sopenharmony_ci}; 84762306a36Sopenharmony_ci 84862306a36Sopenharmony_cistatic const struct sprd_clk_desc sc9863a_aon_clk_desc = { 84962306a36Sopenharmony_ci .clk_clks = sc9863a_aon_clks, 85062306a36Sopenharmony_ci .num_clk_clks = ARRAY_SIZE(sc9863a_aon_clks), 85162306a36Sopenharmony_ci .hw_clks = &sc9863a_aon_clk_hws, 85262306a36Sopenharmony_ci}; 85362306a36Sopenharmony_ci 85462306a36Sopenharmony_cistatic const struct clk_parent_data ap_apb_parents[] = { 85562306a36Sopenharmony_ci { .fw_name = "ext-26m" }, 85662306a36Sopenharmony_ci { .hw = &twpll_64m.hw }, 85762306a36Sopenharmony_ci { .hw = &twpll_96m.hw }, 85862306a36Sopenharmony_ci { .hw = &twpll_128m.hw }, 85962306a36Sopenharmony_ci}; 86062306a36Sopenharmony_cistatic SPRD_MUX_CLK_DATA(ap_apb, "ap-apb", ap_apb_parents, 0x20, 86162306a36Sopenharmony_ci 0, 2, SC9863A_MUX_FLAG); 86262306a36Sopenharmony_ci 86362306a36Sopenharmony_cistatic const struct clk_parent_data ap_ce_parents[] = { 86462306a36Sopenharmony_ci { .fw_name = "ext-26m" }, 86562306a36Sopenharmony_ci { .hw = &twpll_256m.hw }, 86662306a36Sopenharmony_ci}; 86762306a36Sopenharmony_cistatic SPRD_COMP_CLK_DATA(ap_ce, "ap-ce", ap_ce_parents, 0x24, 86862306a36Sopenharmony_ci 0, 1, 8, 3, 0); 86962306a36Sopenharmony_ci 87062306a36Sopenharmony_cistatic const struct clk_parent_data nandc_ecc_parents[] = { 87162306a36Sopenharmony_ci { .fw_name = "ext-26m" }, 87262306a36Sopenharmony_ci { .hw = &twpll_256m.hw }, 87362306a36Sopenharmony_ci { .hw = &twpll_307m2.hw }, 87462306a36Sopenharmony_ci}; 87562306a36Sopenharmony_cistatic SPRD_COMP_CLK_DATA(nandc_ecc, "nandc-ecc", nandc_ecc_parents, 0x28, 87662306a36Sopenharmony_ci 0, 2, 8, 3, 0); 87762306a36Sopenharmony_ci 87862306a36Sopenharmony_cistatic const struct clk_parent_data nandc_26m_parents[] = { 87962306a36Sopenharmony_ci { .fw_name = "ext-32k" }, 88062306a36Sopenharmony_ci { .fw_name = "ext-26m" }, 88162306a36Sopenharmony_ci}; 88262306a36Sopenharmony_cistatic SPRD_MUX_CLK_DATA(nandc_26m, "nandc-26m", nandc_26m_parents, 0x2c, 88362306a36Sopenharmony_ci 0, 1, SC9863A_MUX_FLAG); 88462306a36Sopenharmony_cistatic SPRD_MUX_CLK_DATA(emmc_32k, "emmc-32k", nandc_26m_parents, 0x30, 88562306a36Sopenharmony_ci 0, 1, SC9863A_MUX_FLAG); 88662306a36Sopenharmony_cistatic SPRD_MUX_CLK_DATA(sdio0_32k, "sdio0-32k", nandc_26m_parents, 0x34, 88762306a36Sopenharmony_ci 0, 1, SC9863A_MUX_FLAG); 88862306a36Sopenharmony_cistatic SPRD_MUX_CLK_DATA(sdio1_32k, "sdio1-32k", nandc_26m_parents, 0x38, 88962306a36Sopenharmony_ci 0, 1, SC9863A_MUX_FLAG); 89062306a36Sopenharmony_cistatic SPRD_MUX_CLK_DATA(sdio2_32k, "sdio2-32k", nandc_26m_parents, 0x3c, 89162306a36Sopenharmony_ci 0, 1, SC9863A_MUX_FLAG); 89262306a36Sopenharmony_ci 89362306a36Sopenharmony_cistatic SPRD_GATE_CLK_HW(otg_utmi, "otg-utmi", &aon_apb.common.hw, 0x40, 89462306a36Sopenharmony_ci BIT(16), 0, 0); 89562306a36Sopenharmony_ci 89662306a36Sopenharmony_cistatic const struct clk_parent_data ap_uart_parents[] = { 89762306a36Sopenharmony_ci { .fw_name = "ext-26m" }, 89862306a36Sopenharmony_ci { .hw = &twpll_48m.hw }, 89962306a36Sopenharmony_ci { .hw = &twpll_51m2.hw }, 90062306a36Sopenharmony_ci { .hw = &twpll_96m.hw }, 90162306a36Sopenharmony_ci}; 90262306a36Sopenharmony_cistatic SPRD_COMP_CLK_DATA(ap_uart0, "ap-uart0", ap_uart_parents, 0x44, 90362306a36Sopenharmony_ci 0, 2, 8, 3, 0); 90462306a36Sopenharmony_cistatic SPRD_COMP_CLK_DATA(ap_uart1, "ap-uart1", ap_uart_parents, 0x48, 90562306a36Sopenharmony_ci 0, 2, 8, 3, 0); 90662306a36Sopenharmony_cistatic SPRD_COMP_CLK_DATA(ap_uart2, "ap-uart2", ap_uart_parents, 0x4c, 90762306a36Sopenharmony_ci 0, 2, 8, 3, 0); 90862306a36Sopenharmony_cistatic SPRD_COMP_CLK_DATA(ap_uart3, "ap-uart3", ap_uart_parents, 0x50, 90962306a36Sopenharmony_ci 0, 2, 8, 3, 0); 91062306a36Sopenharmony_cistatic SPRD_COMP_CLK_DATA(ap_uart4, "ap-uart4", ap_uart_parents, 0x54, 91162306a36Sopenharmony_ci 0, 2, 8, 3, 0); 91262306a36Sopenharmony_ci 91362306a36Sopenharmony_cistatic const struct clk_parent_data i2c_parents[] = { 91462306a36Sopenharmony_ci { .fw_name = "ext-26m" }, 91562306a36Sopenharmony_ci { .hw = &twpll_48m.hw }, 91662306a36Sopenharmony_ci { .hw = &twpll_51m2.hw }, 91762306a36Sopenharmony_ci { .hw = &twpll_153m6.hw }, 91862306a36Sopenharmony_ci}; 91962306a36Sopenharmony_cistatic SPRD_COMP_CLK_DATA(ap_i2c0, "ap-i2c0", i2c_parents, 0x58, 92062306a36Sopenharmony_ci 0, 2, 8, 3, 0); 92162306a36Sopenharmony_cistatic SPRD_COMP_CLK_DATA(ap_i2c1, "ap-i2c1", i2c_parents, 0x5c, 92262306a36Sopenharmony_ci 0, 2, 8, 3, 0); 92362306a36Sopenharmony_cistatic SPRD_COMP_CLK_DATA(ap_i2c2, "ap-i2c2", i2c_parents, 0x60, 92462306a36Sopenharmony_ci 0, 2, 8, 3, 0); 92562306a36Sopenharmony_cistatic SPRD_COMP_CLK_DATA(ap_i2c3, "ap-i2c3", i2c_parents, 0x64, 92662306a36Sopenharmony_ci 0, 2, 8, 3, 0); 92762306a36Sopenharmony_cistatic SPRD_COMP_CLK_DATA(ap_i2c4, "ap-i2c4", i2c_parents, 0x68, 92862306a36Sopenharmony_ci 0, 2, 8, 3, 0); 92962306a36Sopenharmony_cistatic SPRD_COMP_CLK_DATA(ap_i2c5, "ap-i2c5", i2c_parents, 0x6c, 93062306a36Sopenharmony_ci 0, 2, 8, 3, 0); 93162306a36Sopenharmony_cistatic SPRD_COMP_CLK_DATA(ap_i2c6, "ap-i2c6", i2c_parents, 0x70, 93262306a36Sopenharmony_ci 0, 2, 8, 3, 0); 93362306a36Sopenharmony_ci 93462306a36Sopenharmony_cistatic const struct clk_parent_data spi_parents[] = { 93562306a36Sopenharmony_ci { .fw_name = "ext-26m" }, 93662306a36Sopenharmony_ci { .hw = &twpll_128m.hw }, 93762306a36Sopenharmony_ci { .hw = &twpll_153m6.hw }, 93862306a36Sopenharmony_ci { .hw = &twpll_192m.hw }, 93962306a36Sopenharmony_ci}; 94062306a36Sopenharmony_cistatic SPRD_COMP_CLK_DATA(ap_spi0, "ap-spi0", spi_parents, 0x74, 94162306a36Sopenharmony_ci 0, 2, 8, 3, 0); 94262306a36Sopenharmony_cistatic SPRD_COMP_CLK_DATA(ap_spi1, "ap-spi1", spi_parents, 0x78, 94362306a36Sopenharmony_ci 0, 2, 8, 3, 0); 94462306a36Sopenharmony_cistatic SPRD_COMP_CLK_DATA(ap_spi2, "ap-spi2", spi_parents, 0x7c, 94562306a36Sopenharmony_ci 0, 2, 8, 3, 0); 94662306a36Sopenharmony_cistatic SPRD_COMP_CLK_DATA(ap_spi3, "ap-spi3", spi_parents, 0x80, 94762306a36Sopenharmony_ci 0, 2, 8, 3, 0); 94862306a36Sopenharmony_ci 94962306a36Sopenharmony_cistatic const struct clk_parent_data iis_parents[] = { 95062306a36Sopenharmony_ci { .fw_name = "ext-26m" }, 95162306a36Sopenharmony_ci { .hw = &twpll_128m.hw }, 95262306a36Sopenharmony_ci { .hw = &twpll_153m6.hw }, 95362306a36Sopenharmony_ci}; 95462306a36Sopenharmony_cistatic SPRD_COMP_CLK_DATA(ap_iis0, "ap-iis0", iis_parents, 0x84, 95562306a36Sopenharmony_ci 0, 2, 8, 3, 0); 95662306a36Sopenharmony_cistatic SPRD_COMP_CLK_DATA(ap_iis1, "ap-iis1", iis_parents, 0x88, 95762306a36Sopenharmony_ci 0, 2, 8, 3, 0); 95862306a36Sopenharmony_cistatic SPRD_COMP_CLK_DATA(ap_iis2, "ap-iis2", iis_parents, 0x8c, 95962306a36Sopenharmony_ci 0, 2, 8, 3, 0); 96062306a36Sopenharmony_ci 96162306a36Sopenharmony_cistatic const struct clk_parent_data sim0_parents[] = { 96262306a36Sopenharmony_ci { .fw_name = "ext-26m" }, 96362306a36Sopenharmony_ci { .hw = &twpll_51m2.hw }, 96462306a36Sopenharmony_ci { .hw = &twpll_64m.hw }, 96562306a36Sopenharmony_ci { .hw = &twpll_96m.hw }, 96662306a36Sopenharmony_ci { .hw = &twpll_128m.hw }, 96762306a36Sopenharmony_ci}; 96862306a36Sopenharmony_cistatic SPRD_COMP_CLK_DATA(sim0, "sim0", sim0_parents, 0x90, 96962306a36Sopenharmony_ci 0, 3, 8, 3, 0); 97062306a36Sopenharmony_ci 97162306a36Sopenharmony_cistatic const struct clk_parent_data sim0_32k_parents[] = { 97262306a36Sopenharmony_ci { .fw_name = "ext-32k" }, 97362306a36Sopenharmony_ci { .fw_name = "ext-26m" }, 97462306a36Sopenharmony_ci}; 97562306a36Sopenharmony_cistatic SPRD_MUX_CLK_DATA(sim0_32k, "sim0-32k", sim0_32k_parents, 0x94, 97662306a36Sopenharmony_ci 0, 1, SC9863A_MUX_FLAG); 97762306a36Sopenharmony_ci 97862306a36Sopenharmony_cistatic struct sprd_clk_common *sc9863a_ap_clks[] = { 97962306a36Sopenharmony_ci /* address base is 0x21500000 */ 98062306a36Sopenharmony_ci &ap_apb.common, 98162306a36Sopenharmony_ci &ap_ce.common, 98262306a36Sopenharmony_ci &nandc_ecc.common, 98362306a36Sopenharmony_ci &nandc_26m.common, 98462306a36Sopenharmony_ci &emmc_32k.common, 98562306a36Sopenharmony_ci &sdio0_32k.common, 98662306a36Sopenharmony_ci &sdio1_32k.common, 98762306a36Sopenharmony_ci &sdio2_32k.common, 98862306a36Sopenharmony_ci &otg_utmi.common, 98962306a36Sopenharmony_ci &ap_uart0.common, 99062306a36Sopenharmony_ci &ap_uart1.common, 99162306a36Sopenharmony_ci &ap_uart2.common, 99262306a36Sopenharmony_ci &ap_uart3.common, 99362306a36Sopenharmony_ci &ap_uart4.common, 99462306a36Sopenharmony_ci &ap_i2c0.common, 99562306a36Sopenharmony_ci &ap_i2c1.common, 99662306a36Sopenharmony_ci &ap_i2c2.common, 99762306a36Sopenharmony_ci &ap_i2c3.common, 99862306a36Sopenharmony_ci &ap_i2c4.common, 99962306a36Sopenharmony_ci &ap_i2c5.common, 100062306a36Sopenharmony_ci &ap_i2c6.common, 100162306a36Sopenharmony_ci &ap_spi0.common, 100262306a36Sopenharmony_ci &ap_spi1.common, 100362306a36Sopenharmony_ci &ap_spi2.common, 100462306a36Sopenharmony_ci &ap_spi3.common, 100562306a36Sopenharmony_ci &ap_iis0.common, 100662306a36Sopenharmony_ci &ap_iis1.common, 100762306a36Sopenharmony_ci &ap_iis2.common, 100862306a36Sopenharmony_ci &sim0.common, 100962306a36Sopenharmony_ci &sim0_32k.common, 101062306a36Sopenharmony_ci}; 101162306a36Sopenharmony_ci 101262306a36Sopenharmony_cistatic struct clk_hw_onecell_data sc9863a_ap_clk_hws = { 101362306a36Sopenharmony_ci .hws = { 101462306a36Sopenharmony_ci [CLK_AP_APB] = &ap_apb.common.hw, 101562306a36Sopenharmony_ci [CLK_AP_CE] = &ap_ce.common.hw, 101662306a36Sopenharmony_ci [CLK_NANDC_ECC] = &nandc_ecc.common.hw, 101762306a36Sopenharmony_ci [CLK_NANDC_26M] = &nandc_26m.common.hw, 101862306a36Sopenharmony_ci [CLK_EMMC_32K] = &emmc_32k.common.hw, 101962306a36Sopenharmony_ci [CLK_SDIO0_32K] = &sdio0_32k.common.hw, 102062306a36Sopenharmony_ci [CLK_SDIO1_32K] = &sdio1_32k.common.hw, 102162306a36Sopenharmony_ci [CLK_SDIO2_32K] = &sdio2_32k.common.hw, 102262306a36Sopenharmony_ci [CLK_OTG_UTMI] = &otg_utmi.common.hw, 102362306a36Sopenharmony_ci [CLK_AP_UART0] = &ap_uart0.common.hw, 102462306a36Sopenharmony_ci [CLK_AP_UART1] = &ap_uart1.common.hw, 102562306a36Sopenharmony_ci [CLK_AP_UART2] = &ap_uart2.common.hw, 102662306a36Sopenharmony_ci [CLK_AP_UART3] = &ap_uart3.common.hw, 102762306a36Sopenharmony_ci [CLK_AP_UART4] = &ap_uart4.common.hw, 102862306a36Sopenharmony_ci [CLK_AP_I2C0] = &ap_i2c0.common.hw, 102962306a36Sopenharmony_ci [CLK_AP_I2C1] = &ap_i2c1.common.hw, 103062306a36Sopenharmony_ci [CLK_AP_I2C2] = &ap_i2c2.common.hw, 103162306a36Sopenharmony_ci [CLK_AP_I2C3] = &ap_i2c3.common.hw, 103262306a36Sopenharmony_ci [CLK_AP_I2C4] = &ap_i2c4.common.hw, 103362306a36Sopenharmony_ci [CLK_AP_I2C5] = &ap_i2c5.common.hw, 103462306a36Sopenharmony_ci [CLK_AP_I2C6] = &ap_i2c6.common.hw, 103562306a36Sopenharmony_ci [CLK_AP_SPI0] = &ap_spi0.common.hw, 103662306a36Sopenharmony_ci [CLK_AP_SPI1] = &ap_spi1.common.hw, 103762306a36Sopenharmony_ci [CLK_AP_SPI2] = &ap_spi2.common.hw, 103862306a36Sopenharmony_ci [CLK_AP_SPI3] = &ap_spi3.common.hw, 103962306a36Sopenharmony_ci [CLK_AP_IIS0] = &ap_iis0.common.hw, 104062306a36Sopenharmony_ci [CLK_AP_IIS1] = &ap_iis1.common.hw, 104162306a36Sopenharmony_ci [CLK_AP_IIS2] = &ap_iis2.common.hw, 104262306a36Sopenharmony_ci [CLK_SIM0] = &sim0.common.hw, 104362306a36Sopenharmony_ci [CLK_SIM0_32K] = &sim0_32k.common.hw, 104462306a36Sopenharmony_ci }, 104562306a36Sopenharmony_ci .num = CLK_AP_CLK_NUM, 104662306a36Sopenharmony_ci}; 104762306a36Sopenharmony_ci 104862306a36Sopenharmony_cistatic const struct sprd_clk_desc sc9863a_ap_clk_desc = { 104962306a36Sopenharmony_ci .clk_clks = sc9863a_ap_clks, 105062306a36Sopenharmony_ci .num_clk_clks = ARRAY_SIZE(sc9863a_ap_clks), 105162306a36Sopenharmony_ci .hw_clks = &sc9863a_ap_clk_hws, 105262306a36Sopenharmony_ci}; 105362306a36Sopenharmony_ci 105462306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(otg_eb, "otg-eb", &ap_axi.common.hw, 0x0, 0x1000, 105562306a36Sopenharmony_ci BIT(4), 0, 0); 105662306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(dma_eb, "dma-eb", &ap_axi.common.hw, 0x0, 0x1000, 105762306a36Sopenharmony_ci BIT(5), 0, 0); 105862306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(ce_eb, "ce-eb", &ap_axi.common.hw, 0x0, 0x1000, 105962306a36Sopenharmony_ci BIT(6), 0, 0); 106062306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(nandc_eb, "nandc-eb", &ap_axi.common.hw, 0x0, 0x1000, 106162306a36Sopenharmony_ci BIT(7), 0, 0); 106262306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(sdio0_eb, "sdio0-eb", &ap_axi.common.hw, 0x0, 0x1000, 106362306a36Sopenharmony_ci BIT(8), 0, 0); 106462306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(sdio1_eb, "sdio1-eb", &ap_axi.common.hw, 0x0, 0x1000, 106562306a36Sopenharmony_ci BIT(9), 0, 0); 106662306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(sdio2_eb, "sdio2-eb", &ap_axi.common.hw, 0x0, 0x1000, 106762306a36Sopenharmony_ci BIT(10), 0, 0); 106862306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(emmc_eb, "emmc-eb", &ap_axi.common.hw, 0x0, 0x1000, 106962306a36Sopenharmony_ci BIT(11), 0, 0); 107062306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(emmc_32k_eb, "emmc-32k-eb", &ap_axi.common.hw, 0x0, 107162306a36Sopenharmony_ci 0x1000, BIT(27), 0, 0); 107262306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(sdio0_32k_eb, "sdio0-32k-eb", &ap_axi.common.hw, 0x0, 107362306a36Sopenharmony_ci 0x1000, BIT(28), 0, 0); 107462306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(sdio1_32k_eb, "sdio1-32k-eb", &ap_axi.common.hw, 0x0, 107562306a36Sopenharmony_ci 0x1000, BIT(29), 0, 0); 107662306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(sdio2_32k_eb, "sdio2-32k-eb", &ap_axi.common.hw, 0x0, 107762306a36Sopenharmony_ci 0x1000, BIT(30), 0, 0); 107862306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(nandc_26m_eb, "nandc-26m-eb", &ap_axi.common.hw, 0x0, 107962306a36Sopenharmony_ci 0x1000, BIT(31), 0, 0); 108062306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(dma_eb2, "dma-eb2", &ap_axi.common.hw, 0x18, 108162306a36Sopenharmony_ci 0x1000, BIT(0), 0, 0); 108262306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(ce_eb2, "ce-eb2", &ap_axi.common.hw, 0x18, 108362306a36Sopenharmony_ci 0x1000, BIT(1), 0, 0); 108462306a36Sopenharmony_ci 108562306a36Sopenharmony_cistatic struct sprd_clk_common *sc9863a_apahb_gate_clks[] = { 108662306a36Sopenharmony_ci /* address base is 0x20e00000 */ 108762306a36Sopenharmony_ci &otg_eb.common, 108862306a36Sopenharmony_ci &dma_eb.common, 108962306a36Sopenharmony_ci &ce_eb.common, 109062306a36Sopenharmony_ci &nandc_eb.common, 109162306a36Sopenharmony_ci &sdio0_eb.common, 109262306a36Sopenharmony_ci &sdio1_eb.common, 109362306a36Sopenharmony_ci &sdio2_eb.common, 109462306a36Sopenharmony_ci &emmc_eb.common, 109562306a36Sopenharmony_ci &emmc_32k_eb.common, 109662306a36Sopenharmony_ci &sdio0_32k_eb.common, 109762306a36Sopenharmony_ci &sdio1_32k_eb.common, 109862306a36Sopenharmony_ci &sdio2_32k_eb.common, 109962306a36Sopenharmony_ci &nandc_26m_eb.common, 110062306a36Sopenharmony_ci &dma_eb2.common, 110162306a36Sopenharmony_ci &ce_eb2.common, 110262306a36Sopenharmony_ci}; 110362306a36Sopenharmony_ci 110462306a36Sopenharmony_cistatic struct clk_hw_onecell_data sc9863a_apahb_gate_hws = { 110562306a36Sopenharmony_ci .hws = { 110662306a36Sopenharmony_ci [CLK_OTG_EB] = &otg_eb.common.hw, 110762306a36Sopenharmony_ci [CLK_DMA_EB] = &dma_eb.common.hw, 110862306a36Sopenharmony_ci [CLK_CE_EB] = &ce_eb.common.hw, 110962306a36Sopenharmony_ci [CLK_NANDC_EB] = &nandc_eb.common.hw, 111062306a36Sopenharmony_ci [CLK_SDIO0_EB] = &sdio0_eb.common.hw, 111162306a36Sopenharmony_ci [CLK_SDIO1_EB] = &sdio1_eb.common.hw, 111262306a36Sopenharmony_ci [CLK_SDIO2_EB] = &sdio2_eb.common.hw, 111362306a36Sopenharmony_ci [CLK_EMMC_EB] = &emmc_eb.common.hw, 111462306a36Sopenharmony_ci [CLK_EMMC_32K_EB] = &emmc_32k_eb.common.hw, 111562306a36Sopenharmony_ci [CLK_SDIO0_32K_EB] = &sdio0_32k_eb.common.hw, 111662306a36Sopenharmony_ci [CLK_SDIO1_32K_EB] = &sdio1_32k_eb.common.hw, 111762306a36Sopenharmony_ci [CLK_SDIO2_32K_EB] = &sdio2_32k_eb.common.hw, 111862306a36Sopenharmony_ci [CLK_NANDC_26M_EB] = &nandc_26m_eb.common.hw, 111962306a36Sopenharmony_ci [CLK_DMA_EB2] = &dma_eb2.common.hw, 112062306a36Sopenharmony_ci [CLK_CE_EB2] = &ce_eb2.common.hw, 112162306a36Sopenharmony_ci }, 112262306a36Sopenharmony_ci .num = CLK_AP_AHB_GATE_NUM, 112362306a36Sopenharmony_ci}; 112462306a36Sopenharmony_ci 112562306a36Sopenharmony_cistatic const struct sprd_clk_desc sc9863a_apahb_gate_desc = { 112662306a36Sopenharmony_ci .clk_clks = sc9863a_apahb_gate_clks, 112762306a36Sopenharmony_ci .num_clk_clks = ARRAY_SIZE(sc9863a_apahb_gate_clks), 112862306a36Sopenharmony_ci .hw_clks = &sc9863a_apahb_gate_hws, 112962306a36Sopenharmony_ci}; 113062306a36Sopenharmony_ci 113162306a36Sopenharmony_ci/* aon gate clocks */ 113262306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(gpio_eb, "gpio-eb", &aon_apb.common.hw, 113362306a36Sopenharmony_ci 0x0, 0x1000, BIT(3), 0, 0); 113462306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(pwm0_eb, "pwm0-eb", &aon_apb.common.hw, 113562306a36Sopenharmony_ci 0x0, 0x1000, BIT(4), 0, 0); 113662306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(pwm1_eb, "pwm1-eb", &aon_apb.common.hw, 113762306a36Sopenharmony_ci 0x0, 0x1000, BIT(5), CLK_IGNORE_UNUSED, 0); 113862306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(pwm2_eb, "pwm2-eb", &aon_apb.common.hw, 0x0, 113962306a36Sopenharmony_ci 0x1000, BIT(6), 0, 0); 114062306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(pwm3_eb, "pwm3-eb", &aon_apb.common.hw, 0x0, 114162306a36Sopenharmony_ci 0x1000, BIT(7), 0, 0); 114262306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(kpd_eb, "kpd-eb", &aon_apb.common.hw, 0x0, 114362306a36Sopenharmony_ci 0x1000, BIT(8), 0, 0); 114462306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(aon_syst_eb, "aon-syst-eb", &aon_apb.common.hw, 0x0, 114562306a36Sopenharmony_ci 0x1000, BIT(9), CLK_IGNORE_UNUSED, 0); 114662306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(ap_syst_eb, "ap-syst-eb", &aon_apb.common.hw, 0x0, 114762306a36Sopenharmony_ci 0x1000, BIT(10), CLK_IGNORE_UNUSED, 0); 114862306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(aon_tmr_eb, "aon-tmr-eb", &aon_apb.common.hw, 0x0, 114962306a36Sopenharmony_ci 0x1000, BIT(11), CLK_IGNORE_UNUSED, 0); 115062306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(efuse_eb, "efuse-eb", &aon_apb.common.hw, 0x0, 115162306a36Sopenharmony_ci 0x1000, BIT(13), CLK_IGNORE_UNUSED, 0); 115262306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(eic_eb, "eic-eb", &aon_apb.common.hw, 0x0, 115362306a36Sopenharmony_ci 0x1000, BIT(14), CLK_IGNORE_UNUSED, 0); 115462306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(intc_eb, "intc-eb", &aon_apb.common.hw, 0x0, 115562306a36Sopenharmony_ci 0x1000, BIT(15), CLK_IGNORE_UNUSED, 0); 115662306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(adi_eb, "adi-eb", &aon_apb.common.hw, 0x0, 115762306a36Sopenharmony_ci 0x1000, BIT(16), CLK_IGNORE_UNUSED, 0); 115862306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(audif_eb, "audif-eb", &aon_apb.common.hw, 0x0, 115962306a36Sopenharmony_ci 0x1000, BIT(17), 0, 0); 116062306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(aud_eb, "aud-eb", &aon_apb.common.hw, 0x0, 116162306a36Sopenharmony_ci 0x1000, BIT(18), 0, 0); 116262306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(vbc_eb, "vbc-eb", &aon_apb.common.hw, 0x0, 116362306a36Sopenharmony_ci 0x1000, BIT(19), 0, 0); 116462306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(pin_eb, "pin-eb", &aon_apb.common.hw, 0x0, 116562306a36Sopenharmony_ci 0x1000, BIT(20), CLK_IGNORE_UNUSED, 0); 116662306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(ap_wdg_eb, "ap-wdg-eb", &aon_apb.common.hw, 0x0, 116762306a36Sopenharmony_ci 0x1000, BIT(24), 0, 0); 116862306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(mm_eb, "mm-eb", &aon_apb.common.hw, 0x0, 116962306a36Sopenharmony_ci 0x1000, BIT(25), CLK_IGNORE_UNUSED, 0); 117062306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(aon_apb_ckg_eb, "aon-apb-ckg-eb", &aon_apb.common.hw, 117162306a36Sopenharmony_ci 0x0, 0x1000, BIT(26), CLK_IGNORE_UNUSED, 0); 117262306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(ca53_ts0_eb, "ca53-ts0-eb", &aon_apb.common.hw, 117362306a36Sopenharmony_ci 0x0, 0x1000, BIT(28), CLK_IGNORE_UNUSED, 0); 117462306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(ca53_ts1_eb, "ca53-ts1-eb", &aon_apb.common.hw, 117562306a36Sopenharmony_ci 0x0, 0x1000, BIT(29), CLK_IGNORE_UNUSED, 0); 117662306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(ca53_dap_eb, "ca53-dap-eb", &aon_apb.common.hw, 117762306a36Sopenharmony_ci 0x0, 0x1000, BIT(30), CLK_IGNORE_UNUSED, 0); 117862306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(pmu_eb, "pmu-eb", &aon_apb.common.hw, 117962306a36Sopenharmony_ci 0x4, 0x1000, BIT(0), CLK_IGNORE_UNUSED, 0); 118062306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(thm_eb, "thm-eb", &aon_apb.common.hw, 118162306a36Sopenharmony_ci 0x4, 0x1000, BIT(1), CLK_IGNORE_UNUSED, 0); 118262306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(aux0_eb, "aux0-eb", &aon_apb.common.hw, 118362306a36Sopenharmony_ci 0x4, 0x1000, BIT(2), CLK_IGNORE_UNUSED, 0); 118462306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(aux1_eb, "aux1-eb", &aon_apb.common.hw, 118562306a36Sopenharmony_ci 0x4, 0x1000, BIT(3), 0, 0); 118662306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(aux2_eb, "aux2-eb", &aon_apb.common.hw, 118762306a36Sopenharmony_ci 0x4, 0x1000, BIT(4), CLK_IGNORE_UNUSED, 0); 118862306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(probe_eb, "probe-eb", &aon_apb.common.hw, 118962306a36Sopenharmony_ci 0x4, 0x1000, BIT(5), 0, 0); 119062306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(emc_ref_eb, "emc-ref-eb", &aon_apb.common.hw, 119162306a36Sopenharmony_ci 0x4, 0x1000, BIT(7), CLK_IGNORE_UNUSED, 0); 119262306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(ca53_wdg_eb, "ca53-wdg-eb", &aon_apb.common.hw, 119362306a36Sopenharmony_ci 0x4, 0x1000, BIT(8), CLK_IGNORE_UNUSED, 0); 119462306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(ap_tmr1_eb, "ap-tmr1-eb", &aon_apb.common.hw, 119562306a36Sopenharmony_ci 0x4, 0x1000, BIT(9), 0, 0); 119662306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(ap_tmr2_eb, "ap-tmr2-eb", &aon_apb.common.hw, 119762306a36Sopenharmony_ci 0x4, 0x1000, BIT(10), 0, 0); 119862306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(disp_emc_eb, "disp-emc-eb", &aon_apb.common.hw, 119962306a36Sopenharmony_ci 0x4, 0x1000, BIT(11), 0, 0); 120062306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(zip_emc_eb, "zip-emc-eb", &aon_apb.common.hw, 120162306a36Sopenharmony_ci 0x4, 0x1000, BIT(12), 0, 0); 120262306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(gsp_emc_eb, "gsp-emc-eb", &aon_apb.common.hw, 120362306a36Sopenharmony_ci 0x4, 0x1000, BIT(13), 0, 0); 120462306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(mm_vsp_eb, "mm-vsp-eb", &aon_apb.common.hw, 120562306a36Sopenharmony_ci 0x4, 0x1000, BIT(14), 0, 0); 120662306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(mdar_eb, "mdar-eb", &aon_apb.common.hw, 120762306a36Sopenharmony_ci 0x4, 0x1000, BIT(17), 0, 0); 120862306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(rtc4m0_cal_eb, "rtc4m0-cal-eb", &aon_apb.common.hw, 120962306a36Sopenharmony_ci 0x4, 0x1000, BIT(18), 0, 0); 121062306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(rtc4m1_cal_eb, "rtc4m1-cal-eb", &aon_apb.common.hw, 121162306a36Sopenharmony_ci 0x4, 0x1000, BIT(19), 0, 0); 121262306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(djtag_eb, "djtag-eb", &aon_apb.common.hw, 121362306a36Sopenharmony_ci 0x4, 0x1000, BIT(20), 0, 0); 121462306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(mbox_eb, "mbox-eb", &aon_apb.common.hw, 121562306a36Sopenharmony_ci 0x4, 0x1000, BIT(21), 0, 0); 121662306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(aon_dma_eb, "aon-dma-eb", &aon_apb.common.hw, 121762306a36Sopenharmony_ci 0x4, 0x1000, BIT(22), 0, 0); 121862306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(aon_apb_def_eb, "aon-apb-def-eb", &aon_apb.common.hw, 121962306a36Sopenharmony_ci 0x4, 0x1000, BIT(25), 0, 0); 122062306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(ca5_ts0_eb, "ca5-ts0-eb", &aon_apb.common.hw, 122162306a36Sopenharmony_ci 0x4, 0x1000, BIT(26), 0, 0); 122262306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(dbg_eb, "dbg-eb", &aon_apb.common.hw, 122362306a36Sopenharmony_ci 0x4, 0x1000, BIT(28), 0, 0); 122462306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(dbg_emc_eb, "dbg-emc-eb", &aon_apb.common.hw, 122562306a36Sopenharmony_ci 0x4, 0x1000, BIT(29), 0, 0); 122662306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(cross_trig_eb, "cross-trig-eb", &aon_apb.common.hw, 122762306a36Sopenharmony_ci 0x4, 0x1000, BIT(30), 0, 0); 122862306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(serdes_dphy_eb, "serdes-dphy-eb", &aon_apb.common.hw, 122962306a36Sopenharmony_ci 0x4, 0x1000, BIT(31), 0, 0); 123062306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(arch_rtc_eb, "arch-rtc-eb", &aon_apb.common.hw, 123162306a36Sopenharmony_ci 0x10, 0x1000, BIT(0), CLK_IGNORE_UNUSED, 0); 123262306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(kpd_rtc_eb, "kpd-rtc-eb", &aon_apb.common.hw, 123362306a36Sopenharmony_ci 0x10, 0x1000, BIT(1), 0, 0); 123462306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(aon_syst_rtc_eb, "aon-syst-rtc-eb", &aon_apb.common.hw, 123562306a36Sopenharmony_ci 0x10, 0x1000, BIT(2), CLK_IGNORE_UNUSED, 0); 123662306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(ap_syst_rtc_eb, "ap-syst-rtc-eb", &aon_apb.common.hw, 123762306a36Sopenharmony_ci 0x10, 0x1000, BIT(3), CLK_IGNORE_UNUSED, 0); 123862306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(aon_tmr_rtc_eb, "aon-tmr-rtc-eb", &aon_apb.common.hw, 123962306a36Sopenharmony_ci 0x10, 0x1000, BIT(4), CLK_IGNORE_UNUSED, 0); 124062306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(ap_tmr0_rtc_eb, "ap-tmr0-rtc-eb", &aon_apb.common.hw, 124162306a36Sopenharmony_ci 0x10, 0x1000, BIT(5), 0, 0); 124262306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(eic_rtc_eb, "eic-rtc-eb", &aon_apb.common.hw, 124362306a36Sopenharmony_ci 0x10, 0x1000, BIT(6), CLK_IGNORE_UNUSED, 0); 124462306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(eic_rtcdv5_eb, "eic-rtcdv5-eb", &aon_apb.common.hw, 124562306a36Sopenharmony_ci 0x10, 0x1000, BIT(7), CLK_IGNORE_UNUSED, 0); 124662306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(ap_wdg_rtc_eb, "ap-wdg-rtc-eb", &aon_apb.common.hw, 124762306a36Sopenharmony_ci 0x10, 0x1000, BIT(8), CLK_IGNORE_UNUSED, 0); 124862306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(ca53_wdg_rtc_eb, "ca53-wdg-rtc-eb", &aon_apb.common.hw, 124962306a36Sopenharmony_ci 0x10, 0x1000, BIT(9), CLK_IGNORE_UNUSED, 0); 125062306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(thm_rtc_eb, "thm-rtc-eb", &aon_apb.common.hw, 125162306a36Sopenharmony_ci 0x10, 0x1000, BIT(10), 0, 0); 125262306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(athma_rtc_eb, "athma-rtc-eb", &aon_apb.common.hw, 125362306a36Sopenharmony_ci 0x10, 0x1000, BIT(11), 0, 0); 125462306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(gthma_rtc_eb, "gthma-rtc-eb", &aon_apb.common.hw, 125562306a36Sopenharmony_ci 0x10, 0x1000, BIT(12), 0, 0); 125662306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(athma_rtc_a_eb, "athma-rtc-a-eb", &aon_apb.common.hw, 125762306a36Sopenharmony_ci 0x10, 0x1000, BIT(13), 0, 0); 125862306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(gthma_rtc_a_eb, "gthma-rtc-a-eb", &aon_apb.common.hw, 125962306a36Sopenharmony_ci 0x10, 0x1000, BIT(14), 0, 0); 126062306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(ap_tmr1_rtc_eb, "ap-tmr1-rtc-eb", &aon_apb.common.hw, 126162306a36Sopenharmony_ci 0x10, 0x1000, BIT(15), 0, 0); 126262306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(ap_tmr2_rtc_eb, "ap-tmr2-rtc-eb", &aon_apb.common.hw, 126362306a36Sopenharmony_ci 0x10, 0x1000, BIT(16), 0, 0); 126462306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(dxco_lc_rtc_eb, "dxco-lc-rtc-eb", &aon_apb.common.hw, 126562306a36Sopenharmony_ci 0x10, 0x1000, BIT(17), 0, 0); 126662306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(bb_cal_rtc_eb, "bb-cal-rtc-eb", &aon_apb.common.hw, 126762306a36Sopenharmony_ci 0x10, 0x1000, BIT(18), 0, 0); 126862306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(gpu_eb, "gpu-eb", &aon_apb.common.hw, 0x50, 126962306a36Sopenharmony_ci 0x1000, BIT(0), 0, 0); 127062306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(disp_eb, "disp-eb", &aon_apb.common.hw, 0x50, 127162306a36Sopenharmony_ci 0x1000, BIT(2), 0, 0); 127262306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(mm_emc_eb, "mm-emc-eb", &aon_apb.common.hw, 0x50, 127362306a36Sopenharmony_ci 0x1000, BIT(3), 0, 0); 127462306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(power_cpu_eb, "power-cpu-eb", &aon_apb.common.hw, 0x50, 127562306a36Sopenharmony_ci 0x1000, BIT(10), CLK_IGNORE_UNUSED, 0); 127662306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(hw_i2c_eb, "hw-i2c-eb", &aon_apb.common.hw, 0x50, 127762306a36Sopenharmony_ci 0x1000, BIT(11), 0, 0); 127862306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(mm_vsp_emc_eb, "mm-vsp-emc-eb", &aon_apb.common.hw, 0x50, 127962306a36Sopenharmony_ci 0x1000, BIT(14), 0, 0); 128062306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(vsp_eb, "vsp-eb", &aon_apb.common.hw, 0x50, 128162306a36Sopenharmony_ci 0x1000, BIT(16), 0, 0); 128262306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(cssys_eb, "cssys-eb", &aon_apb.common.hw, 0xb0, 128362306a36Sopenharmony_ci 0x1000, BIT(4), 0, 0); 128462306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(dmc_eb, "dmc-eb", &aon_apb.common.hw, 0xb0, 128562306a36Sopenharmony_ci 0x1000, BIT(5), CLK_IGNORE_UNUSED, 0); 128662306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(rosc_eb, "rosc-eb", &aon_apb.common.hw, 0xb0, 128762306a36Sopenharmony_ci 0x1000, BIT(7), 0, 0); 128862306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(s_d_cfg_eb, "s-d-cfg-eb", &aon_apb.common.hw, 0xb0, 128962306a36Sopenharmony_ci 0x1000, BIT(8), 0, 0); 129062306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(s_d_ref_eb, "s-d-ref-eb", &aon_apb.common.hw, 0xb0, 129162306a36Sopenharmony_ci 0x1000, BIT(9), 0, 0); 129262306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(b_dma_eb, "b-dma-eb", &aon_apb.common.hw, 0xb0, 129362306a36Sopenharmony_ci 0x1000, BIT(10), 0, 0); 129462306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(anlg_eb, "anlg-eb", &aon_apb.common.hw, 0xb0, 129562306a36Sopenharmony_ci 0x1000, BIT(11), CLK_IGNORE_UNUSED, 0); 129662306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(anlg_apb_eb, "anlg-apb-eb", &aon_apb.common.hw, 0xb0, 129762306a36Sopenharmony_ci 0x1000, BIT(13), 0, 0); 129862306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(bsmtmr_eb, "bsmtmr-eb", &aon_apb.common.hw, 0xb0, 129962306a36Sopenharmony_ci 0x1000, BIT(14), 0, 0); 130062306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(ap_axi_eb, "ap-axi-eb", &aon_apb.common.hw, 0xb0, 130162306a36Sopenharmony_ci 0x1000, BIT(15), CLK_IGNORE_UNUSED, 0); 130262306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(ap_intc0_eb, "ap-intc0-eb", &aon_apb.common.hw, 0xb0, 130362306a36Sopenharmony_ci 0x1000, BIT(16), CLK_IGNORE_UNUSED, 0); 130462306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(ap_intc1_eb, "ap-intc1-eb", &aon_apb.common.hw, 0xb0, 130562306a36Sopenharmony_ci 0x1000, BIT(17), CLK_IGNORE_UNUSED, 0); 130662306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(ap_intc2_eb, "ap-intc2-eb", &aon_apb.common.hw, 0xb0, 130762306a36Sopenharmony_ci 0x1000, BIT(18), CLK_IGNORE_UNUSED, 0); 130862306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(ap_intc3_eb, "ap-intc3-eb", &aon_apb.common.hw, 0xb0, 130962306a36Sopenharmony_ci 0x1000, BIT(19), CLK_IGNORE_UNUSED, 0); 131062306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(ap_intc4_eb, "ap-intc4-eb", &aon_apb.common.hw, 0xb0, 131162306a36Sopenharmony_ci 0x1000, BIT(20), CLK_IGNORE_UNUSED, 0); 131262306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(ap_intc5_eb, "ap-intc5-eb", &aon_apb.common.hw, 0xb0, 131362306a36Sopenharmony_ci 0x1000, BIT(21), CLK_IGNORE_UNUSED, 0); 131462306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(scc_eb, "scc-eb", &aon_apb.common.hw, 0xb0, 131562306a36Sopenharmony_ci 0x1000, BIT(22), 0, 0); 131662306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(dphy_cfg_eb, "dphy-cfg-eb", &aon_apb.common.hw, 0xb0, 131762306a36Sopenharmony_ci 0x1000, BIT(23), 0, 0); 131862306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(dphy_ref_eb, "dphy-ref-eb", &aon_apb.common.hw, 0xb0, 131962306a36Sopenharmony_ci 0x1000, BIT(24), 0, 0); 132062306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(cphy_cfg_eb, "cphy-cfg-eb", &aon_apb.common.hw, 0xb0, 132162306a36Sopenharmony_ci 0x1000, BIT(25), 0, 0); 132262306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(otg_ref_eb, "otg-ref-eb", &aon_apb.common.hw, 0xb0, 132362306a36Sopenharmony_ci 0x1000, BIT(26), 0, 0); 132462306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(serdes_eb, "serdes-eb", &aon_apb.common.hw, 0xb0, 132562306a36Sopenharmony_ci 0x1000, BIT(27), 0, 0); 132662306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(aon_ap_emc_eb, "aon-ap-emc-eb", &aon_apb.common.hw, 0xb0, 132762306a36Sopenharmony_ci 0x1000, BIT(28), 0, 0); 132862306a36Sopenharmony_cistatic struct sprd_clk_common *sc9863a_aonapb_gate_clks[] = { 132962306a36Sopenharmony_ci /* address base is 0x402e0000 */ 133062306a36Sopenharmony_ci &gpio_eb.common, 133162306a36Sopenharmony_ci &pwm0_eb.common, 133262306a36Sopenharmony_ci &pwm1_eb.common, 133362306a36Sopenharmony_ci &pwm2_eb.common, 133462306a36Sopenharmony_ci &pwm3_eb.common, 133562306a36Sopenharmony_ci &kpd_eb.common, 133662306a36Sopenharmony_ci &aon_syst_eb.common, 133762306a36Sopenharmony_ci &ap_syst_eb.common, 133862306a36Sopenharmony_ci &aon_tmr_eb.common, 133962306a36Sopenharmony_ci &efuse_eb.common, 134062306a36Sopenharmony_ci &eic_eb.common, 134162306a36Sopenharmony_ci &intc_eb.common, 134262306a36Sopenharmony_ci &adi_eb.common, 134362306a36Sopenharmony_ci &audif_eb.common, 134462306a36Sopenharmony_ci &aud_eb.common, 134562306a36Sopenharmony_ci &vbc_eb.common, 134662306a36Sopenharmony_ci &pin_eb.common, 134762306a36Sopenharmony_ci &ap_wdg_eb.common, 134862306a36Sopenharmony_ci &mm_eb.common, 134962306a36Sopenharmony_ci &aon_apb_ckg_eb.common, 135062306a36Sopenharmony_ci &ca53_ts0_eb.common, 135162306a36Sopenharmony_ci &ca53_ts1_eb.common, 135262306a36Sopenharmony_ci &ca53_dap_eb.common, 135362306a36Sopenharmony_ci &pmu_eb.common, 135462306a36Sopenharmony_ci &thm_eb.common, 135562306a36Sopenharmony_ci &aux0_eb.common, 135662306a36Sopenharmony_ci &aux1_eb.common, 135762306a36Sopenharmony_ci &aux2_eb.common, 135862306a36Sopenharmony_ci &probe_eb.common, 135962306a36Sopenharmony_ci &emc_ref_eb.common, 136062306a36Sopenharmony_ci &ca53_wdg_eb.common, 136162306a36Sopenharmony_ci &ap_tmr1_eb.common, 136262306a36Sopenharmony_ci &ap_tmr2_eb.common, 136362306a36Sopenharmony_ci &disp_emc_eb.common, 136462306a36Sopenharmony_ci &zip_emc_eb.common, 136562306a36Sopenharmony_ci &gsp_emc_eb.common, 136662306a36Sopenharmony_ci &mm_vsp_eb.common, 136762306a36Sopenharmony_ci &mdar_eb.common, 136862306a36Sopenharmony_ci &rtc4m0_cal_eb.common, 136962306a36Sopenharmony_ci &rtc4m1_cal_eb.common, 137062306a36Sopenharmony_ci &djtag_eb.common, 137162306a36Sopenharmony_ci &mbox_eb.common, 137262306a36Sopenharmony_ci &aon_dma_eb.common, 137362306a36Sopenharmony_ci &aon_apb_def_eb.common, 137462306a36Sopenharmony_ci &ca5_ts0_eb.common, 137562306a36Sopenharmony_ci &dbg_eb.common, 137662306a36Sopenharmony_ci &dbg_emc_eb.common, 137762306a36Sopenharmony_ci &cross_trig_eb.common, 137862306a36Sopenharmony_ci &serdes_dphy_eb.common, 137962306a36Sopenharmony_ci &arch_rtc_eb.common, 138062306a36Sopenharmony_ci &kpd_rtc_eb.common, 138162306a36Sopenharmony_ci &aon_syst_rtc_eb.common, 138262306a36Sopenharmony_ci &ap_syst_rtc_eb.common, 138362306a36Sopenharmony_ci &aon_tmr_rtc_eb.common, 138462306a36Sopenharmony_ci &ap_tmr0_rtc_eb.common, 138562306a36Sopenharmony_ci &eic_rtc_eb.common, 138662306a36Sopenharmony_ci &eic_rtcdv5_eb.common, 138762306a36Sopenharmony_ci &ap_wdg_rtc_eb.common, 138862306a36Sopenharmony_ci &ca53_wdg_rtc_eb.common, 138962306a36Sopenharmony_ci &thm_rtc_eb.common, 139062306a36Sopenharmony_ci &athma_rtc_eb.common, 139162306a36Sopenharmony_ci >hma_rtc_eb.common, 139262306a36Sopenharmony_ci &athma_rtc_a_eb.common, 139362306a36Sopenharmony_ci >hma_rtc_a_eb.common, 139462306a36Sopenharmony_ci &ap_tmr1_rtc_eb.common, 139562306a36Sopenharmony_ci &ap_tmr2_rtc_eb.common, 139662306a36Sopenharmony_ci &dxco_lc_rtc_eb.common, 139762306a36Sopenharmony_ci &bb_cal_rtc_eb.common, 139862306a36Sopenharmony_ci &gpu_eb.common, 139962306a36Sopenharmony_ci &disp_eb.common, 140062306a36Sopenharmony_ci &mm_emc_eb.common, 140162306a36Sopenharmony_ci &power_cpu_eb.common, 140262306a36Sopenharmony_ci &hw_i2c_eb.common, 140362306a36Sopenharmony_ci &mm_vsp_emc_eb.common, 140462306a36Sopenharmony_ci &vsp_eb.common, 140562306a36Sopenharmony_ci &cssys_eb.common, 140662306a36Sopenharmony_ci &dmc_eb.common, 140762306a36Sopenharmony_ci &rosc_eb.common, 140862306a36Sopenharmony_ci &s_d_cfg_eb.common, 140962306a36Sopenharmony_ci &s_d_ref_eb.common, 141062306a36Sopenharmony_ci &b_dma_eb.common, 141162306a36Sopenharmony_ci &anlg_eb.common, 141262306a36Sopenharmony_ci &anlg_apb_eb.common, 141362306a36Sopenharmony_ci &bsmtmr_eb.common, 141462306a36Sopenharmony_ci &ap_axi_eb.common, 141562306a36Sopenharmony_ci &ap_intc0_eb.common, 141662306a36Sopenharmony_ci &ap_intc1_eb.common, 141762306a36Sopenharmony_ci &ap_intc2_eb.common, 141862306a36Sopenharmony_ci &ap_intc3_eb.common, 141962306a36Sopenharmony_ci &ap_intc4_eb.common, 142062306a36Sopenharmony_ci &ap_intc5_eb.common, 142162306a36Sopenharmony_ci &scc_eb.common, 142262306a36Sopenharmony_ci &dphy_cfg_eb.common, 142362306a36Sopenharmony_ci &dphy_ref_eb.common, 142462306a36Sopenharmony_ci &cphy_cfg_eb.common, 142562306a36Sopenharmony_ci &otg_ref_eb.common, 142662306a36Sopenharmony_ci &serdes_eb.common, 142762306a36Sopenharmony_ci &aon_ap_emc_eb.common, 142862306a36Sopenharmony_ci}; 142962306a36Sopenharmony_ci 143062306a36Sopenharmony_cistatic struct clk_hw_onecell_data sc9863a_aonapb_gate_hws = { 143162306a36Sopenharmony_ci .hws = { 143262306a36Sopenharmony_ci [CLK_GPIO_EB] = &gpio_eb.common.hw, 143362306a36Sopenharmony_ci [CLK_PWM0_EB] = &pwm0_eb.common.hw, 143462306a36Sopenharmony_ci [CLK_PWM1_EB] = &pwm1_eb.common.hw, 143562306a36Sopenharmony_ci [CLK_PWM2_EB] = &pwm2_eb.common.hw, 143662306a36Sopenharmony_ci [CLK_PWM3_EB] = &pwm3_eb.common.hw, 143762306a36Sopenharmony_ci [CLK_KPD_EB] = &kpd_eb.common.hw, 143862306a36Sopenharmony_ci [CLK_AON_SYST_EB] = &aon_syst_eb.common.hw, 143962306a36Sopenharmony_ci [CLK_AP_SYST_EB] = &ap_syst_eb.common.hw, 144062306a36Sopenharmony_ci [CLK_AON_TMR_EB] = &aon_tmr_eb.common.hw, 144162306a36Sopenharmony_ci [CLK_EFUSE_EB] = &efuse_eb.common.hw, 144262306a36Sopenharmony_ci [CLK_EIC_EB] = &eic_eb.common.hw, 144362306a36Sopenharmony_ci [CLK_INTC_EB] = &intc_eb.common.hw, 144462306a36Sopenharmony_ci [CLK_ADI_EB] = &adi_eb.common.hw, 144562306a36Sopenharmony_ci [CLK_AUDIF_EB] = &audif_eb.common.hw, 144662306a36Sopenharmony_ci [CLK_AUD_EB] = &aud_eb.common.hw, 144762306a36Sopenharmony_ci [CLK_VBC_EB] = &vbc_eb.common.hw, 144862306a36Sopenharmony_ci [CLK_PIN_EB] = &pin_eb.common.hw, 144962306a36Sopenharmony_ci [CLK_AP_WDG_EB] = &ap_wdg_eb.common.hw, 145062306a36Sopenharmony_ci [CLK_MM_EB] = &mm_eb.common.hw, 145162306a36Sopenharmony_ci [CLK_AON_APB_CKG_EB] = &aon_apb_ckg_eb.common.hw, 145262306a36Sopenharmony_ci [CLK_CA53_TS0_EB] = &ca53_ts0_eb.common.hw, 145362306a36Sopenharmony_ci [CLK_CA53_TS1_EB] = &ca53_ts1_eb.common.hw, 145462306a36Sopenharmony_ci [CLK_CS53_DAP_EB] = &ca53_dap_eb.common.hw, 145562306a36Sopenharmony_ci [CLK_PMU_EB] = &pmu_eb.common.hw, 145662306a36Sopenharmony_ci [CLK_THM_EB] = &thm_eb.common.hw, 145762306a36Sopenharmony_ci [CLK_AUX0_EB] = &aux0_eb.common.hw, 145862306a36Sopenharmony_ci [CLK_AUX1_EB] = &aux1_eb.common.hw, 145962306a36Sopenharmony_ci [CLK_AUX2_EB] = &aux2_eb.common.hw, 146062306a36Sopenharmony_ci [CLK_PROBE_EB] = &probe_eb.common.hw, 146162306a36Sopenharmony_ci [CLK_EMC_REF_EB] = &emc_ref_eb.common.hw, 146262306a36Sopenharmony_ci [CLK_CA53_WDG_EB] = &ca53_wdg_eb.common.hw, 146362306a36Sopenharmony_ci [CLK_AP_TMR1_EB] = &ap_tmr1_eb.common.hw, 146462306a36Sopenharmony_ci [CLK_AP_TMR2_EB] = &ap_tmr2_eb.common.hw, 146562306a36Sopenharmony_ci [CLK_DISP_EMC_EB] = &disp_emc_eb.common.hw, 146662306a36Sopenharmony_ci [CLK_ZIP_EMC_EB] = &zip_emc_eb.common.hw, 146762306a36Sopenharmony_ci [CLK_GSP_EMC_EB] = &gsp_emc_eb.common.hw, 146862306a36Sopenharmony_ci [CLK_MM_VSP_EB] = &mm_vsp_eb.common.hw, 146962306a36Sopenharmony_ci [CLK_MDAR_EB] = &mdar_eb.common.hw, 147062306a36Sopenharmony_ci [CLK_RTC4M0_CAL_EB] = &rtc4m0_cal_eb.common.hw, 147162306a36Sopenharmony_ci [CLK_RTC4M1_CAL_EB] = &rtc4m1_cal_eb.common.hw, 147262306a36Sopenharmony_ci [CLK_DJTAG_EB] = &djtag_eb.common.hw, 147362306a36Sopenharmony_ci [CLK_MBOX_EB] = &mbox_eb.common.hw, 147462306a36Sopenharmony_ci [CLK_AON_DMA_EB] = &aon_dma_eb.common.hw, 147562306a36Sopenharmony_ci [CLK_AON_APB_DEF_EB] = &aon_apb_def_eb.common.hw, 147662306a36Sopenharmony_ci [CLK_CA5_TS0_EB] = &ca5_ts0_eb.common.hw, 147762306a36Sopenharmony_ci [CLK_DBG_EB] = &dbg_eb.common.hw, 147862306a36Sopenharmony_ci [CLK_DBG_EMC_EB] = &dbg_emc_eb.common.hw, 147962306a36Sopenharmony_ci [CLK_CROSS_TRIG_EB] = &cross_trig_eb.common.hw, 148062306a36Sopenharmony_ci [CLK_SERDES_DPHY_EB] = &serdes_dphy_eb.common.hw, 148162306a36Sopenharmony_ci [CLK_ARCH_RTC_EB] = &arch_rtc_eb.common.hw, 148262306a36Sopenharmony_ci [CLK_KPD_RTC_EB] = &kpd_rtc_eb.common.hw, 148362306a36Sopenharmony_ci [CLK_AON_SYST_RTC_EB] = &aon_syst_rtc_eb.common.hw, 148462306a36Sopenharmony_ci [CLK_AP_SYST_RTC_EB] = &ap_syst_rtc_eb.common.hw, 148562306a36Sopenharmony_ci [CLK_AON_TMR_RTC_EB] = &aon_tmr_rtc_eb.common.hw, 148662306a36Sopenharmony_ci [CLK_AP_TMR0_RTC_EB] = &ap_tmr0_rtc_eb.common.hw, 148762306a36Sopenharmony_ci [CLK_EIC_RTC_EB] = &eic_rtc_eb.common.hw, 148862306a36Sopenharmony_ci [CLK_EIC_RTCDV5_EB] = &eic_rtcdv5_eb.common.hw, 148962306a36Sopenharmony_ci [CLK_AP_WDG_RTC_EB] = &ap_wdg_rtc_eb.common.hw, 149062306a36Sopenharmony_ci [CLK_CA53_WDG_RTC_EB] = &ca53_wdg_rtc_eb.common.hw, 149162306a36Sopenharmony_ci [CLK_THM_RTC_EB] = &thm_rtc_eb.common.hw, 149262306a36Sopenharmony_ci [CLK_ATHMA_RTC_EB] = &athma_rtc_eb.common.hw, 149362306a36Sopenharmony_ci [CLK_GTHMA_RTC_EB] = >hma_rtc_eb.common.hw, 149462306a36Sopenharmony_ci [CLK_ATHMA_RTC_A_EB] = &athma_rtc_a_eb.common.hw, 149562306a36Sopenharmony_ci [CLK_GTHMA_RTC_A_EB] = >hma_rtc_a_eb.common.hw, 149662306a36Sopenharmony_ci [CLK_AP_TMR1_RTC_EB] = &ap_tmr1_rtc_eb.common.hw, 149762306a36Sopenharmony_ci [CLK_AP_TMR2_RTC_EB] = &ap_tmr2_rtc_eb.common.hw, 149862306a36Sopenharmony_ci [CLK_DXCO_LC_RTC_EB] = &dxco_lc_rtc_eb.common.hw, 149962306a36Sopenharmony_ci [CLK_BB_CAL_RTC_EB] = &bb_cal_rtc_eb.common.hw, 150062306a36Sopenharmony_ci [CLK_GNU_EB] = &gpu_eb.common.hw, 150162306a36Sopenharmony_ci [CLK_DISP_EB] = &disp_eb.common.hw, 150262306a36Sopenharmony_ci [CLK_MM_EMC_EB] = &mm_emc_eb.common.hw, 150362306a36Sopenharmony_ci [CLK_POWER_CPU_EB] = &power_cpu_eb.common.hw, 150462306a36Sopenharmony_ci [CLK_HW_I2C_EB] = &hw_i2c_eb.common.hw, 150562306a36Sopenharmony_ci [CLK_MM_VSP_EMC_EB] = &mm_vsp_emc_eb.common.hw, 150662306a36Sopenharmony_ci [CLK_VSP_EB] = &vsp_eb.common.hw, 150762306a36Sopenharmony_ci [CLK_CSSYS_EB] = &cssys_eb.common.hw, 150862306a36Sopenharmony_ci [CLK_DMC_EB] = &dmc_eb.common.hw, 150962306a36Sopenharmony_ci [CLK_ROSC_EB] = &rosc_eb.common.hw, 151062306a36Sopenharmony_ci [CLK_S_D_CFG_EB] = &s_d_cfg_eb.common.hw, 151162306a36Sopenharmony_ci [CLK_S_D_REF_EB] = &s_d_ref_eb.common.hw, 151262306a36Sopenharmony_ci [CLK_B_DMA_EB] = &b_dma_eb.common.hw, 151362306a36Sopenharmony_ci [CLK_ANLG_EB] = &anlg_eb.common.hw, 151462306a36Sopenharmony_ci [CLK_ANLG_APB_EB] = &anlg_apb_eb.common.hw, 151562306a36Sopenharmony_ci [CLK_BSMTMR_EB] = &bsmtmr_eb.common.hw, 151662306a36Sopenharmony_ci [CLK_AP_AXI_EB] = &ap_axi_eb.common.hw, 151762306a36Sopenharmony_ci [CLK_AP_INTC0_EB] = &ap_intc0_eb.common.hw, 151862306a36Sopenharmony_ci [CLK_AP_INTC1_EB] = &ap_intc1_eb.common.hw, 151962306a36Sopenharmony_ci [CLK_AP_INTC2_EB] = &ap_intc2_eb.common.hw, 152062306a36Sopenharmony_ci [CLK_AP_INTC3_EB] = &ap_intc3_eb.common.hw, 152162306a36Sopenharmony_ci [CLK_AP_INTC4_EB] = &ap_intc4_eb.common.hw, 152262306a36Sopenharmony_ci [CLK_AP_INTC5_EB] = &ap_intc5_eb.common.hw, 152362306a36Sopenharmony_ci [CLK_SCC_EB] = &scc_eb.common.hw, 152462306a36Sopenharmony_ci [CLK_DPHY_CFG_EB] = &dphy_cfg_eb.common.hw, 152562306a36Sopenharmony_ci [CLK_DPHY_REF_EB] = &dphy_ref_eb.common.hw, 152662306a36Sopenharmony_ci [CLK_CPHY_CFG_EB] = &cphy_cfg_eb.common.hw, 152762306a36Sopenharmony_ci [CLK_OTG_REF_EB] = &otg_ref_eb.common.hw, 152862306a36Sopenharmony_ci [CLK_SERDES_EB] = &serdes_eb.common.hw, 152962306a36Sopenharmony_ci [CLK_AON_AP_EMC_EB] = &aon_ap_emc_eb.common.hw, 153062306a36Sopenharmony_ci }, 153162306a36Sopenharmony_ci .num = CLK_AON_APB_GATE_NUM, 153262306a36Sopenharmony_ci}; 153362306a36Sopenharmony_ci 153462306a36Sopenharmony_cistatic const struct sprd_clk_desc sc9863a_aonapb_gate_desc = { 153562306a36Sopenharmony_ci .clk_clks = sc9863a_aonapb_gate_clks, 153662306a36Sopenharmony_ci .num_clk_clks = ARRAY_SIZE(sc9863a_aonapb_gate_clks), 153762306a36Sopenharmony_ci .hw_clks = &sc9863a_aonapb_gate_hws, 153862306a36Sopenharmony_ci}; 153962306a36Sopenharmony_ci 154062306a36Sopenharmony_ci/* mm gate clocks */ 154162306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(mahb_ckg_eb, "mahb-ckg-eb", &mm_ahb.common.hw, 0x0, 0x1000, 154262306a36Sopenharmony_ci BIT(0), 0, 0); 154362306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(mdcam_eb, "mdcam-eb", &mm_ahb.common.hw, 0x0, 0x1000, 154462306a36Sopenharmony_ci BIT(1), 0, 0); 154562306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(misp_eb, "misp-eb", &mm_ahb.common.hw, 0x0, 0x1000, 154662306a36Sopenharmony_ci BIT(2), 0, 0); 154762306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(mahbcsi_eb, "mahbcsi-eb", &mm_ahb.common.hw, 0x0, 0x1000, 154862306a36Sopenharmony_ci BIT(3), 0, 0); 154962306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(mcsi_s_eb, "mcsi-s-eb", &mm_ahb.common.hw, 0x0, 0x1000, 155062306a36Sopenharmony_ci BIT(4), 0, 0); 155162306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_HW(mcsi_t_eb, "mcsi-t-eb", &mm_ahb.common.hw, 0x0, 0x1000, 155262306a36Sopenharmony_ci BIT(5), 0, 0); 155362306a36Sopenharmony_cistatic SPRD_GATE_CLK_HW(dcam_axi_eb, "dcam-axi-eb", &mm_ahb.common.hw, 0x8, 155462306a36Sopenharmony_ci BIT(0), 0, 0); 155562306a36Sopenharmony_cistatic SPRD_GATE_CLK_HW(isp_axi_eb, "isp-axi-eb", &mm_ahb.common.hw, 0x8, 155662306a36Sopenharmony_ci BIT(1), 0, 0); 155762306a36Sopenharmony_cistatic SPRD_GATE_CLK_HW(mcsi_eb, "mcsi-eb", &mm_ahb.common.hw, 0x8, 155862306a36Sopenharmony_ci BIT(2), 0, 0); 155962306a36Sopenharmony_cistatic SPRD_GATE_CLK_HW(mcsi_s_ckg_eb, "mcsi-s-ckg-eb", &mm_ahb.common.hw, 0x8, 156062306a36Sopenharmony_ci BIT(3), 0, 0); 156162306a36Sopenharmony_cistatic SPRD_GATE_CLK_HW(mcsi_t_ckg_eb, "mcsi-t-ckg-eb", &mm_ahb.common.hw, 0x8, 156262306a36Sopenharmony_ci BIT(4), 0, 0); 156362306a36Sopenharmony_cistatic SPRD_GATE_CLK_HW(sensor0_eb, "sensor0-eb", &mm_ahb.common.hw, 0x8, 156462306a36Sopenharmony_ci BIT(5), 0, 0); 156562306a36Sopenharmony_cistatic SPRD_GATE_CLK_HW(sensor1_eb, "sensor1-eb", &mm_ahb.common.hw, 0x8, 156662306a36Sopenharmony_ci BIT(6), 0, 0); 156762306a36Sopenharmony_cistatic SPRD_GATE_CLK_HW(sensor2_eb, "sensor2-eb", &mm_ahb.common.hw, 0x8, 156862306a36Sopenharmony_ci BIT(7), 0, 0); 156962306a36Sopenharmony_cistatic SPRD_GATE_CLK_HW(mcphy_cfg_eb, "mcphy-cfg-eb", &mm_ahb.common.hw, 0x8, 157062306a36Sopenharmony_ci BIT(8), 0, 0); 157162306a36Sopenharmony_ci 157262306a36Sopenharmony_cistatic struct sprd_clk_common *sc9863a_mm_gate_clks[] = { 157362306a36Sopenharmony_ci /* address base is 0x60800000 */ 157462306a36Sopenharmony_ci &mahb_ckg_eb.common, 157562306a36Sopenharmony_ci &mdcam_eb.common, 157662306a36Sopenharmony_ci &misp_eb.common, 157762306a36Sopenharmony_ci &mahbcsi_eb.common, 157862306a36Sopenharmony_ci &mcsi_s_eb.common, 157962306a36Sopenharmony_ci &mcsi_t_eb.common, 158062306a36Sopenharmony_ci &dcam_axi_eb.common, 158162306a36Sopenharmony_ci &isp_axi_eb.common, 158262306a36Sopenharmony_ci &mcsi_eb.common, 158362306a36Sopenharmony_ci &mcsi_s_ckg_eb.common, 158462306a36Sopenharmony_ci &mcsi_t_ckg_eb.common, 158562306a36Sopenharmony_ci &sensor0_eb.common, 158662306a36Sopenharmony_ci &sensor1_eb.common, 158762306a36Sopenharmony_ci &sensor2_eb.common, 158862306a36Sopenharmony_ci &mcphy_cfg_eb.common, 158962306a36Sopenharmony_ci}; 159062306a36Sopenharmony_ci 159162306a36Sopenharmony_cistatic struct clk_hw_onecell_data sc9863a_mm_gate_hws = { 159262306a36Sopenharmony_ci .hws = { 159362306a36Sopenharmony_ci [CLK_MAHB_CKG_EB] = &mahb_ckg_eb.common.hw, 159462306a36Sopenharmony_ci [CLK_MDCAM_EB] = &mdcam_eb.common.hw, 159562306a36Sopenharmony_ci [CLK_MISP_EB] = &misp_eb.common.hw, 159662306a36Sopenharmony_ci [CLK_MAHBCSI_EB] = &mahbcsi_eb.common.hw, 159762306a36Sopenharmony_ci [CLK_MCSI_S_EB] = &mcsi_s_eb.common.hw, 159862306a36Sopenharmony_ci [CLK_MCSI_T_EB] = &mcsi_t_eb.common.hw, 159962306a36Sopenharmony_ci [CLK_DCAM_AXI_EB] = &dcam_axi_eb.common.hw, 160062306a36Sopenharmony_ci [CLK_ISP_AXI_EB] = &isp_axi_eb.common.hw, 160162306a36Sopenharmony_ci [CLK_MCSI_EB] = &mcsi_eb.common.hw, 160262306a36Sopenharmony_ci [CLK_MCSI_S_CKG_EB] = &mcsi_s_ckg_eb.common.hw, 160362306a36Sopenharmony_ci [CLK_MCSI_T_CKG_EB] = &mcsi_t_ckg_eb.common.hw, 160462306a36Sopenharmony_ci [CLK_SENSOR0_EB] = &sensor0_eb.common.hw, 160562306a36Sopenharmony_ci [CLK_SENSOR1_EB] = &sensor1_eb.common.hw, 160662306a36Sopenharmony_ci [CLK_SENSOR2_EB] = &sensor2_eb.common.hw, 160762306a36Sopenharmony_ci [CLK_MCPHY_CFG_EB] = &mcphy_cfg_eb.common.hw, 160862306a36Sopenharmony_ci }, 160962306a36Sopenharmony_ci .num = CLK_MM_GATE_NUM, 161062306a36Sopenharmony_ci}; 161162306a36Sopenharmony_ci 161262306a36Sopenharmony_cistatic const struct sprd_clk_desc sc9863a_mm_gate_desc = { 161362306a36Sopenharmony_ci .clk_clks = sc9863a_mm_gate_clks, 161462306a36Sopenharmony_ci .num_clk_clks = ARRAY_SIZE(sc9863a_mm_gate_clks), 161562306a36Sopenharmony_ci .hw_clks = &sc9863a_mm_gate_hws, 161662306a36Sopenharmony_ci}; 161762306a36Sopenharmony_ci 161862306a36Sopenharmony_ci/* camera sensor clocks */ 161962306a36Sopenharmony_cistatic SPRD_GATE_CLK_HW(mipi_csi_clk, "mipi-csi-clk", &mahb_ckg_eb.common.hw, 162062306a36Sopenharmony_ci 0x20, BIT(16), 0, SPRD_GATE_NON_AON); 162162306a36Sopenharmony_cistatic SPRD_GATE_CLK_HW(mipi_csi_s_clk, "mipi-csi-s-clk", &mahb_ckg_eb.common.hw, 162262306a36Sopenharmony_ci 0x24, BIT(16), 0, SPRD_GATE_NON_AON); 162362306a36Sopenharmony_cistatic SPRD_GATE_CLK_HW(mipi_csi_m_clk, "mipi-csi-m-clk", &mahb_ckg_eb.common.hw, 162462306a36Sopenharmony_ci 0x28, BIT(16), 0, SPRD_GATE_NON_AON); 162562306a36Sopenharmony_ci 162662306a36Sopenharmony_cistatic struct sprd_clk_common *sc9863a_mm_clk_clks[] = { 162762306a36Sopenharmony_ci /* address base is 0x60900000 */ 162862306a36Sopenharmony_ci &mipi_csi_clk.common, 162962306a36Sopenharmony_ci &mipi_csi_s_clk.common, 163062306a36Sopenharmony_ci &mipi_csi_m_clk.common, 163162306a36Sopenharmony_ci}; 163262306a36Sopenharmony_ci 163362306a36Sopenharmony_cistatic struct clk_hw_onecell_data sc9863a_mm_clk_hws = { 163462306a36Sopenharmony_ci .hws = { 163562306a36Sopenharmony_ci [CLK_MIPI_CSI] = &mipi_csi_clk.common.hw, 163662306a36Sopenharmony_ci [CLK_MIPI_CSI_S] = &mipi_csi_s_clk.common.hw, 163762306a36Sopenharmony_ci [CLK_MIPI_CSI_M] = &mipi_csi_m_clk.common.hw, 163862306a36Sopenharmony_ci }, 163962306a36Sopenharmony_ci .num = CLK_MM_CLK_NUM, 164062306a36Sopenharmony_ci}; 164162306a36Sopenharmony_ci 164262306a36Sopenharmony_cistatic const struct sprd_clk_desc sc9863a_mm_clk_desc = { 164362306a36Sopenharmony_ci .clk_clks = sc9863a_mm_clk_clks, 164462306a36Sopenharmony_ci .num_clk_clks = ARRAY_SIZE(sc9863a_mm_clk_clks), 164562306a36Sopenharmony_ci .hw_clks = &sc9863a_mm_clk_hws, 164662306a36Sopenharmony_ci}; 164762306a36Sopenharmony_ci 164862306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_FW_NAME(sim0_eb, "sim0-eb", "ext-26m", 0x0, 164962306a36Sopenharmony_ci 0x1000, BIT(0), 0, 0); 165062306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_FW_NAME(iis0_eb, "iis0-eb", "ext-26m", 0x0, 165162306a36Sopenharmony_ci 0x1000, BIT(1), 0, 0); 165262306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_FW_NAME(iis1_eb, "iis1-eb", "ext-26m", 0x0, 165362306a36Sopenharmony_ci 0x1000, BIT(2), 0, 0); 165462306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_FW_NAME(iis2_eb, "iis2-eb", "ext-26m", 0x0, 165562306a36Sopenharmony_ci 0x1000, BIT(3), 0, 0); 165662306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_FW_NAME(spi0_eb, "spi0-eb", "ext-26m", 0x0, 165762306a36Sopenharmony_ci 0x1000, BIT(5), 0, 0); 165862306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_FW_NAME(spi1_eb, "spi1-eb", "ext-26m", 0x0, 165962306a36Sopenharmony_ci 0x1000, BIT(6), 0, 0); 166062306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_FW_NAME(spi2_eb, "spi2-eb", "ext-26m", 0x0, 166162306a36Sopenharmony_ci 0x1000, BIT(7), 0, 0); 166262306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_FW_NAME(i2c0_eb, "i2c0-eb", "ext-26m", 0x0, 166362306a36Sopenharmony_ci 0x1000, BIT(8), 0, 0); 166462306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_FW_NAME(i2c1_eb, "i2c1-eb", "ext-26m", 0x0, 166562306a36Sopenharmony_ci 0x1000, BIT(9), 0, 0); 166662306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_FW_NAME(i2c2_eb, "i2c2-eb", "ext-26m", 0x0, 166762306a36Sopenharmony_ci 0x1000, BIT(10), 0, 0); 166862306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_FW_NAME(i2c3_eb, "i2c3-eb", "ext-26m", 0x0, 166962306a36Sopenharmony_ci 0x1000, BIT(11), 0, 0); 167062306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_FW_NAME(i2c4_eb, "i2c4-eb", "ext-26m", 0x0, 167162306a36Sopenharmony_ci 0x1000, BIT(12), 0, 0); 167262306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_FW_NAME(uart0_eb, "uart0-eb", "ext-26m", 0x0, 167362306a36Sopenharmony_ci 0x1000, BIT(13), 0, 0); 167462306a36Sopenharmony_ci/* uart1_eb is for console, don't gate even if unused */ 167562306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_FW_NAME(uart1_eb, "uart1-eb", "ext-26m", 0x0, 167662306a36Sopenharmony_ci 0x1000, BIT(14), CLK_IGNORE_UNUSED, 0); 167762306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_FW_NAME(uart2_eb, "uart2-eb", "ext-26m", 0x0, 167862306a36Sopenharmony_ci 0x1000, BIT(15), 0, 0); 167962306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_FW_NAME(uart3_eb, "uart3-eb", "ext-26m", 0x0, 168062306a36Sopenharmony_ci 0x1000, BIT(16), 0, 0); 168162306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_FW_NAME(uart4_eb, "uart4-eb", "ext-26m", 0x0, 168262306a36Sopenharmony_ci 0x1000, BIT(17), 0, 0); 168362306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_FW_NAME(sim0_32k_eb, "sim0_32k-eb", "ext-26m", 0x0, 168462306a36Sopenharmony_ci 0x1000, BIT(18), 0, 0); 168562306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_FW_NAME(spi3_eb, "spi3-eb", "ext-26m", 0x0, 168662306a36Sopenharmony_ci 0x1000, BIT(19), 0, 0); 168762306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_FW_NAME(i2c5_eb, "i2c5-eb", "ext-26m", 0x0, 168862306a36Sopenharmony_ci 0x1000, BIT(20), 0, 0); 168962306a36Sopenharmony_cistatic SPRD_SC_GATE_CLK_FW_NAME(i2c6_eb, "i2c6-eb", "ext-26m", 0x0, 169062306a36Sopenharmony_ci 0x1000, BIT(21), 0, 0); 169162306a36Sopenharmony_ci 169262306a36Sopenharmony_cistatic struct sprd_clk_common *sc9863a_apapb_gate[] = { 169362306a36Sopenharmony_ci /* address base is 0x71300000 */ 169462306a36Sopenharmony_ci &sim0_eb.common, 169562306a36Sopenharmony_ci &iis0_eb.common, 169662306a36Sopenharmony_ci &iis1_eb.common, 169762306a36Sopenharmony_ci &iis2_eb.common, 169862306a36Sopenharmony_ci &spi0_eb.common, 169962306a36Sopenharmony_ci &spi1_eb.common, 170062306a36Sopenharmony_ci &spi2_eb.common, 170162306a36Sopenharmony_ci &i2c0_eb.common, 170262306a36Sopenharmony_ci &i2c1_eb.common, 170362306a36Sopenharmony_ci &i2c2_eb.common, 170462306a36Sopenharmony_ci &i2c3_eb.common, 170562306a36Sopenharmony_ci &i2c4_eb.common, 170662306a36Sopenharmony_ci &uart0_eb.common, 170762306a36Sopenharmony_ci &uart1_eb.common, 170862306a36Sopenharmony_ci &uart2_eb.common, 170962306a36Sopenharmony_ci &uart3_eb.common, 171062306a36Sopenharmony_ci &uart4_eb.common, 171162306a36Sopenharmony_ci &sim0_32k_eb.common, 171262306a36Sopenharmony_ci &spi3_eb.common, 171362306a36Sopenharmony_ci &i2c5_eb.common, 171462306a36Sopenharmony_ci &i2c6_eb.common, 171562306a36Sopenharmony_ci}; 171662306a36Sopenharmony_ci 171762306a36Sopenharmony_cistatic struct clk_hw_onecell_data sc9863a_apapb_gate_hws = { 171862306a36Sopenharmony_ci .hws = { 171962306a36Sopenharmony_ci [CLK_SIM0_EB] = &sim0_eb.common.hw, 172062306a36Sopenharmony_ci [CLK_IIS0_EB] = &iis0_eb.common.hw, 172162306a36Sopenharmony_ci [CLK_IIS1_EB] = &iis1_eb.common.hw, 172262306a36Sopenharmony_ci [CLK_IIS2_EB] = &iis2_eb.common.hw, 172362306a36Sopenharmony_ci [CLK_SPI0_EB] = &spi0_eb.common.hw, 172462306a36Sopenharmony_ci [CLK_SPI1_EB] = &spi1_eb.common.hw, 172562306a36Sopenharmony_ci [CLK_SPI2_EB] = &spi2_eb.common.hw, 172662306a36Sopenharmony_ci [CLK_I2C0_EB] = &i2c0_eb.common.hw, 172762306a36Sopenharmony_ci [CLK_I2C1_EB] = &i2c1_eb.common.hw, 172862306a36Sopenharmony_ci [CLK_I2C2_EB] = &i2c2_eb.common.hw, 172962306a36Sopenharmony_ci [CLK_I2C3_EB] = &i2c3_eb.common.hw, 173062306a36Sopenharmony_ci [CLK_I2C4_EB] = &i2c4_eb.common.hw, 173162306a36Sopenharmony_ci [CLK_UART0_EB] = &uart0_eb.common.hw, 173262306a36Sopenharmony_ci [CLK_UART1_EB] = &uart1_eb.common.hw, 173362306a36Sopenharmony_ci [CLK_UART2_EB] = &uart2_eb.common.hw, 173462306a36Sopenharmony_ci [CLK_UART3_EB] = &uart3_eb.common.hw, 173562306a36Sopenharmony_ci [CLK_UART4_EB] = &uart4_eb.common.hw, 173662306a36Sopenharmony_ci [CLK_SIM0_32K_EB] = &sim0_32k_eb.common.hw, 173762306a36Sopenharmony_ci [CLK_SPI3_EB] = &spi3_eb.common.hw, 173862306a36Sopenharmony_ci [CLK_I2C5_EB] = &i2c5_eb.common.hw, 173962306a36Sopenharmony_ci [CLK_I2C6_EB] = &i2c6_eb.common.hw, 174062306a36Sopenharmony_ci }, 174162306a36Sopenharmony_ci .num = CLK_AP_APB_GATE_NUM, 174262306a36Sopenharmony_ci}; 174362306a36Sopenharmony_ci 174462306a36Sopenharmony_cistatic const struct sprd_clk_desc sc9863a_apapb_gate_desc = { 174562306a36Sopenharmony_ci .clk_clks = sc9863a_apapb_gate, 174662306a36Sopenharmony_ci .num_clk_clks = ARRAY_SIZE(sc9863a_apapb_gate), 174762306a36Sopenharmony_ci .hw_clks = &sc9863a_apapb_gate_hws, 174862306a36Sopenharmony_ci}; 174962306a36Sopenharmony_ci 175062306a36Sopenharmony_cistatic const struct of_device_id sprd_sc9863a_clk_ids[] = { 175162306a36Sopenharmony_ci { .compatible = "sprd,sc9863a-ap-clk", /* 0x21500000 */ 175262306a36Sopenharmony_ci .data = &sc9863a_ap_clk_desc }, 175362306a36Sopenharmony_ci { .compatible = "sprd,sc9863a-pmu-gate", /* 0x402b0000 */ 175462306a36Sopenharmony_ci .data = &sc9863a_pmu_gate_desc }, 175562306a36Sopenharmony_ci { .compatible = "sprd,sc9863a-pll", /* 0x40353000 */ 175662306a36Sopenharmony_ci .data = &sc9863a_pll_desc }, 175762306a36Sopenharmony_ci { .compatible = "sprd,sc9863a-mpll", /* 0x40359000 */ 175862306a36Sopenharmony_ci .data = &sc9863a_mpll_desc }, 175962306a36Sopenharmony_ci { .compatible = "sprd,sc9863a-rpll", /* 0x4035c000 */ 176062306a36Sopenharmony_ci .data = &sc9863a_rpll_desc }, 176162306a36Sopenharmony_ci { .compatible = "sprd,sc9863a-dpll", /* 0x40363000 */ 176262306a36Sopenharmony_ci .data = &sc9863a_dpll_desc }, 176362306a36Sopenharmony_ci { .compatible = "sprd,sc9863a-aon-clk", /* 0x402d0000 */ 176462306a36Sopenharmony_ci .data = &sc9863a_aon_clk_desc }, 176562306a36Sopenharmony_ci { .compatible = "sprd,sc9863a-apahb-gate", /* 0x20e00000 */ 176662306a36Sopenharmony_ci .data = &sc9863a_apahb_gate_desc }, 176762306a36Sopenharmony_ci { .compatible = "sprd,sc9863a-aonapb-gate", /* 0x402e0000 */ 176862306a36Sopenharmony_ci .data = &sc9863a_aonapb_gate_desc }, 176962306a36Sopenharmony_ci { .compatible = "sprd,sc9863a-mm-gate", /* 0x60800000 */ 177062306a36Sopenharmony_ci .data = &sc9863a_mm_gate_desc }, 177162306a36Sopenharmony_ci { .compatible = "sprd,sc9863a-mm-clk", /* 0x60900000 */ 177262306a36Sopenharmony_ci .data = &sc9863a_mm_clk_desc }, 177362306a36Sopenharmony_ci { .compatible = "sprd,sc9863a-apapb-gate", /* 0x71300000 */ 177462306a36Sopenharmony_ci .data = &sc9863a_apapb_gate_desc }, 177562306a36Sopenharmony_ci { } 177662306a36Sopenharmony_ci}; 177762306a36Sopenharmony_ciMODULE_DEVICE_TABLE(of, sprd_sc9863a_clk_ids); 177862306a36Sopenharmony_ci 177962306a36Sopenharmony_cistatic int sc9863a_clk_probe(struct platform_device *pdev) 178062306a36Sopenharmony_ci{ 178162306a36Sopenharmony_ci const struct sprd_clk_desc *desc; 178262306a36Sopenharmony_ci int ret; 178362306a36Sopenharmony_ci 178462306a36Sopenharmony_ci desc = device_get_match_data(&pdev->dev); 178562306a36Sopenharmony_ci if (!desc) 178662306a36Sopenharmony_ci return -ENODEV; 178762306a36Sopenharmony_ci 178862306a36Sopenharmony_ci ret = sprd_clk_regmap_init(pdev, desc); 178962306a36Sopenharmony_ci if (ret) 179062306a36Sopenharmony_ci return ret; 179162306a36Sopenharmony_ci 179262306a36Sopenharmony_ci return sprd_clk_probe(&pdev->dev, desc->hw_clks); 179362306a36Sopenharmony_ci} 179462306a36Sopenharmony_ci 179562306a36Sopenharmony_cistatic struct platform_driver sc9863a_clk_driver = { 179662306a36Sopenharmony_ci .probe = sc9863a_clk_probe, 179762306a36Sopenharmony_ci .driver = { 179862306a36Sopenharmony_ci .name = "sc9863a-clk", 179962306a36Sopenharmony_ci .of_match_table = sprd_sc9863a_clk_ids, 180062306a36Sopenharmony_ci }, 180162306a36Sopenharmony_ci}; 180262306a36Sopenharmony_cimodule_platform_driver(sc9863a_clk_driver); 180362306a36Sopenharmony_ci 180462306a36Sopenharmony_ciMODULE_DESCRIPTION("Spreadtrum SC9863A Clock Driver"); 180562306a36Sopenharmony_ciMODULE_LICENSE("GPL v2"); 1806