blob: 73fd9c6bea66bbb4d9481d60bd15c169bfadb6ee [file] [log] [blame]
developerd27e3022023-07-19 17:16:28 +08001// SPDX-License-Identifier: GPL-2.0
2/*
3 * MediaTek clock driver for MT7988 SoC
4 *
5 * Copyright (C) 2022 MediaTek Inc.
6 * Author: Sam Shih <sam.shih@mediatek.com>
7 */
8
9#include <dm.h>
10#include <log.h>
11#include <asm/arch-mediatek/reset.h>
12#include <asm/io.h>
13#include <dt-bindings/clock/mt7988-clk.h>
14#include <linux/bitops.h>
15
16#include "clk-mtk.h"
17
18#define MT7988_CLK_PDN 0x250
19#define MT7988_CLK_PDN_EN_WRITE BIT(31)
20
21#define MT7988_ETHDMA_RST_CTRL_OFS 0x34
22#define MT7988_ETHWARP_RST_CTRL_OFS 0x8
23
24#define XTAL_FACTOR(_id, _name, _parent, _mult, _div) \
25 FACTOR(_id, _parent, _mult, _div, CLK_PARENT_XTAL)
26
27#define PLL_FACTOR(_id, _name, _parent, _mult, _div) \
28 FACTOR(_id, _parent, _mult, _div, CLK_PARENT_APMIXED)
29
30#define TOP_FACTOR(_id, _name, _parent, _mult, _div) \
31 FACTOR(_id, _parent, _mult, _div, CLK_PARENT_TOPCKGEN)
32
33#define INFRA_FACTOR(_id, _name, _parent, _mult, _div) \
34 FACTOR(_id, _parent, _mult, _div, CLK_PARENT_INFRASYS)
35
36/* FIXED PLLS */
37static const struct mtk_fixed_clk apmixedsys_mtk_plls[] = {
Christian Marangie4bfc442024-08-03 10:33:02 +020038 FIXED_CLK(CLK_APMIXED_NETSYSPLL, CLK_XTAL, 850000000),
39 FIXED_CLK(CLK_APMIXED_MPLL, CLK_XTAL, 416000000),
40 FIXED_CLK(CLK_APMIXED_MMPLL, CLK_XTAL, 720000000),
41 FIXED_CLK(CLK_APMIXED_APLL2, CLK_XTAL, 196608000),
42 FIXED_CLK(CLK_APMIXED_NET1PLL, CLK_XTAL, 2500000000),
43 FIXED_CLK(CLK_APMIXED_NET2PLL, CLK_XTAL, 800000000),
44 FIXED_CLK(CLK_APMIXED_WEDMCUPLL, CLK_XTAL, 208000000),
45 FIXED_CLK(CLK_APMIXED_SGMPLL, CLK_XTAL, 325000000),
46 FIXED_CLK(CLK_APMIXED_ARM_B, CLK_XTAL, 1500000000),
47 FIXED_CLK(CLK_APMIXED_CCIPLL2_B, CLK_XTAL, 960000000),
48 FIXED_CLK(CLK_APMIXED_USXGMIIPLL, CLK_XTAL, 644533000),
49 FIXED_CLK(CLK_APMIXED_MSDCPLL, CLK_XTAL, 400000000),
developerd27e3022023-07-19 17:16:28 +080050};
51
Christian Marangi245c8502024-08-03 10:32:58 +020052/* TOPCKGEN FIXED CLK */
53static const struct mtk_fixed_clk topckgen_mtk_fixed_clks[] = {
Christian Marangie4bfc442024-08-03 10:33:02 +020054 FIXED_CLK(CLK_TOP_XTAL, CLK_XTAL, 40000000),
Christian Marangi245c8502024-08-03 10:32:58 +020055};
56
developerd27e3022023-07-19 17:16:28 +080057/* TOPCKGEN FIXED DIV */
58static const struct mtk_fixed_factor topckgen_mtk_fixed_factors[] = {
Christian Marangie4bfc442024-08-03 10:33:02 +020059 TOP_FACTOR(CLK_TOP_XTAL_D2, "xtal_d2", CLK_TOP_XTAL, 1, 2),
60 TOP_FACTOR(CLK_TOP_RTC_32K, "rtc_32k", CLK_TOP_XTAL, 1,
developerd27e3022023-07-19 17:16:28 +080061 1250),
Christian Marangie4bfc442024-08-03 10:33:02 +020062 TOP_FACTOR(CLK_TOP_RTC_32P7K, "rtc_32p7k", CLK_TOP_XTAL, 1,
developerd27e3022023-07-19 17:16:28 +080063 1220),
Christian Marangie4bfc442024-08-03 10:33:02 +020064 PLL_FACTOR(CLK_TOP_MPLL_D2, "mpll_d2", CLK_APMIXED_MPLL, 1, 2),
65 PLL_FACTOR(CLK_TOP_MPLL_D3_D2, "mpll_d3_d2", CLK_APMIXED_MPLL, 1, 2),
66 PLL_FACTOR(CLK_TOP_MPLL_D4, "mpll_d4", CLK_APMIXED_MPLL, 1, 4),
67 PLL_FACTOR(CLK_TOP_MPLL_D8, "mpll_d8", CLK_APMIXED_MPLL, 1, 8),
68 PLL_FACTOR(CLK_TOP_MPLL_D8_D2, "mpll_d8_d2", CLK_APMIXED_MPLL, 1, 16),
69 PLL_FACTOR(CLK_TOP_MMPLL_D2, "mmpll_d2", CLK_APMIXED_MMPLL, 1, 2),
70 PLL_FACTOR(CLK_TOP_MMPLL_D3_D5, "mmpll_d3_d5", CLK_APMIXED_MMPLL, 1, 15),
71 PLL_FACTOR(CLK_TOP_MMPLL_D4, "mmpll_d4", CLK_APMIXED_MMPLL, 1, 4),
72 PLL_FACTOR(CLK_TOP_MMPLL_D6_D2, "mmpll_d6_d2", CLK_APMIXED_MMPLL, 1, 12),
73 PLL_FACTOR(CLK_TOP_MMPLL_D8, "mmpll_d8", CLK_APMIXED_MMPLL, 1, 8),
74 PLL_FACTOR(CLK_TOP_APLL2_D4, "apll2_d4", CLK_APMIXED_APLL2, 1, 4),
75 PLL_FACTOR(CLK_TOP_NET1PLL_D4, "net1pll_d4", CLK_APMIXED_NET1PLL, 1, 4),
76 PLL_FACTOR(CLK_TOP_NET1PLL_D5, "net1pll_d5", CLK_APMIXED_NET1PLL, 1, 5),
77 PLL_FACTOR(CLK_TOP_NET1PLL_D5_D2, "net1pll_d5_d2", CLK_APMIXED_NET1PLL, 1, 10),
78 PLL_FACTOR(CLK_TOP_NET1PLL_D5_D4, "net1pll_d5_d4", CLK_APMIXED_NET1PLL, 1, 20),
79 PLL_FACTOR(CLK_TOP_NET1PLL_D8, "net1pll_d8", CLK_APMIXED_NET1PLL, 1, 8),
80 PLL_FACTOR(CLK_TOP_NET1PLL_D8_D2, "net1pll_d8_d2", CLK_APMIXED_NET1PLL, 1, 16),
81 PLL_FACTOR(CLK_TOP_NET1PLL_D8_D4, "net1pll_d8_d4", CLK_APMIXED_NET1PLL, 1, 32),
82 PLL_FACTOR(CLK_TOP_NET1PLL_D8_D8, "net1pll_d8_d8", CLK_APMIXED_NET1PLL, 1, 64),
83 PLL_FACTOR(CLK_TOP_NET1PLL_D8_D16, "net1pll_d8_d16", CLK_APMIXED_NET1PLL, 1,
Christian Marangiecf47ee2024-08-03 10:32:57 +020084 128),
Christian Marangie4bfc442024-08-03 10:33:02 +020085 PLL_FACTOR(CLK_TOP_NET2PLL_D2, "net2pll_d2", CLK_APMIXED_NET2PLL, 1, 2),
86 PLL_FACTOR(CLK_TOP_NET2PLL_D4, "net2pll_d4", CLK_APMIXED_NET2PLL, 1, 4),
87 PLL_FACTOR(CLK_TOP_NET2PLL_D4_D4, "net2pll_d4_d4", CLK_APMIXED_NET2PLL, 1, 16),
88 PLL_FACTOR(CLK_TOP_NET2PLL_D4_D8, "net2pll_d4_d8", CLK_APMIXED_NET2PLL, 1, 32),
89 PLL_FACTOR(CLK_TOP_NET2PLL_D6, "net2pll_d6", CLK_APMIXED_NET2PLL, 1, 6),
90 PLL_FACTOR(CLK_TOP_NET2PLL_D8, "net2pll_d8", CLK_APMIXED_NET2PLL, 1, 8),
developerd27e3022023-07-19 17:16:28 +080091};
92
93/* TOPCKGEN MUX PARENTS */
Christian Marangi245c8502024-08-03 10:32:58 +020094#define APMIXED_PARENT(_id) PARENT(_id, CLK_PARENT_APMIXED)
95#define TOP_PARENT(_id) PARENT(_id, CLK_PARENT_TOPCKGEN)
developerd27e3022023-07-19 17:16:28 +080096
Christian Marangi245c8502024-08-03 10:32:58 +020097static const struct mtk_parent netsys_parents[] = {
Christian Marangie4bfc442024-08-03 10:33:02 +020098 TOP_PARENT(CLK_TOP_XTAL), TOP_PARENT(CLK_TOP_NET2PLL_D2),
99 TOP_PARENT(CLK_TOP_MMPLL_D2),
Christian Marangi245c8502024-08-03 10:32:58 +0200100};
developerd27e3022023-07-19 17:16:28 +0800101
Christian Marangi245c8502024-08-03 10:32:58 +0200102static const struct mtk_parent netsys_500m_parents[] = {
Christian Marangie4bfc442024-08-03 10:33:02 +0200103 TOP_PARENT(CLK_TOP_XTAL), TOP_PARENT(CLK_TOP_NET1PLL_D5),
104 TOP_PARENT(CLK_TOP_NET1PLL_D5_D2),
Christian Marangi245c8502024-08-03 10:32:58 +0200105};
developerd27e3022023-07-19 17:16:28 +0800106
Christian Marangi245c8502024-08-03 10:32:58 +0200107static const struct mtk_parent netsys_2x_parents[] = {
Christian Marangie4bfc442024-08-03 10:33:02 +0200108 TOP_PARENT(CLK_TOP_XTAL), APMIXED_PARENT(CLK_APMIXED_NET2PLL),
109 APMIXED_PARENT(CLK_APMIXED_MMPLL),
Christian Marangi245c8502024-08-03 10:32:58 +0200110};
developerd27e3022023-07-19 17:16:28 +0800111
Christian Marangi245c8502024-08-03 10:32:58 +0200112static const struct mtk_parent netsys_gsw_parents[] = {
Christian Marangie4bfc442024-08-03 10:33:02 +0200113 TOP_PARENT(CLK_TOP_XTAL), TOP_PARENT(CLK_TOP_NET1PLL_D4),
114 TOP_PARENT(CLK_TOP_NET1PLL_D5),
Christian Marangi245c8502024-08-03 10:32:58 +0200115};
developerd27e3022023-07-19 17:16:28 +0800116
Christian Marangi245c8502024-08-03 10:32:58 +0200117static const struct mtk_parent eth_gmii_parents[] = {
Christian Marangie4bfc442024-08-03 10:33:02 +0200118 TOP_PARENT(CLK_TOP_XTAL), TOP_PARENT(CLK_TOP_NET1PLL_D5_D4),
developerd27e3022023-07-19 17:16:28 +0800119};
120
Christian Marangi245c8502024-08-03 10:32:58 +0200121static const struct mtk_parent netsys_mcu_parents[] = {
Christian Marangie4bfc442024-08-03 10:33:02 +0200122 TOP_PARENT(CLK_TOP_XTAL), APMIXED_PARENT(CLK_APMIXED_NET2PLL),
123 APMIXED_PARENT(CLK_APMIXED_MMPLL), TOP_PARENT(CLK_TOP_NET1PLL_D4),
124 TOP_PARENT(CLK_TOP_NET1PLL_D5), APMIXED_PARENT(CLK_APMIXED_MPLL),
developerd27e3022023-07-19 17:16:28 +0800125};
126
Christian Marangi245c8502024-08-03 10:32:58 +0200127static const struct mtk_parent eip197_parents[] = {
Christian Marangie4bfc442024-08-03 10:33:02 +0200128 TOP_PARENT(CLK_TOP_XTAL), APMIXED_PARENT(CLK_APMIXED_NETSYSPLL),
129 APMIXED_PARENT(CLK_APMIXED_NET2PLL), APMIXED_PARENT(CLK_APMIXED_MMPLL),
130 TOP_PARENT(CLK_TOP_NET1PLL_D4), TOP_PARENT(CLK_TOP_NET1PLL_D5),
Christian Marangi245c8502024-08-03 10:32:58 +0200131};
developerd27e3022023-07-19 17:16:28 +0800132
Christian Marangi245c8502024-08-03 10:32:58 +0200133static const struct mtk_parent axi_infra_parents[] = {
Christian Marangie4bfc442024-08-03 10:33:02 +0200134 TOP_PARENT(CLK_TOP_XTAL), TOP_PARENT(CLK_TOP_NET1PLL_D8_D2),
Christian Marangi245c8502024-08-03 10:32:58 +0200135};
developerd27e3022023-07-19 17:16:28 +0800136
Christian Marangi245c8502024-08-03 10:32:58 +0200137static const struct mtk_parent uart_parents[] = {
Christian Marangie4bfc442024-08-03 10:33:02 +0200138 TOP_PARENT(CLK_TOP_XTAL), TOP_PARENT(CLK_TOP_MPLL_D8),
139 TOP_PARENT(CLK_TOP_MPLL_D8_D2),
Christian Marangi245c8502024-08-03 10:32:58 +0200140};
developerd27e3022023-07-19 17:16:28 +0800141
Christian Marangi245c8502024-08-03 10:32:58 +0200142static const struct mtk_parent emmc_250m_parents[] = {
Christian Marangie4bfc442024-08-03 10:33:02 +0200143 TOP_PARENT(CLK_TOP_XTAL), TOP_PARENT(CLK_TOP_NET1PLL_D5_D2),
144 TOP_PARENT(CLK_TOP_MMPLL_D4),
developerd27e3022023-07-19 17:16:28 +0800145};
146
Christian Marangi245c8502024-08-03 10:32:58 +0200147static const struct mtk_parent emmc_400m_parents[] = {
Christian Marangie4bfc442024-08-03 10:33:02 +0200148 TOP_PARENT(CLK_TOP_XTAL), APMIXED_PARENT(CLK_APMIXED_MSDCPLL),
149 TOP_PARENT(CLK_TOP_MMPLL_D2), TOP_PARENT(CLK_TOP_MPLL_D2),
150 TOP_PARENT(CLK_TOP_MMPLL_D4), TOP_PARENT(CLK_TOP_NET1PLL_D8_D2),
Christian Marangi245c8502024-08-03 10:32:58 +0200151};
developerd27e3022023-07-19 17:16:28 +0800152
Christian Marangi245c8502024-08-03 10:32:58 +0200153static const struct mtk_parent spi_parents[] = {
Christian Marangie4bfc442024-08-03 10:33:02 +0200154 TOP_PARENT(CLK_TOP_XTAL), TOP_PARENT(CLK_TOP_MPLL_D2),
155 TOP_PARENT(CLK_TOP_MMPLL_D4), TOP_PARENT(CLK_TOP_NET1PLL_D8_D2),
156 TOP_PARENT(CLK_TOP_NET2PLL_D6), TOP_PARENT(CLK_TOP_NET1PLL_D5_D4),
157 TOP_PARENT(CLK_TOP_MPLL_D4), TOP_PARENT(CLK_TOP_NET1PLL_D8_D4),
Christian Marangi245c8502024-08-03 10:32:58 +0200158};
developerd27e3022023-07-19 17:16:28 +0800159
Christian Marangi245c8502024-08-03 10:32:58 +0200160static const struct mtk_parent nfi1x_parents[] = {
Christian Marangie4bfc442024-08-03 10:33:02 +0200161 TOP_PARENT(CLK_TOP_XTAL), TOP_PARENT(CLK_TOP_MMPLL_D4),
162 TOP_PARENT(CLK_TOP_NET1PLL_D8_D2), TOP_PARENT(CLK_TOP_NET2PLL_D6),
163 TOP_PARENT(CLK_TOP_MPLL_D4), TOP_PARENT(CLK_TOP_MMPLL_D8),
164 TOP_PARENT(CLK_TOP_NET1PLL_D8_D4), TOP_PARENT(CLK_TOP_MPLL_D8),
Christian Marangi245c8502024-08-03 10:32:58 +0200165};
developerd27e3022023-07-19 17:16:28 +0800166
Christian Marangi245c8502024-08-03 10:32:58 +0200167static const struct mtk_parent spinfi_parents[] = {
Christian Marangie4bfc442024-08-03 10:33:02 +0200168 TOP_PARENT(CLK_TOP_XTAL_D2), TOP_PARENT(CLK_TOP_XTAL),
169 TOP_PARENT(CLK_TOP_NET1PLL_D5_D4), TOP_PARENT(CLK_TOP_MPLL_D4),
170 TOP_PARENT(CLK_TOP_MMPLL_D8), TOP_PARENT(CLK_TOP_NET1PLL_D8_D4),
171 TOP_PARENT(CLK_TOP_MMPLL_D6_D2), TOP_PARENT(CLK_TOP_MPLL_D8),
Christian Marangi245c8502024-08-03 10:32:58 +0200172};
developerd27e3022023-07-19 17:16:28 +0800173
Christian Marangi245c8502024-08-03 10:32:58 +0200174static const struct mtk_parent pwm_parents[] = {
Christian Marangie4bfc442024-08-03 10:33:02 +0200175 TOP_PARENT(CLK_TOP_XTAL), TOP_PARENT(CLK_TOP_NET1PLL_D8_D2),
176 TOP_PARENT(CLK_TOP_NET1PLL_D5_D4), TOP_PARENT(CLK_TOP_MPLL_D4),
177 TOP_PARENT(CLK_TOP_MPLL_D8_D2), TOP_PARENT(CLK_TOP_RTC_32K),
Christian Marangi245c8502024-08-03 10:32:58 +0200178};
developerd27e3022023-07-19 17:16:28 +0800179
Christian Marangi245c8502024-08-03 10:32:58 +0200180static const struct mtk_parent i2c_parents[] = {
Christian Marangie4bfc442024-08-03 10:33:02 +0200181 TOP_PARENT(CLK_TOP_XTAL), TOP_PARENT(CLK_TOP_NET1PLL_D5_D4),
182 TOP_PARENT(CLK_TOP_MPLL_D4), TOP_PARENT(CLK_TOP_NET1PLL_D8_D4),
Christian Marangi245c8502024-08-03 10:32:58 +0200183};
developerd27e3022023-07-19 17:16:28 +0800184
Christian Marangi245c8502024-08-03 10:32:58 +0200185static const struct mtk_parent pcie_mbist_250m_parents[] = {
Christian Marangie4bfc442024-08-03 10:33:02 +0200186 TOP_PARENT(CLK_TOP_XTAL), TOP_PARENT(CLK_TOP_NET1PLL_D5_D2),
Christian Marangi245c8502024-08-03 10:32:58 +0200187};
188
189static const struct mtk_parent pextp_tl_ck_parents[] = {
Christian Marangie4bfc442024-08-03 10:33:02 +0200190 TOP_PARENT(CLK_TOP_XTAL), TOP_PARENT(CLK_TOP_NET2PLL_D6),
191 TOP_PARENT(CLK_TOP_MMPLL_D8), TOP_PARENT(CLK_TOP_MPLL_D8_D2),
192 TOP_PARENT(CLK_TOP_RTC_32K),
Christian Marangi245c8502024-08-03 10:32:58 +0200193};
developerd27e3022023-07-19 17:16:28 +0800194
Christian Marangi245c8502024-08-03 10:32:58 +0200195static const struct mtk_parent usb_frmcnt_parents[] = {
Christian Marangie4bfc442024-08-03 10:33:02 +0200196 TOP_PARENT(CLK_TOP_XTAL), TOP_PARENT(CLK_TOP_MMPLL_D3_D5),
Christian Marangi245c8502024-08-03 10:32:58 +0200197};
developerd27e3022023-07-19 17:16:28 +0800198
Christian Marangi245c8502024-08-03 10:32:58 +0200199static const struct mtk_parent aud_parents[] = {
Christian Marangie4bfc442024-08-03 10:33:02 +0200200 TOP_PARENT(CLK_TOP_XTAL), APMIXED_PARENT(CLK_APMIXED_APLL2),
Christian Marangi245c8502024-08-03 10:32:58 +0200201};
developerd27e3022023-07-19 17:16:28 +0800202
Christian Marangi245c8502024-08-03 10:32:58 +0200203static const struct mtk_parent a1sys_parents[] = {
Christian Marangie4bfc442024-08-03 10:33:02 +0200204 TOP_PARENT(CLK_TOP_XTAL), TOP_PARENT(CLK_TOP_APLL2_D4),
Christian Marangi245c8502024-08-03 10:32:58 +0200205};
developerd27e3022023-07-19 17:16:28 +0800206
Christian Marangi245c8502024-08-03 10:32:58 +0200207static const struct mtk_parent aud_l_parents[] = {
Christian Marangie4bfc442024-08-03 10:33:02 +0200208 TOP_PARENT(CLK_TOP_XTAL), APMIXED_PARENT(CLK_APMIXED_APLL2),
209 TOP_PARENT(CLK_TOP_MPLL_D8_D2),
Christian Marangi245c8502024-08-03 10:32:58 +0200210};
developerd27e3022023-07-19 17:16:28 +0800211
Christian Marangi245c8502024-08-03 10:32:58 +0200212static const struct mtk_parent sspxtp_parents[] = {
Christian Marangie4bfc442024-08-03 10:33:02 +0200213 TOP_PARENT(CLK_TOP_XTAL_D2), TOP_PARENT(CLK_TOP_MPLL_D8_D2),
Christian Marangi245c8502024-08-03 10:32:58 +0200214};
developerd27e3022023-07-19 17:16:28 +0800215
Christian Marangi245c8502024-08-03 10:32:58 +0200216static const struct mtk_parent usxgmii_sbus_0_parents[] = {
Christian Marangie4bfc442024-08-03 10:33:02 +0200217 TOP_PARENT(CLK_TOP_XTAL), TOP_PARENT(CLK_TOP_NET1PLL_D8_D4),
Christian Marangi245c8502024-08-03 10:32:58 +0200218};
developerd27e3022023-07-19 17:16:28 +0800219
Christian Marangi245c8502024-08-03 10:32:58 +0200220static const struct mtk_parent sgm_0_parents[] = {
Christian Marangie4bfc442024-08-03 10:33:02 +0200221 TOP_PARENT(CLK_TOP_XTAL), APMIXED_PARENT(CLK_APMIXED_SGMPLL),
Christian Marangi245c8502024-08-03 10:32:58 +0200222};
developerd27e3022023-07-19 17:16:28 +0800223
Christian Marangi245c8502024-08-03 10:32:58 +0200224static const struct mtk_parent sysapb_parents[] = {
Christian Marangie4bfc442024-08-03 10:33:02 +0200225 TOP_PARENT(CLK_TOP_XTAL), TOP_PARENT(CLK_TOP_MPLL_D3_D2),
Christian Marangi245c8502024-08-03 10:32:58 +0200226};
developerd27e3022023-07-19 17:16:28 +0800227
Christian Marangi245c8502024-08-03 10:32:58 +0200228static const struct mtk_parent eth_refck_50m_parents[] = {
Christian Marangie4bfc442024-08-03 10:33:02 +0200229 TOP_PARENT(CLK_TOP_XTAL), TOP_PARENT(CLK_TOP_NET2PLL_D4_D4),
Christian Marangi245c8502024-08-03 10:32:58 +0200230};
developerd27e3022023-07-19 17:16:28 +0800231
Christian Marangi245c8502024-08-03 10:32:58 +0200232static const struct mtk_parent eth_sys_200m_parents[] = {
Christian Marangie4bfc442024-08-03 10:33:02 +0200233 TOP_PARENT(CLK_TOP_XTAL), TOP_PARENT(CLK_TOP_NET2PLL_D4),
Christian Marangi245c8502024-08-03 10:32:58 +0200234};
developerd27e3022023-07-19 17:16:28 +0800235
Christian Marangi245c8502024-08-03 10:32:58 +0200236static const struct mtk_parent eth_xgmii_parents[] = {
Christian Marangie4bfc442024-08-03 10:33:02 +0200237 TOP_PARENT(CLK_TOP_XTAL_D2), TOP_PARENT(CLK_TOP_NET1PLL_D8_D8),
238 TOP_PARENT(CLK_TOP_NET1PLL_D8_D16),
Christian Marangi245c8502024-08-03 10:32:58 +0200239};
developerd27e3022023-07-19 17:16:28 +0800240
Christian Marangi245c8502024-08-03 10:32:58 +0200241static const struct mtk_parent bus_tops_parents[] = {
Christian Marangie4bfc442024-08-03 10:33:02 +0200242 TOP_PARENT(CLK_TOP_XTAL), TOP_PARENT(CLK_TOP_NET1PLL_D5),
243 TOP_PARENT(CLK_TOP_NET2PLL_D2),
Christian Marangi245c8502024-08-03 10:32:58 +0200244};
developerd27e3022023-07-19 17:16:28 +0800245
Christian Marangi245c8502024-08-03 10:32:58 +0200246static const struct mtk_parent npu_tops_parents[] = {
Christian Marangie4bfc442024-08-03 10:33:02 +0200247 TOP_PARENT(CLK_TOP_XTAL), APMIXED_PARENT(CLK_APMIXED_NET2PLL),
Christian Marangi245c8502024-08-03 10:32:58 +0200248};
developerd27e3022023-07-19 17:16:28 +0800249
Christian Marangi245c8502024-08-03 10:32:58 +0200250static const struct mtk_parent dramc_md32_parents[] = {
Christian Marangie4bfc442024-08-03 10:33:02 +0200251 TOP_PARENT(CLK_TOP_XTAL), TOP_PARENT(CLK_TOP_MPLL_D2),
252 APMIXED_PARENT(CLK_APMIXED_WEDMCUPLL),
Christian Marangi245c8502024-08-03 10:32:58 +0200253};
developerd27e3022023-07-19 17:16:28 +0800254
Christian Marangi245c8502024-08-03 10:32:58 +0200255static const struct mtk_parent da_xtp_glb_p0_parents[] = {
Christian Marangie4bfc442024-08-03 10:33:02 +0200256 TOP_PARENT(CLK_TOP_XTAL), TOP_PARENT(CLK_TOP_NET2PLL_D8),
Christian Marangi245c8502024-08-03 10:32:58 +0200257};
developerd27e3022023-07-19 17:16:28 +0800258
Christian Marangi245c8502024-08-03 10:32:58 +0200259static const struct mtk_parent mcusys_backup_625m_parents[] = {
Christian Marangie4bfc442024-08-03 10:33:02 +0200260 TOP_PARENT(CLK_TOP_XTAL), TOP_PARENT(CLK_TOP_NET1PLL_D4),
Christian Marangi245c8502024-08-03 10:32:58 +0200261};
developerd27e3022023-07-19 17:16:28 +0800262
Christian Marangi245c8502024-08-03 10:32:58 +0200263static const struct mtk_parent macsec_parents[] = {
Christian Marangie4bfc442024-08-03 10:33:02 +0200264 TOP_PARENT(CLK_TOP_XTAL), APMIXED_PARENT(CLK_APMIXED_SGMPLL),
265 TOP_PARENT(CLK_TOP_NET1PLL_D8),
Christian Marangi245c8502024-08-03 10:32:58 +0200266};
developerd27e3022023-07-19 17:16:28 +0800267
Christian Marangi245c8502024-08-03 10:32:58 +0200268static const struct mtk_parent netsys_tops_400m_parents[] = {
Christian Marangie4bfc442024-08-03 10:33:02 +0200269 TOP_PARENT(CLK_TOP_XTAL), TOP_PARENT(CLK_TOP_NET2PLL_D2),
Christian Marangi245c8502024-08-03 10:32:58 +0200270};
developerd27e3022023-07-19 17:16:28 +0800271
Christian Marangi245c8502024-08-03 10:32:58 +0200272static const struct mtk_parent eth_mii_parents[] = {
Christian Marangie4bfc442024-08-03 10:33:02 +0200273 TOP_PARENT(CLK_TOP_XTAL_D2), TOP_PARENT(CLK_TOP_NET2PLL_D4_D8),
Christian Marangi245c8502024-08-03 10:32:58 +0200274};
developerd27e3022023-07-19 17:16:28 +0800275
276#define TOP_MUX(_id, _name, _parents, _mux_ofs, _mux_set_ofs, _mux_clr_ofs, \
277 _shift, _width, _gate, _upd_ofs, _upd) \
278 { \
279 .id = _id, .mux_reg = _mux_ofs, .mux_set_reg = _mux_set_ofs, \
280 .mux_clr_reg = _mux_clr_ofs, .upd_reg = _upd_ofs, \
281 .upd_shift = _upd, .mux_shift = _shift, \
282 .mux_mask = BIT(_width) - 1, .gate_reg = _mux_ofs, \
Christian Marangi245c8502024-08-03 10:32:58 +0200283 .gate_shift = _gate, .parent_flags = _parents, \
developerd27e3022023-07-19 17:16:28 +0800284 .num_parents = ARRAY_SIZE(_parents), \
Christian Marangi245c8502024-08-03 10:32:58 +0200285 .flags = CLK_MUX_SETCLR_UPD | CLK_PARENT_MIXED, \
developerd27e3022023-07-19 17:16:28 +0800286 }
287
288/* TOPCKGEN MUX_GATE */
289static const struct mtk_composite topckgen_mtk_muxes[] = {
Christian Marangie4bfc442024-08-03 10:33:02 +0200290 TOP_MUX(CLK_TOP_NETSYS_SEL, "netsys_sel", netsys_parents, 0x0, 0x4, 0x8,
developerd27e3022023-07-19 17:16:28 +0800291 0, 2, 7, 0x1c0, 0),
Christian Marangie4bfc442024-08-03 10:33:02 +0200292 TOP_MUX(CLK_TOP_NETSYS_500M_SEL, "netsys_500m_sel", netsys_500m_parents,
developerd27e3022023-07-19 17:16:28 +0800293 0x0, 0x4, 0x8, 8, 2, 15, 0x1c0, 1),
Christian Marangie4bfc442024-08-03 10:33:02 +0200294 TOP_MUX(CLK_TOP_NETSYS_2X_SEL, "netsys_2x_sel", netsys_2x_parents, 0x0,
developerd27e3022023-07-19 17:16:28 +0800295 0x4, 0x8, 16, 2, 23, 0x1c0, 2),
Christian Marangie4bfc442024-08-03 10:33:02 +0200296 TOP_MUX(CLK_TOP_NETSYS_GSW_SEL, "netsys_gsw_sel", netsys_gsw_parents,
developerd27e3022023-07-19 17:16:28 +0800297 0x0, 0x4, 0x8, 24, 2, 31, 0x1c0, 3),
Christian Marangie4bfc442024-08-03 10:33:02 +0200298 TOP_MUX(CLK_TOP_ETH_GMII_SEL, "eth_gmii_sel", eth_gmii_parents, 0x10,
developerd27e3022023-07-19 17:16:28 +0800299 0x14, 0x18, 0, 1, 7, 0x1c0, 4),
Christian Marangie4bfc442024-08-03 10:33:02 +0200300 TOP_MUX(CLK_TOP_NETSYS_MCU_SEL, "netsys_mcu_sel", netsys_mcu_parents,
developerd27e3022023-07-19 17:16:28 +0800301 0x10, 0x14, 0x18, 8, 3, 15, 0x1c0, 5),
Christian Marangie4bfc442024-08-03 10:33:02 +0200302 TOP_MUX(CLK_TOP_NETSYS_PAO_2X_SEL, "netsys_pao_2x_sel",
developerd27e3022023-07-19 17:16:28 +0800303 netsys_mcu_parents, 0x10, 0x14, 0x18, 16, 3, 23, 0x1c0, 6),
Christian Marangie4bfc442024-08-03 10:33:02 +0200304 TOP_MUX(CLK_TOP_EIP197_SEL, "eip197_sel", eip197_parents, 0x10, 0x14,
developerd27e3022023-07-19 17:16:28 +0800305 0x18, 24, 3, 31, 0x1c0, 7),
Christian Marangie4bfc442024-08-03 10:33:02 +0200306 TOP_MUX(CLK_TOP_AXI_INFRA_SEL, "axi_infra_sel", axi_infra_parents, 0x20,
developerd27e3022023-07-19 17:16:28 +0800307 0x24, 0x28, 0, 1, 7, 0x1c0, 8),
Christian Marangie4bfc442024-08-03 10:33:02 +0200308 TOP_MUX(CLK_TOP_UART_SEL, "uart_sel", uart_parents, 0x20, 0x24, 0x28, 8,
developerd27e3022023-07-19 17:16:28 +0800309 2, 15, 0x1c0, 9),
Christian Marangie4bfc442024-08-03 10:33:02 +0200310 TOP_MUX(CLK_TOP_EMMC_250M_SEL, "emmc_250m_sel", emmc_250m_parents, 0x20,
developerd27e3022023-07-19 17:16:28 +0800311 0x24, 0x28, 16, 2, 23, 0x1c0, 10),
Christian Marangie4bfc442024-08-03 10:33:02 +0200312 TOP_MUX(CLK_TOP_EMMC_400M_SEL, "emmc_400m_sel", emmc_400m_parents, 0x20,
developerd27e3022023-07-19 17:16:28 +0800313 0x24, 0x28, 24, 3, 31, 0x1c0, 11),
Christian Marangie4bfc442024-08-03 10:33:02 +0200314 TOP_MUX(CLK_TOP_SPI_SEL, "spi_sel", spi_parents, 0x30, 0x34, 0x38, 0, 3,
developerd27e3022023-07-19 17:16:28 +0800315 7, 0x1c0, 12),
Christian Marangie4bfc442024-08-03 10:33:02 +0200316 TOP_MUX(CLK_TOP_SPIM_MST_SEL, "spim_mst_sel", spi_parents, 0x30, 0x34,
developerd27e3022023-07-19 17:16:28 +0800317 0x38, 8, 3, 15, 0x1c0, 13),
Christian Marangie4bfc442024-08-03 10:33:02 +0200318 TOP_MUX(CLK_TOP_NFI1X_SEL, "nfi1x_sel", nfi1x_parents, 0x30, 0x34, 0x38,
developerd27e3022023-07-19 17:16:28 +0800319 16, 3, 23, 0x1c0, 14),
Christian Marangie4bfc442024-08-03 10:33:02 +0200320 TOP_MUX(CLK_TOP_SPINFI_SEL, "spinfi_sel", spinfi_parents, 0x30, 0x34,
developerd27e3022023-07-19 17:16:28 +0800321 0x38, 24, 3, 31, 0x1c0, 15),
Christian Marangie4bfc442024-08-03 10:33:02 +0200322 TOP_MUX(CLK_TOP_PWM_SEL, "pwm_sel", pwm_parents, 0x40, 0x44, 0x48, 0, 3,
developerd27e3022023-07-19 17:16:28 +0800323 7, 0x1c0, 16),
Christian Marangie4bfc442024-08-03 10:33:02 +0200324 TOP_MUX(CLK_TOP_I2C_SEL, "i2c_sel", i2c_parents, 0x40, 0x44, 0x48, 8, 2,
developerd27e3022023-07-19 17:16:28 +0800325 15, 0x1c0, 17),
Christian Marangie4bfc442024-08-03 10:33:02 +0200326 TOP_MUX(CLK_TOP_PCIE_MBIST_250M_SEL, "pcie_mbist_250m_sel",
developerd27e3022023-07-19 17:16:28 +0800327 pcie_mbist_250m_parents, 0x40, 0x44, 0x48, 16, 1, 23, 0x1c0,
328 18),
Christian Marangie4bfc442024-08-03 10:33:02 +0200329 TOP_MUX(CLK_TOP_PEXTP_TL_SEL, "pextp_tl_ck_sel", pextp_tl_ck_parents,
developerd27e3022023-07-19 17:16:28 +0800330 0x40, 0x44, 0x48, 24, 3, 31, 0x1c0, 19),
Christian Marangie4bfc442024-08-03 10:33:02 +0200331 TOP_MUX(CLK_TOP_PEXTP_TL_P1_SEL, "pextp_tl_ck_p1_sel",
developerd27e3022023-07-19 17:16:28 +0800332 pextp_tl_ck_parents, 0x50, 0x54, 0x58, 0, 3, 7, 0x1c0, 20),
Christian Marangie4bfc442024-08-03 10:33:02 +0200333 TOP_MUX(CLK_TOP_PEXTP_TL_P2_SEL, "pextp_tl_ck_p2_sel",
developerd27e3022023-07-19 17:16:28 +0800334 pextp_tl_ck_parents, 0x50, 0x54, 0x58, 8, 3, 15, 0x1c0, 21),
Christian Marangie4bfc442024-08-03 10:33:02 +0200335 TOP_MUX(CLK_TOP_PEXTP_TL_P3_SEL, "pextp_tl_ck_p3_sel",
developerd27e3022023-07-19 17:16:28 +0800336 pextp_tl_ck_parents, 0x50, 0x54, 0x58, 16, 3, 23, 0x1c0, 22),
Christian Marangie4bfc442024-08-03 10:33:02 +0200337 TOP_MUX(CLK_TOP_USB_SYS_SEL, "usb_sys_sel", eth_gmii_parents, 0x50, 0x54,
developerd27e3022023-07-19 17:16:28 +0800338 0x58, 24, 1, 31, 0x1c0, 23),
Christian Marangie4bfc442024-08-03 10:33:02 +0200339 TOP_MUX(CLK_TOP_USB_SYS_P1_SEL, "usb_sys_p1_sel", eth_gmii_parents, 0x60,
developerd27e3022023-07-19 17:16:28 +0800340 0x64, 0x68, 0, 1, 7, 0x1c0, 24),
Christian Marangie4bfc442024-08-03 10:33:02 +0200341 TOP_MUX(CLK_TOP_USB_XHCI_SEL, "usb_xhci_sel", eth_gmii_parents, 0x60,
developerd27e3022023-07-19 17:16:28 +0800342 0x64, 0x68, 8, 1, 15, 0x1c0, 25),
Christian Marangie4bfc442024-08-03 10:33:02 +0200343 TOP_MUX(CLK_TOP_USB_XHCI_P1_SEL, "usb_xhci_p1_sel", eth_gmii_parents,
developerd27e3022023-07-19 17:16:28 +0800344 0x60, 0x64, 0x68, 16, 1, 23, 0x1c0, 26),
Christian Marangie4bfc442024-08-03 10:33:02 +0200345 TOP_MUX(CLK_TOP_USB_FRMCNT_SEL, "usb_frmcnt_sel", usb_frmcnt_parents,
developerd27e3022023-07-19 17:16:28 +0800346 0x60, 0x64, 0x68, 24, 1, 31, 0x1c0, 27),
Christian Marangie4bfc442024-08-03 10:33:02 +0200347 TOP_MUX(CLK_TOP_USB_FRMCNT_P1_SEL, "usb_frmcnt_p1_sel",
developerd27e3022023-07-19 17:16:28 +0800348 usb_frmcnt_parents, 0x70, 0x74, 0x78, 0, 1, 7, 0x1c0, 28),
Christian Marangie4bfc442024-08-03 10:33:02 +0200349 TOP_MUX(CLK_TOP_AUD_SEL, "aud_sel", aud_parents, 0x70, 0x74, 0x78, 8, 1,
developerd27e3022023-07-19 17:16:28 +0800350 15, 0x1c0, 29),
Christian Marangie4bfc442024-08-03 10:33:02 +0200351 TOP_MUX(CLK_TOP_A1SYS_SEL, "a1sys_sel", a1sys_parents, 0x70, 0x74, 0x78,
developerd27e3022023-07-19 17:16:28 +0800352 16, 1, 23, 0x1c0, 30),
Christian Marangie4bfc442024-08-03 10:33:02 +0200353 TOP_MUX(CLK_TOP_AUD_L_SEL, "aud_l_sel", aud_l_parents, 0x70, 0x74, 0x78,
developerd27e3022023-07-19 17:16:28 +0800354 24, 2, 31, 0x1c4, 0),
Christian Marangie4bfc442024-08-03 10:33:02 +0200355 TOP_MUX(CLK_TOP_A_TUNER_SEL, "a_tuner_sel", a1sys_parents, 0x80, 0x84,
developerd27e3022023-07-19 17:16:28 +0800356 0x88, 0, 1, 7, 0x1c4, 1),
Christian Marangie4bfc442024-08-03 10:33:02 +0200357 TOP_MUX(CLK_TOP_SSPXTP_SEL, "sspxtp_sel", sspxtp_parents, 0x80, 0x84,
developerd27e3022023-07-19 17:16:28 +0800358 0x88, 8, 1, 15, 0x1c4, 2),
Christian Marangie4bfc442024-08-03 10:33:02 +0200359 TOP_MUX(CLK_TOP_USB_PHY_SEL, "usb_phy_sel", sspxtp_parents, 0x80, 0x84,
developerd27e3022023-07-19 17:16:28 +0800360 0x88, 16, 1, 23, 0x1c4, 3),
Christian Marangie4bfc442024-08-03 10:33:02 +0200361 TOP_MUX(CLK_TOP_USXGMII_SBUS_0_SEL, "usxgmii_sbus_0_sel",
developerd27e3022023-07-19 17:16:28 +0800362 usxgmii_sbus_0_parents, 0x80, 0x84, 0x88, 24, 1, 31, 0x1c4, 4),
Christian Marangie4bfc442024-08-03 10:33:02 +0200363 TOP_MUX(CLK_TOP_USXGMII_SBUS_1_SEL, "usxgmii_sbus_1_sel",
developerd27e3022023-07-19 17:16:28 +0800364 usxgmii_sbus_0_parents, 0x90, 0x94, 0x98, 0, 1, 7, 0x1c4, 5),
Christian Marangie4bfc442024-08-03 10:33:02 +0200365 TOP_MUX(CLK_TOP_SGM_0_SEL, "sgm_0_sel", sgm_0_parents, 0x90, 0x94, 0x98,
developerd27e3022023-07-19 17:16:28 +0800366 8, 1, 15, 0x1c4, 6),
Christian Marangie4bfc442024-08-03 10:33:02 +0200367 TOP_MUX(CLK_TOP_SGM_SBUS_0_SEL, "sgm_sbus_0_sel", usxgmii_sbus_0_parents,
developerd27e3022023-07-19 17:16:28 +0800368 0x90, 0x94, 0x98, 16, 1, 23, 0x1c4, 7),
Christian Marangie4bfc442024-08-03 10:33:02 +0200369 TOP_MUX(CLK_TOP_SGM_1_SEL, "sgm_1_sel", sgm_0_parents, 0x90, 0x94, 0x98,
developerd27e3022023-07-19 17:16:28 +0800370 24, 1, 31, 0x1c4, 8),
Christian Marangie4bfc442024-08-03 10:33:02 +0200371 TOP_MUX(CLK_TOP_SGM_SBUS_1_SEL, "sgm_sbus_1_sel", usxgmii_sbus_0_parents,
developerd27e3022023-07-19 17:16:28 +0800372 0xa0, 0xa4, 0xa8, 0, 1, 7, 0x1c4, 9),
Christian Marangie4bfc442024-08-03 10:33:02 +0200373 TOP_MUX(CLK_TOP_XFI_PHY_0_XTAL_SEL, "xfi_phy_0_xtal_sel", sspxtp_parents,
developerd27e3022023-07-19 17:16:28 +0800374 0xa0, 0xa4, 0xa8, 8, 1, 15, 0x1c4, 10),
Christian Marangie4bfc442024-08-03 10:33:02 +0200375 TOP_MUX(CLK_TOP_XFI_PHY_1_XTAL_SEL, "xfi_phy_1_xtal_sel", sspxtp_parents,
developerd27e3022023-07-19 17:16:28 +0800376 0xa0, 0xa4, 0xa8, 16, 1, 23, 0x1c4, 11),
Christian Marangie4bfc442024-08-03 10:33:02 +0200377 TOP_MUX(CLK_TOP_SYSAXI_SEL, "sysaxi_sel", axi_infra_parents, 0xa0, 0xa4,
developerd27e3022023-07-19 17:16:28 +0800378 0xa8, 24, 1, 31, 0x1c4, 12),
Christian Marangie4bfc442024-08-03 10:33:02 +0200379 TOP_MUX(CLK_TOP_SYSAPB_SEL, "sysapb_sel", sysapb_parents, 0xb0, 0xb4,
developerd27e3022023-07-19 17:16:28 +0800380 0xb8, 0, 1, 7, 0x1c4, 13),
Christian Marangie4bfc442024-08-03 10:33:02 +0200381 TOP_MUX(CLK_TOP_ETH_REFCK_50M_SEL, "eth_refck_50m_sel",
developerd27e3022023-07-19 17:16:28 +0800382 eth_refck_50m_parents, 0xb0, 0xb4, 0xb8, 8, 1, 15, 0x1c4, 14),
Christian Marangie4bfc442024-08-03 10:33:02 +0200383 TOP_MUX(CLK_TOP_ETH_SYS_200M_SEL, "eth_sys_200m_sel",
developerd27e3022023-07-19 17:16:28 +0800384 eth_sys_200m_parents, 0xb0, 0xb4, 0xb8, 16, 1, 23, 0x1c4, 15),
Christian Marangie4bfc442024-08-03 10:33:02 +0200385 TOP_MUX(CLK_TOP_ETH_SYS_SEL, "eth_sys_sel", pcie_mbist_250m_parents,
developerd27e3022023-07-19 17:16:28 +0800386 0xb0, 0xb4, 0xb8, 24, 1, 31, 0x1c4, 16),
Christian Marangie4bfc442024-08-03 10:33:02 +0200387 TOP_MUX(CLK_TOP_ETH_XGMII_SEL, "eth_xgmii_sel", eth_xgmii_parents, 0xc0,
developerd27e3022023-07-19 17:16:28 +0800388 0xc4, 0xc8, 0, 2, 7, 0x1c4, 17),
Christian Marangie4bfc442024-08-03 10:33:02 +0200389 TOP_MUX(CLK_TOP_BUS_TOPS_SEL, "bus_tops_sel", bus_tops_parents, 0xc0,
developerd27e3022023-07-19 17:16:28 +0800390 0xc4, 0xc8, 8, 2, 15, 0x1c4, 18),
Christian Marangie4bfc442024-08-03 10:33:02 +0200391 TOP_MUX(CLK_TOP_NPU_TOPS_SEL, "npu_tops_sel", npu_tops_parents, 0xc0,
developerd27e3022023-07-19 17:16:28 +0800392 0xc4, 0xc8, 16, 1, 23, 0x1c4, 19),
Christian Marangie4bfc442024-08-03 10:33:02 +0200393 TOP_MUX(CLK_TOP_DRAMC_SEL, "dramc_sel", sspxtp_parents, 0xc0, 0xc4, 0xc8,
developerd27e3022023-07-19 17:16:28 +0800394 24, 1, 31, 0x1c4, 20),
Christian Marangie4bfc442024-08-03 10:33:02 +0200395 TOP_MUX(CLK_TOP_DRAMC_MD32_SEL, "dramc_md32_sel", dramc_md32_parents,
developerd27e3022023-07-19 17:16:28 +0800396 0xd0, 0xd4, 0xd8, 0, 2, 7, 0x1c4, 21),
Christian Marangie4bfc442024-08-03 10:33:02 +0200397 TOP_MUX(CLK_TOP_INFRA_F26M_SEL, "csw_infra_f26m_sel", sspxtp_parents,
developerd27e3022023-07-19 17:16:28 +0800398 0xd0, 0xd4, 0xd8, 8, 1, 15, 0x1c4, 22),
Christian Marangie4bfc442024-08-03 10:33:02 +0200399 TOP_MUX(CLK_TOP_PEXTP_P0_SEL, "pextp_p0_sel", sspxtp_parents, 0xd0, 0xd4,
developerd27e3022023-07-19 17:16:28 +0800400 0xd8, 16, 1, 23, 0x1c4, 23),
Christian Marangie4bfc442024-08-03 10:33:02 +0200401 TOP_MUX(CLK_TOP_PEXTP_P1_SEL, "pextp_p1_sel", sspxtp_parents, 0xd0, 0xd4,
developerd27e3022023-07-19 17:16:28 +0800402 0xd8, 24, 1, 31, 0x1c4, 24),
Christian Marangie4bfc442024-08-03 10:33:02 +0200403 TOP_MUX(CLK_TOP_PEXTP_P2_SEL, "pextp_p2_sel", sspxtp_parents, 0xe0, 0xe4,
developerd27e3022023-07-19 17:16:28 +0800404 0xe8, 0, 1, 7, 0x1c4, 25),
Christian Marangie4bfc442024-08-03 10:33:02 +0200405 TOP_MUX(CLK_TOP_PEXTP_P3_SEL, "pextp_p3_sel", sspxtp_parents, 0xe0, 0xe4,
developerd27e3022023-07-19 17:16:28 +0800406 0xe8, 8, 1, 15, 0x1c4, 26),
Christian Marangie4bfc442024-08-03 10:33:02 +0200407 TOP_MUX(CLK_TOP_DA_XTP_GLB_P0_SEL, "da_xtp_glb_p0_sel",
developerd27e3022023-07-19 17:16:28 +0800408 da_xtp_glb_p0_parents, 0xe0, 0xe4, 0xe8, 16, 1, 23, 0x1c4, 27),
Christian Marangie4bfc442024-08-03 10:33:02 +0200409 TOP_MUX(CLK_TOP_DA_XTP_GLB_P1_SEL, "da_xtp_glb_p1_sel",
developerd27e3022023-07-19 17:16:28 +0800410 da_xtp_glb_p0_parents, 0xe0, 0xe4, 0xe8, 24, 1, 31, 0x1c4, 28),
Christian Marangie4bfc442024-08-03 10:33:02 +0200411 TOP_MUX(CLK_TOP_DA_XTP_GLB_P2_SEL, "da_xtp_glb_p2_sel",
developerd27e3022023-07-19 17:16:28 +0800412 da_xtp_glb_p0_parents, 0xf0, 0xf4, 0xf8, 0, 1, 7, 0x1c4, 29),
Christian Marangie4bfc442024-08-03 10:33:02 +0200413 TOP_MUX(CLK_TOP_DA_XTP_GLB_P3_SEL, "da_xtp_glb_p3_sel",
developerd27e3022023-07-19 17:16:28 +0800414 da_xtp_glb_p0_parents, 0xf0, 0xf4, 0xf8, 8, 1, 15, 0x1c4, 30),
Christian Marangie4bfc442024-08-03 10:33:02 +0200415 TOP_MUX(CLK_TOP_CKM_SEL, "ckm_sel", sspxtp_parents, 0xf0, 0xf4, 0xf8, 16,
developerd27e3022023-07-19 17:16:28 +0800416 1, 23, 0x1c8, 0),
Christian Marangie4bfc442024-08-03 10:33:02 +0200417 TOP_MUX(CLK_TOP_DA_SEL, "da_sel", sspxtp_parents,
developerd27e3022023-07-19 17:16:28 +0800418 0xf0, 0xf4, 0xf8, 24, 1, 31, 0x1c8, 1),
Christian Marangie4bfc442024-08-03 10:33:02 +0200419 TOP_MUX(CLK_TOP_PEXTP_SEL, "pextp_sel", sspxtp_parents, 0x100, 0x104,
developerd27e3022023-07-19 17:16:28 +0800420 0x108, 0, 1, 7, 0x1c8, 2),
Christian Marangie4bfc442024-08-03 10:33:02 +0200421 TOP_MUX(CLK_TOP_TOPS_P2_26M_SEL, "tops_p2_26m_sel", sspxtp_parents,
developerd27e3022023-07-19 17:16:28 +0800422 0x100, 0x104, 0x108, 8, 1, 15, 0x1c8, 3),
Christian Marangie4bfc442024-08-03 10:33:02 +0200423 TOP_MUX(CLK_TOP_MCUSYS_BACKUP_625M_SEL, "mcusys_backup_625m_sel",
developerd27e3022023-07-19 17:16:28 +0800424 mcusys_backup_625m_parents, 0x100, 0x104, 0x108, 16, 1, 23,
425 0x1c8, 4),
Christian Marangie4bfc442024-08-03 10:33:02 +0200426 TOP_MUX(CLK_TOP_NETSYS_SYNC_250M_SEL, "netsys_sync_250m_sel",
developerd27e3022023-07-19 17:16:28 +0800427 pcie_mbist_250m_parents, 0x100, 0x104, 0x108, 24, 1, 31, 0x1c8,
428 5),
Christian Marangie4bfc442024-08-03 10:33:02 +0200429 TOP_MUX(CLK_TOP_MACSEC_SEL, "macsec_sel", macsec_parents, 0x110, 0x114,
developerd27e3022023-07-19 17:16:28 +0800430 0x118, 0, 2, 7, 0x1c8, 6),
Christian Marangie4bfc442024-08-03 10:33:02 +0200431 TOP_MUX(CLK_TOP_NETSYS_TOPS_400M_SEL, "netsys_tops_400m_sel",
developerd27e3022023-07-19 17:16:28 +0800432 netsys_tops_400m_parents, 0x110, 0x114, 0x118, 8, 1, 15, 0x1c8,
433 7),
Christian Marangie4bfc442024-08-03 10:33:02 +0200434 TOP_MUX(CLK_TOP_NETSYS_PPEFB_250M_SEL, "netsys_ppefb_250m_sel",
developerd27e3022023-07-19 17:16:28 +0800435 pcie_mbist_250m_parents, 0x110, 0x114, 0x118, 16, 1, 23, 0x1c8,
436 8),
Christian Marangie4bfc442024-08-03 10:33:02 +0200437 TOP_MUX(CLK_TOP_NETSYS_WARP_SEL, "netsys_warp_sel", netsys_parents,
developerd27e3022023-07-19 17:16:28 +0800438 0x110, 0x114, 0x118, 24, 2, 31, 0x1c8, 9),
Christian Marangie4bfc442024-08-03 10:33:02 +0200439 TOP_MUX(CLK_TOP_ETH_MII_SEL, "eth_mii_sel", eth_mii_parents, 0x120,
developerd27e3022023-07-19 17:16:28 +0800440 0x124, 0x128, 0, 1, 7, 0x1c8, 10),
Christian Marangie4bfc442024-08-03 10:33:02 +0200441 TOP_MUX(CLK_TOP_NPU_SEL, "ck_npu_sel",
developerd27e3022023-07-19 17:16:28 +0800442 netsys_2x_parents, 0x120, 0x124, 0x128, 8, 2, 15, 0x1c8, 11),
443};
444
developerd27e3022023-07-19 17:16:28 +0800445/* INFRASYS MUX PARENTS */
Christian Marangie4bfc442024-08-03 10:33:02 +0200446static const int infra_mux_uart0_parents[] = { CLK_TOP_INFRA_F26M_SEL,
447 CLK_TOP_UART_SEL };
developerd27e3022023-07-19 17:16:28 +0800448
Christian Marangie4bfc442024-08-03 10:33:02 +0200449static const int infra_mux_uart1_parents[] = { CLK_TOP_INFRA_F26M_SEL,
450 CLK_TOP_UART_SEL };
developerd27e3022023-07-19 17:16:28 +0800451
Christian Marangie4bfc442024-08-03 10:33:02 +0200452static const int infra_mux_uart2_parents[] = { CLK_TOP_INFRA_F26M_SEL,
453 CLK_TOP_UART_SEL };
developerd27e3022023-07-19 17:16:28 +0800454
Christian Marangie4bfc442024-08-03 10:33:02 +0200455static const int infra_mux_spi0_parents[] = { CLK_TOP_I2C_SEL, CLK_TOP_SPI_SEL };
developerd27e3022023-07-19 17:16:28 +0800456
Christian Marangie4bfc442024-08-03 10:33:02 +0200457static const int infra_mux_spi1_parents[] = { CLK_TOP_I2C_SEL, CLK_TOP_SPIM_MST_SEL };
developerd27e3022023-07-19 17:16:28 +0800458
Christian Marangie4bfc442024-08-03 10:33:02 +0200459static const int infra_pwm_bck_parents[] = { CLK_TOP_RTC_32P7K,
460 CLK_TOP_INFRA_F26M_SEL, CLK_TOP_SYSAXI_SEL,
461 CLK_TOP_PWM_SEL };
developerd27e3022023-07-19 17:16:28 +0800462
463static const int infra_pcie_gfmux_tl_ck_o_p0_parents[] = {
Christian Marangie4bfc442024-08-03 10:33:02 +0200464 CLK_TOP_RTC_32P7K, CLK_TOP_INFRA_F26M_SEL, CLK_TOP_INFRA_F26M_SEL,
465 CLK_TOP_PEXTP_TL_SEL
developerd27e3022023-07-19 17:16:28 +0800466};
467
468static const int infra_pcie_gfmux_tl_ck_o_p1_parents[] = {
Christian Marangie4bfc442024-08-03 10:33:02 +0200469 CLK_TOP_RTC_32P7K, CLK_TOP_INFRA_F26M_SEL, CLK_TOP_INFRA_F26M_SEL,
470 CLK_TOP_PEXTP_TL_P1_SEL
developerd27e3022023-07-19 17:16:28 +0800471};
472
473static const int infra_pcie_gfmux_tl_ck_o_p2_parents[] = {
Christian Marangie4bfc442024-08-03 10:33:02 +0200474 CLK_TOP_RTC_32P7K, CLK_TOP_INFRA_F26M_SEL, CLK_TOP_INFRA_F26M_SEL,
475 CLK_TOP_PEXTP_TL_P2_SEL
developerd27e3022023-07-19 17:16:28 +0800476};
477
478static const int infra_pcie_gfmux_tl_ck_o_p3_parents[] = {
Christian Marangie4bfc442024-08-03 10:33:02 +0200479 CLK_TOP_RTC_32P7K, CLK_TOP_INFRA_F26M_SEL, CLK_TOP_INFRA_F26M_SEL,
480 CLK_TOP_PEXTP_TL_P3_SEL
developerd27e3022023-07-19 17:16:28 +0800481};
482
483#define INFRA_MUX(_id, _name, _parents, _reg, _shift, _width) \
484 { \
485 .id = _id, .mux_reg = _reg + 0x8, .mux_set_reg = _reg + 0x0, \
486 .mux_clr_reg = _reg + 0x4, .mux_shift = _shift, \
487 .mux_mask = BIT(_width) - 1, .parent = _parents, \
developer3b500cc2025-01-17 17:16:38 +0800488 .gate_shift = -1, .upd_shift = -1, \
developerd27e3022023-07-19 17:16:28 +0800489 .num_parents = ARRAY_SIZE(_parents), \
Christian Marangid1f073e2024-08-03 10:32:55 +0200490 .flags = CLK_MUX_SETCLR_UPD | CLK_PARENT_TOPCKGEN, \
developerd27e3022023-07-19 17:16:28 +0800491 }
492
493/* INFRA MUX */
494static const struct mtk_composite infracfg_mtk_mux[] = {
Christian Marangie4bfc442024-08-03 10:33:02 +0200495 INFRA_MUX(CLK_INFRA_MUX_UART0_SEL, "infra_mux_uart0_sel",
developerd27e3022023-07-19 17:16:28 +0800496 infra_mux_uart0_parents, 0x10, 0, 1),
Christian Marangie4bfc442024-08-03 10:33:02 +0200497 INFRA_MUX(CLK_INFRA_MUX_UART1_SEL, "infra_mux_uart1_sel",
developerd27e3022023-07-19 17:16:28 +0800498 infra_mux_uart1_parents, 0x10, 1, 1),
Christian Marangie4bfc442024-08-03 10:33:02 +0200499 INFRA_MUX(CLK_INFRA_MUX_UART2_SEL, "infra_mux_uart2_sel",
developerd27e3022023-07-19 17:16:28 +0800500 infra_mux_uart2_parents, 0x10, 2, 1),
Christian Marangie4bfc442024-08-03 10:33:02 +0200501 INFRA_MUX(CLK_INFRA_MUX_SPI0_SEL, "infra_mux_spi0_sel",
developerd27e3022023-07-19 17:16:28 +0800502 infra_mux_spi0_parents, 0x10, 4, 1),
Christian Marangie4bfc442024-08-03 10:33:02 +0200503 INFRA_MUX(CLK_INFRA_MUX_SPI1_SEL, "infra_mux_spi1_sel",
developerd27e3022023-07-19 17:16:28 +0800504 infra_mux_spi1_parents, 0x10, 5, 1),
Christian Marangie4bfc442024-08-03 10:33:02 +0200505 INFRA_MUX(CLK_INFRA_MUX_SPI2_SEL, "infra_mux_spi2_sel",
developerd27e3022023-07-19 17:16:28 +0800506 infra_mux_spi0_parents, 0x10, 6, 1),
Christian Marangie4bfc442024-08-03 10:33:02 +0200507 INFRA_MUX(CLK_INFRA_PWM_SEL, "infra_pwm_sel", infra_pwm_bck_parents,
developerd27e3022023-07-19 17:16:28 +0800508 0x10, 14, 2),
Christian Marangie4bfc442024-08-03 10:33:02 +0200509 INFRA_MUX(CLK_INFRA_PWM_CK1_SEL, "infra_pwm_ck1_sel",
developerd27e3022023-07-19 17:16:28 +0800510 infra_pwm_bck_parents, 0x10, 16, 2),
Christian Marangie4bfc442024-08-03 10:33:02 +0200511 INFRA_MUX(CLK_INFRA_PWM_CK2_SEL, "infra_pwm_ck2_sel",
developerd27e3022023-07-19 17:16:28 +0800512 infra_pwm_bck_parents, 0x10, 18, 2),
Christian Marangie4bfc442024-08-03 10:33:02 +0200513 INFRA_MUX(CLK_INFRA_PWM_CK3_SEL, "infra_pwm_ck3_sel",
developerd27e3022023-07-19 17:16:28 +0800514 infra_pwm_bck_parents, 0x10, 20, 2),
Christian Marangie4bfc442024-08-03 10:33:02 +0200515 INFRA_MUX(CLK_INFRA_PWM_CK4_SEL, "infra_pwm_ck4_sel",
developerd27e3022023-07-19 17:16:28 +0800516 infra_pwm_bck_parents, 0x10, 22, 2),
Christian Marangie4bfc442024-08-03 10:33:02 +0200517 INFRA_MUX(CLK_INFRA_PWM_CK5_SEL, "infra_pwm_ck5_sel",
developerd27e3022023-07-19 17:16:28 +0800518 infra_pwm_bck_parents, 0x10, 24, 2),
Christian Marangie4bfc442024-08-03 10:33:02 +0200519 INFRA_MUX(CLK_INFRA_PWM_CK6_SEL, "infra_pwm_ck6_sel",
developerd27e3022023-07-19 17:16:28 +0800520 infra_pwm_bck_parents, 0x10, 26, 2),
Christian Marangie4bfc442024-08-03 10:33:02 +0200521 INFRA_MUX(CLK_INFRA_PWM_CK7_SEL, "infra_pwm_ck7_sel",
developerd27e3022023-07-19 17:16:28 +0800522 infra_pwm_bck_parents, 0x10, 28, 2),
Christian Marangie4bfc442024-08-03 10:33:02 +0200523 INFRA_MUX(CLK_INFRA_PWM_CK8_SEL, "infra_pwm_ck8_sel",
developerd27e3022023-07-19 17:16:28 +0800524 infra_pwm_bck_parents, 0x10, 30, 2),
Christian Marangie4bfc442024-08-03 10:33:02 +0200525 INFRA_MUX(CLK_INFRA_PCIE_GFMUX_TL_O_P0_SEL,
developerd27e3022023-07-19 17:16:28 +0800526 "infra_pcie_gfmux_tl_o_p0_sel",
527 infra_pcie_gfmux_tl_ck_o_p0_parents, 0x20, 0, 2),
Christian Marangie4bfc442024-08-03 10:33:02 +0200528 INFRA_MUX(CLK_INFRA_PCIE_GFMUX_TL_O_P1_SEL,
developerd27e3022023-07-19 17:16:28 +0800529 "infra_pcie_gfmux_tl_o_p1_sel",
530 infra_pcie_gfmux_tl_ck_o_p1_parents, 0x20, 2, 2),
Christian Marangie4bfc442024-08-03 10:33:02 +0200531 INFRA_MUX(CLK_INFRA_PCIE_GFMUX_TL_O_P2_SEL,
developerd27e3022023-07-19 17:16:28 +0800532 "infra_pcie_gfmux_tl_o_p2_sel",
533 infra_pcie_gfmux_tl_ck_o_p2_parents, 0x20, 4, 2),
Christian Marangie4bfc442024-08-03 10:33:02 +0200534 INFRA_MUX(CLK_INFRA_PCIE_GFMUX_TL_O_P3_SEL,
developerd27e3022023-07-19 17:16:28 +0800535 "infra_pcie_gfmux_tl_o_p3_sel",
536 infra_pcie_gfmux_tl_ck_o_p3_parents, 0x20, 6, 2),
537};
538
539static const struct mtk_gate_regs infra_0_cg_regs = {
540 .set_ofs = 0x10,
541 .clr_ofs = 0x14,
542 .sta_ofs = 0x18,
543};
544
545static const struct mtk_gate_regs infra_1_cg_regs = {
546 .set_ofs = 0x40,
547 .clr_ofs = 0x44,
548 .sta_ofs = 0x48,
549};
550
551static const struct mtk_gate_regs infra_2_cg_regs = {
552 .set_ofs = 0x50,
553 .clr_ofs = 0x54,
554 .sta_ofs = 0x58,
555};
556
557static const struct mtk_gate_regs infra_3_cg_regs = {
558 .set_ofs = 0x60,
559 .clr_ofs = 0x64,
560 .sta_ofs = 0x68,
561};
562
Christian Marangid1f073e2024-08-03 10:32:55 +0200563#define GATE_INFRA0(_id, _name, _parent, _shift, _flags) \
developerd27e3022023-07-19 17:16:28 +0800564 { \
565 .id = _id, .parent = _parent, .regs = &infra_0_cg_regs, \
566 .shift = _shift, \
Christian Marangid1f073e2024-08-03 10:32:55 +0200567 .flags = _flags, \
developerd27e3022023-07-19 17:16:28 +0800568 }
Christian Marangid1f073e2024-08-03 10:32:55 +0200569#define GATE_INFRA0_INFRA(_id, _name, _parent, _shift) \
570 GATE_INFRA0(_id, _name, _parent, _shift, CLK_GATE_SETCLR | CLK_PARENT_INFRASYS)
571#define GATE_INFRA0_TOP(_id, _name, _parent, _shift) \
572 GATE_INFRA0(_id, _name, _parent, _shift, CLK_GATE_SETCLR | CLK_PARENT_TOPCKGEN)
developerd27e3022023-07-19 17:16:28 +0800573
Christian Marangid1f073e2024-08-03 10:32:55 +0200574#define GATE_INFRA1(_id, _name, _parent, _shift, _flags) \
developerd27e3022023-07-19 17:16:28 +0800575 { \
576 .id = _id, .parent = _parent, .regs = &infra_1_cg_regs, \
577 .shift = _shift, \
Christian Marangid1f073e2024-08-03 10:32:55 +0200578 .flags = _flags, \
developerd27e3022023-07-19 17:16:28 +0800579 }
Christian Marangid1f073e2024-08-03 10:32:55 +0200580#define GATE_INFRA1_INFRA(_id, _name, _parent, _shift) \
581 GATE_INFRA1(_id, _name, _parent, _shift, CLK_GATE_SETCLR | CLK_PARENT_INFRASYS)
582#define GATE_INFRA1_TOP(_id, _name, _parent, _shift) \
583 GATE_INFRA1(_id, _name, _parent, _shift, CLK_GATE_SETCLR | CLK_PARENT_TOPCKGEN)
developerd27e3022023-07-19 17:16:28 +0800584
Christian Marangid1f073e2024-08-03 10:32:55 +0200585#define GATE_INFRA2(_id, _name, _parent, _shift, _flags) \
developerd27e3022023-07-19 17:16:28 +0800586 { \
587 .id = _id, .parent = _parent, .regs = &infra_2_cg_regs, \
588 .shift = _shift, \
Christian Marangid1f073e2024-08-03 10:32:55 +0200589 .flags = _flags, \
developerd27e3022023-07-19 17:16:28 +0800590 }
Christian Marangid1f073e2024-08-03 10:32:55 +0200591#define GATE_INFRA2_INFRA(_id, _name, _parent, _shift) \
592 GATE_INFRA2(_id, _name, _parent, _shift, CLK_GATE_SETCLR | CLK_PARENT_INFRASYS)
593#define GATE_INFRA2_TOP(_id, _name, _parent, _shift) \
594 GATE_INFRA2(_id, _name, _parent, _shift, CLK_GATE_SETCLR | CLK_PARENT_TOPCKGEN)
developerd27e3022023-07-19 17:16:28 +0800595
Christian Marangid1f073e2024-08-03 10:32:55 +0200596#define GATE_INFRA3(_id, _name, _parent, _shift, _flags) \
developerd27e3022023-07-19 17:16:28 +0800597 { \
598 .id = _id, .parent = _parent, .regs = &infra_3_cg_regs, \
599 .shift = _shift, \
Christian Marangid1f073e2024-08-03 10:32:55 +0200600 .flags = _flags, \
developerd27e3022023-07-19 17:16:28 +0800601 }
Christian Marangid1f073e2024-08-03 10:32:55 +0200602#define GATE_INFRA3_INFRA(_id, _name, _parent, _shift) \
603 GATE_INFRA3(_id, _name, _parent, _shift, CLK_GATE_SETCLR | CLK_PARENT_INFRASYS)
604#define GATE_INFRA3_TOP(_id, _name, _parent, _shift) \
605 GATE_INFRA3(_id, _name, _parent, _shift, CLK_GATE_SETCLR | CLK_PARENT_TOPCKGEN)
606#define GATE_INFRA3_XTAL(_id, _name, _parent, _shift) \
607 GATE_INFRA3(_id, _name, _parent, _shift, CLK_GATE_SETCLR | CLK_PARENT_XTAL)
developerd27e3022023-07-19 17:16:28 +0800608
609/* INFRA GATE */
610static const struct mtk_gate infracfg_mtk_gates[] = {
Christian Marangie4bfc442024-08-03 10:33:02 +0200611 GATE_INFRA0_TOP(CLK_INFRA_PCIE_PERI_26M_CK_P0,
612 "infra_pcie_peri_ck_26m_ck_p0", CLK_TOP_INFRA_F26M_SEL, 7),
613 GATE_INFRA0_TOP(CLK_INFRA_PCIE_PERI_26M_CK_P1,
614 "infra_pcie_peri_ck_26m_ck_p1", CLK_TOP_INFRA_F26M_SEL, 8),
615 GATE_INFRA0_INFRA(CLK_INFRA_PCIE_PERI_26M_CK_P2,
616 "infra_pcie_peri_ck_26m_ck_p2", CLK_INFRA_PCIE_PERI_26M_CK_P3, 9),
617 GATE_INFRA0_TOP(CLK_INFRA_PCIE_PERI_26M_CK_P3,
618 "infra_pcie_peri_ck_26m_ck_p3", CLK_TOP_INFRA_F26M_SEL, 10),
619 GATE_INFRA1_TOP(CLK_INFRA_66M_GPT_BCK, "infra_hf_66m_gpt_bck",
620 CLK_TOP_SYSAXI_SEL, 0),
621 GATE_INFRA1_TOP(CLK_INFRA_66M_PWM_HCK, "infra_hf_66m_pwm_hck",
622 CLK_TOP_SYSAXI_SEL, 1),
623 GATE_INFRA1_INFRA(CLK_INFRA_66M_PWM_BCK, "infra_hf_66m_pwm_bck",
624 CLK_INFRA_PWM_SEL, 2),
625 GATE_INFRA1_INFRA(CLK_INFRA_66M_PWM_CK1, "infra_hf_66m_pwm_ck1",
626 CLK_INFRA_PWM_CK1_SEL, 3),
627 GATE_INFRA1_INFRA(CLK_INFRA_66M_PWM_CK2, "infra_hf_66m_pwm_ck2",
628 CLK_INFRA_PWM_CK2_SEL, 4),
629 GATE_INFRA1_INFRA(CLK_INFRA_66M_PWM_CK3, "infra_hf_66m_pwm_ck3",
630 CLK_INFRA_PWM_CK3_SEL, 5),
631 GATE_INFRA1_INFRA(CLK_INFRA_66M_PWM_CK4, "infra_hf_66m_pwm_ck4",
632 CLK_INFRA_PWM_CK4_SEL, 6),
633 GATE_INFRA1_INFRA(CLK_INFRA_66M_PWM_CK5, "infra_hf_66m_pwm_ck5",
634 CLK_INFRA_PWM_CK5_SEL, 7),
635 GATE_INFRA1_INFRA(CLK_INFRA_66M_PWM_CK6, "infra_hf_66m_pwm_ck6",
636 CLK_INFRA_PWM_CK6_SEL, 8),
637 GATE_INFRA1_INFRA(CLK_INFRA_66M_PWM_CK7, "infra_hf_66m_pwm_ck7",
638 CLK_INFRA_PWM_CK7_SEL, 9),
639 GATE_INFRA1_INFRA(CLK_INFRA_66M_PWM_CK8, "infra_hf_66m_pwm_ck8",
640 CLK_INFRA_PWM_CK8_SEL, 10),
641 GATE_INFRA1_TOP(CLK_INFRA_133M_CQDMA_BCK, "infra_hf_133m_cqdma_bck",
642 CLK_TOP_SYSAXI_SEL, 12),
643 GATE_INFRA1_TOP(CLK_INFRA_66M_AUD_SLV_BCK, "infra_66m_aud_slv_bck",
644 CLK_TOP_SYSAXI_SEL, 13),
645 GATE_INFRA1_TOP(CLK_INFRA_AUD_26M, "infra_f_faud_26m", CLK_TOP_INFRA_F26M_SEL, 14),
646 GATE_INFRA1_TOP(CLK_INFRA_AUD_L, "infra_f_faud_l", CLK_TOP_AUD_L_SEL, 15),
647 GATE_INFRA1_TOP(CLK_INFRA_AUD_AUD, "infra_f_aud_aud", CLK_TOP_A1SYS_SEL,
Christian Marangid1f073e2024-08-03 10:32:55 +0200648 16),
Christian Marangie4bfc442024-08-03 10:33:02 +0200649 GATE_INFRA1_TOP(CLK_INFRA_AUD_EG2, "infra_f_faud_eg2", CLK_TOP_A_TUNER_SEL,
Christian Marangid1f073e2024-08-03 10:32:55 +0200650 18),
Christian Marangie4bfc442024-08-03 10:33:02 +0200651 GATE_INFRA1_TOP(CLK_INFRA_DRAMC_F26M, "infra_dramc_f26m", CLK_TOP_INFRA_F26M_SEL,
Christian Marangid1f073e2024-08-03 10:32:55 +0200652 19),
Christian Marangie4bfc442024-08-03 10:33:02 +0200653 GATE_INFRA1_TOP(CLK_INFRA_133M_DBG_ACKM, "infra_hf_133m_dbg_ackm",
654 CLK_TOP_SYSAXI_SEL, 20),
655 GATE_INFRA1_TOP(CLK_INFRA_66M_AP_DMA_BCK, "infra_66m_ap_dma_bck",
656 CLK_TOP_SYSAXI_SEL, 21),
657 GATE_INFRA1_TOP(CLK_INFRA_66M_SEJ_BCK, "infra_hf_66m_sej_bck",
658 CLK_TOP_SYSAXI_SEL, 29),
659 GATE_INFRA1_TOP(CLK_INFRA_PRE_CK_SEJ_F13M, "infra_pre_ck_sej_f13m",
660 CLK_TOP_INFRA_F26M_SEL, 30),
661 /* GATE_INFRA1_TOP(CLK_INFRA_66M_TRNG, "infra_hf_66m_trng", CLK_TOP_SYSAXI_SEL,
Christian Marangidee002c2024-08-03 10:32:59 +0200662 31), */
Christian Marangie4bfc442024-08-03 10:33:02 +0200663 GATE_INFRA2_TOP(CLK_INFRA_26M_THERM_SYSTEM, "infra_hf_26m_therm_system",
664 CLK_TOP_INFRA_F26M_SEL, 0),
665 GATE_INFRA2_TOP(CLK_INFRA_I2C_BCK, "infra_i2c_bck", CLK_TOP_I2C_SEL, 1),
666 /* GATE_INFRA2_TOP(CLK_INFRA_66M_UART0_PCK, "infra_hf_66m_uart0_pck",
667 CLK_TOP_SYSAXI_SEL, 3), */
668 /* GATE_INFRA2_TOP(CLK_INFRA_66M_UART1_PCK, "infra_hf_66m_uart1_pck",
669 CLK_TOP_SYSAXI_SEL, 4), */
670 /* GATE_INFRA2_TOP(CLK_INFRA_66M_UART2_PCK, "infra_hf_66m_uart2_pck",
671 CLK_TOP_SYSAXI_SEL, 5), */
672 GATE_INFRA2_INFRA(CLK_INFRA_52M_UART0_CK, "infra_f_52m_uart0",
673 CLK_INFRA_MUX_UART0_SEL, 3),
674 GATE_INFRA2_INFRA(CLK_INFRA_52M_UART1_CK, "infra_f_52m_uart1",
675 CLK_INFRA_MUX_UART1_SEL, 4),
676 GATE_INFRA2_INFRA(CLK_INFRA_52M_UART2_CK, "infra_f_52m_uart2",
677 CLK_INFRA_MUX_UART2_SEL, 5),
678 GATE_INFRA2_TOP(CLK_INFRA_NFI, "infra_f_fnfi", CLK_TOP_NFI1X_SEL, 9),
679 GATE_INFRA2_TOP(CLK_INFRA_SPINFI, "infra_f_fspinfi", CLK_TOP_SPINFI_SEL, 10),
680 GATE_INFRA2_TOP(CLK_INFRA_66M_NFI_HCK, "infra_hf_66m_nfi_hck",
681 CLK_TOP_SYSAXI_SEL, 11),
682 GATE_INFRA2_INFRA(CLK_INFRA_104M_SPI0, "infra_hf_104m_spi0",
683 CLK_INFRA_MUX_SPI0_SEL, 12),
684 GATE_INFRA2_INFRA(CLK_INFRA_104M_SPI1, "infra_hf_104m_spi1",
685 CLK_INFRA_MUX_SPI1_SEL, 13),
686 GATE_INFRA2_INFRA(CLK_INFRA_104M_SPI2_BCK, "infra_hf_104m_spi2_bck",
687 CLK_INFRA_MUX_SPI2_SEL, 14),
688 GATE_INFRA2_TOP(CLK_INFRA_66M_SPI0_HCK, "infra_hf_66m_spi0_hck",
689 CLK_TOP_SYSAXI_SEL, 15),
690 GATE_INFRA2_TOP(CLK_INFRA_66M_SPI1_HCK, "infra_hf_66m_spi1_hck",
691 CLK_TOP_SYSAXI_SEL, 16),
692 GATE_INFRA2_TOP(CLK_INFRA_66M_SPI2_HCK, "infra_hf_66m_spi2_hck",
693 CLK_TOP_SYSAXI_SEL, 17),
694 GATE_INFRA2_TOP(CLK_INFRA_66M_FLASHIF_AXI, "infra_hf_66m_flashif_axi",
695 CLK_TOP_SYSAXI_SEL, 18),
696 GATE_INFRA2_TOP(CLK_INFRA_RTC, "infra_f_frtc", CLK_TOP_RTC_32K, 19),
697 GATE_INFRA2_TOP(CLK_INFRA_26M_ADC_BCK, "infra_f_26m_adc_bck",
698 CLK_TOP_INFRA_F26M_SEL, 20),
699 GATE_INFRA2_INFRA(CLK_INFRA_RC_ADC, "infra_f_frc_adc", CLK_INFRA_26M_ADC_BCK,
Christian Marangid1f073e2024-08-03 10:32:55 +0200700 21),
Christian Marangie4bfc442024-08-03 10:33:02 +0200701 GATE_INFRA2_TOP(CLK_INFRA_MSDC400, "infra_f_fmsdc400", CLK_TOP_EMMC_400M_SEL,
Christian Marangid1f073e2024-08-03 10:32:55 +0200702 22),
Christian Marangie4bfc442024-08-03 10:33:02 +0200703 GATE_INFRA2_TOP(CLK_INFRA_MSDC2_HCK, "infra_f_fmsdc2_hck",
704 CLK_TOP_EMMC_250M_SEL, 23),
705 GATE_INFRA2_TOP(CLK_INFRA_133M_MSDC_0_HCK, "infra_hf_133m_msdc_0_hck",
706 CLK_TOP_SYSAXI_SEL, 24),
707 GATE_INFRA2_TOP(CLK_INFRA_66M_MSDC_0_HCK, "infra_66m_msdc_0_hck",
708 CLK_TOP_SYSAXI_SEL, 25),
709 GATE_INFRA2_TOP(CLK_INFRA_133M_CPUM_BCK, "infra_hf_133m_cpum_bck",
710 CLK_TOP_SYSAXI_SEL, 26),
711 GATE_INFRA2_TOP(CLK_INFRA_BIST2FPC, "infra_hf_fbist2fpc", CLK_TOP_NFI1X_SEL,
Christian Marangid1f073e2024-08-03 10:32:55 +0200712 27),
Christian Marangie4bfc442024-08-03 10:33:02 +0200713 GATE_INFRA2_TOP(CLK_INFRA_I2C_X16W_MCK_CK_P1, "infra_hf_i2c_x16w_mck_ck_p1",
714 CLK_TOP_SYSAXI_SEL, 29),
715 GATE_INFRA2_TOP(CLK_INFRA_I2C_X16W_PCK_CK_P1, "infra_hf_i2c_x16w_pck_ck_p1",
716 CLK_TOP_SYSAXI_SEL, 31),
717 GATE_INFRA3_TOP(CLK_INFRA_133M_USB_HCK, "infra_133m_usb_hck",
718 CLK_TOP_SYSAXI_SEL, 0),
719 GATE_INFRA3_TOP(CLK_INFRA_133M_USB_HCK_CK_P1, "infra_133m_usb_hck_ck_p1",
720 CLK_TOP_SYSAXI_SEL, 1),
721 GATE_INFRA3_TOP(CLK_INFRA_66M_USB_HCK, "infra_66m_usb_hck",
722 CLK_TOP_SYSAXI_SEL, 2),
723 GATE_INFRA3_TOP(CLK_INFRA_66M_USB_HCK_CK_P1, "infra_66m_usb_hck_ck_p1",
724 CLK_TOP_SYSAXI_SEL, 3),
725 GATE_INFRA3_TOP(CLK_INFRA_USB_SYS, "infra_usb_sys", CLK_TOP_USB_SYS_SEL, 4),
726 GATE_INFRA3_TOP(CLK_INFRA_USB_SYS_CK_P1, "infra_usb_sys_ck_p1",
727 CLK_TOP_USB_SYS_P1_SEL, 5),
728 GATE_INFRA3_XTAL(CLK_INFRA_USB_REF, "infra_usb_ref", CLK_XTAL, 6),
729 GATE_INFRA3_XTAL(CLK_INFRA_USB_CK_P1, "infra_usb_ck_p1", CLK_XTAL,
Christian Marangi245c8502024-08-03 10:32:58 +0200730 7),
Christian Marangie4bfc442024-08-03 10:33:02 +0200731 GATE_INFRA3_TOP(CLK_INFRA_USB_FRMCNT, "infra_usb_frmcnt",
732 CLK_TOP_USB_FRMCNT_SEL, 8),
733 GATE_INFRA3_TOP(CLK_INFRA_USB_FRMCNT_CK_P1, "infra_usb_frmcnt_ck_p1",
734 CLK_TOP_USB_FRMCNT_P1_SEL, 9),
735 GATE_INFRA3_XTAL(CLK_INFRA_USB_PIPE, "infra_usb_pipe", CLK_XTAL,
Christian Marangid1f073e2024-08-03 10:32:55 +0200736 10),
Christian Marangie4bfc442024-08-03 10:33:02 +0200737 GATE_INFRA3_XTAL(CLK_INFRA_USB_PIPE_CK_P1, "infra_usb_pipe_ck_p1",
Christian Marangid1f073e2024-08-03 10:32:55 +0200738 CLK_XTAL, 11),
Christian Marangie4bfc442024-08-03 10:33:02 +0200739 GATE_INFRA3_XTAL(CLK_INFRA_USB_UTMI, "infra_usb_utmi", CLK_XTAL,
Christian Marangid1f073e2024-08-03 10:32:55 +0200740 12),
Christian Marangie4bfc442024-08-03 10:33:02 +0200741 GATE_INFRA3_XTAL(CLK_INFRA_USB_UTMI_CK_P1, "infra_usb_utmi_ck_p1",
Christian Marangid1f073e2024-08-03 10:32:55 +0200742 CLK_XTAL, 13),
Christian Marangie4bfc442024-08-03 10:33:02 +0200743 GATE_INFRA3_TOP(CLK_INFRA_USB_XHCI, "infra_usb_xhci", CLK_TOP_USB_XHCI_SEL,
Christian Marangid1f073e2024-08-03 10:32:55 +0200744 14),
Christian Marangie4bfc442024-08-03 10:33:02 +0200745 GATE_INFRA3_TOP(CLK_INFRA_USB_XHCI_CK_P1, "infra_usb_xhci_ck_p1",
746 CLK_TOP_USB_XHCI_P1_SEL, 15),
747 GATE_INFRA3_INFRA(CLK_INFRA_PCIE_GFMUX_TL_P0, "infra_pcie_gfmux_tl_ck_p0",
748 CLK_INFRA_PCIE_GFMUX_TL_O_P0_SEL, 20),
749 GATE_INFRA3_INFRA(CLK_INFRA_PCIE_GFMUX_TL_P1, "infra_pcie_gfmux_tl_ck_p1",
750 CLK_INFRA_PCIE_GFMUX_TL_O_P1_SEL, 21),
751 GATE_INFRA3_INFRA(CLK_INFRA_PCIE_GFMUX_TL_P2, "infra_pcie_gfmux_tl_ck_p2",
752 CLK_INFRA_PCIE_GFMUX_TL_O_P2_SEL, 22),
753 GATE_INFRA3_INFRA(CLK_INFRA_PCIE_GFMUX_TL_P3, "infra_pcie_gfmux_tl_ck_p3",
754 CLK_INFRA_PCIE_GFMUX_TL_O_P3_SEL, 23),
755 GATE_INFRA3_XTAL(CLK_INFRA_PCIE_PIPE_P0, "infra_pcie_pipe_ck_p0",
Christian Marangid1f073e2024-08-03 10:32:55 +0200756 CLK_XTAL, 24),
Christian Marangie4bfc442024-08-03 10:33:02 +0200757 GATE_INFRA3_XTAL(CLK_INFRA_PCIE_PIPE_P1, "infra_pcie_pipe_ck_p1",
Christian Marangid1f073e2024-08-03 10:32:55 +0200758 CLK_XTAL, 25),
Christian Marangie4bfc442024-08-03 10:33:02 +0200759 GATE_INFRA3_XTAL(CLK_INFRA_PCIE_PIPE_P2, "infra_pcie_pipe_ck_p2",
Christian Marangid1f073e2024-08-03 10:32:55 +0200760 CLK_XTAL, 26),
Christian Marangie4bfc442024-08-03 10:33:02 +0200761 GATE_INFRA3_XTAL(CLK_INFRA_PCIE_PIPE_P3, "infra_pcie_pipe_ck_p3",
Christian Marangid1f073e2024-08-03 10:32:55 +0200762 CLK_XTAL, 27),
Christian Marangie4bfc442024-08-03 10:33:02 +0200763 GATE_INFRA3_TOP(CLK_INFRA_133M_PCIE_CK_P0, "infra_133m_pcie_ck_p0",
764 CLK_TOP_SYSAXI_SEL, 28),
765 GATE_INFRA3_TOP(CLK_INFRA_133M_PCIE_CK_P1, "infra_133m_pcie_ck_p1",
766 CLK_TOP_SYSAXI_SEL, 29),
767 GATE_INFRA3_TOP(CLK_INFRA_133M_PCIE_CK_P2, "infra_133m_pcie_ck_p2",
768 CLK_TOP_SYSAXI_SEL, 30),
769 GATE_INFRA3_TOP(CLK_INFRA_133M_PCIE_CK_P3, "infra_133m_pcie_ck_p3",
770 CLK_TOP_SYSAXI_SEL, 31),
developerd27e3022023-07-19 17:16:28 +0800771};
772
773static const struct mtk_clk_tree mt7988_fixed_pll_clk_tree = {
774 .fdivs_offs = ARRAY_SIZE(apmixedsys_mtk_plls),
775 .fclks = apmixedsys_mtk_plls,
Christian Marangi245c8502024-08-03 10:32:58 +0200776 .flags = CLK_APMIXED,
developerd27e3022023-07-19 17:16:28 +0800777 .xtal_rate = 40 * MHZ,
778};
779
780static const struct mtk_clk_tree mt7988_topckgen_clk_tree = {
Christian Marangie4bfc442024-08-03 10:33:02 +0200781 .fdivs_offs = CLK_TOP_XTAL_D2,
782 .muxes_offs = CLK_TOP_NETSYS_SEL,
Christian Marangi245c8502024-08-03 10:32:58 +0200783 .fclks = topckgen_mtk_fixed_clks,
developerd27e3022023-07-19 17:16:28 +0800784 .fdivs = topckgen_mtk_fixed_factors,
785 .muxes = topckgen_mtk_muxes,
Christian Marangi245c8502024-08-03 10:32:58 +0200786 .flags = CLK_BYPASS_XTAL | CLK_TOPCKGEN,
developerd27e3022023-07-19 17:16:28 +0800787 .xtal_rate = 40 * MHZ,
788};
789
790static const struct mtk_clk_tree mt7988_infracfg_clk_tree = {
Christian Marangie4bfc442024-08-03 10:33:02 +0200791 .muxes_offs = CLK_INFRA_MUX_UART0_SEL,
792 .gates_offs = CLK_INFRA_PCIE_PERI_26M_CK_P0,
developerd27e3022023-07-19 17:16:28 +0800793 .muxes = infracfg_mtk_mux,
Christian Marangi826afb72024-08-03 10:33:01 +0200794 .gates = infracfg_mtk_gates,
developerd27e3022023-07-19 17:16:28 +0800795 .flags = CLK_BYPASS_XTAL,
796 .xtal_rate = 40 * MHZ,
797};
798
799static const struct udevice_id mt7988_fixed_pll_compat[] = {
800 { .compatible = "mediatek,mt7988-fixed-plls" },
Christian Marangib25423f2024-06-24 23:03:39 +0200801 { .compatible = "mediatek,mt7988-apmixedsys" },
developerd27e3022023-07-19 17:16:28 +0800802 {}
803};
804
805static const struct udevice_id mt7988_topckgen_compat[] = {
806 { .compatible = "mediatek,mt7988-topckgen" },
807 {}
808};
809
810static int mt7988_fixed_pll_probe(struct udevice *dev)
811{
812 return mtk_common_clk_init(dev, &mt7988_fixed_pll_clk_tree);
813}
814
815static int mt7988_topckgen_probe(struct udevice *dev)
816{
817 struct mtk_clk_priv *priv = dev_get_priv(dev);
818
819 priv->base = dev_read_addr_ptr(dev);
820 if (!priv->base)
821 return -ENOENT;
822
823 writel(MT7988_CLK_PDN_EN_WRITE, priv->base + MT7988_CLK_PDN);
824 return mtk_common_clk_init(dev, &mt7988_topckgen_clk_tree);
825}
826
827U_BOOT_DRIVER(mtk_clk_apmixedsys) = {
828 .name = "mt7988-clock-fixed-pll",
829 .id = UCLASS_CLK,
830 .of_match = mt7988_fixed_pll_compat,
831 .probe = mt7988_fixed_pll_probe,
832 .priv_auto = sizeof(struct mtk_clk_priv),
833 .ops = &mtk_clk_topckgen_ops,
834 .flags = DM_FLAG_PRE_RELOC,
835};
836
837U_BOOT_DRIVER(mtk_clk_topckgen) = {
838 .name = "mt7988-clock-topckgen",
839 .id = UCLASS_CLK,
840 .of_match = mt7988_topckgen_compat,
841 .probe = mt7988_topckgen_probe,
842 .priv_auto = sizeof(struct mtk_clk_priv),
843 .ops = &mtk_clk_topckgen_ops,
844 .flags = DM_FLAG_PRE_RELOC,
845};
846
847static const struct udevice_id mt7988_infracfg_compat[] = {
848 { .compatible = "mediatek,mt7988-infracfg" },
849 {}
850};
851
developerd27e3022023-07-19 17:16:28 +0800852static int mt7988_infracfg_probe(struct udevice *dev)
853{
Christian Marangi826afb72024-08-03 10:33:01 +0200854 return mtk_common_clk_infrasys_init(dev, &mt7988_infracfg_clk_tree);
developerd27e3022023-07-19 17:16:28 +0800855}
856
857U_BOOT_DRIVER(mtk_clk_infracfg) = {
858 .name = "mt7988-clock-infracfg",
859 .id = UCLASS_CLK,
860 .of_match = mt7988_infracfg_compat,
861 .probe = mt7988_infracfg_probe,
862 .priv_auto = sizeof(struct mtk_clk_priv),
863 .ops = &mtk_clk_infrasys_ops,
864 .flags = DM_FLAG_PRE_RELOC,
865};
866
developerd27e3022023-07-19 17:16:28 +0800867/* ETHDMA */
868
869static const struct mtk_gate_regs ethdma_cg_regs = {
870 .set_ofs = 0x30,
871 .clr_ofs = 0x30,
872 .sta_ofs = 0x30,
873};
874
875#define GATE_ETHDMA(_id, _name, _parent, _shift) \
876 { \
877 .id = _id, .parent = _parent, .regs = &ethdma_cg_regs, \
878 .shift = _shift, \
879 .flags = CLK_GATE_NO_SETCLR_INV | CLK_PARENT_TOPCKGEN, \
880 }
881
882static const struct mtk_gate ethdma_mtk_gate[] = {
Christian Marangie4bfc442024-08-03 10:33:02 +0200883 GATE_ETHDMA(CLK_ETHDMA_FE_EN, "ethdma_fe_en", CLK_TOP_NETSYS_2X_SEL, 6),
developerd27e3022023-07-19 17:16:28 +0800884};
885
886static int mt7988_ethdma_probe(struct udevice *dev)
887{
888 return mtk_common_clk_gate_init(dev, &mt7988_topckgen_clk_tree,
889 ethdma_mtk_gate);
890}
891
892static int mt7988_ethdma_bind(struct udevice *dev)
893{
894 int ret = 0;
895
896 if (CONFIG_IS_ENABLED(RESET_MEDIATEK)) {
897 ret = mediatek_reset_bind(dev, MT7988_ETHDMA_RST_CTRL_OFS, 1);
898 if (ret)
899 debug("Warning: failed to bind reset controller\n");
900 }
901
902 return ret;
903}
904
905static const struct udevice_id mt7988_ethdma_compat[] = {
906 {
907 .compatible = "mediatek,mt7988-ethdma",
908 },
909 {}
910};
911
912U_BOOT_DRIVER(mtk_clk_ethdma) = {
913 .name = "mt7988-clock-ethdma",
914 .id = UCLASS_CLK,
915 .of_match = mt7988_ethdma_compat,
916 .probe = mt7988_ethdma_probe,
917 .bind = mt7988_ethdma_bind,
918 .priv_auto = sizeof(struct mtk_cg_priv),
919 .ops = &mtk_clk_gate_ops,
920};
921
922/* SGMIISYS_0 */
923
924static const struct mtk_gate_regs sgmii0_cg_regs = {
925 .set_ofs = 0xE4,
926 .clr_ofs = 0xE4,
927 .sta_ofs = 0xE4,
928};
929
930#define GATE_SGMII0(_id, _name, _parent, _shift) \
931 { \
932 .id = _id, .parent = _parent, .regs = &sgmii0_cg_regs, \
933 .shift = _shift, \
934 .flags = CLK_GATE_NO_SETCLR_INV | CLK_PARENT_TOPCKGEN, \
935 }
936
937static const struct mtk_gate sgmiisys_0_mtk_gate[] = {
Christian Marangie4bfc442024-08-03 10:33:02 +0200938 /* connect to fake clock, so use CLK_TOP_XTAL as the clock parent */
939 GATE_SGMII0(CLK_SGM0_TX_EN, "sgm0_tx_en", CLK_TOP_XTAL, 2),
940 /* connect to fake clock, so use CLK_TOP_XTAL as the clock parent */
941 GATE_SGMII0(CLK_SGM0_RX_EN, "sgm0_rx_en", CLK_TOP_XTAL, 3),
developerd27e3022023-07-19 17:16:28 +0800942};
943
944static int mt7988_sgmiisys_0_probe(struct udevice *dev)
945{
946 return mtk_common_clk_gate_init(dev, &mt7988_topckgen_clk_tree,
947 sgmiisys_0_mtk_gate);
948}
949
950static const struct udevice_id mt7988_sgmiisys_0_compat[] = {
951 {
952 .compatible = "mediatek,mt7988-sgmiisys_0",
953 },
954 {}
955};
956
957U_BOOT_DRIVER(mtk_clk_sgmiisys_0) = {
958 .name = "mt7988-clock-sgmiisys_0",
959 .id = UCLASS_CLK,
960 .of_match = mt7988_sgmiisys_0_compat,
961 .probe = mt7988_sgmiisys_0_probe,
962 .priv_auto = sizeof(struct mtk_cg_priv),
963 .ops = &mtk_clk_gate_ops,
964};
965
966/* SGMIISYS_1 */
967
968static const struct mtk_gate_regs sgmii1_cg_regs = {
969 .set_ofs = 0xE4,
970 .clr_ofs = 0xE4,
971 .sta_ofs = 0xE4,
972};
973
974#define GATE_SGMII1(_id, _name, _parent, _shift) \
975 { \
976 .id = _id, .parent = _parent, .regs = &sgmii1_cg_regs, \
977 .shift = _shift, \
978 .flags = CLK_GATE_NO_SETCLR_INV | CLK_PARENT_TOPCKGEN, \
979 }
980
981static const struct mtk_gate sgmiisys_1_mtk_gate[] = {
Christian Marangie4bfc442024-08-03 10:33:02 +0200982 /* connect to fake clock, so use CLK_TOP_XTAL as the clock parent */
983 GATE_SGMII1(CLK_SGM1_TX_EN, "sgm1_tx_en", CLK_TOP_XTAL, 2),
984 /* connect to fake clock, so use CLK_TOP_XTAL as the clock parent */
985 GATE_SGMII1(CLK_SGM1_RX_EN, "sgm1_rx_en", CLK_TOP_XTAL, 3),
developerd27e3022023-07-19 17:16:28 +0800986};
987
988static int mt7988_sgmiisys_1_probe(struct udevice *dev)
989{
990 return mtk_common_clk_gate_init(dev, &mt7988_topckgen_clk_tree,
991 sgmiisys_1_mtk_gate);
992}
993
994static const struct udevice_id mt7988_sgmiisys_1_compat[] = {
995 {
996 .compatible = "mediatek,mt7988-sgmiisys_1",
997 },
998 {}
999};
1000
1001U_BOOT_DRIVER(mtk_clk_sgmiisys_1) = {
1002 .name = "mt7988-clock-sgmiisys_1",
1003 .id = UCLASS_CLK,
1004 .of_match = mt7988_sgmiisys_1_compat,
1005 .probe = mt7988_sgmiisys_1_probe,
1006 .priv_auto = sizeof(struct mtk_cg_priv),
1007 .ops = &mtk_clk_gate_ops,
1008};
1009
1010/* ETHWARP */
1011
1012static const struct mtk_gate_regs ethwarp_cg_regs = {
1013 .set_ofs = 0x14,
1014 .clr_ofs = 0x14,
1015 .sta_ofs = 0x14,
1016};
1017
1018#define GATE_ETHWARP(_id, _name, _parent, _shift) \
1019 { \
1020 .id = _id, .parent = _parent, .regs = &ethwarp_cg_regs, \
1021 .shift = _shift, \
1022 .flags = CLK_GATE_NO_SETCLR_INV | CLK_PARENT_TOPCKGEN, \
1023 }
1024
1025static const struct mtk_gate ethwarp_mtk_gate[] = {
Christian Marangie4bfc442024-08-03 10:33:02 +02001026 GATE_ETHWARP(CLK_ETHWARP_WOCPU2_EN, "ethwarp_wocpu2_en",
1027 CLK_TOP_NETSYS_MCU_SEL, 13),
1028 GATE_ETHWARP(CLK_ETHWARP_WOCPU1_EN, "ethwarp_wocpu1_en",
1029 CLK_TOP_NETSYS_MCU_SEL, 14),
1030 GATE_ETHWARP(CLK_ETHWARP_WOCPU0_EN, "ethwarp_wocpu0_en",
1031 CLK_TOP_NETSYS_MCU_SEL, 15),
developerd27e3022023-07-19 17:16:28 +08001032};
1033
1034static int mt7988_ethwarp_probe(struct udevice *dev)
1035{
1036 return mtk_common_clk_gate_init(dev, &mt7988_topckgen_clk_tree,
1037 ethwarp_mtk_gate);
1038}
1039
1040static int mt7988_ethwarp_bind(struct udevice *dev)
1041{
1042 int ret = 0;
1043
1044 if (CONFIG_IS_ENABLED(RESET_MEDIATEK)) {
1045 ret = mediatek_reset_bind(dev, MT7988_ETHWARP_RST_CTRL_OFS, 2);
1046 if (ret)
1047 debug("Warning: failed to bind reset controller\n");
1048 }
1049
1050 return ret;
1051}
1052
1053static const struct udevice_id mt7988_ethwarp_compat[] = {
1054 {
1055 .compatible = "mediatek,mt7988-ethwarp",
1056 },
1057 {}
1058};
1059
1060U_BOOT_DRIVER(mtk_clk_ethwarp) = {
1061 .name = "mt7988-clock-ethwarp",
1062 .id = UCLASS_CLK,
1063 .of_match = mt7988_ethwarp_compat,
1064 .probe = mt7988_ethwarp_probe,
1065 .bind = mt7988_ethwarp_bind,
1066 .priv_auto = sizeof(struct mtk_cg_priv),
1067 .ops = &mtk_clk_gate_ops,
1068};