clk: mediatek: mt8365: fix missing topckgen IDs

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@baylibre.com>
This commit is contained in:
David Lechner
2026-01-07 10:21:15 -06:00
committed by Tom Rini
parent ba207d7f54
commit 682528df20

View File

@@ -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,