1*c19df961SChun-Jie Chen // SPDX-License-Identifier: GPL-2.0-only 2*c19df961SChun-Jie Chen // 3*c19df961SChun-Jie Chen // Copyright (c) 2022 MediaTek Inc. 4*c19df961SChun-Jie Chen // Author: Chun-Jie Chen <chun-jie.chen@mediatek.com> 5*c19df961SChun-Jie Chen 6*c19df961SChun-Jie Chen #include <linux/clk-provider.h> 7*c19df961SChun-Jie Chen #include <linux/platform_device.h> 8*c19df961SChun-Jie Chen #include <dt-bindings/clock/mt8186-clk.h> 9*c19df961SChun-Jie Chen 10*c19df961SChun-Jie Chen #include "clk-mtk.h" 11*c19df961SChun-Jie Chen #include "clk-mux.h" 12*c19df961SChun-Jie Chen 13*c19df961SChun-Jie Chen static DEFINE_SPINLOCK(mt8186_clk_lock); 14*c19df961SChun-Jie Chen 15*c19df961SChun-Jie Chen static const struct mtk_fixed_clk top_fixed_clks[] = { 16*c19df961SChun-Jie Chen FIXED_CLK(CLK_TOP_ULPOSC1, "ulposc1", NULL, 250000000), 17*c19df961SChun-Jie Chen FIXED_CLK(CLK_TOP_466M_FMEM, "hd_466m_fmem_ck", NULL, 466000000), 18*c19df961SChun-Jie Chen FIXED_CLK(CLK_TOP_MPLL, "mpll", NULL, 208000000), 19*c19df961SChun-Jie Chen }; 20*c19df961SChun-Jie Chen 21*c19df961SChun-Jie Chen static const struct mtk_fixed_factor top_divs[] = { 22*c19df961SChun-Jie Chen FACTOR(CLK_TOP_MAINPLL_D2, "mainpll_d2", "mainpll", 1, 2), 23*c19df961SChun-Jie Chen FACTOR(CLK_TOP_MAINPLL_D2_D2, "mainpll_d2_d2", "mainpll_d2", 1, 2), 24*c19df961SChun-Jie Chen FACTOR(CLK_TOP_MAINPLL_D2_D4, "mainpll_d2_d4", "mainpll_d2", 1, 4), 25*c19df961SChun-Jie Chen FACTOR(CLK_TOP_MAINPLL_D2_D16, "mainpll_d2_d16", "mainpll_d2", 1, 16), 26*c19df961SChun-Jie Chen FACTOR(CLK_TOP_MAINPLL_D3, "mainpll_d3", "mainpll", 1, 3), 27*c19df961SChun-Jie Chen FACTOR(CLK_TOP_MAINPLL_D3_D2, "mainpll_d3_d2", "mainpll_d3", 1, 2), 28*c19df961SChun-Jie Chen FACTOR(CLK_TOP_MAINPLL_D3_D4, "mainpll_d3_d4", "mainpll_d3", 1, 4), 29*c19df961SChun-Jie Chen FACTOR(CLK_TOP_MAINPLL_D5, "mainpll_d5", "mainpll", 1, 5), 30*c19df961SChun-Jie Chen FACTOR(CLK_TOP_MAINPLL_D5_D2, "mainpll_d5_d2", "mainpll_d5", 1, 2), 31*c19df961SChun-Jie Chen FACTOR(CLK_TOP_MAINPLL_D5_D4, "mainpll_d5_d4", "mainpll_d5", 1, 4), 32*c19df961SChun-Jie Chen FACTOR(CLK_TOP_MAINPLL_D7, "mainpll_d7", "mainpll", 1, 7), 33*c19df961SChun-Jie Chen FACTOR(CLK_TOP_MAINPLL_D7_D2, "mainpll_d7_d2", "mainpll_d7", 1, 2), 34*c19df961SChun-Jie Chen FACTOR(CLK_TOP_MAINPLL_D7_D4, "mainpll_d7_d4", "mainpll_d7", 1, 4), 35*c19df961SChun-Jie Chen FACTOR(CLK_TOP_UNIVPLL, "univpll", "univ2pll", 1, 2), 36*c19df961SChun-Jie Chen FACTOR(CLK_TOP_UNIVPLL_D2, "univpll_d2", "univpll", 1, 2), 37*c19df961SChun-Jie Chen FACTOR(CLK_TOP_UNIVPLL_D2_D2, "univpll_d2_d2", "univpll_d2", 1, 2), 38*c19df961SChun-Jie Chen FACTOR(CLK_TOP_UNIVPLL_D2_D4, "univpll_d2_d4", "univpll_d2", 1, 4), 39*c19df961SChun-Jie Chen FACTOR(CLK_TOP_UNIVPLL_D3, "univpll_d3", "univpll", 1, 3), 40*c19df961SChun-Jie Chen FACTOR(CLK_TOP_UNIVPLL_D3_D2, "univpll_d3_d2", "univpll_d3", 1, 2), 41*c19df961SChun-Jie Chen FACTOR(CLK_TOP_UNIVPLL_D3_D4, "univpll_d3_d4", "univpll_d3", 1, 4), 42*c19df961SChun-Jie Chen FACTOR(CLK_TOP_UNIVPLL_D3_D8, "univpll_d3_d8", "univpll_d3", 1, 8), 43*c19df961SChun-Jie Chen FACTOR(CLK_TOP_UNIVPLL_D3_D32, "univpll_d3_d32", "univpll_d3", 1, 32), 44*c19df961SChun-Jie Chen FACTOR(CLK_TOP_UNIVPLL_D5, "univpll_d5", "univpll", 1, 5), 45*c19df961SChun-Jie Chen FACTOR(CLK_TOP_UNIVPLL_D5_D2, "univpll_d5_d2", "univpll_d5", 1, 2), 46*c19df961SChun-Jie Chen FACTOR(CLK_TOP_UNIVPLL_D5_D4, "univpll_d5_d4", "univpll_d5", 1, 4), 47*c19df961SChun-Jie Chen FACTOR(CLK_TOP_UNIVPLL_D7, "univpll_d7", "univpll", 1, 7), 48*c19df961SChun-Jie Chen FACTOR(CLK_TOP_UNIVPLL_192M, "univpll_192m", "univ2pll", 1, 13), 49*c19df961SChun-Jie Chen FACTOR(CLK_TOP_UNIVPLL_192M_D4, "univpll_192m_d4", "univpll_192m", 1, 4), 50*c19df961SChun-Jie Chen FACTOR(CLK_TOP_UNIVPLL_192M_D8, "univpll_192m_d8", "univpll_192m", 1, 8), 51*c19df961SChun-Jie Chen FACTOR(CLK_TOP_UNIVPLL_192M_D16, "univpll_192m_d16", "univpll_192m", 1, 16), 52*c19df961SChun-Jie Chen FACTOR(CLK_TOP_UNIVPLL_192M_D32, "univpll_192m_d32", "univpll_192m", 1, 32), 53*c19df961SChun-Jie Chen FACTOR(CLK_TOP_APLL1_D2, "apll1_d2", "apll1", 1, 2), 54*c19df961SChun-Jie Chen FACTOR(CLK_TOP_APLL1_D4, "apll1_d4", "apll1", 1, 4), 55*c19df961SChun-Jie Chen FACTOR(CLK_TOP_APLL1_D8, "apll1_d8", "apll1", 1, 8), 56*c19df961SChun-Jie Chen FACTOR(CLK_TOP_APLL2_D2, "apll2_d2", "apll2", 1, 2), 57*c19df961SChun-Jie Chen FACTOR(CLK_TOP_APLL2_D4, "apll2_d4", "apll2", 1, 4), 58*c19df961SChun-Jie Chen FACTOR(CLK_TOP_APLL2_D8, "apll2_d8", "apll2", 1, 8), 59*c19df961SChun-Jie Chen FACTOR(CLK_TOP_MMPLL_D2, "mmpll_d2", "mmpll", 1, 2), 60*c19df961SChun-Jie Chen FACTOR(CLK_TOP_TVDPLL_D2, "tvdpll_d2", "tvdpll", 1, 2), 61*c19df961SChun-Jie Chen FACTOR(CLK_TOP_TVDPLL_D4, "tvdpll_d4", "tvdpll", 1, 4), 62*c19df961SChun-Jie Chen FACTOR(CLK_TOP_TVDPLL_D8, "tvdpll_d8", "tvdpll", 1, 8), 63*c19df961SChun-Jie Chen FACTOR(CLK_TOP_TVDPLL_D16, "tvdpll_d16", "tvdpll", 1, 16), 64*c19df961SChun-Jie Chen FACTOR(CLK_TOP_TVDPLL_D32, "tvdpll_d32", "tvdpll", 1, 32), 65*c19df961SChun-Jie Chen FACTOR(CLK_TOP_MSDCPLL_D2, "msdcpll_d2", "msdcpll", 1, 2), 66*c19df961SChun-Jie Chen FACTOR(CLK_TOP_ULPOSC1_D2, "ulposc1_d2", "ulposc1", 1, 2), 67*c19df961SChun-Jie Chen FACTOR(CLK_TOP_ULPOSC1_D4, "ulposc1_d4", "ulposc1", 1, 4), 68*c19df961SChun-Jie Chen FACTOR(CLK_TOP_ULPOSC1_D8, "ulposc1_d8", "ulposc1", 1, 8), 69*c19df961SChun-Jie Chen FACTOR(CLK_TOP_ULPOSC1_D10, "ulposc1_d10", "ulposc1", 1, 10), 70*c19df961SChun-Jie Chen FACTOR(CLK_TOP_ULPOSC1_D16, "ulposc1_d16", "ulposc1", 1, 16), 71*c19df961SChun-Jie Chen FACTOR(CLK_TOP_ULPOSC1_D32, "ulposc1_d32", "ulposc1", 1, 32), 72*c19df961SChun-Jie Chen FACTOR(CLK_TOP_ADSPPLL_D2, "adsppll_d2", "adsppll", 1, 2), 73*c19df961SChun-Jie Chen FACTOR(CLK_TOP_ADSPPLL_D4, "adsppll_d4", "adsppll", 1, 4), 74*c19df961SChun-Jie Chen FACTOR(CLK_TOP_ADSPPLL_D8, "adsppll_d8", "adsppll", 1, 8), 75*c19df961SChun-Jie Chen FACTOR(CLK_TOP_NNAPLL_D2, "nnapll_d2", "nnapll", 1, 2), 76*c19df961SChun-Jie Chen FACTOR(CLK_TOP_NNAPLL_D4, "nnapll_d4", "nnapll", 1, 4), 77*c19df961SChun-Jie Chen FACTOR(CLK_TOP_NNAPLL_D8, "nnapll_d8", "nnapll", 1, 8), 78*c19df961SChun-Jie Chen FACTOR(CLK_TOP_NNA2PLL_D2, "nna2pll_d2", "nna2pll", 1, 2), 79*c19df961SChun-Jie Chen FACTOR(CLK_TOP_NNA2PLL_D4, "nna2pll_d4", "nna2pll", 1, 4), 80*c19df961SChun-Jie Chen FACTOR(CLK_TOP_NNA2PLL_D8, "nna2pll_d8", "nna2pll", 1, 8), 81*c19df961SChun-Jie Chen FACTOR(CLK_TOP_F_BIST2FPC, "f_bist2fpc_ck", "univpll_d3_d2", 1, 1), 82*c19df961SChun-Jie Chen }; 83*c19df961SChun-Jie Chen 84*c19df961SChun-Jie Chen static const char * const axi_parents[] = { 85*c19df961SChun-Jie Chen "clk26m", 86*c19df961SChun-Jie Chen "mainpll_d7", 87*c19df961SChun-Jie Chen "mainpll_d2_d4", 88*c19df961SChun-Jie Chen "univpll_d7" 89*c19df961SChun-Jie Chen }; 90*c19df961SChun-Jie Chen 91*c19df961SChun-Jie Chen static const char * const scp_parents[] = { 92*c19df961SChun-Jie Chen "clk26m", 93*c19df961SChun-Jie Chen "mainpll_d2_d4", 94*c19df961SChun-Jie Chen "mainpll_d5", 95*c19df961SChun-Jie Chen "mainpll_d2_d2", 96*c19df961SChun-Jie Chen "mainpll_d3", 97*c19df961SChun-Jie Chen "univpll_d3" 98*c19df961SChun-Jie Chen }; 99*c19df961SChun-Jie Chen 100*c19df961SChun-Jie Chen static const char * const mfg_parents[] = { 101*c19df961SChun-Jie Chen "clk26m", 102*c19df961SChun-Jie Chen "mfgpll", 103*c19df961SChun-Jie Chen "mainpll_d3", 104*c19df961SChun-Jie Chen "mainpll_d5" 105*c19df961SChun-Jie Chen }; 106*c19df961SChun-Jie Chen 107*c19df961SChun-Jie Chen static const char * const camtg_parents[] = { 108*c19df961SChun-Jie Chen "clk26m", 109*c19df961SChun-Jie Chen "univpll_192m_d8", 110*c19df961SChun-Jie Chen "univpll_d3_d8", 111*c19df961SChun-Jie Chen "univpll_192m_d4", 112*c19df961SChun-Jie Chen "univpll_d3_d32", 113*c19df961SChun-Jie Chen "univpll_192m_d16", 114*c19df961SChun-Jie Chen "univpll_192m_d32" 115*c19df961SChun-Jie Chen }; 116*c19df961SChun-Jie Chen 117*c19df961SChun-Jie Chen static const char * const uart_parents[] = { 118*c19df961SChun-Jie Chen "clk26m", 119*c19df961SChun-Jie Chen "univpll_d3_d8" 120*c19df961SChun-Jie Chen }; 121*c19df961SChun-Jie Chen 122*c19df961SChun-Jie Chen static const char * const spi_parents[] = { 123*c19df961SChun-Jie Chen "clk26m", 124*c19df961SChun-Jie Chen "mainpll_d5_d4", 125*c19df961SChun-Jie Chen "mainpll_d3_d4", 126*c19df961SChun-Jie Chen "mainpll_d5_d2", 127*c19df961SChun-Jie Chen "mainpll_d2_d4", 128*c19df961SChun-Jie Chen "mainpll_d7", 129*c19df961SChun-Jie Chen "mainpll_d3_d2", 130*c19df961SChun-Jie Chen "mainpll_d5" 131*c19df961SChun-Jie Chen }; 132*c19df961SChun-Jie Chen 133*c19df961SChun-Jie Chen static const char * const msdc5hclk_parents[] = { 134*c19df961SChun-Jie Chen "clk26m", 135*c19df961SChun-Jie Chen "mainpll_d2_d2", 136*c19df961SChun-Jie Chen "mainpll_d7", 137*c19df961SChun-Jie Chen "mainpll_d3_d2" 138*c19df961SChun-Jie Chen }; 139*c19df961SChun-Jie Chen 140*c19df961SChun-Jie Chen static const char * const msdc50_0_parents[] = { 141*c19df961SChun-Jie Chen "clk26m", 142*c19df961SChun-Jie Chen "msdcpll", 143*c19df961SChun-Jie Chen "univpll_d3", 144*c19df961SChun-Jie Chen "msdcpll_d2", 145*c19df961SChun-Jie Chen "mainpll_d7", 146*c19df961SChun-Jie Chen "mainpll_d3_d2", 147*c19df961SChun-Jie Chen "univpll_d2_d2" 148*c19df961SChun-Jie Chen }; 149*c19df961SChun-Jie Chen 150*c19df961SChun-Jie Chen static const char * const msdc30_1_parents[] = { 151*c19df961SChun-Jie Chen "clk26m", 152*c19df961SChun-Jie Chen "msdcpll_d2", 153*c19df961SChun-Jie Chen "univpll_d3_d2", 154*c19df961SChun-Jie Chen "mainpll_d3_d2", 155*c19df961SChun-Jie Chen "mainpll_d7" 156*c19df961SChun-Jie Chen }; 157*c19df961SChun-Jie Chen 158*c19df961SChun-Jie Chen static const char * const audio_parents[] = { 159*c19df961SChun-Jie Chen "clk26m", 160*c19df961SChun-Jie Chen "mainpll_d5_d4", 161*c19df961SChun-Jie Chen "mainpll_d7_d4", 162*c19df961SChun-Jie Chen "mainpll_d2_d16" 163*c19df961SChun-Jie Chen }; 164*c19df961SChun-Jie Chen 165*c19df961SChun-Jie Chen static const char * const aud_intbus_parents[] = { 166*c19df961SChun-Jie Chen "clk26m", 167*c19df961SChun-Jie Chen "mainpll_d2_d4", 168*c19df961SChun-Jie Chen "mainpll_d7_d2" 169*c19df961SChun-Jie Chen }; 170*c19df961SChun-Jie Chen 171*c19df961SChun-Jie Chen static const char * const aud_1_parents[] = { 172*c19df961SChun-Jie Chen "clk26m", 173*c19df961SChun-Jie Chen "apll1" 174*c19df961SChun-Jie Chen }; 175*c19df961SChun-Jie Chen 176*c19df961SChun-Jie Chen static const char * const aud_2_parents[] = { 177*c19df961SChun-Jie Chen "clk26m", 178*c19df961SChun-Jie Chen "apll2" 179*c19df961SChun-Jie Chen }; 180*c19df961SChun-Jie Chen 181*c19df961SChun-Jie Chen static const char * const aud_engen1_parents[] = { 182*c19df961SChun-Jie Chen "clk26m", 183*c19df961SChun-Jie Chen "apll1_d2", 184*c19df961SChun-Jie Chen "apll1_d4", 185*c19df961SChun-Jie Chen "apll1_d8" 186*c19df961SChun-Jie Chen }; 187*c19df961SChun-Jie Chen 188*c19df961SChun-Jie Chen static const char * const aud_engen2_parents[] = { 189*c19df961SChun-Jie Chen "clk26m", 190*c19df961SChun-Jie Chen "apll2_d2", 191*c19df961SChun-Jie Chen "apll2_d4", 192*c19df961SChun-Jie Chen "apll2_d8" 193*c19df961SChun-Jie Chen }; 194*c19df961SChun-Jie Chen 195*c19df961SChun-Jie Chen static const char * const disp_pwm_parents[] = { 196*c19df961SChun-Jie Chen "clk26m", 197*c19df961SChun-Jie Chen "univpll_d5_d2", 198*c19df961SChun-Jie Chen "univpll_d3_d4", 199*c19df961SChun-Jie Chen "ulposc1_d2", 200*c19df961SChun-Jie Chen "ulposc1_d8" 201*c19df961SChun-Jie Chen }; 202*c19df961SChun-Jie Chen 203*c19df961SChun-Jie Chen static const char * const sspm_parents[] = { 204*c19df961SChun-Jie Chen "clk26m", 205*c19df961SChun-Jie Chen "mainpll_d2_d2", 206*c19df961SChun-Jie Chen "mainpll_d3_d2", 207*c19df961SChun-Jie Chen "mainpll_d5", 208*c19df961SChun-Jie Chen "mainpll_d3" 209*c19df961SChun-Jie Chen }; 210*c19df961SChun-Jie Chen 211*c19df961SChun-Jie Chen static const char * const dxcc_parents[] = { 212*c19df961SChun-Jie Chen "clk26m", 213*c19df961SChun-Jie Chen "mainpll_d2_d2", 214*c19df961SChun-Jie Chen "mainpll_d2_d4" 215*c19df961SChun-Jie Chen }; 216*c19df961SChun-Jie Chen 217*c19df961SChun-Jie Chen static const char * const usb_parents[] = { 218*c19df961SChun-Jie Chen "clk26m", 219*c19df961SChun-Jie Chen "univpll_d5_d4", 220*c19df961SChun-Jie Chen "univpll_d5_d2" 221*c19df961SChun-Jie Chen }; 222*c19df961SChun-Jie Chen 223*c19df961SChun-Jie Chen static const char * const srck_parents[] = { 224*c19df961SChun-Jie Chen "clk32k", 225*c19df961SChun-Jie Chen "clk26m", 226*c19df961SChun-Jie Chen "ulposc1_d10" 227*c19df961SChun-Jie Chen }; 228*c19df961SChun-Jie Chen 229*c19df961SChun-Jie Chen static const char * const spm_parents[] = { 230*c19df961SChun-Jie Chen "clk32k", 231*c19df961SChun-Jie Chen "ulposc1_d10", 232*c19df961SChun-Jie Chen "clk26m", 233*c19df961SChun-Jie Chen "mainpll_d7_d2" 234*c19df961SChun-Jie Chen }; 235*c19df961SChun-Jie Chen 236*c19df961SChun-Jie Chen static const char * const i2c_parents[] = { 237*c19df961SChun-Jie Chen "clk26m", 238*c19df961SChun-Jie Chen "univpll_d5_d4", 239*c19df961SChun-Jie Chen "univpll_d3_d4", 240*c19df961SChun-Jie Chen "univpll_d5_d2" 241*c19df961SChun-Jie Chen }; 242*c19df961SChun-Jie Chen 243*c19df961SChun-Jie Chen static const char * const pwm_parents[] = { 244*c19df961SChun-Jie Chen "clk26m", 245*c19df961SChun-Jie Chen "univpll_d3_d8", 246*c19df961SChun-Jie Chen "univpll_d3_d4", 247*c19df961SChun-Jie Chen "univpll_d2_d4" 248*c19df961SChun-Jie Chen }; 249*c19df961SChun-Jie Chen 250*c19df961SChun-Jie Chen static const char * const seninf_parents[] = { 251*c19df961SChun-Jie Chen "clk26m", 252*c19df961SChun-Jie Chen "univpll_d2_d4", 253*c19df961SChun-Jie Chen "univpll_d2_d2", 254*c19df961SChun-Jie Chen "univpll_d3_d2" 255*c19df961SChun-Jie Chen }; 256*c19df961SChun-Jie Chen 257*c19df961SChun-Jie Chen static const char * const aes_msdcfde_parents[] = { 258*c19df961SChun-Jie Chen "clk26m", 259*c19df961SChun-Jie Chen "univpll_d3", 260*c19df961SChun-Jie Chen "mainpll_d3", 261*c19df961SChun-Jie Chen "univpll_d2_d2", 262*c19df961SChun-Jie Chen "mainpll_d2_d2", 263*c19df961SChun-Jie Chen "mainpll_d2_d4" 264*c19df961SChun-Jie Chen }; 265*c19df961SChun-Jie Chen 266*c19df961SChun-Jie Chen static const char * const pwrap_ulposc_parents[] = { 267*c19df961SChun-Jie Chen "clk26m", 268*c19df961SChun-Jie Chen "univpll_d5_d4", 269*c19df961SChun-Jie Chen "ulposc1_d4", 270*c19df961SChun-Jie Chen "ulposc1_d8", 271*c19df961SChun-Jie Chen "ulposc1_d10", 272*c19df961SChun-Jie Chen "ulposc1_d16", 273*c19df961SChun-Jie Chen "ulposc1_d32" 274*c19df961SChun-Jie Chen }; 275*c19df961SChun-Jie Chen 276*c19df961SChun-Jie Chen static const char * const camtm_parents[] = { 277*c19df961SChun-Jie Chen "clk26m", 278*c19df961SChun-Jie Chen "univpll_d2_d4", 279*c19df961SChun-Jie Chen "univpll_d3_d2" 280*c19df961SChun-Jie Chen }; 281*c19df961SChun-Jie Chen 282*c19df961SChun-Jie Chen static const char * const venc_parents[] = { 283*c19df961SChun-Jie Chen "clk26m", 284*c19df961SChun-Jie Chen "mmpll", 285*c19df961SChun-Jie Chen "mainpll_d2_d2", 286*c19df961SChun-Jie Chen "mainpll_d2", 287*c19df961SChun-Jie Chen "univpll_d3", 288*c19df961SChun-Jie Chen "univpll_d2_d2", 289*c19df961SChun-Jie Chen "mainpll_d3", 290*c19df961SChun-Jie Chen "mmpll" 291*c19df961SChun-Jie Chen }; 292*c19df961SChun-Jie Chen 293*c19df961SChun-Jie Chen static const char * const isp_parents[] = { 294*c19df961SChun-Jie Chen "clk26m", 295*c19df961SChun-Jie Chen "mainpll_d2", 296*c19df961SChun-Jie Chen "mainpll_d2_d2", 297*c19df961SChun-Jie Chen "univpll_d3", 298*c19df961SChun-Jie Chen "mainpll_d3", 299*c19df961SChun-Jie Chen "mmpll", 300*c19df961SChun-Jie Chen "univpll_d5", 301*c19df961SChun-Jie Chen "univpll_d2_d2", 302*c19df961SChun-Jie Chen "mmpll_d2" 303*c19df961SChun-Jie Chen }; 304*c19df961SChun-Jie Chen 305*c19df961SChun-Jie Chen static const char * const dpmaif_parents[] = { 306*c19df961SChun-Jie Chen "clk26m", 307*c19df961SChun-Jie Chen "univpll_d2_d2", 308*c19df961SChun-Jie Chen "mainpll_d3", 309*c19df961SChun-Jie Chen "mainpll_d2_d2", 310*c19df961SChun-Jie Chen "univpll_d3_d2" 311*c19df961SChun-Jie Chen }; 312*c19df961SChun-Jie Chen 313*c19df961SChun-Jie Chen static const char * const vdec_parents[] = { 314*c19df961SChun-Jie Chen "clk26m", 315*c19df961SChun-Jie Chen "mainpll_d3", 316*c19df961SChun-Jie Chen "mainpll_d2_d2", 317*c19df961SChun-Jie Chen "univpll_d5", 318*c19df961SChun-Jie Chen "mainpll_d2", 319*c19df961SChun-Jie Chen "univpll_d3", 320*c19df961SChun-Jie Chen "univpll_d2_d2" 321*c19df961SChun-Jie Chen }; 322*c19df961SChun-Jie Chen 323*c19df961SChun-Jie Chen static const char * const disp_parents[] = { 324*c19df961SChun-Jie Chen "clk26m", 325*c19df961SChun-Jie Chen "univpll_d3_d2", 326*c19df961SChun-Jie Chen "mainpll_d5", 327*c19df961SChun-Jie Chen "univpll_d5", 328*c19df961SChun-Jie Chen "univpll_d2_d2", 329*c19df961SChun-Jie Chen "mainpll_d3", 330*c19df961SChun-Jie Chen "univpll_d3", 331*c19df961SChun-Jie Chen "mainpll_d2", 332*c19df961SChun-Jie Chen "mmpll" 333*c19df961SChun-Jie Chen }; 334*c19df961SChun-Jie Chen 335*c19df961SChun-Jie Chen static const char * const mdp_parents[] = { 336*c19df961SChun-Jie Chen "clk26m", 337*c19df961SChun-Jie Chen "mainpll_d5", 338*c19df961SChun-Jie Chen "univpll_d5", 339*c19df961SChun-Jie Chen "mainpll_d2_d2", 340*c19df961SChun-Jie Chen "univpll_d2_d2", 341*c19df961SChun-Jie Chen "mainpll_d3", 342*c19df961SChun-Jie Chen "univpll_d3", 343*c19df961SChun-Jie Chen "mainpll_d2", 344*c19df961SChun-Jie Chen "mmpll" 345*c19df961SChun-Jie Chen }; 346*c19df961SChun-Jie Chen 347*c19df961SChun-Jie Chen static const char * const audio_h_parents[] = { 348*c19df961SChun-Jie Chen "clk26m", 349*c19df961SChun-Jie Chen "univpll_d7", 350*c19df961SChun-Jie Chen "apll1", 351*c19df961SChun-Jie Chen "apll2" 352*c19df961SChun-Jie Chen }; 353*c19df961SChun-Jie Chen 354*c19df961SChun-Jie Chen static const char * const ufs_parents[] = { 355*c19df961SChun-Jie Chen "clk26m", 356*c19df961SChun-Jie Chen "mainpll_d7", 357*c19df961SChun-Jie Chen "univpll_d2_d4", 358*c19df961SChun-Jie Chen "mainpll_d2_d4" 359*c19df961SChun-Jie Chen }; 360*c19df961SChun-Jie Chen 361*c19df961SChun-Jie Chen static const char * const aes_fde_parents[] = { 362*c19df961SChun-Jie Chen "clk26m", 363*c19df961SChun-Jie Chen "univpll_d3", 364*c19df961SChun-Jie Chen "mainpll_d2_d2", 365*c19df961SChun-Jie Chen "univpll_d5" 366*c19df961SChun-Jie Chen }; 367*c19df961SChun-Jie Chen 368*c19df961SChun-Jie Chen static const char * const audiodsp_parents[] = { 369*c19df961SChun-Jie Chen "clk26m", 370*c19df961SChun-Jie Chen "ulposc1_d10", 371*c19df961SChun-Jie Chen "adsppll", 372*c19df961SChun-Jie Chen "adsppll_d2", 373*c19df961SChun-Jie Chen "adsppll_d4", 374*c19df961SChun-Jie Chen "adsppll_d8" 375*c19df961SChun-Jie Chen }; 376*c19df961SChun-Jie Chen 377*c19df961SChun-Jie Chen static const char * const dvfsrc_parents[] = { 378*c19df961SChun-Jie Chen "clk26m", 379*c19df961SChun-Jie Chen "ulposc1_d10", 380*c19df961SChun-Jie Chen }; 381*c19df961SChun-Jie Chen 382*c19df961SChun-Jie Chen static const char * const dsi_occ_parents[] = { 383*c19df961SChun-Jie Chen "clk26m", 384*c19df961SChun-Jie Chen "univpll_d3_d2", 385*c19df961SChun-Jie Chen "mpll", 386*c19df961SChun-Jie Chen "mainpll_d5" 387*c19df961SChun-Jie Chen }; 388*c19df961SChun-Jie Chen 389*c19df961SChun-Jie Chen static const char * const spmi_mst_parents[] = { 390*c19df961SChun-Jie Chen "clk26m", 391*c19df961SChun-Jie Chen "univpll_d5_d4", 392*c19df961SChun-Jie Chen "ulposc1_d4", 393*c19df961SChun-Jie Chen "ulposc1_d8", 394*c19df961SChun-Jie Chen "ulposc1_d10", 395*c19df961SChun-Jie Chen "ulposc1_d16", 396*c19df961SChun-Jie Chen "ulposc1_d32" 397*c19df961SChun-Jie Chen }; 398*c19df961SChun-Jie Chen 399*c19df961SChun-Jie Chen static const char * const spinor_parents[] = { 400*c19df961SChun-Jie Chen "clk26m", 401*c19df961SChun-Jie Chen "clk13m", 402*c19df961SChun-Jie Chen "mainpll_d7_d4", 403*c19df961SChun-Jie Chen "univpll_d3_d8", 404*c19df961SChun-Jie Chen "univpll_d5_d4", 405*c19df961SChun-Jie Chen "mainpll_d7_d2" 406*c19df961SChun-Jie Chen }; 407*c19df961SChun-Jie Chen 408*c19df961SChun-Jie Chen static const char * const nna_parents[] = { 409*c19df961SChun-Jie Chen "clk26m", 410*c19df961SChun-Jie Chen "univpll_d3_d8", 411*c19df961SChun-Jie Chen "mainpll_d2_d4", 412*c19df961SChun-Jie Chen "univpll_d3_d2", 413*c19df961SChun-Jie Chen "mainpll_d2_d2", 414*c19df961SChun-Jie Chen "univpll_d2_d2", 415*c19df961SChun-Jie Chen "mainpll_d3", 416*c19df961SChun-Jie Chen "univpll_d3", 417*c19df961SChun-Jie Chen "mmpll", 418*c19df961SChun-Jie Chen "mainpll_d2", 419*c19df961SChun-Jie Chen "univpll_d2", 420*c19df961SChun-Jie Chen "nnapll_d2", 421*c19df961SChun-Jie Chen "nnapll_d4", 422*c19df961SChun-Jie Chen "nnapll_d8", 423*c19df961SChun-Jie Chen "nnapll", 424*c19df961SChun-Jie Chen "nna2pll" 425*c19df961SChun-Jie Chen }; 426*c19df961SChun-Jie Chen 427*c19df961SChun-Jie Chen static const char * const nna2_parents[] = { 428*c19df961SChun-Jie Chen "clk26m", 429*c19df961SChun-Jie Chen "univpll_d3_d8", 430*c19df961SChun-Jie Chen "mainpll_d2_d4", 431*c19df961SChun-Jie Chen "univpll_d3_d2", 432*c19df961SChun-Jie Chen "mainpll_d2_d2", 433*c19df961SChun-Jie Chen "univpll_d2_d2", 434*c19df961SChun-Jie Chen "mainpll_d3", 435*c19df961SChun-Jie Chen "univpll_d3", 436*c19df961SChun-Jie Chen "mmpll", 437*c19df961SChun-Jie Chen "mainpll_d2", 438*c19df961SChun-Jie Chen "univpll_d2", 439*c19df961SChun-Jie Chen "nna2pll_d2", 440*c19df961SChun-Jie Chen "nna2pll_d4", 441*c19df961SChun-Jie Chen "nna2pll_d8", 442*c19df961SChun-Jie Chen "nnapll", 443*c19df961SChun-Jie Chen "nna2pll" 444*c19df961SChun-Jie Chen }; 445*c19df961SChun-Jie Chen 446*c19df961SChun-Jie Chen static const char * const ssusb_parents[] = { 447*c19df961SChun-Jie Chen "clk26m", 448*c19df961SChun-Jie Chen "univpll_d5_d4", 449*c19df961SChun-Jie Chen "univpll_d5_d2" 450*c19df961SChun-Jie Chen }; 451*c19df961SChun-Jie Chen 452*c19df961SChun-Jie Chen static const char * const wpe_parents[] = { 453*c19df961SChun-Jie Chen "clk26m", 454*c19df961SChun-Jie Chen "univpll_d3_d2", 455*c19df961SChun-Jie Chen "mainpll_d5", 456*c19df961SChun-Jie Chen "univpll_d5", 457*c19df961SChun-Jie Chen "univpll_d2_d2", 458*c19df961SChun-Jie Chen "mainpll_d3", 459*c19df961SChun-Jie Chen "univpll_d3", 460*c19df961SChun-Jie Chen "mainpll_d2", 461*c19df961SChun-Jie Chen "mmpll" 462*c19df961SChun-Jie Chen }; 463*c19df961SChun-Jie Chen 464*c19df961SChun-Jie Chen static const char * const dpi_parents[] = { 465*c19df961SChun-Jie Chen "clk26m", 466*c19df961SChun-Jie Chen "tvdpll", 467*c19df961SChun-Jie Chen "tvdpll_d2", 468*c19df961SChun-Jie Chen "tvdpll_d4", 469*c19df961SChun-Jie Chen "tvdpll_d8", 470*c19df961SChun-Jie Chen "tvdpll_d16", 471*c19df961SChun-Jie Chen "tvdpll_d32" 472*c19df961SChun-Jie Chen }; 473*c19df961SChun-Jie Chen 474*c19df961SChun-Jie Chen static const char * const u3_occ_250m_parents[] = { 475*c19df961SChun-Jie Chen "clk26m", 476*c19df961SChun-Jie Chen "univpll_d5" 477*c19df961SChun-Jie Chen }; 478*c19df961SChun-Jie Chen 479*c19df961SChun-Jie Chen static const char * const u3_occ_500m_parents[] = { 480*c19df961SChun-Jie Chen "clk26m", 481*c19df961SChun-Jie Chen "nna2pll_d2" 482*c19df961SChun-Jie Chen }; 483*c19df961SChun-Jie Chen 484*c19df961SChun-Jie Chen static const char * const adsp_bus_parents[] = { 485*c19df961SChun-Jie Chen "clk26m", 486*c19df961SChun-Jie Chen "ulposc1_d2", 487*c19df961SChun-Jie Chen "mainpll_d5", 488*c19df961SChun-Jie Chen "mainpll_d2_d2", 489*c19df961SChun-Jie Chen "mainpll_d3", 490*c19df961SChun-Jie Chen "mainpll_d2", 491*c19df961SChun-Jie Chen "univpll_d3" 492*c19df961SChun-Jie Chen }; 493*c19df961SChun-Jie Chen 494*c19df961SChun-Jie Chen static const char * const apll_mck_parents[] = { 495*c19df961SChun-Jie Chen "top_aud_1", 496*c19df961SChun-Jie Chen "top_aud_2" 497*c19df961SChun-Jie Chen }; 498*c19df961SChun-Jie Chen 499*c19df961SChun-Jie Chen static const struct mtk_mux top_mtk_muxes[] = { 500*c19df961SChun-Jie Chen /* 501*c19df961SChun-Jie Chen * CLK_CFG_0 502*c19df961SChun-Jie Chen * top_axi is bus clock, should not be closed by Linux. 503*c19df961SChun-Jie Chen * top_scp is main clock in always-on co-processor. 504*c19df961SChun-Jie Chen */ 505*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD_FLAGS(CLK_TOP_AXI, "top_axi", axi_parents, 506*c19df961SChun-Jie Chen 0x0040, 0x0044, 0x0048, 0, 2, 7, 0x0004, 0, 507*c19df961SChun-Jie Chen CLK_IS_CRITICAL), 508*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD_FLAGS(CLK_TOP_SCP, "top_scp", scp_parents, 509*c19df961SChun-Jie Chen 0x0040, 0x0044, 0x0048, 8, 3, 15, 0x0004, 1, 510*c19df961SChun-Jie Chen CLK_IS_CRITICAL), 511*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_MFG, "top_mfg", 512*c19df961SChun-Jie Chen mfg_parents, 0x0040, 0x0044, 0x0048, 16, 2, 23, 0x0004, 2), 513*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_CAMTG, "top_camtg", 514*c19df961SChun-Jie Chen camtg_parents, 0x0040, 0x0044, 0x0048, 24, 3, 31, 0x0004, 3), 515*c19df961SChun-Jie Chen /* CLK_CFG_1 */ 516*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_CAMTG1, "top_camtg1", 517*c19df961SChun-Jie Chen camtg_parents, 0x0050, 0x0054, 0x0058, 0, 3, 7, 0x0004, 4), 518*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_CAMTG2, "top_camtg2", 519*c19df961SChun-Jie Chen camtg_parents, 0x0050, 0x0054, 0x0058, 8, 3, 15, 0x0004, 5), 520*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_CAMTG3, "top_camtg3", 521*c19df961SChun-Jie Chen camtg_parents, 0x0050, 0x0054, 0x0058, 16, 3, 23, 0x0004, 6), 522*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_CAMTG4, "top_camtg4", 523*c19df961SChun-Jie Chen camtg_parents, 0x0050, 0x0054, 0x0058, 24, 3, 31, 0x0004, 7), 524*c19df961SChun-Jie Chen /* CLK_CFG_2 */ 525*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_CAMTG5, "top_camtg5", 526*c19df961SChun-Jie Chen camtg_parents, 0x0060, 0x0064, 0x0068, 0, 3, 7, 0x0004, 8), 527*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_CAMTG6, "top_camtg6", 528*c19df961SChun-Jie Chen camtg_parents, 0x0060, 0x0064, 0x0068, 8, 3, 15, 0x0004, 9), 529*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_UART, "top_uart", 530*c19df961SChun-Jie Chen uart_parents, 0x0060, 0x0064, 0x0068, 16, 1, 23, 0x0004, 10), 531*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_SPI, "top_spi", 532*c19df961SChun-Jie Chen spi_parents, 0x0060, 0x0064, 0x0068, 24, 3, 31, 0x0004, 11), 533*c19df961SChun-Jie Chen /* CLK_CFG_3 */ 534*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_MSDC50_0_HCLK, "top_msdc5hclk", 535*c19df961SChun-Jie Chen msdc5hclk_parents, 0x0070, 0x0074, 0x0078, 0, 2, 7, 0x0004, 12), 536*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_MSDC50_0, "top_msdc50_0", 537*c19df961SChun-Jie Chen msdc50_0_parents, 0x0070, 0x0074, 0x0078, 8, 3, 15, 0x0004, 13), 538*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_MSDC30_1, "top_msdc30_1", 539*c19df961SChun-Jie Chen msdc30_1_parents, 0x0070, 0x0074, 0x0078, 16, 3, 23, 0x0004, 14), 540*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_AUDIO, "top_audio", 541*c19df961SChun-Jie Chen audio_parents, 0x0070, 0x0074, 0x0078, 24, 2, 31, 0x0004, 15), 542*c19df961SChun-Jie Chen /* CLK_CFG_4 */ 543*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_AUD_INTBUS, "top_aud_intbus", 544*c19df961SChun-Jie Chen aud_intbus_parents, 0x0080, 0x0084, 0x0088, 0, 2, 7, 0x0004, 16), 545*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_AUD_1, "top_aud_1", 546*c19df961SChun-Jie Chen aud_1_parents, 0x0080, 0x0084, 0x0088, 8, 1, 15, 0x0004, 17), 547*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_AUD_2, "top_aud_2", 548*c19df961SChun-Jie Chen aud_2_parents, 0x0080, 0x0084, 0x0088, 16, 1, 23, 0x0004, 18), 549*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_AUD_ENGEN1, "top_aud_engen1", 550*c19df961SChun-Jie Chen aud_engen1_parents, 0x0080, 0x0084, 0x0088, 24, 2, 31, 0x0004, 19), 551*c19df961SChun-Jie Chen /* 552*c19df961SChun-Jie Chen * CLK_CFG_5 553*c19df961SChun-Jie Chen * top_sspm is main clock in always-on co-processor, should not be closed 554*c19df961SChun-Jie Chen * in Linux. 555*c19df961SChun-Jie Chen */ 556*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_AUD_ENGEN2, "top_aud_engen2", 557*c19df961SChun-Jie Chen aud_engen2_parents, 0x0090, 0x0094, 0x0098, 0, 2, 7, 0x0004, 20), 558*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_DISP_PWM, "top_disp_pwm", 559*c19df961SChun-Jie Chen disp_pwm_parents, 0x0090, 0x0094, 0x0098, 8, 3, 15, 0x0004, 21), 560*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD_FLAGS(CLK_TOP_SSPM, "top_sspm", sspm_parents, 561*c19df961SChun-Jie Chen 0x0090, 0x0094, 0x0098, 16, 3, 23, 0x0004, 22, 562*c19df961SChun-Jie Chen CLK_IS_CRITICAL), 563*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_DXCC, "top_dxcc", 564*c19df961SChun-Jie Chen dxcc_parents, 0x0090, 0x0094, 0x0098, 24, 2, 31, 0x0004, 23), 565*c19df961SChun-Jie Chen /* 566*c19df961SChun-Jie Chen * CLK_CFG_6 567*c19df961SChun-Jie Chen * top_spm and top_srck are main clocks in always-on co-processor. 568*c19df961SChun-Jie Chen */ 569*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_USB_TOP, "top_usb", 570*c19df961SChun-Jie Chen usb_parents, 0x00a0, 0x00a4, 0x00a8, 0, 2, 7, 0x0004, 24), 571*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD_FLAGS(CLK_TOP_SRCK, "top_srck", srck_parents, 572*c19df961SChun-Jie Chen 0x00a0, 0x00a4, 0x00a8, 8, 2, 15, 0x0004, 25, 573*c19df961SChun-Jie Chen CLK_IS_CRITICAL), 574*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD_FLAGS(CLK_TOP_SPM, "top_spm", spm_parents, 575*c19df961SChun-Jie Chen 0x00a0, 0x00a4, 0x00a8, 16, 2, 23, 0x0004, 26, 576*c19df961SChun-Jie Chen CLK_IS_CRITICAL), 577*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_I2C, "top_i2c", 578*c19df961SChun-Jie Chen i2c_parents, 0x00a0, 0x00a4, 0x00a8, 24, 2, 31, 0x0004, 27), 579*c19df961SChun-Jie Chen /* CLK_CFG_7 */ 580*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_PWM, "top_pwm", 581*c19df961SChun-Jie Chen pwm_parents, 0x00b0, 0x00b4, 0x00b8, 0, 2, 7, 0x0004, 28), 582*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_SENINF, "top_seninf", 583*c19df961SChun-Jie Chen seninf_parents, 0x00b0, 0x00b4, 0x00b8, 8, 2, 15, 0x0004, 29), 584*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_SENINF1, "top_seninf1", 585*c19df961SChun-Jie Chen seninf_parents, 0x00b0, 0x00b4, 0x00b8, 16, 2, 23, 0x0004, 30), 586*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_SENINF2, "top_seninf2", 587*c19df961SChun-Jie Chen seninf_parents, 0x00b0, 0x00b4, 0x00b8, 24, 2, 31, 0x0008, 0), 588*c19df961SChun-Jie Chen /* CLK_CFG_8 */ 589*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_SENINF3, "top_seninf3", 590*c19df961SChun-Jie Chen seninf_parents, 0x00c0, 0x00c4, 0x00c8, 0, 2, 7, 0x0008, 1), 591*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_AES_MSDCFDE, "top_aes_msdcfde", 592*c19df961SChun-Jie Chen aes_msdcfde_parents, 0x00c0, 0x00c4, 0x00c8, 8, 3, 15, 0x0008, 2), 593*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_PWRAP_ULPOSC, "top_pwrap_ulposc", 594*c19df961SChun-Jie Chen pwrap_ulposc_parents, 0x00c0, 0x00c4, 0x00c8, 16, 3, 23, 0x0008, 3), 595*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_CAMTM, "top_camtm", 596*c19df961SChun-Jie Chen camtm_parents, 0x00c0, 0x00c4, 0x00c8, 24, 2, 31, 0x0008, 4), 597*c19df961SChun-Jie Chen /* CLK_CFG_9 */ 598*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_VENC, "top_venc", 599*c19df961SChun-Jie Chen venc_parents, 0x00d0, 0x00d4, 0x00d8, 0, 3, 7, 0x0008, 5), 600*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_CAM, "top_cam", 601*c19df961SChun-Jie Chen isp_parents, 0x00d0, 0x00d4, 0x00d8, 8, 4, 15, 0x0008, 6), 602*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_IMG1, "top_img1", 603*c19df961SChun-Jie Chen isp_parents, 0x00d0, 0x00d4, 0x00d8, 16, 4, 23, 0x0008, 7), 604*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_IPE, "top_ipe", 605*c19df961SChun-Jie Chen isp_parents, 0x00d0, 0x00d4, 0x00d8, 24, 4, 31, 0x0008, 8), 606*c19df961SChun-Jie Chen /* CLK_CFG_10 */ 607*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_DPMAIF, "top_dpmaif", 608*c19df961SChun-Jie Chen dpmaif_parents, 0x00e0, 0x00e4, 0x00e8, 0, 3, 7, 0x0008, 9), 609*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_VDEC, "top_vdec", 610*c19df961SChun-Jie Chen vdec_parents, 0x00e0, 0x00e4, 0x00e8, 8, 3, 15, 0x0008, 10), 611*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_DISP, "top_disp", 612*c19df961SChun-Jie Chen disp_parents, 0x00e0, 0x00e4, 0x00e8, 16, 4, 23, 0x0008, 11), 613*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_MDP, "top_mdp", 614*c19df961SChun-Jie Chen mdp_parents, 0x00e0, 0x00e4, 0x00e8, 24, 4, 31, 0x0008, 12), 615*c19df961SChun-Jie Chen /* CLK_CFG_11 */ 616*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_AUDIO_H, "top_audio_h", 617*c19df961SChun-Jie Chen audio_h_parents, 0x00ec, 0x00f0, 0x00f4, 0, 2, 7, 0x0008, 13), 618*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_UFS, "top_ufs", 619*c19df961SChun-Jie Chen ufs_parents, 0x00ec, 0x00f0, 0x00f4, 8, 2, 15, 0x0008, 14), 620*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_AES_FDE, "top_aes_fde", 621*c19df961SChun-Jie Chen aes_fde_parents, 0x00ec, 0x00f0, 0x00f4, 16, 2, 23, 0x0008, 15), 622*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_AUDIODSP, "top_audiodsp", 623*c19df961SChun-Jie Chen audiodsp_parents, 0x00ec, 0x00f0, 0x00f4, 24, 3, 31, 0x0008, 16), 624*c19df961SChun-Jie Chen /* 625*c19df961SChun-Jie Chen * CLK_CFG_12 626*c19df961SChun-Jie Chen * dvfsrc is for internal DVFS usage, should not be closed in Linux. 627*c19df961SChun-Jie Chen */ 628*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD_FLAGS(CLK_TOP_DVFSRC, "top_dvfsrc", dvfsrc_parents, 629*c19df961SChun-Jie Chen 0x0100, 0x0104, 0x0108, 0, 1, 7, 0x0008, 17, 630*c19df961SChun-Jie Chen CLK_IS_CRITICAL), 631*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_DSI_OCC, "top_dsi_occ", 632*c19df961SChun-Jie Chen dsi_occ_parents, 0x0100, 0x0104, 0x0108, 8, 2, 15, 0x0008, 18), 633*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_SPMI_MST, "top_spmi_mst", 634*c19df961SChun-Jie Chen spmi_mst_parents, 0x0100, 0x0104, 0x0108, 16, 3, 23, 0x0008, 19), 635*c19df961SChun-Jie Chen /* CLK_CFG_13 */ 636*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_SPINOR, "top_spinor", 637*c19df961SChun-Jie Chen spinor_parents, 0x0110, 0x0114, 0x0118, 0, 3, 6, 0x0008, 20), 638*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_NNA, "top_nna", 639*c19df961SChun-Jie Chen nna_parents, 0x0110, 0x0114, 0x0118, 7, 4, 14, 0x0008, 21), 640*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_NNA1, "top_nna1", 641*c19df961SChun-Jie Chen nna_parents, 0x0110, 0x0114, 0x0118, 15, 4, 22, 0x0008, 22), 642*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_NNA2, "top_nna2", 643*c19df961SChun-Jie Chen nna2_parents, 0x0110, 0x0114, 0x0118, 23, 4, 30, 0x0008, 23), 644*c19df961SChun-Jie Chen /* CLK_CFG_14 */ 645*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_SSUSB_XHCI, "top_ssusb_xhci", 646*c19df961SChun-Jie Chen ssusb_parents, 0x0120, 0x0124, 0x0128, 0, 2, 5, 0x0008, 24), 647*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_SSUSB_TOP_1P, "top_ssusb_1p", 648*c19df961SChun-Jie Chen ssusb_parents, 0x0120, 0x0124, 0x0128, 6, 2, 11, 0x0008, 25), 649*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_SSUSB_XHCI_1P, "top_ssusb_xhci_1p", 650*c19df961SChun-Jie Chen ssusb_parents, 0x0120, 0x0124, 0x0128, 12, 2, 17, 0x0008, 26), 651*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_WPE, "top_wpe", 652*c19df961SChun-Jie Chen wpe_parents, 0x0120, 0x0124, 0x0128, 18, 4, 25, 0x0008, 27), 653*c19df961SChun-Jie Chen /* CLK_CFG_15 */ 654*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_DPI, "top_dpi", 655*c19df961SChun-Jie Chen dpi_parents, 0x0180, 0x0184, 0x0188, 0, 3, 6, 0x0008, 28), 656*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_U3_OCC_250M, "top_u3_occ_250m", 657*c19df961SChun-Jie Chen u3_occ_250m_parents, 0x0180, 0x0184, 0x0188, 7, 1, 11, 0x0008, 29), 658*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_U3_OCC_500M, "top_u3_occ_500m", 659*c19df961SChun-Jie Chen u3_occ_500m_parents, 0x0180, 0x0184, 0x0188, 12, 1, 16, 0x0008, 30), 660*c19df961SChun-Jie Chen MUX_GATE_CLR_SET_UPD(CLK_TOP_ADSP_BUS, "top_adsp_bus", 661*c19df961SChun-Jie Chen adsp_bus_parents, 0x0180, 0x0184, 0x0188, 17, 3, 23, 0x0008, 31), 662*c19df961SChun-Jie Chen }; 663*c19df961SChun-Jie Chen 664*c19df961SChun-Jie Chen static struct mtk_composite top_muxes[] = { 665*c19df961SChun-Jie Chen /* CLK_AUDDIV_0 */ 666*c19df961SChun-Jie Chen MUX(CLK_TOP_APLL_I2S0_MCK_SEL, "apll_i2s0_mck_sel", apll_mck_parents, 0x0320, 16, 1), 667*c19df961SChun-Jie Chen MUX(CLK_TOP_APLL_I2S1_MCK_SEL, "apll_i2s1_mck_sel", apll_mck_parents, 0x0320, 17, 1), 668*c19df961SChun-Jie Chen MUX(CLK_TOP_APLL_I2S2_MCK_SEL, "apll_i2s2_mck_sel", apll_mck_parents, 0x0320, 18, 1), 669*c19df961SChun-Jie Chen MUX(CLK_TOP_APLL_I2S4_MCK_SEL, "apll_i2s4_mck_sel", apll_mck_parents, 0x0320, 19, 1), 670*c19df961SChun-Jie Chen MUX(CLK_TOP_APLL_TDMOUT_MCK_SEL, "apll_tdmout_mck_sel", apll_mck_parents, 671*c19df961SChun-Jie Chen 0x0320, 20, 1), 672*c19df961SChun-Jie Chen }; 673*c19df961SChun-Jie Chen 674*c19df961SChun-Jie Chen static const struct mtk_composite top_adj_divs[] = { 675*c19df961SChun-Jie Chen DIV_GATE(CLK_TOP_APLL12_CK_DIV0, "apll12_div0", "apll_i2s0_mck_sel", 676*c19df961SChun-Jie Chen 0x0320, 0, 0x0328, 8, 0), 677*c19df961SChun-Jie Chen DIV_GATE(CLK_TOP_APLL12_CK_DIV1, "apll12_div1", "apll_i2s1_mck_sel", 678*c19df961SChun-Jie Chen 0x0320, 1, 0x0328, 8, 8), 679*c19df961SChun-Jie Chen DIV_GATE(CLK_TOP_APLL12_CK_DIV2, "apll12_div2", "apll_i2s2_mck_sel", 680*c19df961SChun-Jie Chen 0x0320, 2, 0x0328, 8, 16), 681*c19df961SChun-Jie Chen DIV_GATE(CLK_TOP_APLL12_CK_DIV4, "apll12_div4", "apll_i2s4_mck_sel", 682*c19df961SChun-Jie Chen 0x0320, 3, 0x0328, 8, 24), 683*c19df961SChun-Jie Chen DIV_GATE(CLK_TOP_APLL12_CK_DIV_TDMOUT_M, "apll12_div_tdmout_m", "apll_tdmout_mck_sel", 684*c19df961SChun-Jie Chen 0x0320, 4, 0x0334, 8, 0), 685*c19df961SChun-Jie Chen }; 686*c19df961SChun-Jie Chen 687*c19df961SChun-Jie Chen static const struct of_device_id of_match_clk_mt8186_topck[] = { 688*c19df961SChun-Jie Chen { .compatible = "mediatek,mt8186-topckgen", }, 689*c19df961SChun-Jie Chen {} 690*c19df961SChun-Jie Chen }; 691*c19df961SChun-Jie Chen 692*c19df961SChun-Jie Chen static int clk_mt8186_topck_probe(struct platform_device *pdev) 693*c19df961SChun-Jie Chen { 694*c19df961SChun-Jie Chen struct clk_onecell_data *clk_data; 695*c19df961SChun-Jie Chen struct device_node *node = pdev->dev.of_node; 696*c19df961SChun-Jie Chen int r; 697*c19df961SChun-Jie Chen void __iomem *base; 698*c19df961SChun-Jie Chen 699*c19df961SChun-Jie Chen clk_data = mtk_alloc_clk_data(CLK_TOP_NR_CLK); 700*c19df961SChun-Jie Chen if (!clk_data) 701*c19df961SChun-Jie Chen return -ENOMEM; 702*c19df961SChun-Jie Chen 703*c19df961SChun-Jie Chen base = devm_platform_ioremap_resource(pdev, 0); 704*c19df961SChun-Jie Chen if (IS_ERR(base)) { 705*c19df961SChun-Jie Chen r = PTR_ERR(base); 706*c19df961SChun-Jie Chen goto free_top_data; 707*c19df961SChun-Jie Chen } 708*c19df961SChun-Jie Chen 709*c19df961SChun-Jie Chen r = mtk_clk_register_fixed_clks(top_fixed_clks, ARRAY_SIZE(top_fixed_clks), 710*c19df961SChun-Jie Chen clk_data); 711*c19df961SChun-Jie Chen if (r) 712*c19df961SChun-Jie Chen goto free_top_data; 713*c19df961SChun-Jie Chen 714*c19df961SChun-Jie Chen r = mtk_clk_register_factors(top_divs, ARRAY_SIZE(top_divs), clk_data); 715*c19df961SChun-Jie Chen if (r) 716*c19df961SChun-Jie Chen goto unregister_fixed_clks; 717*c19df961SChun-Jie Chen 718*c19df961SChun-Jie Chen r = mtk_clk_register_muxes(top_mtk_muxes, ARRAY_SIZE(top_mtk_muxes), node, 719*c19df961SChun-Jie Chen &mt8186_clk_lock, clk_data); 720*c19df961SChun-Jie Chen if (r) 721*c19df961SChun-Jie Chen goto unregister_factors; 722*c19df961SChun-Jie Chen 723*c19df961SChun-Jie Chen r = mtk_clk_register_composites(top_muxes, ARRAY_SIZE(top_muxes), base, 724*c19df961SChun-Jie Chen &mt8186_clk_lock, clk_data); 725*c19df961SChun-Jie Chen if (r) 726*c19df961SChun-Jie Chen goto unregister_muxes; 727*c19df961SChun-Jie Chen 728*c19df961SChun-Jie Chen r = mtk_clk_register_composites(top_adj_divs, ARRAY_SIZE(top_adj_divs), base, 729*c19df961SChun-Jie Chen &mt8186_clk_lock, clk_data); 730*c19df961SChun-Jie Chen if (r) 731*c19df961SChun-Jie Chen goto unregister_composite_muxes; 732*c19df961SChun-Jie Chen 733*c19df961SChun-Jie Chen r = of_clk_add_provider(node, of_clk_src_onecell_get, clk_data); 734*c19df961SChun-Jie Chen if (r) 735*c19df961SChun-Jie Chen goto unregister_composite_divs; 736*c19df961SChun-Jie Chen 737*c19df961SChun-Jie Chen platform_set_drvdata(pdev, clk_data); 738*c19df961SChun-Jie Chen 739*c19df961SChun-Jie Chen return r; 740*c19df961SChun-Jie Chen 741*c19df961SChun-Jie Chen unregister_composite_divs: 742*c19df961SChun-Jie Chen mtk_clk_unregister_composites(top_adj_divs, ARRAY_SIZE(top_adj_divs), clk_data); 743*c19df961SChun-Jie Chen unregister_composite_muxes: 744*c19df961SChun-Jie Chen mtk_clk_unregister_composites(top_muxes, ARRAY_SIZE(top_muxes), clk_data); 745*c19df961SChun-Jie Chen unregister_muxes: 746*c19df961SChun-Jie Chen mtk_clk_unregister_muxes(top_mtk_muxes, ARRAY_SIZE(top_mtk_muxes), clk_data); 747*c19df961SChun-Jie Chen unregister_factors: 748*c19df961SChun-Jie Chen mtk_clk_unregister_factors(top_divs, ARRAY_SIZE(top_divs), clk_data); 749*c19df961SChun-Jie Chen unregister_fixed_clks: 750*c19df961SChun-Jie Chen mtk_clk_unregister_fixed_clks(top_fixed_clks, ARRAY_SIZE(top_fixed_clks), clk_data); 751*c19df961SChun-Jie Chen free_top_data: 752*c19df961SChun-Jie Chen mtk_free_clk_data(clk_data); 753*c19df961SChun-Jie Chen return r; 754*c19df961SChun-Jie Chen } 755*c19df961SChun-Jie Chen 756*c19df961SChun-Jie Chen static int clk_mt8186_topck_remove(struct platform_device *pdev) 757*c19df961SChun-Jie Chen { 758*c19df961SChun-Jie Chen struct clk_onecell_data *clk_data = platform_get_drvdata(pdev); 759*c19df961SChun-Jie Chen struct device_node *node = pdev->dev.of_node; 760*c19df961SChun-Jie Chen 761*c19df961SChun-Jie Chen of_clk_del_provider(node); 762*c19df961SChun-Jie Chen mtk_clk_unregister_composites(top_adj_divs, ARRAY_SIZE(top_adj_divs), clk_data); 763*c19df961SChun-Jie Chen mtk_clk_unregister_composites(top_muxes, ARRAY_SIZE(top_muxes), clk_data); 764*c19df961SChun-Jie Chen mtk_clk_unregister_muxes(top_mtk_muxes, ARRAY_SIZE(top_mtk_muxes), clk_data); 765*c19df961SChun-Jie Chen mtk_clk_unregister_factors(top_divs, ARRAY_SIZE(top_divs), clk_data); 766*c19df961SChun-Jie Chen mtk_clk_unregister_fixed_clks(top_fixed_clks, ARRAY_SIZE(top_fixed_clks), clk_data); 767*c19df961SChun-Jie Chen mtk_free_clk_data(clk_data); 768*c19df961SChun-Jie Chen 769*c19df961SChun-Jie Chen return 0; 770*c19df961SChun-Jie Chen } 771*c19df961SChun-Jie Chen 772*c19df961SChun-Jie Chen static struct platform_driver clk_mt8186_topck_drv = { 773*c19df961SChun-Jie Chen .probe = clk_mt8186_topck_probe, 774*c19df961SChun-Jie Chen .remove = clk_mt8186_topck_remove, 775*c19df961SChun-Jie Chen .driver = { 776*c19df961SChun-Jie Chen .name = "clk-mt8186-topck", 777*c19df961SChun-Jie Chen .of_match_table = of_match_clk_mt8186_topck, 778*c19df961SChun-Jie Chen }, 779*c19df961SChun-Jie Chen }; 780*c19df961SChun-Jie Chen builtin_platform_driver(clk_mt8186_topck_drv); 781