1 // SPDX-License-Identifier: GPL-2.0
3 * MediaTek clock driver for MT7629 SoC
5 * Copyright (C) 2018 MediaTek Inc.
6 * Author: Ryder Lee <ryder.lee@mediatek.com>
11 #include <asm/arch-mediatek/reset.h>
13 #include <dt-bindings/clock/mt7629-clk.h>
17 #define MT7629_CLKSQ_STB_CON0 0x20
18 #define MT7629_PLL_ISO_CON0 0x2c
19 #define MT7629_PLL_FMAX (2500UL * MHZ)
20 #define MT7629_CON0_RST_BAR BIT(24)
22 #define MCU_AXI_DIV 0x640
23 #define AXI_DIV_MSK GENMASK(4, 0)
24 #define AXI_DIV_SEL(x) (x)
26 #define MCU_BUS_MUX 0x7c0
27 #define MCU_BUS_MSK GENMASK(10, 9)
28 #define MCU_BUS_SEL(x) ((x) << 9)
31 #define PLL(_id, _reg, _pwr_reg, _en_mask, _flags, _pcwbits, _pd_reg, \
32 _pd_shift, _pcw_reg, _pcw_shift) { \
35 .pwr_reg = _pwr_reg, \
36 .en_mask = _en_mask, \
37 .rst_bar_mask = MT7629_CON0_RST_BAR, \
38 .fmax = MT7629_PLL_FMAX, \
40 .pcwbits = _pcwbits, \
42 .pd_shift = _pd_shift, \
43 .pcw_reg = _pcw_reg, \
44 .pcw_shift = _pcw_shift, \
47 static const struct mtk_pll_data apmixed_plls
[] = {
48 PLL(CLK_APMIXED_ARMPLL
, 0x200, 0x20c, 0x1, 0,
49 21, 0x204, 24, 0x204, 0),
50 PLL(CLK_APMIXED_MAINPLL
, 0x210, 0x21c, 0x1, HAVE_RST_BAR
,
51 21, 0x214, 24, 0x214, 0),
52 PLL(CLK_APMIXED_UNIV2PLL
, 0x220, 0x22c, 0x1, HAVE_RST_BAR
,
53 7, 0x224, 24, 0x224, 14),
54 PLL(CLK_APMIXED_ETH1PLL
, 0x300, 0x310, 0x1, 0,
55 21, 0x300, 1, 0x304, 0),
56 PLL(CLK_APMIXED_ETH2PLL
, 0x314, 0x320, 0x1, 0,
57 21, 0x314, 1, 0x318, 0),
58 PLL(CLK_APMIXED_SGMIPLL
, 0x358, 0x368, 0x1, 0,
59 21, 0x358, 1, 0x35c, 0),
63 #define FACTOR0(_id, _parent, _mult, _div) \
64 FACTOR(_id, _parent, _mult, _div, CLK_PARENT_APMIXED)
66 #define FACTOR1(_id, _parent, _mult, _div) \
67 FACTOR(_id, _parent, _mult, _div, CLK_PARENT_TOPCKGEN)
69 #define FACTOR2(_id, _parent, _mult, _div) \
70 FACTOR(_id, _parent, _mult, _div, 0)
72 static const struct mtk_fixed_clk top_fixed_clks
[] = {
73 FIXED_CLK(CLK_TOP_TO_U2_PHY
, CLK_XTAL
, 31250000),
74 FIXED_CLK(CLK_TOP_TO_U2_PHY_1P
, CLK_XTAL
, 31250000),
75 FIXED_CLK(CLK_TOP_PCIE0_PIPE_EN
, CLK_XTAL
, 125000000),
76 FIXED_CLK(CLK_TOP_PCIE1_PIPE_EN
, CLK_XTAL
, 125000000),
77 FIXED_CLK(CLK_TOP_SSUSB_TX250M
, CLK_XTAL
, 250000000),
78 FIXED_CLK(CLK_TOP_SSUSB_EQ_RX250M
, CLK_XTAL
, 250000000),
79 FIXED_CLK(CLK_TOP_SSUSB_CDR_REF
, CLK_XTAL
, 33333333),
80 FIXED_CLK(CLK_TOP_SSUSB_CDR_FB
, CLK_XTAL
, 50000000),
81 FIXED_CLK(CLK_TOP_SATA_ASIC
, CLK_XTAL
, 50000000),
82 FIXED_CLK(CLK_TOP_SATA_RBC
, CLK_XTAL
, 50000000),
85 static const struct mtk_fixed_factor top_fixed_divs
[] = {
86 FACTOR0(CLK_TOP_TO_USB3_SYS
, CLK_APMIXED_ETH1PLL
, 1, 4),
87 FACTOR0(CLK_TOP_P1_1MHZ
, CLK_APMIXED_ETH1PLL
, 1, 500),
88 FACTOR0(CLK_TOP_4MHZ
, CLK_APMIXED_ETH1PLL
, 1, 125),
89 FACTOR0(CLK_TOP_P0_1MHZ
, CLK_APMIXED_ETH1PLL
, 1, 500),
90 FACTOR0(CLK_TOP_ETH_500M
, CLK_APMIXED_ETH1PLL
, 1, 1),
91 FACTOR1(CLK_TOP_TXCLK_SRC_PRE
, CLK_TOP_SGMIIPLL_D2
, 1, 1),
92 FACTOR2(CLK_TOP_RTC
, CLK_XTAL
, 1, 1024),
93 FACTOR2(CLK_TOP_PWM_QTR_26M
, CLK_XTAL
, 1, 1),
94 FACTOR2(CLK_TOP_CPUM_TCK_IN
, CLK_XTAL
, 1, 1),
95 FACTOR2(CLK_TOP_TO_USB3_DA_TOP
, CLK_XTAL
, 1, 1),
96 FACTOR2(CLK_TOP_MEMPLL
, CLK_XTAL
, 32, 1),
97 FACTOR1(CLK_TOP_DMPLL
, CLK_TOP_MEMPLL
, 1, 1),
98 FACTOR1(CLK_TOP_DMPLL_D4
, CLK_TOP_MEMPLL
, 1, 4),
99 FACTOR1(CLK_TOP_DMPLL_D8
, CLK_TOP_MEMPLL
, 1, 8),
100 FACTOR0(CLK_TOP_SYSPLL_D2
, CLK_APMIXED_MAINPLL
, 1, 2),
101 FACTOR0(CLK_TOP_SYSPLL1_D2
, CLK_APMIXED_MAINPLL
, 1, 4),
102 FACTOR0(CLK_TOP_SYSPLL1_D4
, CLK_APMIXED_MAINPLL
, 1, 8),
103 FACTOR0(CLK_TOP_SYSPLL1_D8
, CLK_APMIXED_MAINPLL
, 1, 16),
104 FACTOR0(CLK_TOP_SYSPLL1_D16
, CLK_APMIXED_MAINPLL
, 1, 32),
105 FACTOR0(CLK_TOP_SYSPLL2_D2
, CLK_APMIXED_MAINPLL
, 1, 6),
106 FACTOR0(CLK_TOP_SYSPLL2_D4
, CLK_APMIXED_MAINPLL
, 1, 12),
107 FACTOR0(CLK_TOP_SYSPLL2_D8
, CLK_APMIXED_MAINPLL
, 1, 24),
108 FACTOR0(CLK_TOP_SYSPLL_D5
, CLK_APMIXED_MAINPLL
, 1, 5),
109 FACTOR0(CLK_TOP_SYSPLL3_D2
, CLK_APMIXED_MAINPLL
, 1, 10),
110 FACTOR0(CLK_TOP_SYSPLL3_D4
, CLK_APMIXED_MAINPLL
, 1, 20),
111 FACTOR0(CLK_TOP_SYSPLL_D7
, CLK_APMIXED_MAINPLL
, 1, 7),
112 FACTOR0(CLK_TOP_SYSPLL4_D2
, CLK_APMIXED_MAINPLL
, 1, 14),
113 FACTOR0(CLK_TOP_SYSPLL4_D4
, CLK_APMIXED_MAINPLL
, 1, 28),
114 FACTOR0(CLK_TOP_SYSPLL4_D16
, CLK_APMIXED_MAINPLL
, 1, 112),
115 FACTOR0(CLK_TOP_UNIVPLL
, CLK_APMIXED_UNIV2PLL
, 1, 2),
116 FACTOR1(CLK_TOP_UNIVPLL1_D2
, CLK_TOP_UNIVPLL
, 1, 4),
117 FACTOR1(CLK_TOP_UNIVPLL1_D4
, CLK_TOP_UNIVPLL
, 1, 8),
118 FACTOR1(CLK_TOP_UNIVPLL1_D8
, CLK_TOP_UNIVPLL
, 1, 16),
119 FACTOR1(CLK_TOP_UNIVPLL_D3
, CLK_TOP_UNIVPLL
, 1, 3),
120 FACTOR1(CLK_TOP_UNIVPLL2_D2
, CLK_TOP_UNIVPLL
, 1, 6),
121 FACTOR1(CLK_TOP_UNIVPLL2_D4
, CLK_TOP_UNIVPLL
, 1, 12),
122 FACTOR1(CLK_TOP_UNIVPLL2_D8
, CLK_TOP_UNIVPLL
, 1, 24),
123 FACTOR1(CLK_TOP_UNIVPLL2_D16
, CLK_TOP_UNIVPLL
, 1, 48),
124 FACTOR1(CLK_TOP_UNIVPLL_D5
, CLK_TOP_UNIVPLL
, 1, 5),
125 FACTOR1(CLK_TOP_UNIVPLL3_D2
, CLK_TOP_UNIVPLL
, 1, 10),
126 FACTOR1(CLK_TOP_UNIVPLL3_D4
, CLK_TOP_UNIVPLL
, 1, 20),
127 FACTOR1(CLK_TOP_UNIVPLL3_D16
, CLK_TOP_UNIVPLL
, 1, 80),
128 FACTOR1(CLK_TOP_UNIVPLL_D7
, CLK_TOP_UNIVPLL
, 1, 7),
129 FACTOR1(CLK_TOP_UNIVPLL_D80_D4
, CLK_TOP_UNIVPLL
, 1, 320),
130 FACTOR1(CLK_TOP_UNIV48M
, CLK_TOP_UNIVPLL
, 1, 25),
131 FACTOR0(CLK_TOP_SGMIIPLL_D2
, CLK_APMIXED_SGMIPLL
, 1, 2),
132 FACTOR2(CLK_TOP_CLKXTAL_D4
, CLK_XTAL
, 1, 4),
133 FACTOR1(CLK_TOP_HD_FAXI
, CLK_TOP_AXI_SEL
, 1, 1),
134 FACTOR1(CLK_TOP_FAXI
, CLK_TOP_AXI_SEL
, 1, 1),
135 FACTOR1(CLK_TOP_F_FAUD_INTBUS
, CLK_TOP_AUD_INTBUS_SEL
, 1, 1),
136 FACTOR1(CLK_TOP_AP2WBHIF_HCLK
, CLK_TOP_SYSPLL1_D8
, 1, 1),
137 FACTOR1(CLK_TOP_10M_INFRAO
, CLK_TOP_10M_SEL
, 1, 1),
138 FACTOR1(CLK_TOP_MSDC30_1
, CLK_TOP_MSDC30_1
, 1, 1),
139 FACTOR1(CLK_TOP_SPI
, CLK_TOP_SPI0_SEL
, 1, 1),
140 FACTOR1(CLK_TOP_SF
, CLK_TOP_NFI_INFRA_SEL
, 1, 1),
141 FACTOR1(CLK_TOP_FLASH
, CLK_TOP_FLASH_SEL
, 1, 1),
142 FACTOR1(CLK_TOP_TO_USB3_REF
, CLK_TOP_SATA_SEL
, 1, 4),
143 FACTOR1(CLK_TOP_TO_USB3_MCU
, CLK_TOP_AXI_SEL
, 1, 1),
144 FACTOR1(CLK_TOP_TO_USB3_DMA
, CLK_TOP_HIF_SEL
, 1, 1),
145 FACTOR1(CLK_TOP_FROM_TOP_AHB
, CLK_TOP_AXI_SEL
, 1, 1),
146 FACTOR1(CLK_TOP_FROM_TOP_AXI
, CLK_TOP_HIF_SEL
, 1, 1),
147 FACTOR1(CLK_TOP_PCIE1_MAC_EN
, CLK_TOP_UNIVPLL1_D4
, 1, 1),
148 FACTOR1(CLK_TOP_PCIE0_MAC_EN
, CLK_TOP_UNIVPLL1_D4
, 1, 1),
151 static const int axi_parents
[] = {
162 static const int mem_parents
[] = {
167 static const int ddrphycfg_parents
[] = {
172 static const int eth_parents
[] = {
183 static const int pwm_parents
[] = {
188 static const int f10m_ref_parents
[] = {
193 static const int nfi_infra_parents
[] = {
212 static const int flash_parents
[] = {
214 CLK_TOP_UNIVPLL_D80_D4
,
223 static const int uart_parents
[] = {
228 static const int spi0_parents
[] = {
239 static const int spi1_parents
[] = {
250 static const int msdc30_0_parents
[] = {
252 CLK_TOP_UNIVPLL2_D16
,
256 static const int msdc30_1_parents
[] = {
258 CLK_TOP_UNIVPLL2_D16
,
267 static const int ap2wbmcu_parents
[] = {
278 static const int audio_parents
[] = {
285 static const int aud_intbus_parents
[] = {
292 static const int pmicspi_parents
[] = {
303 static const int scp_parents
[] = {
310 static const int atb_parents
[] = {
316 static const int hif_parents
[] = {
326 static const int sata_parents
[] = {
331 static const int usb20_parents
[] = {
337 static const int aud1_parents
[] = {
341 static const int irrx_parents
[] = {
346 static const int crypto_parents
[] = {
357 static const int gpt10m_parents
[] = {
362 static const struct mtk_composite top_muxes
[] = {
364 MUX_GATE(CLK_TOP_AXI_SEL
, axi_parents
, 0x40, 0, 3, 7),
365 MUX_GATE(CLK_TOP_MEM_SEL
, mem_parents
, 0x40, 8, 1, 15),
366 MUX_GATE(CLK_TOP_DDRPHYCFG_SEL
, ddrphycfg_parents
, 0x40, 16, 1, 23),
367 MUX_GATE(CLK_TOP_ETH_SEL
, eth_parents
, 0x40, 24, 3, 31),
370 MUX_GATE(CLK_TOP_PWM_SEL
, pwm_parents
, 0x50, 0, 2, 7),
371 MUX_GATE(CLK_TOP_F10M_REF_SEL
, f10m_ref_parents
, 0x50, 8, 1, 15),
372 MUX_GATE(CLK_TOP_NFI_INFRA_SEL
, nfi_infra_parents
, 0x50, 16, 4, 23),
373 MUX_GATE(CLK_TOP_FLASH_SEL
, flash_parents
, 0x50, 24, 3, 31),
376 MUX_GATE(CLK_TOP_UART_SEL
, uart_parents
, 0x60, 0, 1, 7),
377 MUX_GATE(CLK_TOP_SPI0_SEL
, spi0_parents
, 0x60, 8, 3, 15),
378 MUX_GATE(CLK_TOP_SPI1_SEL
, spi1_parents
, 0x60, 16, 3, 23),
379 MUX_GATE(CLK_TOP_MSDC50_0_SEL
, uart_parents
, 0x60, 24, 3, 31),
382 MUX_GATE(CLK_TOP_MSDC30_0_SEL
, msdc30_0_parents
, 0x70, 0, 3, 7),
383 MUX_GATE(CLK_TOP_MSDC30_1_SEL
, msdc30_1_parents
, 0x70, 8, 3, 15),
384 MUX_GATE(CLK_TOP_AP2WBMCU_SEL
, ap2wbmcu_parents
, 0x70, 16, 3, 23),
385 MUX_GATE(CLK_TOP_AP2WBHIF_SEL
, ap2wbmcu_parents
, 0x70, 24, 3, 31),
388 MUX_GATE(CLK_TOP_AUDIO_SEL
, audio_parents
, 0x80, 0, 2, 7),
389 MUX_GATE(CLK_TOP_AUD_INTBUS_SEL
, aud_intbus_parents
, 0x80, 8, 2, 15),
390 MUX_GATE(CLK_TOP_PMICSPI_SEL
, pmicspi_parents
, 0x80, 16, 3, 23),
391 MUX_GATE(CLK_TOP_SCP_SEL
, scp_parents
, 0x80, 24, 2, 31),
394 MUX_GATE(CLK_TOP_ATB_SEL
, atb_parents
, 0x90, 0, 2, 7),
395 MUX_GATE_FLAGS(CLK_TOP_HIF_SEL
, hif_parents
, 0x90, 8, 3, 15,
397 MUX_GATE(CLK_TOP_SATA_SEL
, sata_parents
, 0x90, 16, 1, 23),
398 MUX_GATE(CLK_TOP_U2_SEL
, usb20_parents
, 0x90, 24, 2, 31),
401 MUX_GATE(CLK_TOP_AUD1_SEL
, aud1_parents
, 0xA0, 0, 1, 7),
402 MUX_GATE(CLK_TOP_AUD2_SEL
, aud1_parents
, 0xA0, 8, 1, 15),
403 MUX_GATE(CLK_TOP_IRRX_SEL
, irrx_parents
, 0xA0, 16, 1, 23),
404 MUX_GATE(CLK_TOP_IRTX_SEL
, irrx_parents
, 0xA0, 24, 1, 31),
407 MUX_GATE(CLK_TOP_SATA_MCU_SEL
, scp_parents
, 0xB0, 0, 2, 7),
408 MUX_GATE(CLK_TOP_PCIE0_MCU_SEL
, scp_parents
, 0xB0, 8, 2, 15),
409 MUX_GATE(CLK_TOP_PCIE1_MCU_SEL
, scp_parents
, 0xB0, 16, 2, 23),
410 MUX_GATE(CLK_TOP_SSUSB_MCU_SEL
, scp_parents
, 0xB0, 24, 2, 31),
413 MUX_GATE(CLK_TOP_CRYPTO_SEL
, crypto_parents
, 0xC0, 0, 3, 7),
414 MUX_GATE(CLK_TOP_SGMII_REF_1_SEL
, f10m_ref_parents
, 0xC0, 8, 1, 15),
415 MUX_GATE(CLK_TOP_10M_SEL
, gpt10m_parents
, 0xC0, 16, 1, 23),
419 static const struct mtk_gate_regs infra_cg_regs
= {
425 #define GATE_INFRA(_id, _parent, _shift) { \
428 .regs = &infra_cg_regs, \
430 .flags = CLK_GATE_SETCLR | CLK_PARENT_TOPCKGEN, \
433 static const struct mtk_gate infra_cgs
[] = {
434 GATE_INFRA(CLK_INFRA_DBGCLK_PD
, CLK_TOP_HD_FAXI
, 0),
435 GATE_INFRA(CLK_INFRA_TRNG_PD
, CLK_TOP_HD_FAXI
, 2),
436 GATE_INFRA(CLK_INFRA_DEVAPC_PD
, CLK_TOP_HD_FAXI
, 4),
437 GATE_INFRA(CLK_INFRA_APXGPT_PD
, CLK_TOP_10M_INFRAO
, 18),
438 GATE_INFRA(CLK_INFRA_SEJ_PD
, CLK_TOP_10M_INFRAO
, 19),
442 static const struct mtk_gate_regs peri0_cg_regs
= {
448 static const struct mtk_gate_regs peri1_cg_regs
= {
454 #define GATE_PERI0(_id, _parent, _shift) { \
457 .regs = &peri0_cg_regs, \
459 .flags = CLK_GATE_SETCLR | CLK_PARENT_TOPCKGEN, \
462 #define GATE_PERI1(_id, _parent, _shift) { \
465 .regs = &peri1_cg_regs, \
467 .flags = CLK_GATE_SETCLR | CLK_PARENT_TOPCKGEN, \
470 static const struct mtk_gate peri_cgs
[] = {
471 GATE_PERI0(CLK_PERI_PWM1_PD
, CLK_TOP_PWM_QTR_26M
, 2),
472 GATE_PERI0(CLK_PERI_PWM2_PD
, CLK_TOP_PWM_QTR_26M
, 3),
473 GATE_PERI0(CLK_PERI_PWM3_PD
, CLK_TOP_PWM_QTR_26M
, 4),
474 GATE_PERI0(CLK_PERI_PWM4_PD
, CLK_TOP_PWM_QTR_26M
, 5),
475 GATE_PERI0(CLK_PERI_PWM5_PD
, CLK_TOP_PWM_QTR_26M
, 6),
476 GATE_PERI0(CLK_PERI_PWM6_PD
, CLK_TOP_PWM_QTR_26M
, 7),
477 GATE_PERI0(CLK_PERI_PWM7_PD
, CLK_TOP_PWM_QTR_26M
, 8),
478 GATE_PERI0(CLK_PERI_PWM_PD
, CLK_TOP_PWM_QTR_26M
, 9),
479 GATE_PERI0(CLK_PERI_AP_DMA_PD
, CLK_TOP_FAXI
, 12),
480 GATE_PERI0(CLK_PERI_MSDC30_1_PD
, CLK_TOP_MSDC30_1
, 14),
481 GATE_PERI0(CLK_PERI_UART0_PD
, CLK_TOP_FAXI
, 17),
482 GATE_PERI0(CLK_PERI_UART1_PD
, CLK_TOP_FAXI
, 18),
483 GATE_PERI0(CLK_PERI_UART2_PD
, CLK_TOP_FAXI
, 19),
484 GATE_PERI0(CLK_PERI_UART3_PD
, CLK_TOP_FAXI
, 20),
485 GATE_PERI0(CLK_PERI_BTIF_PD
, CLK_TOP_FAXI
, 22),
486 GATE_PERI0(CLK_PERI_I2C0_PD
, CLK_TOP_FAXI
, 23),
487 GATE_PERI0(CLK_PERI_SPI0_PD
, CLK_TOP_SPI
, 28),
488 GATE_PERI0(CLK_PERI_SNFI_PD
, CLK_TOP_SF
, 29),
489 GATE_PERI0(CLK_PERI_NFI_PD
, CLK_TOP_FAXI
, 30),
490 GATE_PERI0(CLK_PERI_NFIECC_PD
, CLK_TOP_FAXI
, 31),
491 GATE_PERI1(CLK_PERI_FLASH_PD
, CLK_TOP_FLASH
, 1),
495 static const struct mtk_gate_regs eth_cg_regs
= {
499 #define GATE_ETH(_id, _parent, _shift, _flag) { \
502 .regs = ð_cg_regs, \
504 .flags = CLK_GATE_NO_SETCLR_INV | (_flag), \
507 #define GATE_ETH0(_id, _parent, _shift) \
508 GATE_ETH(_id, _parent, _shift, CLK_PARENT_APMIXED)
510 #define GATE_ETH1(_id, _parent, _shift) \
511 GATE_ETH(_id, _parent, _shift, CLK_PARENT_TOPCKGEN)
513 static const struct mtk_gate eth_cgs
[] = {
514 GATE_ETH0(CLK_ETH_FE_EN
, CLK_APMIXED_ETH2PLL
, 6),
515 GATE_ETH1(CLK_ETH_GP2_EN
, CLK_TOP_TXCLK_SRC_PRE
, 7),
516 GATE_ETH1(CLK_ETH_GP1_EN
, CLK_TOP_TXCLK_SRC_PRE
, 8),
517 GATE_ETH1(CLK_ETH_GP0_EN
, CLK_TOP_TXCLK_SRC_PRE
, 9),
518 GATE_ETH1(CLK_ETH_ESW_EN
, CLK_TOP_ETH_500M
, 16),
521 static const struct mtk_gate_regs sgmii_cg_regs
= {
527 #define GATE_SGMII(_id, _parent, _shift) { \
530 .regs = &sgmii_cg_regs, \
532 .flags = CLK_GATE_NO_SETCLR_INV | CLK_PARENT_TOPCKGEN, \
535 static const struct mtk_gate sgmii_cgs
[] = {
536 GATE_SGMII(CLK_SGMII_TX_EN
, CLK_TOP_SSUSB_TX250M
, 2),
537 GATE_SGMII(CLK_SGMII_RX_EN
, CLK_TOP_SSUSB_EQ_RX250M
, 3),
538 GATE_SGMII(CLK_SGMII_CDR_REF
, CLK_TOP_SSUSB_CDR_REF
, 4),
539 GATE_SGMII(CLK_SGMII_CDR_FB
, CLK_TOP_SSUSB_CDR_FB
, 5),
542 static const struct mtk_clk_tree mt7629_clk_tree
= {
543 .xtal_rate
= 40 * MHZ
,
544 .xtal2_rate
= 20 * MHZ
,
545 .fdivs_offs
= CLK_TOP_TO_USB3_SYS
,
546 .muxes_offs
= CLK_TOP_AXI_SEL
,
547 .plls
= apmixed_plls
,
548 .fclks
= top_fixed_clks
,
549 .fdivs
= top_fixed_divs
,
553 static int mt7629_mcucfg_probe(struct udevice
*dev
)
557 base
= dev_read_addr_ptr(dev
);
561 clrsetbits_le32(base
+ MCU_AXI_DIV
, AXI_DIV_MSK
,
563 clrsetbits_le32(base
+ MCU_BUS_MUX
, MCU_BUS_MSK
,
569 static int mt7629_apmixedsys_probe(struct udevice
*dev
)
571 struct mtk_clk_priv
*priv
= dev_get_priv(dev
);
574 ret
= mtk_common_clk_init(dev
, &mt7629_clk_tree
);
578 /* reduce clock square disable time */
579 writel(0x501, priv
->base
+ MT7629_CLKSQ_STB_CON0
);
580 /* extend pwr/iso control timing to 1us */
581 writel(0x80008, priv
->base
+ MT7629_PLL_ISO_CON0
);
586 static int mt7629_topckgen_probe(struct udevice
*dev
)
588 return mtk_common_clk_init(dev
, &mt7629_clk_tree
);
591 static int mt7629_infracfg_probe(struct udevice
*dev
)
593 return mtk_common_clk_gate_init(dev
, &mt7629_clk_tree
, infra_cgs
);
596 static int mt7629_pericfg_probe(struct udevice
*dev
)
598 return mtk_common_clk_gate_init(dev
, &mt7629_clk_tree
, peri_cgs
);
601 static int mt7629_ethsys_probe(struct udevice
*dev
)
603 return mtk_common_clk_gate_init(dev
, &mt7629_clk_tree
, eth_cgs
);
606 static int mt7629_ethsys_bind(struct udevice
*dev
)
610 #if CONFIG_IS_ENABLED(RESET_MEDIATEK)
611 ret
= mediatek_reset_bind(dev
, ETHSYS_HIFSYS_RST_CTRL_OFS
, 1);
613 debug("Warning: failed to bind reset controller\n");
619 static int mt7629_sgmiisys_probe(struct udevice
*dev
)
621 return mtk_common_clk_gate_init(dev
, &mt7629_clk_tree
, sgmii_cgs
);
624 static const struct udevice_id mt7629_apmixed_compat
[] = {
625 { .compatible
= "mediatek,mt7629-apmixedsys" },
629 static const struct udevice_id mt7629_topckgen_compat
[] = {
630 { .compatible
= "mediatek,mt7629-topckgen" },
634 static const struct udevice_id mt7629_infracfg_compat
[] = {
635 { .compatible
= "mediatek,mt7629-infracfg", },
639 static const struct udevice_id mt7629_pericfg_compat
[] = {
640 { .compatible
= "mediatek,mt7629-pericfg", },
644 static const struct udevice_id mt7629_ethsys_compat
[] = {
645 { .compatible
= "mediatek,mt7629-ethsys", },
649 static const struct udevice_id mt7629_sgmiisys_compat
[] = {
650 { .compatible
= "mediatek,mt7629-sgmiisys", },
654 static const struct udevice_id mt7629_mcucfg_compat
[] = {
655 { .compatible
= "mediatek,mt7629-mcucfg" },
659 U_BOOT_DRIVER(mtk_mcucfg
) = {
660 .name
= "mt7629-mcucfg",
662 .of_match
= mt7629_mcucfg_compat
,
663 .probe
= mt7629_mcucfg_probe
,
664 .flags
= DM_FLAG_PRE_RELOC
,
667 U_BOOT_DRIVER(mtk_clk_apmixedsys
) = {
668 .name
= "mt7629-clock-apmixedsys",
670 .of_match
= mt7629_apmixed_compat
,
671 .probe
= mt7629_apmixedsys_probe
,
672 .priv_auto_alloc_size
= sizeof(struct mtk_clk_priv
),
673 .ops
= &mtk_clk_apmixedsys_ops
,
674 .flags
= DM_FLAG_PRE_RELOC
,
677 U_BOOT_DRIVER(mtk_clk_topckgen
) = {
678 .name
= "mt7629-clock-topckgen",
680 .of_match
= mt7629_topckgen_compat
,
681 .probe
= mt7629_topckgen_probe
,
682 .priv_auto_alloc_size
= sizeof(struct mtk_clk_priv
),
683 .ops
= &mtk_clk_topckgen_ops
,
684 .flags
= DM_FLAG_PRE_RELOC
,
687 U_BOOT_DRIVER(mtk_clk_infracfg
) = {
688 .name
= "mt7629-clock-infracfg",
690 .of_match
= mt7629_infracfg_compat
,
691 .probe
= mt7629_infracfg_probe
,
692 .priv_auto_alloc_size
= sizeof(struct mtk_cg_priv
),
693 .ops
= &mtk_clk_gate_ops
,
694 .flags
= DM_FLAG_PRE_RELOC
,
697 U_BOOT_DRIVER(mtk_clk_pericfg
) = {
698 .name
= "mt7629-clock-pericfg",
700 .of_match
= mt7629_pericfg_compat
,
701 .probe
= mt7629_pericfg_probe
,
702 .priv_auto_alloc_size
= sizeof(struct mtk_cg_priv
),
703 .ops
= &mtk_clk_gate_ops
,
704 .flags
= DM_FLAG_PRE_RELOC
,
707 U_BOOT_DRIVER(mtk_clk_ethsys
) = {
708 .name
= "mt7629-clock-ethsys",
710 .of_match
= mt7629_ethsys_compat
,
711 .probe
= mt7629_ethsys_probe
,
712 .bind
= mt7629_ethsys_bind
,
713 .priv_auto_alloc_size
= sizeof(struct mtk_cg_priv
),
714 .ops
= &mtk_clk_gate_ops
,
717 U_BOOT_DRIVER(mtk_clk_sgmiisys
) = {
718 .name
= "mt7629-clock-sgmiisys",
720 .of_match
= mt7629_sgmiisys_compat
,
721 .probe
= mt7629_sgmiisys_probe
,
722 .priv_auto_alloc_size
= sizeof(struct mtk_cg_priv
),
723 .ops
= &mtk_clk_gate_ops
,