1*895ab013SLaura Nao // SPDX-License-Identifier: GPL-2.0-only 2*895ab013SLaura Nao /* 3*895ab013SLaura Nao * Copyright (c) 2025 MediaTek Inc. 4*895ab013SLaura Nao * Guangjie Song <guangjie.song@mediatek.com> 5*895ab013SLaura Nao * Copyright (c) 2025 Collabora Ltd. 6*895ab013SLaura Nao * Laura Nao <laura.nao@collabora.com> 7*895ab013SLaura Nao */ 8*895ab013SLaura Nao #include <dt-bindings/clock/mediatek,mt8196-clock.h> 9*895ab013SLaura Nao 10*895ab013SLaura Nao #include <linux/clk.h> 11*895ab013SLaura Nao #include <linux/module.h> 12*895ab013SLaura Nao #include <linux/of.h> 13*895ab013SLaura Nao #include <linux/of_address.h> 14*895ab013SLaura Nao #include <linux/of_device.h> 15*895ab013SLaura Nao #include <linux/platform_device.h> 16*895ab013SLaura Nao 17*895ab013SLaura Nao #include "clk-mtk.h" 18*895ab013SLaura Nao #include "clk-mux.h" 19*895ab013SLaura Nao 20*895ab013SLaura Nao /* MUX SEL REG */ 21*895ab013SLaura Nao #define CLK_CFG_UPDATE 0x0004 22*895ab013SLaura Nao #define CLK_CFG_UPDATE1 0x0008 23*895ab013SLaura Nao #define CLK_CFG_UPDATE2 0x000c 24*895ab013SLaura Nao #define CLK_CFG_0 0x0010 25*895ab013SLaura Nao #define CLK_CFG_0_SET 0x0014 26*895ab013SLaura Nao #define CLK_CFG_0_CLR 0x0018 27*895ab013SLaura Nao #define CLK_CFG_1 0x0020 28*895ab013SLaura Nao #define CLK_CFG_1_SET 0x0024 29*895ab013SLaura Nao #define CLK_CFG_1_CLR 0x0028 30*895ab013SLaura Nao #define CLK_CFG_2 0x0030 31*895ab013SLaura Nao #define CLK_CFG_2_SET 0x0034 32*895ab013SLaura Nao #define CLK_CFG_2_CLR 0x0038 33*895ab013SLaura Nao #define CLK_CFG_3 0x0040 34*895ab013SLaura Nao #define CLK_CFG_3_SET 0x0044 35*895ab013SLaura Nao #define CLK_CFG_3_CLR 0x0048 36*895ab013SLaura Nao #define CLK_CFG_4 0x0050 37*895ab013SLaura Nao #define CLK_CFG_4_SET 0x0054 38*895ab013SLaura Nao #define CLK_CFG_4_CLR 0x0058 39*895ab013SLaura Nao #define CLK_CFG_5 0x0060 40*895ab013SLaura Nao #define CLK_CFG_5_SET 0x0064 41*895ab013SLaura Nao #define CLK_CFG_5_CLR 0x0068 42*895ab013SLaura Nao #define CLK_CFG_6 0x0070 43*895ab013SLaura Nao #define CLK_CFG_6_SET 0x0074 44*895ab013SLaura Nao #define CLK_CFG_6_CLR 0x0078 45*895ab013SLaura Nao #define CLK_CFG_7 0x0080 46*895ab013SLaura Nao #define CLK_CFG_7_SET 0x0084 47*895ab013SLaura Nao #define CLK_CFG_7_CLR 0x0088 48*895ab013SLaura Nao #define CLK_CFG_8 0x0090 49*895ab013SLaura Nao #define CLK_CFG_8_SET 0x0094 50*895ab013SLaura Nao #define CLK_CFG_8_CLR 0x0098 51*895ab013SLaura Nao #define CLK_CFG_9 0x00a0 52*895ab013SLaura Nao #define CLK_CFG_9_SET 0x00a4 53*895ab013SLaura Nao #define CLK_CFG_9_CLR 0x00a8 54*895ab013SLaura Nao #define CLK_CFG_10 0x00b0 55*895ab013SLaura Nao #define CLK_CFG_10_SET 0x00b4 56*895ab013SLaura Nao #define CLK_CFG_10_CLR 0x00b8 57*895ab013SLaura Nao #define CLK_CFG_11 0x00c0 58*895ab013SLaura Nao #define CLK_CFG_11_SET 0x00c4 59*895ab013SLaura Nao #define CLK_CFG_11_CLR 0x00c8 60*895ab013SLaura Nao #define CLK_CFG_12 0x00d0 61*895ab013SLaura Nao #define CLK_CFG_12_SET 0x00d4 62*895ab013SLaura Nao #define CLK_CFG_12_CLR 0x00d8 63*895ab013SLaura Nao #define CLK_CFG_13 0x00e0 64*895ab013SLaura Nao #define CLK_CFG_13_SET 0x00e4 65*895ab013SLaura Nao #define CLK_CFG_13_CLR 0x00e8 66*895ab013SLaura Nao #define CLK_CFG_14 0x00f0 67*895ab013SLaura Nao #define CLK_CFG_14_SET 0x00f4 68*895ab013SLaura Nao #define CLK_CFG_14_CLR 0x00f8 69*895ab013SLaura Nao #define CLK_CFG_15 0x0100 70*895ab013SLaura Nao #define CLK_CFG_15_SET 0x0104 71*895ab013SLaura Nao #define CLK_CFG_15_CLR 0x0108 72*895ab013SLaura Nao #define CLK_CFG_16 0x0110 73*895ab013SLaura Nao #define CLK_CFG_16_SET 0x0114 74*895ab013SLaura Nao #define CLK_CFG_16_CLR 0x0118 75*895ab013SLaura Nao #define CLK_CFG_17 0x0120 76*895ab013SLaura Nao #define CLK_CFG_17_SET 0x0124 77*895ab013SLaura Nao #define CLK_CFG_17_CLR 0x0128 78*895ab013SLaura Nao #define CLK_CFG_18 0x0130 79*895ab013SLaura Nao #define CLK_CFG_18_SET 0x0134 80*895ab013SLaura Nao #define CLK_CFG_18_CLR 0x0138 81*895ab013SLaura Nao #define CLK_CFG_19 0x0140 82*895ab013SLaura Nao #define CLK_CFG_19_SET 0x0144 83*895ab013SLaura Nao #define CLK_CFG_19_CLR 0x0148 84*895ab013SLaura Nao #define CLK_AUDDIV_0 0x020c 85*895ab013SLaura Nao #define CLK_FENC_STATUS_MON_0 0x0270 86*895ab013SLaura Nao #define CLK_FENC_STATUS_MON_1 0x0274 87*895ab013SLaura Nao #define CLK_FENC_STATUS_MON_2 0x0278 88*895ab013SLaura Nao 89*895ab013SLaura Nao /* MUX SHIFT */ 90*895ab013SLaura Nao #define TOP_MUX_AXI_SHIFT 0 91*895ab013SLaura Nao #define TOP_MUX_MEM_SUB_SHIFT 1 92*895ab013SLaura Nao #define TOP_MUX_IO_NOC_SHIFT 2 93*895ab013SLaura Nao #define TOP_MUX_PERI_AXI_SHIFT 3 94*895ab013SLaura Nao #define TOP_MUX_UFS_PEXTP0_AXI_SHIFT 4 95*895ab013SLaura Nao #define TOP_MUX_PEXTP1_USB_AXI_SHIFT 5 96*895ab013SLaura Nao #define TOP_MUX_PERI_FMEM_SUB_SHIFT 6 97*895ab013SLaura Nao #define TOP_MUX_UFS_PEXPT0_MEM_SUB_SHIFT 7 98*895ab013SLaura Nao #define TOP_MUX_PEXTP1_USB_MEM_SUB_SHIFT 8 99*895ab013SLaura Nao #define TOP_MUX_PERI_NOC_SHIFT 9 100*895ab013SLaura Nao #define TOP_MUX_EMI_N_SHIFT 10 101*895ab013SLaura Nao #define TOP_MUX_EMI_S_SHIFT 11 102*895ab013SLaura Nao #define TOP_MUX_AP2CONN_HOST_SHIFT 14 103*895ab013SLaura Nao #define TOP_MUX_ATB_SHIFT 15 104*895ab013SLaura Nao #define TOP_MUX_CIRQ_SHIFT 16 105*895ab013SLaura Nao #define TOP_MUX_PBUS_156M_SHIFT 17 106*895ab013SLaura Nao #define TOP_MUX_EFUSE_SHIFT 20 107*895ab013SLaura Nao #define TOP_MUX_MCU_L3GIC_SHIFT 21 108*895ab013SLaura Nao #define TOP_MUX_MCU_INFRA_SHIFT 22 109*895ab013SLaura Nao #define TOP_MUX_DSP_SHIFT 23 110*895ab013SLaura Nao #define TOP_MUX_MFG_REF_SHIFT 24 111*895ab013SLaura Nao #define TOP_MUX_MFG_EB_SHIFT 26 112*895ab013SLaura Nao #define TOP_MUX_UART_SHIFT 27 113*895ab013SLaura Nao #define TOP_MUX_SPI0_BCLK_SHIFT 28 114*895ab013SLaura Nao #define TOP_MUX_SPI1_BCLK_SHIFT 29 115*895ab013SLaura Nao #define TOP_MUX_SPI2_BCLK_SHIFT 30 116*895ab013SLaura Nao #define TOP_MUX_SPI3_BCLK_SHIFT 0 117*895ab013SLaura Nao #define TOP_MUX_SPI4_BCLK_SHIFT 1 118*895ab013SLaura Nao #define TOP_MUX_SPI5_BCLK_SHIFT 2 119*895ab013SLaura Nao #define TOP_MUX_SPI6_BCLK_SHIFT 3 120*895ab013SLaura Nao #define TOP_MUX_SPI7_BCLK_SHIFT 4 121*895ab013SLaura Nao #define TOP_MUX_MSDC30_1_SHIFT 7 122*895ab013SLaura Nao #define TOP_MUX_MSDC30_2_SHIFT 8 123*895ab013SLaura Nao #define TOP_MUX_DISP_PWM_SHIFT 9 124*895ab013SLaura Nao #define TOP_MUX_USB_TOP_1P_SHIFT 10 125*895ab013SLaura Nao #define TOP_MUX_SSUSB_XHCI_1P_SHIFT 11 126*895ab013SLaura Nao #define TOP_MUX_SSUSB_FMCNT_P1_SHIFT 12 127*895ab013SLaura Nao #define TOP_MUX_I2C_PERI_SHIFT 13 128*895ab013SLaura Nao #define TOP_MUX_I2C_EAST_SHIFT 14 129*895ab013SLaura Nao #define TOP_MUX_I2C_WEST_SHIFT 15 130*895ab013SLaura Nao #define TOP_MUX_I2C_NORTH_SHIFT 16 131*895ab013SLaura Nao #define TOP_MUX_AES_UFSFDE_SHIFT 17 132*895ab013SLaura Nao #define TOP_MUX_UFS_SHIFT 18 133*895ab013SLaura Nao #define TOP_MUX_AUD_1_SHIFT 21 134*895ab013SLaura Nao #define TOP_MUX_AUD_2_SHIFT 22 135*895ab013SLaura Nao #define TOP_MUX_ADSP_SHIFT 23 136*895ab013SLaura Nao #define TOP_MUX_ADSP_UARTHUB_B_SHIFT 24 137*895ab013SLaura Nao #define TOP_MUX_DPMAIF_MAIN_SHIFT 25 138*895ab013SLaura Nao #define TOP_MUX_PWM_SHIFT 26 139*895ab013SLaura Nao #define TOP_MUX_MCUPM_SHIFT 27 140*895ab013SLaura Nao #define TOP_MUX_SFLASH_SHIFT 28 141*895ab013SLaura Nao #define TOP_MUX_IPSEAST_SHIFT 29 142*895ab013SLaura Nao #define TOP_MUX_TL_SHIFT 0 143*895ab013SLaura Nao #define TOP_MUX_TL_P1_SHIFT 1 144*895ab013SLaura Nao #define TOP_MUX_TL_P2_SHIFT 2 145*895ab013SLaura Nao #define TOP_MUX_EMI_INTERFACE_546_SHIFT 3 146*895ab013SLaura Nao #define TOP_MUX_SDF_SHIFT 4 147*895ab013SLaura Nao #define TOP_MUX_UARTHUB_BCLK_SHIFT 5 148*895ab013SLaura Nao #define TOP_MUX_DPSW_CMP_26M_SHIFT 6 149*895ab013SLaura Nao #define TOP_MUX_SMAPCK_SHIFT 7 150*895ab013SLaura Nao #define TOP_MUX_SSR_PKA_SHIFT 8 151*895ab013SLaura Nao #define TOP_MUX_SSR_DMA_SHIFT 9 152*895ab013SLaura Nao #define TOP_MUX_SSR_KDF_SHIFT 10 153*895ab013SLaura Nao #define TOP_MUX_SSR_RNG_SHIFT 11 154*895ab013SLaura Nao #define TOP_MUX_SPU0_SHIFT 12 155*895ab013SLaura Nao #define TOP_MUX_SPU1_SHIFT 13 156*895ab013SLaura Nao #define TOP_MUX_DXCC_SHIFT 14 157*895ab013SLaura Nao 158*895ab013SLaura Nao /* CKSTA REG */ 159*895ab013SLaura Nao #define CKSTA_REG 0x01c8 160*895ab013SLaura Nao #define CKSTA_REG1 0x01cc 161*895ab013SLaura Nao #define CKSTA_REG2 0x01d0 162*895ab013SLaura Nao 163*895ab013SLaura Nao /* DIVIDER REG */ 164*895ab013SLaura Nao #define CLK_AUDDIV_2 0x0214 165*895ab013SLaura Nao #define CLK_AUDDIV_3 0x0220 166*895ab013SLaura Nao #define CLK_AUDDIV_4 0x0224 167*895ab013SLaura Nao #define CLK_AUDDIV_5 0x0228 168*895ab013SLaura Nao 169*895ab013SLaura Nao /* HW Voter REG */ 170*895ab013SLaura Nao #define HWV_CG_0_SET 0x0000 171*895ab013SLaura Nao #define HWV_CG_0_CLR 0x0004 172*895ab013SLaura Nao #define HWV_CG_0_DONE 0x2c00 173*895ab013SLaura Nao #define HWV_CG_1_SET 0x0008 174*895ab013SLaura Nao #define HWV_CG_1_CLR 0x000c 175*895ab013SLaura Nao #define HWV_CG_1_DONE 0x2c04 176*895ab013SLaura Nao #define HWV_CG_2_SET 0x0010 177*895ab013SLaura Nao #define HWV_CG_2_CLR 0x0014 178*895ab013SLaura Nao #define HWV_CG_2_DONE 0x2c08 179*895ab013SLaura Nao #define HWV_CG_3_SET 0x0018 180*895ab013SLaura Nao #define HWV_CG_3_CLR 0x001c 181*895ab013SLaura Nao #define HWV_CG_3_DONE 0x2c0c 182*895ab013SLaura Nao #define HWV_CG_4_SET 0x0020 183*895ab013SLaura Nao #define HWV_CG_4_CLR 0x0024 184*895ab013SLaura Nao #define HWV_CG_4_DONE 0x2c10 185*895ab013SLaura Nao #define HWV_CG_5_SET 0x0028 186*895ab013SLaura Nao #define HWV_CG_5_CLR 0x002c 187*895ab013SLaura Nao #define HWV_CG_5_DONE 0x2c14 188*895ab013SLaura Nao #define HWV_CG_6_SET 0x0030 189*895ab013SLaura Nao #define HWV_CG_6_CLR 0x0034 190*895ab013SLaura Nao #define HWV_CG_6_DONE 0x2c18 191*895ab013SLaura Nao #define HWV_CG_7_SET 0x0038 192*895ab013SLaura Nao #define HWV_CG_7_CLR 0x003c 193*895ab013SLaura Nao #define HWV_CG_7_DONE 0x2c1c 194*895ab013SLaura Nao #define HWV_CG_8_SET 0x0040 195*895ab013SLaura Nao #define HWV_CG_8_CLR 0x0044 196*895ab013SLaura Nao #define HWV_CG_8_DONE 0x2c20 197*895ab013SLaura Nao 198*895ab013SLaura Nao static const struct mtk_fixed_factor top_divs[] = { 199*895ab013SLaura Nao FACTOR(CLK_TOP_MAINPLL_D3, "mainpll_d3", "mainpll", 1, 3), 200*895ab013SLaura Nao FACTOR(CLK_TOP_MAINPLL_D4, "mainpll_d4", "mainpll", 1, 4), 201*895ab013SLaura Nao FACTOR(CLK_TOP_MAINPLL_D4_D2, "mainpll_d4_d2", "mainpll", 1, 8), 202*895ab013SLaura Nao FACTOR(CLK_TOP_MAINPLL_D4_D4, "mainpll_d4_d4", "mainpll", 1, 16), 203*895ab013SLaura Nao FACTOR(CLK_TOP_MAINPLL_D4_D8, "mainpll_d4_d8", "mainpll", 1, 32), 204*895ab013SLaura Nao FACTOR(CLK_TOP_MAINPLL_D5, "mainpll_d5", "mainpll", 1, 5), 205*895ab013SLaura Nao FACTOR(CLK_TOP_MAINPLL_D5_D2, "mainpll_d5_d2", "mainpll", 1, 10), 206*895ab013SLaura Nao FACTOR(CLK_TOP_MAINPLL_D5_D4, "mainpll_d5_d4", "mainpll", 1, 20), 207*895ab013SLaura Nao FACTOR(CLK_TOP_MAINPLL_D5_D8, "mainpll_d5_d8", "mainpll", 1, 40), 208*895ab013SLaura Nao FACTOR(CLK_TOP_MAINPLL_D6, "mainpll_d6", "mainpll", 1, 6), 209*895ab013SLaura Nao FACTOR(CLK_TOP_MAINPLL_D6_D2, "mainpll_d6_d2", "mainpll", 1, 12), 210*895ab013SLaura Nao FACTOR(CLK_TOP_MAINPLL_D7, "mainpll_d7", "mainpll", 1, 7), 211*895ab013SLaura Nao FACTOR(CLK_TOP_MAINPLL_D7_D2, "mainpll_d7_d2", "mainpll", 1, 14), 212*895ab013SLaura Nao FACTOR(CLK_TOP_MAINPLL_D7_D4, "mainpll_d7_d4", "mainpll", 1, 28), 213*895ab013SLaura Nao FACTOR(CLK_TOP_MAINPLL_D7_D8, "mainpll_d7_d8", "mainpll", 1, 56), 214*895ab013SLaura Nao FACTOR(CLK_TOP_MAINPLL_D9, "mainpll_d9", "mainpll", 1, 9), 215*895ab013SLaura Nao FACTOR(CLK_TOP_UNIVPLL_D4, "univpll_d4", "univpll", 1, 4), 216*895ab013SLaura Nao FACTOR(CLK_TOP_UNIVPLL_D4_D2, "univpll_d4_d2", "univpll", 1, 8), 217*895ab013SLaura Nao FACTOR(CLK_TOP_UNIVPLL_D4_D4, "univpll_d4_d4", "univpll", 1, 16), 218*895ab013SLaura Nao FACTOR(CLK_TOP_UNIVPLL_D4_D8, "univpll_d4_d8", "univpll", 1, 32), 219*895ab013SLaura Nao FACTOR(CLK_TOP_UNIVPLL_D5, "univpll_d5", "univpll", 1, 5), 220*895ab013SLaura Nao FACTOR(CLK_TOP_UNIVPLL_D5_D2, "univpll_d5_d2", "univpll", 1, 10), 221*895ab013SLaura Nao FACTOR(CLK_TOP_UNIVPLL_D5_D4, "univpll_d5_d4", "univpll", 1, 20), 222*895ab013SLaura Nao FACTOR(CLK_TOP_UNIVPLL_D6, "univpll_d6", "univpll", 1, 6), 223*895ab013SLaura Nao FACTOR(CLK_TOP_UNIVPLL_D6_D2, "univpll_d6_d2", "univpll", 1, 12), 224*895ab013SLaura Nao FACTOR(CLK_TOP_UNIVPLL_D6_D4, "univpll_d6_d4", "univpll", 1, 24), 225*895ab013SLaura Nao FACTOR(CLK_TOP_UNIVPLL_D6_D8, "univpll_d6_d8", "univpll", 1, 48), 226*895ab013SLaura Nao FACTOR(CLK_TOP_UNIVPLL_D6_D16, "univpll_d6_d16", "univpll", 1, 96), 227*895ab013SLaura Nao FACTOR(CLK_TOP_UNIVPLL_192M, "univpll_192m", "univpll", 1, 13), 228*895ab013SLaura Nao FACTOR(CLK_TOP_UNIVPLL_192M_D4, "univpll_192m_d4", "univpll", 1, 52), 229*895ab013SLaura Nao FACTOR(CLK_TOP_UNIVPLL_192M_D8, "univpll_192m_d8", "univpll", 1, 104), 230*895ab013SLaura Nao FACTOR(CLK_TOP_UNIVPLL_192M_D16, "univpll_192m_d16", "univpll", 1, 208), 231*895ab013SLaura Nao FACTOR(CLK_TOP_UNIVPLL_192M_D32, "univpll_192m_d32", "univpll", 1, 416), 232*895ab013SLaura Nao FACTOR(CLK_TOP_UNIVPLL_192M_D10, "univpll_192m_d10", "univpll", 1, 130), 233*895ab013SLaura Nao FACTOR(CLK_TOP_TVDPLL1_D2, "tvdpll1_d2", "tvdpll1", 1, 2), 234*895ab013SLaura Nao FACTOR(CLK_TOP_MSDCPLL_D2, "msdcpll_d2", "msdcpll", 1, 2), 235*895ab013SLaura Nao FACTOR(CLK_TOP_OSC_D2, "osc_d2", "ulposc", 1, 2), 236*895ab013SLaura Nao FACTOR(CLK_TOP_OSC_D3, "osc_d3", "ulposc", 1, 3), 237*895ab013SLaura Nao FACTOR(CLK_TOP_OSC_D4, "osc_d4", "ulposc", 1, 4), 238*895ab013SLaura Nao FACTOR(CLK_TOP_OSC_D5, "osc_d5", "ulposc", 1, 5), 239*895ab013SLaura Nao FACTOR(CLK_TOP_OSC_D7, "osc_d7", "ulposc", 1, 7), 240*895ab013SLaura Nao FACTOR(CLK_TOP_OSC_D8, "osc_d8", "ulposc", 1, 8), 241*895ab013SLaura Nao FACTOR(CLK_TOP_OSC_D10, "osc_d10", "ulposc", 1, 10), 242*895ab013SLaura Nao FACTOR(CLK_TOP_OSC_D14, "osc_d14", "ulposc", 1, 14), 243*895ab013SLaura Nao FACTOR(CLK_TOP_OSC_D20, "osc_d20", "ulposc", 1, 20), 244*895ab013SLaura Nao FACTOR(CLK_TOP_OSC_D32, "osc_d32", "ulposc", 1, 32), 245*895ab013SLaura Nao FACTOR(CLK_TOP_OSC_D40, "osc_d40", "ulposc", 1, 40), 246*895ab013SLaura Nao }; 247*895ab013SLaura Nao 248*895ab013SLaura Nao static const char * const axi_parents[] = { 249*895ab013SLaura Nao "clk26m", 250*895ab013SLaura Nao "osc_d20", 251*895ab013SLaura Nao "osc_d8", 252*895ab013SLaura Nao "osc_d4", 253*895ab013SLaura Nao "mainpll_d4_d4", 254*895ab013SLaura Nao "mainpll_d7_d2" 255*895ab013SLaura Nao }; 256*895ab013SLaura Nao 257*895ab013SLaura Nao static const char * const mem_sub_parents[] = { 258*895ab013SLaura Nao "clk26m", 259*895ab013SLaura Nao "osc_d20", 260*895ab013SLaura Nao "osc_d4", 261*895ab013SLaura Nao "univpll_d4_d4", 262*895ab013SLaura Nao "osc_d3", 263*895ab013SLaura Nao "mainpll_d5_d2", 264*895ab013SLaura Nao "mainpll_d4_d2", 265*895ab013SLaura Nao "mainpll_d6", 266*895ab013SLaura Nao "mainpll_d5", 267*895ab013SLaura Nao "univpll_d5", 268*895ab013SLaura Nao "mainpll_d4", 269*895ab013SLaura Nao "mainpll_d3" 270*895ab013SLaura Nao }; 271*895ab013SLaura Nao 272*895ab013SLaura Nao static const char * const io_noc_parents[] = { 273*895ab013SLaura Nao "clk26m", 274*895ab013SLaura Nao "osc_d20", 275*895ab013SLaura Nao "osc_d8", 276*895ab013SLaura Nao "osc_d4", 277*895ab013SLaura Nao "mainpll_d6_d2", 278*895ab013SLaura Nao "mainpll_d9" 279*895ab013SLaura Nao }; 280*895ab013SLaura Nao 281*895ab013SLaura Nao static const char * const shared_axi_parents[] = { 282*895ab013SLaura Nao "clk26m", 283*895ab013SLaura Nao "mainpll_d7_d8", 284*895ab013SLaura Nao "mainpll_d5_d8", 285*895ab013SLaura Nao "osc_d8", 286*895ab013SLaura Nao "mainpll_d7_d4", 287*895ab013SLaura Nao "mainpll_d5_d4", 288*895ab013SLaura Nao "mainpll_d4_d4", 289*895ab013SLaura Nao "mainpll_d7_d2" 290*895ab013SLaura Nao }; 291*895ab013SLaura Nao 292*895ab013SLaura Nao static const char * const shared_sub_parents[] = { 293*895ab013SLaura Nao "clk26m", 294*895ab013SLaura Nao "mainpll_d5_d8", 295*895ab013SLaura Nao "mainpll_d5_d4", 296*895ab013SLaura Nao "osc_d4", 297*895ab013SLaura Nao "univpll_d4_d4", 298*895ab013SLaura Nao "mainpll_d5_d2", 299*895ab013SLaura Nao "mainpll_d4_d2", 300*895ab013SLaura Nao "mainpll_d6", 301*895ab013SLaura Nao "mainpll_d5", 302*895ab013SLaura Nao "univpll_d5", 303*895ab013SLaura Nao "mainpll_d4" 304*895ab013SLaura Nao }; 305*895ab013SLaura Nao 306*895ab013SLaura Nao static const char * const p_noc_parents[] = { 307*895ab013SLaura Nao "clk26m", 308*895ab013SLaura Nao "mainpll_d5_d8", 309*895ab013SLaura Nao "mainpll_d5_d4", 310*895ab013SLaura Nao "osc_d4", 311*895ab013SLaura Nao "univpll_d4_d4", 312*895ab013SLaura Nao "mainpll_d5_d2", 313*895ab013SLaura Nao "mainpll_d4_d2", 314*895ab013SLaura Nao "mainpll_d6", 315*895ab013SLaura Nao "mainpll_d5", 316*895ab013SLaura Nao "univpll_d5", 317*895ab013SLaura Nao "mainpll_d4", 318*895ab013SLaura Nao "mainpll_d3" 319*895ab013SLaura Nao }; 320*895ab013SLaura Nao 321*895ab013SLaura Nao static const char * const emi_parents[] = { 322*895ab013SLaura Nao "clk26m", 323*895ab013SLaura Nao "osc_d4", 324*895ab013SLaura Nao "mainpll_d5_d8", 325*895ab013SLaura Nao "mainpll_d5_d4", 326*895ab013SLaura Nao "mainpll_d4_d4", 327*895ab013SLaura Nao "emipll1_ck" 328*895ab013SLaura Nao }; 329*895ab013SLaura Nao 330*895ab013SLaura Nao static const char * const ap2conn_host_parents[] = { 331*895ab013SLaura Nao "clk26m", 332*895ab013SLaura Nao "mainpll_d7_d4" 333*895ab013SLaura Nao }; 334*895ab013SLaura Nao 335*895ab013SLaura Nao static const char * const atb_parents[] = { 336*895ab013SLaura Nao "clk26m", 337*895ab013SLaura Nao "mainpll_d5_d2", 338*895ab013SLaura Nao "mainpll_d4_d2", 339*895ab013SLaura Nao "mainpll_d6" 340*895ab013SLaura Nao }; 341*895ab013SLaura Nao 342*895ab013SLaura Nao static const char * const cirq_parents[] = { 343*895ab013SLaura Nao "clk26m", 344*895ab013SLaura Nao "osc_d20", 345*895ab013SLaura Nao "mainpll_d7_d4" 346*895ab013SLaura Nao }; 347*895ab013SLaura Nao 348*895ab013SLaura Nao static const char * const pbus_156m_parents[] = { 349*895ab013SLaura Nao "clk26m", 350*895ab013SLaura Nao "mainpll_d7_d2", 351*895ab013SLaura Nao "osc_d2", 352*895ab013SLaura Nao "mainpll_d7" 353*895ab013SLaura Nao }; 354*895ab013SLaura Nao 355*895ab013SLaura Nao static const char * const efuse_parents[] = { 356*895ab013SLaura Nao "clk26m", 357*895ab013SLaura Nao "osc_d20" 358*895ab013SLaura Nao }; 359*895ab013SLaura Nao 360*895ab013SLaura Nao static const char * const mcu_l3gic_parents[] = { 361*895ab013SLaura Nao "clk26m", 362*895ab013SLaura Nao "osc_d8", 363*895ab013SLaura Nao "mainpll_d4_d4", 364*895ab013SLaura Nao "mainpll_d7_d2" 365*895ab013SLaura Nao }; 366*895ab013SLaura Nao 367*895ab013SLaura Nao static const char * const mcu_infra_parents[] = { 368*895ab013SLaura Nao "clk26m", 369*895ab013SLaura Nao "osc_d20", 370*895ab013SLaura Nao "mainpll_d7_d2", 371*895ab013SLaura Nao "mainpll_d5_d2", 372*895ab013SLaura Nao "mainpll_d4_d2", 373*895ab013SLaura Nao "mainpll_d9", 374*895ab013SLaura Nao "mainpll_d6" 375*895ab013SLaura Nao }; 376*895ab013SLaura Nao 377*895ab013SLaura Nao static const char * const dsp_parents[] = { 378*895ab013SLaura Nao "clk26m", 379*895ab013SLaura Nao "osc_d5", 380*895ab013SLaura Nao "osc_d4", 381*895ab013SLaura Nao "osc_d3", 382*895ab013SLaura Nao "univpll_d6_d2", 383*895ab013SLaura Nao "osc_d2", 384*895ab013SLaura Nao "univpll_d5", 385*895ab013SLaura Nao "osc" 386*895ab013SLaura Nao }; 387*895ab013SLaura Nao 388*895ab013SLaura Nao static const char * const mfg_ref_parents[] = { 389*895ab013SLaura Nao "clk26m", 390*895ab013SLaura Nao "mainpll_d7_d2" 391*895ab013SLaura Nao }; 392*895ab013SLaura Nao 393*895ab013SLaura Nao static const char * const mfg_eb_parents[] = { 394*895ab013SLaura Nao "clk26m", 395*895ab013SLaura Nao "mainpll_d7_d2", 396*895ab013SLaura Nao "mainpll_d6_d2", 397*895ab013SLaura Nao "mainpll_d5_d2" 398*895ab013SLaura Nao }; 399*895ab013SLaura Nao 400*895ab013SLaura Nao static const char * const uart_parents[] = { 401*895ab013SLaura Nao "clk26m", 402*895ab013SLaura Nao "univpll_d6_d8", 403*895ab013SLaura Nao "univpll_d6_d4", 404*895ab013SLaura Nao "univpll_d6_d2" 405*895ab013SLaura Nao }; 406*895ab013SLaura Nao 407*895ab013SLaura Nao static const char * const spi_b_parents[] = { 408*895ab013SLaura Nao "clk26m", 409*895ab013SLaura Nao "univpll_d6_d4", 410*895ab013SLaura Nao "univpll_d5_d4", 411*895ab013SLaura Nao "mainpll_d4_d4", 412*895ab013SLaura Nao "univpll_d4_d4", 413*895ab013SLaura Nao "mainpll_d6_d2", 414*895ab013SLaura Nao "univpll_192m", 415*895ab013SLaura Nao "univpll_d6_d2" 416*895ab013SLaura Nao }; 417*895ab013SLaura Nao 418*895ab013SLaura Nao static const char * const msdc30_parents[] = { 419*895ab013SLaura Nao "clk26m", 420*895ab013SLaura Nao "univpll_d6_d4", 421*895ab013SLaura Nao "mainpll_d6_d2", 422*895ab013SLaura Nao "univpll_d6_d2", 423*895ab013SLaura Nao "msdcpll_d2" 424*895ab013SLaura Nao }; 425*895ab013SLaura Nao 426*895ab013SLaura Nao static const char * const disp_pwm_parents[] = { 427*895ab013SLaura Nao "clk26m", 428*895ab013SLaura Nao "osc_d32", 429*895ab013SLaura Nao "osc_d8", 430*895ab013SLaura Nao "univpll_d6_d4", 431*895ab013SLaura Nao "univpll_d5_d4", 432*895ab013SLaura Nao "osc_d4", 433*895ab013SLaura Nao "mainpll_d4_d4" 434*895ab013SLaura Nao }; 435*895ab013SLaura Nao 436*895ab013SLaura Nao static const char * const usb_1p_parents[] = { 437*895ab013SLaura Nao "clk26m", 438*895ab013SLaura Nao "univpll_d5_d4" 439*895ab013SLaura Nao }; 440*895ab013SLaura Nao 441*895ab013SLaura Nao static const char * const usb_fmcnt_p1_parents[] = { 442*895ab013SLaura Nao "clk26m", 443*895ab013SLaura Nao "univpll_192m_d4" 444*895ab013SLaura Nao }; 445*895ab013SLaura Nao 446*895ab013SLaura Nao static const char * const i2c_parents[] = { 447*895ab013SLaura Nao "clk26m", 448*895ab013SLaura Nao "mainpll_d4_d8", 449*895ab013SLaura Nao "univpll_d5_d4", 450*895ab013SLaura Nao "mainpll_d4_d4", 451*895ab013SLaura Nao "univpll_d5_d2" 452*895ab013SLaura Nao }; 453*895ab013SLaura Nao 454*895ab013SLaura Nao static const char * const aes_ufsfde_parents[] = { 455*895ab013SLaura Nao "clk26m", 456*895ab013SLaura Nao "mainpll_d4_d4", 457*895ab013SLaura Nao "univpll_d6_d2", 458*895ab013SLaura Nao "mainpll_d4_d2", 459*895ab013SLaura Nao "univpll_d6", 460*895ab013SLaura Nao "mainpll_d4" 461*895ab013SLaura Nao }; 462*895ab013SLaura Nao 463*895ab013SLaura Nao static const char * const ufs_parents[] = { 464*895ab013SLaura Nao "clk26m", 465*895ab013SLaura Nao "mainpll_d4_d4", 466*895ab013SLaura Nao "univpll_d6_d2", 467*895ab013SLaura Nao "mainpll_d4_d2", 468*895ab013SLaura Nao "univpll_d6", 469*895ab013SLaura Nao "mainpll_d5", 470*895ab013SLaura Nao "univpll_d5" 471*895ab013SLaura Nao }; 472*895ab013SLaura Nao 473*895ab013SLaura Nao static const char * const aud_1_parents[] = { 474*895ab013SLaura Nao "clk26m", 475*895ab013SLaura Nao "vlp_apll1" 476*895ab013SLaura Nao }; 477*895ab013SLaura Nao 478*895ab013SLaura Nao static const char * const aud_2_parents[] = { 479*895ab013SLaura Nao "clk26m", 480*895ab013SLaura Nao "vlp_apll2" 481*895ab013SLaura Nao }; 482*895ab013SLaura Nao 483*895ab013SLaura Nao static const char * const adsp_parents[] = { 484*895ab013SLaura Nao "clk26m", 485*895ab013SLaura Nao "adsppll" 486*895ab013SLaura Nao }; 487*895ab013SLaura Nao 488*895ab013SLaura Nao static const char * const adsp_uarthub_b_parents[] = { 489*895ab013SLaura Nao "clk26m", 490*895ab013SLaura Nao "univpll_d6_d4", 491*895ab013SLaura Nao "univpll_d6_d2" 492*895ab013SLaura Nao }; 493*895ab013SLaura Nao 494*895ab013SLaura Nao static const char * const dpmaif_main_parents[] = { 495*895ab013SLaura Nao "clk26m", 496*895ab013SLaura Nao "univpll_d4_d4", 497*895ab013SLaura Nao "univpll_d5_d2", 498*895ab013SLaura Nao "mainpll_d4_d2", 499*895ab013SLaura Nao "univpll_d4_d2", 500*895ab013SLaura Nao "mainpll_d6", 501*895ab013SLaura Nao "univpll_d6", 502*895ab013SLaura Nao "mainpll_d5", 503*895ab013SLaura Nao "univpll_d5" 504*895ab013SLaura Nao }; 505*895ab013SLaura Nao 506*895ab013SLaura Nao static const char * const pwm_parents[] = { 507*895ab013SLaura Nao "clk26m", 508*895ab013SLaura Nao "mainpll_d7_d4", 509*895ab013SLaura Nao "univpll_d4_d8" 510*895ab013SLaura Nao }; 511*895ab013SLaura Nao 512*895ab013SLaura Nao static const char * const mcupm_parents[] = { 513*895ab013SLaura Nao "clk26m", 514*895ab013SLaura Nao "mainpll_d7_d2", 515*895ab013SLaura Nao "mainpll_d6_d2", 516*895ab013SLaura Nao "univpll_d6_d2", 517*895ab013SLaura Nao "mainpll_d5_d2" 518*895ab013SLaura Nao }; 519*895ab013SLaura Nao 520*895ab013SLaura Nao static const char * const ipseast_parents[] = { 521*895ab013SLaura Nao "clk26m", 522*895ab013SLaura Nao "mainpll_d6", 523*895ab013SLaura Nao "mainpll_d5", 524*895ab013SLaura Nao "mainpll_d4", 525*895ab013SLaura Nao "mainpll_d3" 526*895ab013SLaura Nao }; 527*895ab013SLaura Nao 528*895ab013SLaura Nao static const char * const tl_parents[] = { 529*895ab013SLaura Nao "clk26m", 530*895ab013SLaura Nao "mainpll_d7_d4", 531*895ab013SLaura Nao "mainpll_d4_d4", 532*895ab013SLaura Nao "mainpll_d5_d2" 533*895ab013SLaura Nao }; 534*895ab013SLaura Nao 535*895ab013SLaura Nao static const char * const md_emi_parents[] = { 536*895ab013SLaura Nao "clk26m", 537*895ab013SLaura Nao "mainpll_d4" 538*895ab013SLaura Nao }; 539*895ab013SLaura Nao 540*895ab013SLaura Nao static const char * const sdf_parents[] = { 541*895ab013SLaura Nao "clk26m", 542*895ab013SLaura Nao "mainpll_d5_d2", 543*895ab013SLaura Nao "mainpll_d4_d2", 544*895ab013SLaura Nao "mainpll_d6", 545*895ab013SLaura Nao "mainpll_d4", 546*895ab013SLaura Nao "univpll_d4" 547*895ab013SLaura Nao }; 548*895ab013SLaura Nao 549*895ab013SLaura Nao static const char * const uarthub_b_parents[] = { 550*895ab013SLaura Nao "clk26m", 551*895ab013SLaura Nao "univpll_d6_d4", 552*895ab013SLaura Nao "univpll_d6_d2" 553*895ab013SLaura Nao }; 554*895ab013SLaura Nao 555*895ab013SLaura Nao static const char * const dpsw_cmp_26m_parents[] = { 556*895ab013SLaura Nao "clk26m", 557*895ab013SLaura Nao "osc_d20" 558*895ab013SLaura Nao }; 559*895ab013SLaura Nao 560*895ab013SLaura Nao static const char * const smapparents[] = { 561*895ab013SLaura Nao "clk26m", 562*895ab013SLaura Nao "mainpll_d4_d8" 563*895ab013SLaura Nao }; 564*895ab013SLaura Nao 565*895ab013SLaura Nao static const char * const ssr_parents[] = { 566*895ab013SLaura Nao "clk26m", 567*895ab013SLaura Nao "mainpll_d4_d4", 568*895ab013SLaura Nao "mainpll_d4_d2", 569*895ab013SLaura Nao "mainpll_d7", 570*895ab013SLaura Nao "mainpll_d6", 571*895ab013SLaura Nao "mainpll_d5" 572*895ab013SLaura Nao }; 573*895ab013SLaura Nao 574*895ab013SLaura Nao static const char * const ssr_kdf_parents[] = { 575*895ab013SLaura Nao "clk26m", 576*895ab013SLaura Nao "mainpll_d4_d4", 577*895ab013SLaura Nao "mainpll_d4_d2", 578*895ab013SLaura Nao "mainpll_d7" 579*895ab013SLaura Nao }; 580*895ab013SLaura Nao 581*895ab013SLaura Nao static const char * const ssr_rng_parents[] = { 582*895ab013SLaura Nao "clk26m", 583*895ab013SLaura Nao "mainpll_d4_d4", 584*895ab013SLaura Nao "mainpll_d5_d2", 585*895ab013SLaura Nao "mainpll_d4_d2" 586*895ab013SLaura Nao }; 587*895ab013SLaura Nao 588*895ab013SLaura Nao static const char * const spu_parents[] = { 589*895ab013SLaura Nao "clk26m", 590*895ab013SLaura Nao "mainpll_d4_d4", 591*895ab013SLaura Nao "mainpll_d4_d2", 592*895ab013SLaura Nao "mainpll_d7", 593*895ab013SLaura Nao "mainpll_d6", 594*895ab013SLaura Nao "mainpll_d5" 595*895ab013SLaura Nao }; 596*895ab013SLaura Nao 597*895ab013SLaura Nao static const char * const dxcc_parents[] = { 598*895ab013SLaura Nao "clk26m", 599*895ab013SLaura Nao "mainpll_d4_d8", 600*895ab013SLaura Nao "mainpll_d4_d4", 601*895ab013SLaura Nao "mainpll_d4_d2" 602*895ab013SLaura Nao }; 603*895ab013SLaura Nao 604*895ab013SLaura Nao static const char * const apll_m_parents[] = { 605*895ab013SLaura Nao "aud_1", 606*895ab013SLaura Nao "aud_2" 607*895ab013SLaura Nao }; 608*895ab013SLaura Nao 609*895ab013SLaura Nao static const char * const sflash_parents[] = { 610*895ab013SLaura Nao "clk26m", 611*895ab013SLaura Nao "mainpll_d7_d8", 612*895ab013SLaura Nao "univpll_d6_d8" 613*895ab013SLaura Nao }; 614*895ab013SLaura Nao 615*895ab013SLaura Nao static const struct mtk_mux top_muxes[] = { 616*895ab013SLaura Nao /* CLK_CFG_0 */ 617*895ab013SLaura Nao MUX_CLR_SET_UPD(CLK_TOP_AXI, "axi", 618*895ab013SLaura Nao axi_parents, CLK_CFG_0, CLK_CFG_0_SET, 619*895ab013SLaura Nao CLK_CFG_0_CLR, 0, 3, 620*895ab013SLaura Nao CLK_CFG_UPDATE, TOP_MUX_AXI_SHIFT), 621*895ab013SLaura Nao MUX_CLR_SET_UPD(CLK_TOP_MEM_SUB, "mem_sub", 622*895ab013SLaura Nao mem_sub_parents, CLK_CFG_0, CLK_CFG_0_SET, 623*895ab013SLaura Nao CLK_CFG_0_CLR, 8, 4, 624*895ab013SLaura Nao CLK_CFG_UPDATE, TOP_MUX_MEM_SUB_SHIFT), 625*895ab013SLaura Nao MUX_CLR_SET_UPD(CLK_TOP_IO_NOC, "io_noc", 626*895ab013SLaura Nao io_noc_parents, CLK_CFG_0, CLK_CFG_0_SET, 627*895ab013SLaura Nao CLK_CFG_0_CLR, 16, 3, 628*895ab013SLaura Nao CLK_CFG_UPDATE, TOP_MUX_IO_NOC_SHIFT), 629*895ab013SLaura Nao MUX_CLR_SET_UPD(CLK_TOP_P_AXI, "p_axi", 630*895ab013SLaura Nao shared_axi_parents, CLK_CFG_0, CLK_CFG_0_SET, 631*895ab013SLaura Nao CLK_CFG_0_CLR, 24, 3, 632*895ab013SLaura Nao CLK_CFG_UPDATE, TOP_MUX_PERI_AXI_SHIFT), 633*895ab013SLaura Nao /* CLK_CFG_1 */ 634*895ab013SLaura Nao MUX_CLR_SET_UPD(CLK_TOP_UFS_PEXTP0_AXI, "ufs_pextp0_axi", 635*895ab013SLaura Nao shared_axi_parents, CLK_CFG_1, CLK_CFG_1_SET, 636*895ab013SLaura Nao CLK_CFG_1_CLR, 0, 3, 637*895ab013SLaura Nao CLK_CFG_UPDATE, TOP_MUX_UFS_PEXTP0_AXI_SHIFT), 638*895ab013SLaura Nao MUX_CLR_SET_UPD(CLK_TOP_PEXTP1_USB_AXI, "pextp1_usb_axi", 639*895ab013SLaura Nao shared_axi_parents, CLK_CFG_1, CLK_CFG_1_SET, 640*895ab013SLaura Nao CLK_CFG_1_CLR, 8, 3, 641*895ab013SLaura Nao CLK_CFG_UPDATE, TOP_MUX_PEXTP1_USB_AXI_SHIFT), 642*895ab013SLaura Nao MUX_CLR_SET_UPD(CLK_TOP_P_FMEM_SUB, "p_fmem_sub", 643*895ab013SLaura Nao shared_sub_parents, CLK_CFG_1, CLK_CFG_1_SET, 644*895ab013SLaura Nao CLK_CFG_1_CLR, 16, 4, 645*895ab013SLaura Nao CLK_CFG_UPDATE, TOP_MUX_PERI_FMEM_SUB_SHIFT), 646*895ab013SLaura Nao MUX_CLR_SET_UPD(CLK_TOP_PEXPT0_MEM_SUB, "ufs_pexpt0_mem_sub", 647*895ab013SLaura Nao shared_sub_parents, CLK_CFG_1, CLK_CFG_1_SET, 648*895ab013SLaura Nao CLK_CFG_1_CLR, 24, 4, 649*895ab013SLaura Nao CLK_CFG_UPDATE, TOP_MUX_UFS_PEXPT0_MEM_SUB_SHIFT), 650*895ab013SLaura Nao /* CLK_CFG_2 */ 651*895ab013SLaura Nao MUX_CLR_SET_UPD(CLK_TOP_PEXTP1_USB_MEM_SUB, "pextp1_usb_mem_sub", 652*895ab013SLaura Nao shared_sub_parents, CLK_CFG_2, CLK_CFG_2_SET, 653*895ab013SLaura Nao CLK_CFG_2_CLR, 0, 4, 654*895ab013SLaura Nao CLK_CFG_UPDATE, TOP_MUX_PEXTP1_USB_MEM_SUB_SHIFT), 655*895ab013SLaura Nao MUX_CLR_SET_UPD(CLK_TOP_P_NOC, "p_noc", 656*895ab013SLaura Nao p_noc_parents, CLK_CFG_2, CLK_CFG_2_SET, 657*895ab013SLaura Nao CLK_CFG_2_CLR, 8, 4, 658*895ab013SLaura Nao CLK_CFG_UPDATE, TOP_MUX_PERI_NOC_SHIFT), 659*895ab013SLaura Nao MUX_CLR_SET_UPD(CLK_TOP_EMI_N, "emi_n", 660*895ab013SLaura Nao emi_parents, CLK_CFG_2, CLK_CFG_2_SET, 661*895ab013SLaura Nao CLK_CFG_2_CLR, 16, 3, 662*895ab013SLaura Nao CLK_CFG_UPDATE, TOP_MUX_EMI_N_SHIFT), 663*895ab013SLaura Nao MUX_CLR_SET_UPD(CLK_TOP_EMI_S, "emi_s", 664*895ab013SLaura Nao emi_parents, CLK_CFG_2, CLK_CFG_2_SET, 665*895ab013SLaura Nao CLK_CFG_2_CLR, 24, 3, 666*895ab013SLaura Nao CLK_CFG_UPDATE, TOP_MUX_EMI_S_SHIFT), 667*895ab013SLaura Nao /* CLK_CFG_3 */ 668*895ab013SLaura Nao MUX_CLR_SET_UPD(CLK_TOP_AP2CONN_HOST, "ap2conn_host", 669*895ab013SLaura Nao ap2conn_host_parents, CLK_CFG_3, CLK_CFG_3_SET, 670*895ab013SLaura Nao CLK_CFG_3_CLR, 16, 1, 671*895ab013SLaura Nao CLK_CFG_UPDATE, TOP_MUX_AP2CONN_HOST_SHIFT), 672*895ab013SLaura Nao MUX_CLR_SET_UPD(CLK_TOP_ATB, "atb", 673*895ab013SLaura Nao atb_parents, CLK_CFG_3, CLK_CFG_3_SET, 674*895ab013SLaura Nao CLK_CFG_3_CLR, 24, 2, 675*895ab013SLaura Nao CLK_CFG_UPDATE, TOP_MUX_ATB_SHIFT), 676*895ab013SLaura Nao /* CLK_CFG_4 */ 677*895ab013SLaura Nao MUX_CLR_SET_UPD(CLK_TOP_CIRQ, "cirq", 678*895ab013SLaura Nao cirq_parents, CLK_CFG_4, CLK_CFG_4_SET, 679*895ab013SLaura Nao CLK_CFG_4_CLR, 0, 2, 680*895ab013SLaura Nao CLK_CFG_UPDATE, TOP_MUX_CIRQ_SHIFT), 681*895ab013SLaura Nao MUX_CLR_SET_UPD(CLK_TOP_PBUS_156M, "pbus_156m", 682*895ab013SLaura Nao pbus_156m_parents, CLK_CFG_4, CLK_CFG_4_SET, 683*895ab013SLaura Nao CLK_CFG_4_CLR, 8, 2, 684*895ab013SLaura Nao CLK_CFG_UPDATE, TOP_MUX_PBUS_156M_SHIFT), 685*895ab013SLaura Nao /* CLK_CFG_5 */ 686*895ab013SLaura Nao MUX_CLR_SET_UPD(CLK_TOP_EFUSE, "efuse", 687*895ab013SLaura Nao efuse_parents, CLK_CFG_5, CLK_CFG_5_SET, 688*895ab013SLaura Nao CLK_CFG_5_CLR, 0, 1, 689*895ab013SLaura Nao CLK_CFG_UPDATE, TOP_MUX_EFUSE_SHIFT), 690*895ab013SLaura Nao MUX_CLR_SET_UPD(CLK_TOP_MCL3GIC, "mcu_l3gic", 691*895ab013SLaura Nao mcu_l3gic_parents, CLK_CFG_5, CLK_CFG_5_SET, 692*895ab013SLaura Nao CLK_CFG_5_CLR, 8, 2, 693*895ab013SLaura Nao CLK_CFG_UPDATE, TOP_MUX_MCU_L3GIC_SHIFT), 694*895ab013SLaura Nao MUX_CLR_SET_UPD(CLK_TOP_MCINFRA, "mcu_infra", 695*895ab013SLaura Nao mcu_infra_parents, CLK_CFG_5, CLK_CFG_5_SET, 696*895ab013SLaura Nao CLK_CFG_5_CLR, 16, 3, 697*895ab013SLaura Nao CLK_CFG_UPDATE, TOP_MUX_MCU_INFRA_SHIFT), 698*895ab013SLaura Nao MUX_CLR_SET_UPD(CLK_TOP_DSP, "dsp", 699*895ab013SLaura Nao dsp_parents, CLK_CFG_5, CLK_CFG_5_SET, 700*895ab013SLaura Nao CLK_CFG_5_CLR, 24, 3, 701*895ab013SLaura Nao CLK_CFG_UPDATE, TOP_MUX_DSP_SHIFT), 702*895ab013SLaura Nao /* CLK_CFG_6 */ 703*895ab013SLaura Nao MUX_GATE_FENC_CLR_SET_UPD_FLAGS(CLK_TOP_MFG_REF, "mfg_ref", mfg_ref_parents, 704*895ab013SLaura Nao NULL, ARRAY_SIZE(mfg_ref_parents), 705*895ab013SLaura Nao CLK_CFG_6, CLK_CFG_6_SET, CLK_CFG_6_CLR, 706*895ab013SLaura Nao 0, 1, 7, CLK_CFG_UPDATE, TOP_MUX_MFG_REF_SHIFT, 707*895ab013SLaura Nao CLK_FENC_STATUS_MON_0, 7, CLK_IGNORE_UNUSED), 708*895ab013SLaura Nao MUX_GATE_CLR_SET_UPD(CLK_TOP_MFG_EB, "mfg_eb", 709*895ab013SLaura Nao mfg_eb_parents, CLK_CFG_6, CLK_CFG_6_SET, 710*895ab013SLaura Nao CLK_CFG_6_CLR, 16, 2, 711*895ab013SLaura Nao 23, CLK_CFG_UPDATE, TOP_MUX_MFG_EB_SHIFT), 712*895ab013SLaura Nao MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP_UART, "uart", uart_parents, 713*895ab013SLaura Nao CLK_CFG_6, CLK_CFG_6_SET, CLK_CFG_6_CLR, 714*895ab013SLaura Nao HWV_CG_3_DONE, HWV_CG_3_SET, HWV_CG_3_CLR, 715*895ab013SLaura Nao 24, 2, 31, CLK_CFG_UPDATE, TOP_MUX_UART_SHIFT, 716*895ab013SLaura Nao CLK_FENC_STATUS_MON_0, 4), 717*895ab013SLaura Nao /* CLK_CFG_7 */ 718*895ab013SLaura Nao MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP_SPI0_BCLK, "spi0_b", spi_b_parents, 719*895ab013SLaura Nao CLK_CFG_7, CLK_CFG_7_SET, CLK_CFG_7_CLR, 720*895ab013SLaura Nao HWV_CG_4_DONE, HWV_CG_4_SET, HWV_CG_4_CLR, 721*895ab013SLaura Nao 0, 3, 7, CLK_CFG_UPDATE, TOP_MUX_SPI0_BCLK_SHIFT, 722*895ab013SLaura Nao CLK_FENC_STATUS_MON_0, 3), 723*895ab013SLaura Nao MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP_SPI1_BCLK, "spi1_b", spi_b_parents, 724*895ab013SLaura Nao CLK_CFG_7, CLK_CFG_7_SET, CLK_CFG_7_CLR, 725*895ab013SLaura Nao HWV_CG_4_DONE, HWV_CG_4_SET, HWV_CG_4_CLR, 726*895ab013SLaura Nao 8, 3, 15, CLK_CFG_UPDATE, TOP_MUX_SPI1_BCLK_SHIFT, 727*895ab013SLaura Nao CLK_FENC_STATUS_MON_0, 2), 728*895ab013SLaura Nao MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP_SPI2_BCLK, "spi2_b", spi_b_parents, 729*895ab013SLaura Nao CLK_CFG_7, CLK_CFG_7_SET, CLK_CFG_7_CLR, 730*895ab013SLaura Nao HWV_CG_4_DONE, HWV_CG_4_SET, HWV_CG_4_CLR, 731*895ab013SLaura Nao 16, 3, 23, CLK_CFG_UPDATE, TOP_MUX_SPI2_BCLK_SHIFT, 732*895ab013SLaura Nao CLK_FENC_STATUS_MON_0, 1), 733*895ab013SLaura Nao MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP_SPI3_BCLK, "spi3_b", spi_b_parents, 734*895ab013SLaura Nao CLK_CFG_7, CLK_CFG_7_SET, CLK_CFG_7_CLR, 735*895ab013SLaura Nao HWV_CG_4_DONE, HWV_CG_4_SET, HWV_CG_4_CLR, 736*895ab013SLaura Nao 24, 3, 31, CLK_CFG_UPDATE1, TOP_MUX_SPI3_BCLK_SHIFT, 737*895ab013SLaura Nao CLK_FENC_STATUS_MON_0, 0), 738*895ab013SLaura Nao /* CLK_CFG_8 */ 739*895ab013SLaura Nao MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP_SPI4_BCLK, "spi4_b", spi_b_parents, 740*895ab013SLaura Nao CLK_CFG_8, CLK_CFG_8_SET, CLK_CFG_8_CLR, 741*895ab013SLaura Nao HWV_CG_5_DONE, HWV_CG_5_SET, HWV_CG_5_CLR, 742*895ab013SLaura Nao 0, 3, 7, CLK_CFG_UPDATE1, TOP_MUX_SPI4_BCLK_SHIFT, 743*895ab013SLaura Nao CLK_FENC_STATUS_MON_1, 31), 744*895ab013SLaura Nao MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP_SPI5_BCLK, "spi5_b", spi_b_parents, 745*895ab013SLaura Nao CLK_CFG_8, CLK_CFG_8_SET, CLK_CFG_8_CLR, 746*895ab013SLaura Nao HWV_CG_5_DONE, HWV_CG_5_SET, HWV_CG_5_CLR, 747*895ab013SLaura Nao 8, 3, 15, CLK_CFG_UPDATE1, TOP_MUX_SPI5_BCLK_SHIFT, 748*895ab013SLaura Nao CLK_FENC_STATUS_MON_1, 30), 749*895ab013SLaura Nao MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP_SPI6_BCLK, "spi6_b", spi_b_parents, 750*895ab013SLaura Nao CLK_CFG_8, CLK_CFG_8_SET, CLK_CFG_8_CLR, 751*895ab013SLaura Nao HWV_CG_5_DONE, HWV_CG_5_SET, HWV_CG_5_CLR, 752*895ab013SLaura Nao 16, 3, 23, CLK_CFG_UPDATE1, TOP_MUX_SPI6_BCLK_SHIFT, 753*895ab013SLaura Nao CLK_FENC_STATUS_MON_1, 29), 754*895ab013SLaura Nao MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP_SPI7_BCLK, "spi7_b", spi_b_parents, 755*895ab013SLaura Nao CLK_CFG_8, CLK_CFG_8_SET, CLK_CFG_8_CLR, 756*895ab013SLaura Nao HWV_CG_5_DONE, HWV_CG_5_SET, HWV_CG_5_CLR, 757*895ab013SLaura Nao 24, 3, 31, CLK_CFG_UPDATE1, TOP_MUX_SPI7_BCLK_SHIFT, 758*895ab013SLaura Nao CLK_FENC_STATUS_MON_1, 28), 759*895ab013SLaura Nao /* CLK_CFG_9 */ 760*895ab013SLaura Nao MUX_GATE_FENC_CLR_SET_UPD(CLK_TOP_MSDC30_1, "msdc30_1", msdc30_parents, 761*895ab013SLaura Nao CLK_CFG_9, CLK_CFG_9_SET, CLK_CFG_9_CLR, 762*895ab013SLaura Nao 16, 3, 23, CLK_CFG_UPDATE1, TOP_MUX_MSDC30_1_SHIFT, 763*895ab013SLaura Nao CLK_FENC_STATUS_MON_1, 25), 764*895ab013SLaura Nao MUX_GATE_FENC_CLR_SET_UPD(CLK_TOP_MSDC30_2, "msdc30_2", msdc30_parents, 765*895ab013SLaura Nao CLK_CFG_9, CLK_CFG_9_SET, CLK_CFG_9_CLR, 766*895ab013SLaura Nao 24, 3, 31, CLK_CFG_UPDATE1, TOP_MUX_MSDC30_2_SHIFT, 767*895ab013SLaura Nao CLK_FENC_STATUS_MON_1, 24), 768*895ab013SLaura Nao /* CLK_CFG_10 */ 769*895ab013SLaura Nao MUX_GATE_FENC_CLR_SET_UPD(CLK_TOP_DISP_PWM, "disp_pwm", disp_pwm_parents, 770*895ab013SLaura Nao CLK_CFG_10, CLK_CFG_10_SET, CLK_CFG_10_CLR, 771*895ab013SLaura Nao 0, 3, 7, CLK_CFG_UPDATE1, TOP_MUX_DISP_PWM_SHIFT, 772*895ab013SLaura Nao CLK_FENC_STATUS_MON_1, 23), 773*895ab013SLaura Nao MUX_GATE_FENC_CLR_SET_UPD(CLK_TOP_USB_TOP_1P, "usb_1p", usb_1p_parents, 774*895ab013SLaura Nao CLK_CFG_10, CLK_CFG_10_SET, CLK_CFG_10_CLR, 775*895ab013SLaura Nao 8, 1, 15, CLK_CFG_UPDATE1, TOP_MUX_USB_TOP_1P_SHIFT, 776*895ab013SLaura Nao CLK_FENC_STATUS_MON_1, 22), 777*895ab013SLaura Nao MUX_GATE_FENC_CLR_SET_UPD(CLK_TOP_USB_XHCI_1P, "usb_xhci_1p", usb_1p_parents, 778*895ab013SLaura Nao CLK_CFG_10, CLK_CFG_10_SET, CLK_CFG_10_CLR, 779*895ab013SLaura Nao 16, 1, 23, CLK_CFG_UPDATE1, TOP_MUX_SSUSB_XHCI_1P_SHIFT, 780*895ab013SLaura Nao CLK_FENC_STATUS_MON_1, 21), 781*895ab013SLaura Nao MUX_GATE_FENC_CLR_SET_UPD(CLK_TOP_USB_FMCNT_P1, "usb_fmcnt_p1", usb_fmcnt_p1_parents, 782*895ab013SLaura Nao CLK_CFG_10, CLK_CFG_10_SET, CLK_CFG_10_CLR, 783*895ab013SLaura Nao 24, 1, 31, CLK_CFG_UPDATE1, TOP_MUX_SSUSB_FMCNT_P1_SHIFT, 784*895ab013SLaura Nao CLK_FENC_STATUS_MON_1, 20), 785*895ab013SLaura Nao /* CLK_CFG_11 */ 786*895ab013SLaura Nao MUX_GATE_FENC_CLR_SET_UPD(CLK_TOP_I2C_P, "i2c_p", i2c_parents, 787*895ab013SLaura Nao CLK_CFG_11, CLK_CFG_11_SET, CLK_CFG_11_CLR, 788*895ab013SLaura Nao 0, 3, 7, CLK_CFG_UPDATE1, TOP_MUX_I2C_PERI_SHIFT, 789*895ab013SLaura Nao CLK_FENC_STATUS_MON_1, 19), 790*895ab013SLaura Nao MUX_GATE_FENC_CLR_SET_UPD(CLK_TOP_I2C_EAST, "i2c_east", i2c_parents, 791*895ab013SLaura Nao CLK_CFG_11, CLK_CFG_11_SET, CLK_CFG_11_CLR, 792*895ab013SLaura Nao 8, 3, 15, CLK_CFG_UPDATE1, TOP_MUX_I2C_EAST_SHIFT, 793*895ab013SLaura Nao CLK_FENC_STATUS_MON_1, 18), 794*895ab013SLaura Nao MUX_GATE_FENC_CLR_SET_UPD(CLK_TOP_I2C_WEST, "i2c_west", i2c_parents, 795*895ab013SLaura Nao CLK_CFG_11, CLK_CFG_11_SET, CLK_CFG_11_CLR, 796*895ab013SLaura Nao 16, 3, 23, CLK_CFG_UPDATE1, TOP_MUX_I2C_WEST_SHIFT, 797*895ab013SLaura Nao CLK_FENC_STATUS_MON_1, 17), 798*895ab013SLaura Nao MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP_I2C_NORTH, "i2c_north", i2c_parents, 799*895ab013SLaura Nao CLK_CFG_11, CLK_CFG_11_SET, CLK_CFG_11_CLR, 800*895ab013SLaura Nao HWV_CG_6_DONE, HWV_CG_6_SET, HWV_CG_6_CLR, 801*895ab013SLaura Nao 24, 3, 31, CLK_CFG_UPDATE1, TOP_MUX_I2C_NORTH_SHIFT, 802*895ab013SLaura Nao CLK_FENC_STATUS_MON_1, 16), 803*895ab013SLaura Nao /* CLK_CFG_12 */ 804*895ab013SLaura Nao MUX_GATE_FENC_CLR_SET_UPD(CLK_TOP_AES_UFSFDE, "aes_ufsfde", aes_ufsfde_parents, 805*895ab013SLaura Nao CLK_CFG_12, CLK_CFG_12_SET, CLK_CFG_12_CLR, 806*895ab013SLaura Nao 0, 3, 7, CLK_CFG_UPDATE1, TOP_MUX_AES_UFSFDE_SHIFT, 807*895ab013SLaura Nao CLK_FENC_STATUS_MON_1, 15), 808*895ab013SLaura Nao MUX_GATE_FENC_CLR_SET_UPD(CLK_TOP_UFS, "ufs", ufs_parents, 809*895ab013SLaura Nao CLK_CFG_12, CLK_CFG_12_SET, CLK_CFG_12_CLR, 810*895ab013SLaura Nao 8, 3, 15, CLK_CFG_UPDATE1, TOP_MUX_UFS_SHIFT, 811*895ab013SLaura Nao CLK_FENC_STATUS_MON_1, 14), 812*895ab013SLaura Nao /* CLK_CFG_13 */ 813*895ab013SLaura Nao MUX_GATE_FENC_CLR_SET_UPD(CLK_TOP_AUD_1, "aud_1", aud_1_parents, 814*895ab013SLaura Nao CLK_CFG_13, CLK_CFG_13_SET, CLK_CFG_13_CLR, 815*895ab013SLaura Nao 0, 1, 7, CLK_CFG_UPDATE1, TOP_MUX_AUD_1_SHIFT, 816*895ab013SLaura Nao CLK_FENC_STATUS_MON_1, 11), 817*895ab013SLaura Nao MUX_GATE_FENC_CLR_SET_UPD(CLK_TOP_AUD_2, "aud_2", aud_2_parents, 818*895ab013SLaura Nao CLK_CFG_13, CLK_CFG_13_SET, CLK_CFG_13_CLR, 819*895ab013SLaura Nao 8, 1, 15, CLK_CFG_UPDATE1, TOP_MUX_AUD_2_SHIFT, 820*895ab013SLaura Nao CLK_FENC_STATUS_MON_1, 10), 821*895ab013SLaura Nao MUX_GATE_FENC_CLR_SET_UPD(CLK_TOP_ADSP, "adsp", adsp_parents, 822*895ab013SLaura Nao CLK_CFG_13, CLK_CFG_13_SET, CLK_CFG_13_CLR, 823*895ab013SLaura Nao 16, 1, 23, CLK_CFG_UPDATE1, TOP_MUX_ADSP_SHIFT, 824*895ab013SLaura Nao CLK_FENC_STATUS_MON_1, 9), 825*895ab013SLaura Nao MUX_GATE_CLR_SET_UPD(CLK_TOP_ADSP_UARTHUB_B, "adsp_uarthub_b", 826*895ab013SLaura Nao adsp_uarthub_b_parents, CLK_CFG_13, CLK_CFG_13_SET, 827*895ab013SLaura Nao CLK_CFG_13_CLR, 24, 2, 31, 828*895ab013SLaura Nao CLK_CFG_UPDATE1, TOP_MUX_ADSP_UARTHUB_B_SHIFT), 829*895ab013SLaura Nao /* CLK_CFG_14 */ 830*895ab013SLaura Nao MUX_GATE_FENC_CLR_SET_UPD(CLK_TOP_DPMAIF_MAIN, "dpmaif_main", dpmaif_main_parents, 831*895ab013SLaura Nao CLK_CFG_14, CLK_CFG_14_SET, CLK_CFG_14_CLR, 832*895ab013SLaura Nao 0, 4, 7, CLK_CFG_UPDATE1, TOP_MUX_DPMAIF_MAIN_SHIFT, 833*895ab013SLaura Nao CLK_FENC_STATUS_MON_1, 7), 834*895ab013SLaura Nao MUX_GATE_FENC_CLR_SET_UPD(CLK_TOP_PWM, "pwm", pwm_parents, 835*895ab013SLaura Nao CLK_CFG_14, CLK_CFG_14_SET, CLK_CFG_14_CLR, 836*895ab013SLaura Nao 8, 2, 15, CLK_CFG_UPDATE1, TOP_MUX_PWM_SHIFT, 837*895ab013SLaura Nao CLK_FENC_STATUS_MON_1, 6), 838*895ab013SLaura Nao MUX_CLR_SET_UPD(CLK_TOP_MCUPM, "mcupm", 839*895ab013SLaura Nao mcupm_parents, CLK_CFG_14, CLK_CFG_14_SET, 840*895ab013SLaura Nao CLK_CFG_14_CLR, 16, 3, 841*895ab013SLaura Nao CLK_CFG_UPDATE1, TOP_MUX_MCUPM_SHIFT), 842*895ab013SLaura Nao MUX_GATE_FENC_CLR_SET_UPD(CLK_TOP_SFLASH, "sflash", sflash_parents, 843*895ab013SLaura Nao CLK_CFG_14, CLK_CFG_14_SET, CLK_CFG_14_CLR, 844*895ab013SLaura Nao 24, 2, 31, CLK_CFG_UPDATE1, TOP_MUX_SFLASH_SHIFT, 845*895ab013SLaura Nao CLK_FENC_STATUS_MON_1, 4), 846*895ab013SLaura Nao /* CLK_CFG_15 */ 847*895ab013SLaura Nao MUX_GATE_FENC_CLR_SET_UPD(CLK_TOP_IPSEAST, "ipseast", ipseast_parents, 848*895ab013SLaura Nao CLK_CFG_15, CLK_CFG_15_SET, CLK_CFG_15_CLR, 849*895ab013SLaura Nao 0, 3, 7, CLK_CFG_UPDATE1, TOP_MUX_IPSEAST_SHIFT, 850*895ab013SLaura Nao CLK_FENC_STATUS_MON_1, 3), 851*895ab013SLaura Nao MUX_GATE_FENC_CLR_SET_UPD(CLK_TOP_TL, "tl", tl_parents, 852*895ab013SLaura Nao CLK_CFG_15, CLK_CFG_15_SET, CLK_CFG_15_CLR, 853*895ab013SLaura Nao 16, 2, 23, CLK_CFG_UPDATE2, TOP_MUX_TL_SHIFT, 854*895ab013SLaura Nao CLK_FENC_STATUS_MON_1, 1), 855*895ab013SLaura Nao MUX_GATE_FENC_CLR_SET_UPD(CLK_TOP_TL_P1, "tl_p1", tl_parents, 856*895ab013SLaura Nao CLK_CFG_15, CLK_CFG_15_SET, CLK_CFG_15_CLR, 857*895ab013SLaura Nao 24, 2, 31, CLK_CFG_UPDATE2, TOP_MUX_TL_P1_SHIFT, 858*895ab013SLaura Nao CLK_FENC_STATUS_MON_1, 0), 859*895ab013SLaura Nao /* CLK_CFG_16 */ 860*895ab013SLaura Nao MUX_GATE_FENC_CLR_SET_UPD(CLK_TOP_TL_P2, "tl_p2", tl_parents, 861*895ab013SLaura Nao CLK_CFG_16, CLK_CFG_16_SET, CLK_CFG_16_CLR, 862*895ab013SLaura Nao 0, 2, 7, CLK_CFG_UPDATE2, TOP_MUX_TL_P2_SHIFT, 863*895ab013SLaura Nao CLK_FENC_STATUS_MON_2, 31), 864*895ab013SLaura Nao MUX_CLR_SET_UPD(CLK_TOP_EMI_INTERFACE_546, "emi_interface_546", 865*895ab013SLaura Nao md_emi_parents, CLK_CFG_16, CLK_CFG_16_SET, 866*895ab013SLaura Nao CLK_CFG_16_CLR, 8, 1, 867*895ab013SLaura Nao CLK_CFG_UPDATE2, TOP_MUX_EMI_INTERFACE_546_SHIFT), 868*895ab013SLaura Nao MUX_CLR_SET_UPD(CLK_TOP_SDF, "sdf", 869*895ab013SLaura Nao sdf_parents, CLK_CFG_16, CLK_CFG_16_SET, 870*895ab013SLaura Nao CLK_CFG_16_CLR, 16, 3, 871*895ab013SLaura Nao CLK_CFG_UPDATE2, TOP_MUX_SDF_SHIFT), 872*895ab013SLaura Nao MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP_UARTHUB_BCLK, "uarthub_b", uarthub_b_parents, 873*895ab013SLaura Nao CLK_CFG_16, CLK_CFG_16_SET, CLK_CFG_16_CLR, 874*895ab013SLaura Nao HWV_CG_7_DONE, HWV_CG_7_SET, HWV_CG_7_CLR, 875*895ab013SLaura Nao 24, 2, 31, CLK_CFG_UPDATE2, TOP_MUX_UARTHUB_BCLK_SHIFT, 876*895ab013SLaura Nao CLK_FENC_STATUS_MON_2, 28), 877*895ab013SLaura Nao /* CLK_CFG_17 */ 878*895ab013SLaura Nao MUX_CLR_SET_UPD(CLK_TOP_DPSW_CMP_26M, "dpsw_cmp_26m", 879*895ab013SLaura Nao dpsw_cmp_26m_parents, CLK_CFG_17, CLK_CFG_17_SET, 880*895ab013SLaura Nao CLK_CFG_17_CLR, 0, 1, 881*895ab013SLaura Nao CLK_CFG_UPDATE2, TOP_MUX_DPSW_CMP_26M_SHIFT), 882*895ab013SLaura Nao MUX_CLR_SET_UPD(CLK_TOP_SMAP, "smap", 883*895ab013SLaura Nao smapparents, CLK_CFG_17, CLK_CFG_17_SET, 884*895ab013SLaura Nao CLK_CFG_17_CLR, 8, 1, 885*895ab013SLaura Nao CLK_CFG_UPDATE2, TOP_MUX_SMAPCK_SHIFT), 886*895ab013SLaura Nao MUX_CLR_SET_UPD(CLK_TOP_SSR_PKA, "ssr_pka", 887*895ab013SLaura Nao ssr_parents, CLK_CFG_17, CLK_CFG_17_SET, 888*895ab013SLaura Nao CLK_CFG_17_CLR, 16, 3, 889*895ab013SLaura Nao CLK_CFG_UPDATE2, TOP_MUX_SSR_PKA_SHIFT), 890*895ab013SLaura Nao MUX_CLR_SET_UPD(CLK_TOP_SSR_DMA, "ssr_dma", 891*895ab013SLaura Nao ssr_parents, CLK_CFG_17, CLK_CFG_17_SET, 892*895ab013SLaura Nao CLK_CFG_17_CLR, 24, 3, 893*895ab013SLaura Nao CLK_CFG_UPDATE2, TOP_MUX_SSR_DMA_SHIFT), 894*895ab013SLaura Nao /* CLK_CFG_18 */ 895*895ab013SLaura Nao MUX_CLR_SET_UPD(CLK_TOP_SSR_KDF, "ssr_kdf", 896*895ab013SLaura Nao ssr_kdf_parents, CLK_CFG_18, CLK_CFG_18_SET, 897*895ab013SLaura Nao CLK_CFG_18_CLR, 0, 2, 898*895ab013SLaura Nao CLK_CFG_UPDATE2, TOP_MUX_SSR_KDF_SHIFT), 899*895ab013SLaura Nao MUX_CLR_SET_UPD(CLK_TOP_SSR_RNG, "ssr_rng", 900*895ab013SLaura Nao ssr_rng_parents, CLK_CFG_18, CLK_CFG_18_SET, 901*895ab013SLaura Nao CLK_CFG_18_CLR, 8, 2, 902*895ab013SLaura Nao CLK_CFG_UPDATE2, TOP_MUX_SSR_RNG_SHIFT), 903*895ab013SLaura Nao MUX_CLR_SET_UPD(CLK_TOP_SPU0, "spu0", 904*895ab013SLaura Nao spu_parents, CLK_CFG_18, CLK_CFG_18_SET, 905*895ab013SLaura Nao CLK_CFG_18_CLR, 16, 3, 906*895ab013SLaura Nao CLK_CFG_UPDATE2, TOP_MUX_SPU0_SHIFT), 907*895ab013SLaura Nao MUX_CLR_SET_UPD(CLK_TOP_SPU1, "spu1", 908*895ab013SLaura Nao spu_parents, CLK_CFG_18, CLK_CFG_18_SET, 909*895ab013SLaura Nao CLK_CFG_18_CLR, 24, 3, 910*895ab013SLaura Nao CLK_CFG_UPDATE2, TOP_MUX_SPU1_SHIFT), 911*895ab013SLaura Nao /* CLK_CFG_19 */ 912*895ab013SLaura Nao MUX_CLR_SET_UPD(CLK_TOP_DXCC, "dxcc", 913*895ab013SLaura Nao dxcc_parents, CLK_CFG_19, CLK_CFG_19_SET, 914*895ab013SLaura Nao CLK_CFG_19_CLR, 0, 2, 915*895ab013SLaura Nao CLK_CFG_UPDATE2, TOP_MUX_DXCC_SHIFT), 916*895ab013SLaura Nao }; 917*895ab013SLaura Nao 918*895ab013SLaura Nao static const struct mtk_composite top_aud_divs[] = { 919*895ab013SLaura Nao /* CLK_AUDDIV_2 */ 920*895ab013SLaura Nao MUX_DIV_GATE(CLK_TOP_APLL_I2SIN0, "apll_i2sin0_m", apll_m_parents, 921*895ab013SLaura Nao CLK_AUDDIV_0, 16, 1, CLK_AUDDIV_2, 0, 8, CLK_AUDDIV_0, 0), 922*895ab013SLaura Nao MUX_DIV_GATE(CLK_TOP_APLL_I2SIN1, "apll_i2sin1_m", apll_m_parents, 923*895ab013SLaura Nao CLK_AUDDIV_0, 17, 1, CLK_AUDDIV_2, 8, 8, CLK_AUDDIV_0, 1), 924*895ab013SLaura Nao MUX_DIV_GATE(CLK_TOP_APLL_I2SIN2, "apll_i2sin2_m", apll_m_parents, 925*895ab013SLaura Nao CLK_AUDDIV_0, 18, 1, CLK_AUDDIV_2, 16, 8, CLK_AUDDIV_0, 2), 926*895ab013SLaura Nao MUX_DIV_GATE(CLK_TOP_APLL_I2SIN3, "apll_i2sin3_m", apll_m_parents, 927*895ab013SLaura Nao CLK_AUDDIV_0, 19, 1, CLK_AUDDIV_2, 24, 8, CLK_AUDDIV_0, 3), 928*895ab013SLaura Nao /* CLK_AUDDIV_3 */ 929*895ab013SLaura Nao MUX_DIV_GATE(CLK_TOP_APLL_I2SIN4, "apll_i2sin4_m", apll_m_parents, 930*895ab013SLaura Nao CLK_AUDDIV_0, 20, 1, CLK_AUDDIV_3, 0, 8, CLK_AUDDIV_0, 4), 931*895ab013SLaura Nao MUX_DIV_GATE(CLK_TOP_APLL_I2SIN6, "apll_i2sin6_m", apll_m_parents, 932*895ab013SLaura Nao CLK_AUDDIV_0, 21, 1, CLK_AUDDIV_3, 8, 8, CLK_AUDDIV_0, 5), 933*895ab013SLaura Nao MUX_DIV_GATE(CLK_TOP_APLL_I2SOUT0, "apll_i2sout0_m", apll_m_parents, 934*895ab013SLaura Nao CLK_AUDDIV_0, 22, 1, CLK_AUDDIV_3, 16, 8, CLK_AUDDIV_0, 6), 935*895ab013SLaura Nao MUX_DIV_GATE(CLK_TOP_APLL_I2SOUT1, "apll_i2sout1_m", apll_m_parents, 936*895ab013SLaura Nao CLK_AUDDIV_0, 23, 1, CLK_AUDDIV_3, 24, 8, CLK_AUDDIV_0, 7), 937*895ab013SLaura Nao /* CLK_AUDDIV_4 */ 938*895ab013SLaura Nao MUX_DIV_GATE(CLK_TOP_APLL_I2SOUT2, "apll_i2sout2_m", apll_m_parents, 939*895ab013SLaura Nao CLK_AUDDIV_0, 24, 1, CLK_AUDDIV_4, 0, 8, CLK_AUDDIV_0, 8), 940*895ab013SLaura Nao MUX_DIV_GATE(CLK_TOP_APLL_I2SOUT3, "apll_i2sout3_m", apll_m_parents, 941*895ab013SLaura Nao CLK_AUDDIV_0, 25, 1, CLK_AUDDIV_4, 8, 8, CLK_AUDDIV_0, 9), 942*895ab013SLaura Nao MUX_DIV_GATE(CLK_TOP_APLL_I2SOUT4, "apll_i2sout4_m", apll_m_parents, 943*895ab013SLaura Nao CLK_AUDDIV_0, 26, 1, CLK_AUDDIV_4, 16, 8, CLK_AUDDIV_0, 10), 944*895ab013SLaura Nao MUX_DIV_GATE(CLK_TOP_APLL_I2SOUT6, "apll_i2sout6_m", apll_m_parents, 945*895ab013SLaura Nao CLK_AUDDIV_0, 27, 1, CLK_AUDDIV_4, 24, 8, CLK_AUDDIV_0, 11), 946*895ab013SLaura Nao /* CLK_AUDDIV_5 */ 947*895ab013SLaura Nao MUX_DIV_GATE(CLK_TOP_APLL_FMI2S, "apll_fmi2s_m", apll_m_parents, 948*895ab013SLaura Nao CLK_AUDDIV_0, 28, 1, CLK_AUDDIV_5, 0, 8, CLK_AUDDIV_0, 12), 949*895ab013SLaura Nao MUX(CLK_TOP_APLL_TDMOUT, "apll_tdmout_m", 950*895ab013SLaura Nao apll_m_parents, CLK_AUDDIV_0, 29, 1), 951*895ab013SLaura Nao DIV_GATE(CLK_TOP_APLL12_DIV_TDMOUT_M, "apll12_div_tdmout_m", 952*895ab013SLaura Nao "apll_tdmout_m", CLK_AUDDIV_0, 953*895ab013SLaura Nao 13, CLK_AUDDIV_5, 8, 8), 954*895ab013SLaura Nao DIV_GATE(CLK_TOP_APLL12_DIV_TDMOUT_B, "apll12_div_tdmout_b", 955*895ab013SLaura Nao "apll_tdmout_m", CLK_AUDDIV_0, 956*895ab013SLaura Nao 14, CLK_AUDDIV_5, 8, 16), 957*895ab013SLaura Nao }; 958*895ab013SLaura Nao 959*895ab013SLaura Nao static const struct mtk_clk_desc topck_desc = { 960*895ab013SLaura Nao .factor_clks = top_divs, 961*895ab013SLaura Nao .num_factor_clks = ARRAY_SIZE(top_divs), 962*895ab013SLaura Nao .mux_clks = top_muxes, 963*895ab013SLaura Nao .num_mux_clks = ARRAY_SIZE(top_muxes), 964*895ab013SLaura Nao .composite_clks = top_aud_divs, 965*895ab013SLaura Nao .num_composite_clks = ARRAY_SIZE(top_aud_divs) 966*895ab013SLaura Nao }; 967*895ab013SLaura Nao 968*895ab013SLaura Nao static const struct of_device_id of_match_clk_mt8196_ck[] = { 969*895ab013SLaura Nao { .compatible = "mediatek,mt8196-topckgen", .data = &topck_desc }, 970*895ab013SLaura Nao { /* sentinel */ } 971*895ab013SLaura Nao }; 972*895ab013SLaura Nao MODULE_DEVICE_TABLE(of, of_match_clk_mt8196_ck); 973*895ab013SLaura Nao 974*895ab013SLaura Nao static struct platform_driver clk_mt8196_topck_drv = { 975*895ab013SLaura Nao .probe = mtk_clk_simple_probe, 976*895ab013SLaura Nao .remove = mtk_clk_simple_remove, 977*895ab013SLaura Nao .driver = { 978*895ab013SLaura Nao .name = "clk-mt8196-topck", 979*895ab013SLaura Nao .of_match_table = of_match_clk_mt8196_ck, 980*895ab013SLaura Nao }, 981*895ab013SLaura Nao }; 982*895ab013SLaura Nao 983*895ab013SLaura Nao MODULE_DESCRIPTION("MediaTek MT8196 top clock generators driver"); 984*895ab013SLaura Nao module_platform_driver(clk_mt8196_topck_drv); 985*895ab013SLaura Nao MODULE_LICENSE("GPL"); 986