1 /*
2 * Copyright 2023 NXP
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6 #include "hal_clock_platform.h"
7
8 /*******************************************************************************
9 * Definitions
10 ******************************************************************************/
11
12 const hal_clk_id_e mux_tbl[HAL_CLOCK_PLATFORM_MAX_ID][HAL_CLOCK_PLATFORM_MUX_MAX_ID] = {
13 {hal_clock_invalid, hal_clock_invalid, hal_clock_invalid, hal_clock_invalid}, /* ext */
14 {hal_clock_invalid, hal_clock_invalid, hal_clock_invalid, hal_clock_invalid},
15 {hal_clock_invalid, hal_clock_invalid, hal_clock_invalid, hal_clock_invalid},
16 {hal_clock_invalid, hal_clock_invalid, hal_clock_invalid, hal_clock_invalid},
17 {hal_clock_invalid, hal_clock_invalid, hal_clock_invalid, hal_clock_invalid},
18 {hal_clock_invalid, hal_clock_invalid, hal_clock_invalid, hal_clock_invalid},
19 {hal_clock_invalid, hal_clock_invalid, hal_clock_invalid, hal_clock_invalid},
20 {hal_clock_invalid, hal_clock_invalid, hal_clock_invalid, hal_clock_invalid},
21 {hal_clock_invalid, hal_clock_invalid, hal_clock_invalid, hal_clock_invalid},
22 {hal_clock_invalid, hal_clock_invalid, hal_clock_invalid, hal_clock_invalid},
23 {hal_clock_invalid, hal_clock_invalid, hal_clock_invalid, hal_clock_invalid},
24 {hal_clock_invalid, hal_clock_invalid, hal_clock_invalid, hal_clock_invalid},
25 {hal_clock_invalid, hal_clock_invalid, hal_clock_invalid, hal_clock_invalid},
26 {hal_clock_invalid, hal_clock_invalid, hal_clock_invalid, hal_clock_invalid},
27 {hal_clock_invalid, hal_clock_invalid, hal_clock_invalid, hal_clock_invalid},
28 {hal_clock_invalid, hal_clock_invalid, hal_clock_invalid, hal_clock_invalid},
29 {hal_clock_invalid, hal_clock_invalid, hal_clock_invalid, hal_clock_invalid},
30 {hal_clock_invalid, hal_clock_invalid, hal_clock_invalid, hal_clock_invalid},
31 {hal_clock_invalid, hal_clock_invalid, hal_clock_invalid, hal_clock_invalid},
32 {hal_clock_invalid, hal_clock_invalid, hal_clock_invalid, hal_clock_invalid},
33 {hal_clock_invalid, hal_clock_invalid, hal_clock_invalid, hal_clock_invalid},
34 {hal_clock_invalid, hal_clock_invalid, hal_clock_invalid, hal_clock_invalid},
35 {hal_clock_invalid, hal_clock_invalid, hal_clock_invalid, hal_clock_invalid},
36 {hal_clock_invalid, hal_clock_invalid, hal_clock_invalid, hal_clock_invalid},
37 {hal_clock_invalid, hal_clock_invalid, hal_clock_invalid, hal_clock_invalid},
38 {hal_clock_invalid, hal_clock_invalid, hal_clock_invalid, hal_clock_invalid},
39 {hal_clock_invalid, hal_clock_invalid, hal_clock_invalid, hal_clock_invalid},
40 {hal_clock_invalid, hal_clock_invalid, hal_clock_invalid, hal_clock_invalid},
41 {hal_clock_invalid, hal_clock_invalid, hal_clock_invalid, hal_clock_invalid},
42 {hal_clock_invalid, hal_clock_invalid, hal_clock_invalid, hal_clock_invalid},
43 {hal_clock_invalid, hal_clock_invalid, hal_clock_invalid, hal_clock_invalid},
44 {hal_clock_invalid, hal_clock_invalid, hal_clock_invalid, hal_clock_invalid},
45 {hal_clock_invalid, hal_clock_invalid, hal_clock_invalid, hal_clock_invalid},
46 {hal_clock_invalid, hal_clock_invalid, hal_clock_invalid, hal_clock_invalid},
47 {hal_clock_invalid, hal_clock_invalid, hal_clock_invalid, hal_clock_invalid},
48 {hal_clock_invalid, hal_clock_invalid, hal_clock_invalid, hal_clock_invalid},
49 {hal_clock_invalid, hal_clock_invalid, hal_clock_invalid, hal_clock_invalid},
50 {hal_clock_invalid, hal_clock_invalid, hal_clock_invalid, hal_clock_invalid},
51 {hal_clock_invalid, hal_clock_invalid, hal_clock_invalid, hal_clock_invalid},
52 {hal_clock_invalid, hal_clock_invalid, hal_clock_invalid, hal_clock_invalid},
53 {hal_clock_invalid, hal_clock_invalid, hal_clock_invalid, hal_clock_invalid}, /* ext2 */
54
55 {hal_clock_osc24m, hal_clock_syspll1dfs0div2, hal_clock_syspll1dfs1div2, hal_clock_fro}, /* adc */
56 {hal_clock_osc24m, hal_clock_syspll1dfs0div2, hal_clock_syspll1dfs1div2, hal_clock_fro}, /* tmu */
57 {hal_clock_osc24m, hal_clock_syspll1dfs0div2, hal_clock_syspll1dfs1div2, hal_clock_fro}, /* bus_aon */
58 {hal_clock_osc24m, hal_clock_syspll1dfs0div2, hal_clock_syspll1dfs1div2, hal_clock_fro}, /* can1 */
59 {hal_clock_osc24m, hal_clock_syspll1dfs0div2, hal_clock_syspll1dfs1div2, hal_clock_fro}, /* i3c1 */
60 {hal_clock_osc24m, hal_clock_syspll1dfs0div2, hal_clock_syspll1dfs1div2, hal_clock_fro}, /* i3c1_slow */
61 {hal_clock_osc24m, hal_clock_syspll1dfs0div2, hal_clock_syspll1dfs1div2, hal_clock_fro}, /* lpi2c1 */
62 {hal_clock_osc24m, hal_clock_syspll1dfs0div2, hal_clock_syspll1dfs1div2, hal_clock_fro}, /* lpi2c2 */
63 {hal_clock_osc24m, hal_clock_syspll1dfs0div2, hal_clock_syspll1dfs1div2, hal_clock_fro}, /* lpspi1 */
64 {hal_clock_osc24m, hal_clock_syspll1dfs0div2, hal_clock_syspll1dfs1div2, hal_clock_fro}, /* lpspi2 */
65 {hal_clock_osc24m, hal_clock_syspll1dfs0div2, hal_clock_syspll1dfs1div2, hal_clock_fro}, /* lptmr1 */
66 {hal_clock_osc24m, hal_clock_syspll1dfs0div2, hal_clock_syspll1dfs1div2, hal_clock_fro}, /* lpuart1 */
67 {hal_clock_osc24m, hal_clock_syspll1dfs0div2, hal_clock_syspll1dfs1div2, hal_clock_fro}, /* lpuart2 */
68 {hal_clock_osc24m, hal_clock_syspll1dfs0div2, hal_clock_syspll1dfs1div2, hal_clock_fro}, /* m33 */
69 {hal_clock_osc24m, hal_clock_syspll1dfs0div2, hal_clock_syspll1dfs1div2, hal_clock_fro}, /* m33_systick */
70 {hal_clock_osc24m, hal_clock_audiopll1, hal_clock_audiopll2, hal_clock_ext}, /* mqs1 */
71 {hal_clock_osc24m, hal_clock_audiopll1, hal_clock_audiopll2, hal_clock_ext}, /* pdm */
72 {hal_clock_osc24m, hal_clock_audiopll1, hal_clock_audiopll2, hal_clock_ext}, /* sai1 */
73 {hal_clock_osc24m, hal_clock_syspll1dfs0, hal_clock_syspll1dfs1div2, hal_clock_fro}, /* sentinel */
74 {hal_clock_osc24m, hal_clock_syspll1dfs0, hal_clock_audiopll1, hal_clock_ext}, /* tpm2 */
75 {hal_clock_osc24m, hal_clock_syspll1dfs0div2, hal_clock_syspll1dfs1div2, hal_clock_fro}, /* tstmr1 */
76 {hal_clock_osc24m, hal_clock_syspll1dfs0div2, hal_clock_syspll1dfs1div2, hal_clock_fro}, /* cam_apb */
77 {hal_clock_osc24m, hal_clock_syspll1dfs0, hal_clock_syspll1dfs1, hal_clock_syspll1dfs2}, /* cam_axi */
78 {hal_clock_osc24m, hal_clock_syspll1dfs0, hal_clock_syspll1dfs1, hal_clock_syspll1dfs2}, /* cam_cm0 */
79 {hal_clock_osc24m, hal_clock_syspll1dfs0, hal_clock_syspll1dfs1, hal_clock_syspll1dfs2}, /* cam_isi */
80 {hal_clock_osc24m, hal_clock_audiopll1, hal_clock_videopll1, hal_clock_invalid}, /* mipi_phy_cfg */
81 {hal_clock_osc24m, hal_clock_audiopll1, hal_clock_videopll1, hal_clock_invalid}, /* mipi_phy_pll_bypass */
82 {hal_clock_osc24m, hal_clock_audiopll1, hal_clock_videopll1, hal_clock_invalid}, /* mipi_phy_pll_ref */
83 {hal_clock_osc24m, hal_clock_audiopll1, hal_clock_videopll1, hal_clock_invalid}, /* mipi_test_byte */
84 {hal_clock_osc24m, hal_clock_syspll1dfs0, hal_clock_syspll1dfs1, hal_clock_syspll1dfs2}, /* arm_a55 */
85 {hal_clock_osc24m, hal_clock_syspll1dfs0div2, hal_clock_syspll1dfs1div2, hal_clock_fro}, /* arm_a55_mtr_bus */
86 {hal_clock_osc24m, hal_clock_syspll1dfs0, hal_clock_syspll1dfs1, hal_clock_syspll1dfs2}, /* arm_a55_periph */
87 {hal_clock_osc24m, hal_clock_syspll1dfs0, hal_clock_syspll1dfs1, hal_clock_syspll1dfs2}, /* dram_alt */
88 {hal_clock_osc24m, hal_clock_syspll1dfs0div2, hal_clock_syspll1dfs1div2, hal_clock_fro}, /* dram_apb */
89 {hal_clock_osc24m, hal_clock_syspll1dfs0div2, hal_clock_syspll1dfs1div2, hal_clock_fro}, /* disp_apb */
90 {hal_clock_osc24m, hal_clock_syspll1dfs0, hal_clock_syspll1dfs1, hal_clock_syspll1dfs2}, /* disp_axi */
91 {hal_clock_osc24m, hal_clock_syspll1dfs0, hal_clock_syspll1dfs1, hal_clock_syspll1dfs2}, /* disp_dp */
92 {hal_clock_osc24m, hal_clock_syspll1dfs0, hal_clock_syspll1dfs1, hal_clock_syspll1dfs2}, /* disp_ocram */
93 {hal_clock_osc24m, hal_clock_syspll1dfs0, hal_clock_syspll1dfs1, hal_clock_syspll1dfs2}, /* disp_usb31 */
94 {hal_clock_osc24m, hal_clock_audiopll1, hal_clock_videopll1, hal_clock_invalid}, /* disp1_pix */
95 {hal_clock_osc24m, hal_clock_audiopll1, hal_clock_videopll2, hal_clock_syspll1dfs2}, /* disp2_pix */
96 {hal_clock_osc24m, hal_clock_audiopll1, hal_clock_videopll3, hal_clock_syspll1dfs2}, /* disp3_pix */
97 {hal_clock_osc24m, hal_clock_syspll1dfs0div2, hal_clock_syspll1dfs1div2, hal_clock_fro}, /* gpu_apb */
98 {hal_clock_osc24m, hal_clock_syspll1dfs0, hal_clock_syspll1dfs1, hal_clock_syspll1dfs2}, /* gpu */
99 {hal_clock_osc24m, hal_clock_audiopll1, hal_clock_videopll1, hal_clock_syspll1dfs2}, /* hsio_acscan_480m */
100 {hal_clock_osc24m, hal_clock_syspll1dfs0div2, hal_clock_syspll1dfs1div2, hal_clock_fro}, /* hsio_acscan_80m */
101 {hal_clock_osc24m, hal_clock_syspll1dfs0, hal_clock_syspll1dfs1, hal_clock_syspll1dfs2}, /* hsio */
102 {hal_clock_osc24m, hal_clock_syspll1dfs0div2, hal_clock_syspll1dfs1div2, hal_clock_fro}, /* hsio_pcie_aux */
103 {hal_clock_osc24m, hal_clock_syspll1dfs0, hal_clock_syspll1dfs1, hal_clock_syspll1dfs2}, /* hsio_pcie_test_160m */
104 {hal_clock_osc24m, hal_clock_syspll1dfs0, hal_clock_syspll1dfs1, hal_clock_syspll1dfs2}, /* hsio_pcie_test_400m */
105 {hal_clock_osc24m, hal_clock_syspll1dfs0, hal_clock_syspll1dfs1, hal_clock_syspll1dfs2}, /* hsio_pcie_test_500m */
106 {hal_clock_osc24m, hal_clock_syspll1dfs0div2, hal_clock_syspll1dfs1div2, hal_clock_fro}, /* hsio_usb_test_50m */
107 {hal_clock_osc24m, hal_clock_syspll1dfs0div2, hal_clock_syspll1dfs1div2, hal_clock_fro}, /* hsio_usb_test_60m */
108 {hal_clock_osc24m, hal_clock_syspll1dfs0div2, hal_clock_syspll1dfs1div2, hal_clock_fro}, /* bus_m7 */
109 {hal_clock_osc24m, hal_clock_syspll1dfs0, hal_clock_syspll1dfs1, hal_clock_syspll1dfs2}, /* m7 */
110 {hal_clock_osc24m, hal_clock_syspll1dfs0div2, hal_clock_syspll1dfs1div2, hal_clock_fro}, /* m7_systick */
111 {hal_clock_osc24m, hal_clock_syspll1dfs0div2, hal_clock_syspll1dfs1div2, hal_clock_fro}, /* bus_netcmix */
112 {hal_clock_osc24m, hal_clock_syspll1dfs0, hal_clock_syspll1dfs1, hal_clock_syspll1dfs2}, /* enet */
113 {hal_clock_osc24m, hal_clock_syspll1dfs0, hal_clock_syspll1dfs1div2, hal_clock_fro}, /* enet_phy_test_200m */
114 {hal_clock_osc24m, hal_clock_syspll1dfs0, hal_clock_syspll1dfs1, hal_clock_syspll1dfs2}, /* enet_phy_test_500m */
115 {hal_clock_osc24m, hal_clock_syspll1dfs0, hal_clock_syspll1dfs1, hal_clock_syspll1dfs2}, /* enet_phy_test_667m */
116 {hal_clock_osc24m, hal_clock_syspll1dfs0, hal_clock_syspll1dfs1div2, hal_clock_fro}, /* enet_ref */
117 {hal_clock_osc24m, hal_clock_syspll1dfs0div2, hal_clock_syspll1dfs1div2, hal_clock_fro}, /* enet_timer1 */
118 {hal_clock_osc24m, hal_clock_audiopll1, hal_clock_audiopll2, hal_clock_ext}, /* mqs2 */
119 {hal_clock_osc24m, hal_clock_audiopll1, hal_clock_audiopll2, hal_clock_ext}, /* sai2 */
120 {hal_clock_osc24m, hal_clock_syspll1dfs0div2, hal_clock_syspll1dfs1div2, hal_clock_fro}, /* noc_apb */
121 {hal_clock_osc24m, hal_clock_syspll1dfs0, hal_clock_syspll1dfs1, hal_clock_syspll1dfs2}, /* noc */
122 {hal_clock_osc24m, hal_clock_syspll1dfs0div2, hal_clock_syspll1dfs1div2, hal_clock_fro}, /* npu_apb */
123 {hal_clock_osc24m, hal_clock_syspll1dfs0, hal_clock_syspll1dfs1, hal_clock_syspll1dfs2}, /* npu */
124 {hal_clock_osc24m, hal_clock_syspll1dfs0, hal_clock_osc32k, hal_clock_audiopll1}, /* ccm_cko1 */
125 {hal_clock_osc24m, hal_clock_syspll1dfs0, hal_clock_osc32k, hal_clock_videopll1}, /* ccm_cko2 */
126 {hal_clock_osc24m, hal_clock_syspll1dfs0, hal_clock_osc32k, hal_clock_videopll2}, /* ccm_cko3 */
127 {hal_clock_osc24m, hal_clock_syspll1dfs0, hal_clock_osc32k, hal_clock_videopll1}, /* ccm_cko4 */
128 {hal_clock_osc24m, hal_clock_syspll1dfs0div2, hal_clock_syspll1dfs1div2, hal_clock_fro}, /* vpu_apb */
129 {hal_clock_osc24m, hal_clock_syspll1dfs0, hal_clock_syspll1dfs1, hal_clock_syspll1dfs2}, /* vpu */
130 {hal_clock_osc24m, hal_clock_syspll1dfs0, hal_clock_syspll1dfs1, hal_clock_syspll1dfs2}, /* vpu_dsp */
131 {hal_clock_osc24m, hal_clock_syspll1dfs0, hal_clock_syspll1dfs1, hal_clock_syspll1dfs2}, /* vpu_jpeg */
132 {hal_clock_osc24m, hal_clock_syspll1dfs0, hal_clock_syspll1dfs1div2, hal_clock_fro}, /* audio_xcvr */
133 {hal_clock_osc24m, hal_clock_syspll1dfs0div2, hal_clock_syspll1dfs1div2, hal_clock_fro}, /* bus_wakeup */
134 {hal_clock_osc24m, hal_clock_syspll1dfs0div2, hal_clock_syspll1dfs1div2, hal_clock_fro}, /* can2 */
135 {hal_clock_osc24m, hal_clock_syspll1dfs0div2, hal_clock_syspll1dfs1div2, hal_clock_fro}, /* can3 */
136 {hal_clock_osc24m, hal_clock_syspll1dfs0div2, hal_clock_syspll1dfs1div2, hal_clock_fro}, /* i3c2_slow */
137 {hal_clock_osc24m, hal_clock_syspll1dfs0div2, hal_clock_syspll1dfs1div2, hal_clock_fro}, /* lpi2c3 */
138 {hal_clock_osc24m, hal_clock_syspll1dfs0div2, hal_clock_syspll1dfs1div2, hal_clock_fro}, /* lpi2c4 */
139 {hal_clock_osc24m, hal_clock_syspll1dfs0div2, hal_clock_syspll1dfs1div2, hal_clock_fro}, /* lpi2c5 */
140 {hal_clock_osc24m, hal_clock_syspll1dfs0div2, hal_clock_syspll1dfs1div2, hal_clock_fro}, /* lpi2c6 */
141 {hal_clock_osc24m, hal_clock_syspll1dfs0div2, hal_clock_syspll1dfs1div2, hal_clock_fro}, /* lpi2c7 */
142 {hal_clock_osc24m, hal_clock_syspll1dfs0div2, hal_clock_syspll1dfs1div2, hal_clock_fro}, /* lpi2c8 */
143 {hal_clock_osc24m, hal_clock_syspll1dfs0div2, hal_clock_syspll1dfs1div2, hal_clock_fro}, /* lpspi3 */
144 {hal_clock_osc24m, hal_clock_syspll1dfs0div2, hal_clock_syspll1dfs1div2, hal_clock_fro}, /* lpspi4 */
145 {hal_clock_osc24m, hal_clock_syspll1dfs0div2, hal_clock_syspll1dfs1div2, hal_clock_fro}, /* lpspi5 */
146 {hal_clock_osc24m, hal_clock_syspll1dfs0div2, hal_clock_syspll1dfs1div2, hal_clock_fro}, /* lpspi6 */
147 {hal_clock_osc24m, hal_clock_syspll1dfs0div2, hal_clock_syspll1dfs1div2, hal_clock_fro}, /* lpspi7 */
148 {hal_clock_osc24m, hal_clock_syspll1dfs0div2, hal_clock_syspll1dfs1div2, hal_clock_fro}, /* lpspi8 */
149 {hal_clock_osc24m, hal_clock_audiopll1, hal_clock_audiopll2, hal_clock_ext}, /* sai3 */
150 {hal_clock_osc24m, hal_clock_audiopll1, hal_clock_audiopll2, hal_clock_ext}, /* sai4 */
151 {hal_clock_osc24m, hal_clock_audiopll1, hal_clock_audiopll2, hal_clock_ext}, /* sai5 */
152 {hal_clock_osc24m, hal_clock_audiopll1, hal_clock_audiopll2, hal_clock_ext}, /* spdif */
153 {hal_clock_osc24m, hal_clock_syspll1dfs0div2, hal_clock_syspll1dfs1div2, hal_clock_fro}, /* swo_trace */
154 {hal_clock_osc24m, hal_clock_syspll1dfs0, hal_clock_audiopll1, hal_clock_ext}, /* tpm4 */
155 {hal_clock_osc24m, hal_clock_syspll1dfs0, hal_clock_audiopll1, hal_clock_ext}, /* tpm5 */
156 {hal_clock_osc24m, hal_clock_syspll1dfs0, hal_clock_audiopll1, hal_clock_ext}, /* tpm6 */
157 {hal_clock_osc24m, hal_clock_syspll1dfs0div2, hal_clock_syspll1dfs1div2, hal_clock_fro}, /* tstmr2 */
158 {hal_clock_osc24m, hal_clock_syspll1dfs0div2, hal_clock_syspll1dfs1div2, hal_clock_fro}, /* usb_phy_burunin */
159 {hal_clock_osc24m, hal_clock_syspll1dfs0, hal_clock_syspll1dfs1, hal_clock_syspll1dfs2}, /* usdhc1 */
160 {hal_clock_osc24m, hal_clock_syspll1dfs0, hal_clock_syspll1dfs1, hal_clock_syspll1dfs2}, /* usdhc2 */
161 {hal_clock_osc24m, hal_clock_syspll1dfs0, hal_clock_syspll1dfs1, hal_clock_syspll1dfs2}, /* usdhc3 */
162 {hal_clock_osc24m, hal_clock_syspll1dfs0, hal_clock_syspll1dfs1, hal_clock_syspll1dfs2}, /* v2x_pk */
163 {hal_clock_osc24m, hal_clock_syspll1dfs0, hal_clock_syspll1dfs1, hal_clock_syspll1dfs2}, /* wakeup_axi */
164 {hal_clock_osc24m, hal_clock_syspll1dfs0, hal_clock_syspll1dfs1, hal_clock_syspll1dfs2} /* xspi_slv_root */
165 };
166
167 /*******************************************************************************
168 * API
169 ******************************************************************************/
HAL_ClockPlatformGetMuxId(hal_clk_id_e clk_id,hal_clk_id_e pclk_id)170 uint32_t HAL_ClockPlatformGetMuxId(hal_clk_id_e clk_id, hal_clk_id_e pclk_id)
171 {
172 uint32_t mux_id = 0;
173 while (mux_id < HAL_CLOCK_PLATFORM_MUX_MAX_ID)
174 {
175 if (mux_tbl[clk_id][mux_id] == pclk_id)
176 {
177 break;
178 }
179 mux_id++;
180 }
181 return mux_id;
182 }
183