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 <[email protected]> --- 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

