[PATCH v2 9/9] clk: mediatek: mt8365: fix missing topckgen IDs
David Lechner
dlechner at baylibre.com
Wed Jan 7 17:21:15 CET 2026
Use a ID map to add clocks for the missing CLK_TOP_CLK32K and
CLK_TOP_CLK26M that were not included in the devicetree definitions.
This fixes getting the rate of any clock that had one of these as a
parent.
CLK_TOP_UNIVPLL does not appear to be a real clock, so it is omitted
now since we can do that with the ID map as well.
Signed-off-by: David Lechner <dlechner at baylibre.com>
---
drivers/clk/mediatek/clk-mt8365.c | 151 +++++++++++++++++++++++++++++++++++++-
1 file changed, 147 insertions(+), 4 deletions(-)
diff --git a/drivers/clk/mediatek/clk-mt8365.c b/drivers/clk/mediatek/clk-mt8365.c
index a28547a0cf8..6ba464097ae 100644
--- a/drivers/clk/mediatek/clk-mt8365.c
+++ b/drivers/clk/mediatek/clk-mt8365.c
@@ -75,6 +75,146 @@ static const struct mtk_clk_tree mt8365_apmixed_tree = {
};
/* topckgen */
+
+/*
+ * The devicetree bindings missed a few clocks and can't be changed, so we need
+ * to provide a mapping to fix the omissions.
+ */
+static const int mt8365_topckgen_id_map[] = {
+ [0 ... CLK_TOP_NR_CLK - 1] = -1,
+ /* FIXED */
+ /* Fixed 32K oscillator is not available in devicetree definitions */
+ [CLK_TOP_CLK32K] = 0,
+ [CLK_TOP_CLK_NULL] = 1,
+ [CLK_TOP_I2S0_BCK] = 2,
+ [CLK_TOP_DSI0_LNTC_DSICK] = 3,
+ [CLK_TOP_VPLL_DPIX] = 4,
+ [CLK_TOP_LVDSTX_CLKDIG_CTS] = 5,
+ /* FACTOR */
+ [CLK_TOP_MFGPLL] = 6,
+ [CLK_TOP_SYSPLL_D2] = 7,
+ [CLK_TOP_SYSPLL1_D2] = 8,
+ [CLK_TOP_SYSPLL1_D4] = 9,
+ [CLK_TOP_SYSPLL1_D8] = 10,
+ [CLK_TOP_SYSPLL1_D16] = 11,
+ [CLK_TOP_SYSPLL_D3] = 12,
+ [CLK_TOP_SYSPLL2_D2] = 13,
+ [CLK_TOP_SYSPLL2_D4] = 14,
+ [CLK_TOP_SYSPLL2_D8] = 15,
+ [CLK_TOP_SYSPLL_D5] = 16,
+ [CLK_TOP_SYSPLL3_D2] = 17,
+ [CLK_TOP_SYSPLL3_D4] = 18,
+ [CLK_TOP_SYSPLL_D7] = 19,
+ [CLK_TOP_SYSPLL4_D2] = 20,
+ [CLK_TOP_SYSPLL4_D4] = 21,
+ /* Skipping CLK_TOP_UNIVPLL since isn't a real clock. */
+ [CLK_TOP_UNIVPLL_D2] = 22,
+ [CLK_TOP_UNIVPLL1_D2] = 23,
+ [CLK_TOP_UNIVPLL1_D4] = 24,
+ [CLK_TOP_UNIVPLL_D3] = 25,
+ [CLK_TOP_UNIVPLL2_D2] = 26,
+ [CLK_TOP_UNIVPLL2_D4] = 27,
+ [CLK_TOP_UNIVPLL2_D8] = 28,
+ [CLK_TOP_UNIVPLL2_D32] = 29,
+ [CLK_TOP_UNIVPLL_D5] = 30,
+ [CLK_TOP_UNIVPLL3_D2] = 31,
+ [CLK_TOP_UNIVPLL3_D4] = 32,
+ [CLK_TOP_MMPLL] = 33,
+ [CLK_TOP_MMPLL_D2] = 34,
+ [CLK_TOP_LVDSPLL_D2] = 35,
+ [CLK_TOP_LVDSPLL_D4] = 36,
+ [CLK_TOP_LVDSPLL_D8] = 37,
+ [CLK_TOP_LVDSPLL_D16] = 38,
+ [CLK_TOP_USB20_192M] = 39,
+ [CLK_TOP_USB20_192M_D4] = 40,
+ [CLK_TOP_USB20_192M_D8] = 41,
+ [CLK_TOP_USB20_192M_D16] = 42,
+ [CLK_TOP_USB20_192M_D32] = 43,
+ [CLK_TOP_APLL1] = 44,
+ [CLK_TOP_APLL1_D2] = 45,
+ [CLK_TOP_APLL1_D4] = 46,
+ [CLK_TOP_APLL1_D8] = 47,
+ [CLK_TOP_APLL2] = 48,
+ [CLK_TOP_APLL2_D2] = 49,
+ [CLK_TOP_APLL2_D4] = 50,
+ [CLK_TOP_APLL2_D8] = 51,
+ /* Fixed 26M oscillator is not available in devicetree definitions */
+ [CLK_TOP_CLK26M] = 52,
+ [CLK_TOP_SYS_26M_D2] = 53,
+ [CLK_TOP_MSDCPLL] = 54,
+ [CLK_TOP_MSDCPLL_D2] = 55,
+ [CLK_TOP_DSPPLL] = 56,
+ [CLK_TOP_DSPPLL_D2] = 57,
+ [CLK_TOP_DSPPLL_D4] = 58,
+ [CLK_TOP_DSPPLL_D8] = 59,
+ [CLK_TOP_APUPLL] = 60,
+ [CLK_TOP_CLK26M_D52] = 61,
+ /* MUX */
+ [CLK_TOP_AXI_SEL] = 62,
+ [CLK_TOP_MEM_SEL] = 63,
+ [CLK_TOP_MM_SEL] = 64,
+ [CLK_TOP_SCP_SEL] = 65,
+ [CLK_TOP_MFG_SEL] = 66,
+ [CLK_TOP_ATB_SEL] = 67,
+ [CLK_TOP_CAMTG_SEL] = 68,
+ [CLK_TOP_CAMTG1_SEL] = 69,
+ [CLK_TOP_UART_SEL] = 70,
+ [CLK_TOP_SPI_SEL] = 71,
+ [CLK_TOP_MSDC50_0_HC_SEL] = 72,
+ [CLK_TOP_MSDC2_2_HC_SEL] = 73,
+ [CLK_TOP_MSDC50_0_SEL] = 74,
+ [CLK_TOP_MSDC50_2_SEL] = 75,
+ [CLK_TOP_MSDC30_1_SEL] = 76,
+ [CLK_TOP_AUDIO_SEL] = 77,
+ [CLK_TOP_AUD_INTBUS_SEL] = 78,
+ [CLK_TOP_AUD_1_SEL] = 79,
+ [CLK_TOP_AUD_2_SEL] = 80,
+ [CLK_TOP_AUD_ENGEN1_SEL] = 81,
+ [CLK_TOP_AUD_ENGEN2_SEL] = 82,
+ [CLK_TOP_AUD_SPDIF_SEL] = 83,
+ [CLK_TOP_DISP_PWM_SEL] = 84,
+ [CLK_TOP_DXCC_SEL] = 85,
+ [CLK_TOP_SSUSB_SYS_SEL] = 86,
+ [CLK_TOP_SSUSB_XHCI_SEL] = 87,
+ [CLK_TOP_SPM_SEL] = 88,
+ [CLK_TOP_I2C_SEL] = 89,
+ [CLK_TOP_PWM_SEL] = 90,
+ [CLK_TOP_SENIF_SEL] = 91,
+ [CLK_TOP_AES_FDE_SEL] = 92,
+ [CLK_TOP_CAMTM_SEL] = 93,
+ [CLK_TOP_DPI0_SEL] = 94,
+ [CLK_TOP_DPI1_SEL] = 95,
+ [CLK_TOP_DSP_SEL] = 96,
+ [CLK_TOP_NFI2X_SEL] = 97,
+ [CLK_TOP_NFIECC_SEL] = 98,
+ [CLK_TOP_ECC_SEL] = 99,
+ [CLK_TOP_ETH_SEL] = 100,
+ [CLK_TOP_GCPU_SEL] = 101,
+ [CLK_TOP_GCPU_CPM_SEL] = 102,
+ [CLK_TOP_APU_SEL] = 103,
+ [CLK_TOP_APU_IF_SEL] = 104,
+ /* GATE */
+ [CLK_TOP_AUD_I2S0_M] = 105,
+ [CLK_TOP_AUD_I2S1_M] = 106,
+ [CLK_TOP_AUD_I2S2_M] = 107,
+ [CLK_TOP_AUD_I2S3_M] = 108,
+ [CLK_TOP_AUD_TDMOUT_M] = 109,
+ [CLK_TOP_AUD_TDMOUT_B] = 110,
+ [CLK_TOP_AUD_TDMIN_M] = 111,
+ [CLK_TOP_AUD_TDMIN_B] = 112,
+ [CLK_TOP_AUD_SPDIF_M] = 113,
+ [CLK_TOP_USB20_48M_EN] = 114,
+ [CLK_TOP_UNIVPLL_48M_EN] = 115,
+ [CLK_TOP_LVDSTX_CLKDIG_EN] = 116,
+ [CLK_TOP_VPLL_DPIX_EN] = 117,
+ [CLK_TOP_SSUSB_TOP_CK_EN] = 118,
+ [CLK_TOP_SSUSB_PHY_CK_EN] = 119,
+ [CLK_TOP_CONN_32K] = 120,
+ [CLK_TOP_CONN_26M] = 121,
+ [CLK_TOP_DSP_32K] = 122,
+ [CLK_TOP_DSP_26M] = 123,
+};
+
#define FIXED_CLK0(_id, _rate) \
FIXED_CLK(_id, CLK_XTAL, CLK_PARENT_XTAL, _rate)
@@ -82,6 +222,7 @@ static const struct mtk_clk_tree mt8365_apmixed_tree = {
FIXED_CLK(_id, CLK_TOP_CLK_NULL, CLK_PARENT_TOPCKGEN, _rate)
static const struct mtk_fixed_clk top_fixed_clks[] = {
+ FIXED_CLK0(CLK_TOP_CLK32K, 32000),
FIXED_CLK0(CLK_TOP_CLK_NULL, 0),
FIXED_CLK1(CLK_TOP_I2S0_BCK, 26000000),
FIXED_CLK0(CLK_TOP_DSI0_LNTC_DSICK, 75000000),
@@ -115,7 +256,6 @@ static const struct mtk_fixed_factor top_divs[] = {
PLL_FACTOR(CLK_TOP_SYSPLL_D7, "syspll_d7", CLK_APMIXED_MAINPLL, 1, 7),
PLL_FACTOR(CLK_TOP_SYSPLL4_D2, "syspll4_d2", CLK_APMIXED_MAINPLL, 1, 14),
PLL_FACTOR(CLK_TOP_SYSPLL4_D4, "syspll4_d4", CLK_APMIXED_MAINPLL, 1, 28),
- PLL_FACTOR(CLK_TOP_UNIVPLL, "univpll", CLK_APMIXED_UNIV_EN, 1, 2),
PLL_FACTOR(CLK_TOP_UNIVPLL_D2, "univpll_d2", CLK_APMIXED_UNIVPLL, 1, 2),
PLL_FACTOR(CLK_TOP_UNIVPLL1_D2, "univpll1_d2", CLK_APMIXED_UNIVPLL, 1, 4),
PLL_FACTOR(CLK_TOP_UNIVPLL1_D4, "univpll1_d4", CLK_APMIXED_UNIVPLL, 1, 8),
@@ -146,6 +286,7 @@ static const struct mtk_fixed_factor top_divs[] = {
PLL_FACTOR1(CLK_TOP_APLL2_D2, "apll2_d2", CLK_TOP_APLL2, 1, 2),
PLL_FACTOR1(CLK_TOP_APLL2_D4, "apll2_d4", CLK_TOP_APLL2, 1, 4),
PLL_FACTOR1(CLK_TOP_APLL2_D8, "apll2_d8", CLK_TOP_APLL2, 1, 8),
+ PLL_FACTOR2(CLK_TOP_CLK26M, "clk26m_ck", CLK_XTAL, 1, 1),
PLL_FACTOR2(CLK_TOP_SYS_26M_D2, "sys_26m_d2", CLK_XTAL, 1, 2),
PLL_FACTOR(CLK_TOP_MSDCPLL, "msdcpll_ck", CLK_APMIXED_MSDCPLL, 1, 1),
PLL_FACTOR(CLK_TOP_MSDCPLL_D2, "msdcpll_d2", CLK_APMIXED_MSDCPLL, 1, 2),
@@ -567,9 +708,11 @@ static const struct mtk_gate top_clk_gates[] = {
static const struct mtk_clk_tree mt8365_topckgen_tree = {
.xtal_rate = 26 * MHZ,
- .fdivs_offs = CLK_TOP_MFGPLL,
- .muxes_offs = CLK_TOP_AXI_SEL,
- .gates_offs = CLK_TOP_AUD_I2S0_M,
+ .id_offs_map = mt8365_topckgen_id_map,
+ .id_offs_map_size = ARRAY_SIZE(mt8365_topckgen_id_map),
+ .fdivs_offs = mt8365_topckgen_id_map[CLK_TOP_MFGPLL],
+ .muxes_offs = mt8365_topckgen_id_map[CLK_TOP_AXI_SEL],
+ .gates_offs = mt8365_topckgen_id_map[CLK_TOP_AUD_I2S0_M],
.fclks = top_fixed_clks,
.fdivs = top_divs,
.muxes = top_muxes,
--
2.43.0
More information about the U-Boot
mailing list