Hardware Libraries  20.1
Arria 10 SoC Hardware Manager
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups
alt_clock_manager.h
1 /******************************************************************************
2  *
3  * Copyright 2015 Altera Corporation. All Rights Reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are met:
7  *
8  * 1. Redistributions of source code must retain the above copyright notice,
9  * this list of conditions and the following disclaimer.
10  *
11  * 2. Redistributions in binary form must reproduce the above copyright notice,
12  * this list of conditions and the following disclaimer in the documentation
13  * and/or other materials provided with the distribution.
14  *
15  * 3. Neither the name of the copyright holder nor the names of its contributors
16  * may be used to endorse or promote products derived from this software without
17  * specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
23  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29  * POSSIBILITY OF SUCH DAMAGE.
30  *
31  ******************************************************************************/
32 #ifndef __ALT_CLK_MGR_H__
33 #define __ALT_CLK_MGR_H__
34 
35 #include "hwlib.h"
36 
37 typedef uint32_t alt_freq_t;
38 
39 /* ------------------------------------------------------------------
40 // Clock Source Frequency
41 // ------------------------------------------------------------------ */
42 typedef struct {
43  uint32_t clk_freq_of_eosc1;
44  uint32_t clk_freq_of_f2h_free;
45  uint32_t clk_freq_of_cb_intosc_ls;
46 } CLOCK_SOURCE_CONFIG;
47 
48 /* ------------------------------------------------------------------
49 // clock_manager.mainpll
50 // ------------------------------------------------------------------ */
51 typedef struct {
52  uint32_t vco0_psrc;
53  uint32_t vco1_denom;
54  uint32_t vco1_numer;
55  uint32_t mpuclk_cnt;
56  uint32_t mpuclk_src;
57  uint32_t nocclk_cnt;
58  uint32_t nocclk_src;
59  uint32_t cntr2clk_cnt;
60  uint32_t cntr3clk_cnt;
61  uint32_t cntr4clk_cnt;
62  uint32_t cntr5clk_cnt;
63  uint32_t cntr6clk_cnt;
64  uint32_t cntr7clk_cnt;
65  uint32_t cntr7clk_src;
66  uint32_t cntr8clk_cnt;
67  uint32_t cntr9clk_cnt;
68  uint32_t cntr9clk_src;
69  uint32_t cntr15clk_cnt;
70  uint32_t nocdiv_l4mainclk;
71  uint32_t nocdiv_l4mpclk;
72  uint32_t nocdiv_l4spclk;
73  uint32_t nocdiv_csatclk;
74  uint32_t nocdiv_cstraceclk;
75  uint32_t nocdiv_cspdbgclk;
76 } CLOCK_MANAGER_MAIN_PLL_CONFIG;
77 
78 /* ------------------------------------------------------------------
79 // clock_manager.perpll
80 // ------------------------------------------------------------------ */
81 typedef struct {
82  uint32_t vco0_psrc;
83  uint32_t vco1_denom;
84  uint32_t vco1_numer;
85  uint32_t cntr2clk_cnt;
86  uint32_t cntr2clk_src;
87  uint32_t cntr3clk_cnt;
88  uint32_t cntr3clk_src;
89  uint32_t cntr4clk_cnt;
90  uint32_t cntr4clk_src;
91  uint32_t cntr5clk_cnt;
92  uint32_t cntr5clk_src;
93  uint32_t cntr6clk_cnt;
94  uint32_t cntr6clk_src;
95  uint32_t cntr7clk_cnt;
96  uint32_t cntr8clk_cnt;
97  uint32_t cntr8clk_src;
98  uint32_t cntr9clk_cnt;
99  uint32_t emacctl_emac0sel;
100  uint32_t emacctl_emac1sel;
101  uint32_t emacctl_emac2sel;
102  uint32_t gpiodiv_gpiodbclk;
103 } CLOCK_MANAGER_PER_PLL_CONFIG;
104 
105 /* ------------------------------------------------------------------
106 // clock_manager.alteragrp
107 // ------------------------------------------------------------------ */
108 typedef struct {
109  uint32_t mpuclk;
110  uint32_t nocclk;
111 } CLOCK_MANAGER_ALTERA_GRP_CONFIG;
112 
113 /* ------------------------------------------------------------------
114 // clock_manager
115 // ------------------------------------------------------------------ */
116 
117 typedef struct {
118  CLOCK_MANAGER_MAIN_PLL_CONFIG mainpll;
119  CLOCK_MANAGER_PER_PLL_CONFIG perpll;
120  CLOCK_MANAGER_ALTERA_GRP_CONFIG alteragrp;
121 } CLOCK_MANAGER_CONFIG;
122 
123 /* ==================================================================
124 // Functions Definition
125 // ================================================================== */
126 
127 ALT_STATUS_CODE
128 alt_clkmgr_config(
129  CLOCK_MANAGER_CONFIG* cfg,
130  CLOCK_SOURCE_CONFIG* inclks
131  );
132 
133 
134 typedef enum ALT_CLK
135 {
136  ALT_CLK_OSC1,
137  ALT_CLK_F2S_FREE_CLK,
138  ALT_CLK_INTOSC_HS_DIV2,
141  ALT_CLK_MPU,
145  ALT_CLK_L4_SYS_FREE,
149  ALT_CLK_CS_TIMER,
150  ALT_CLK_CS_AT,
151  ALT_CLK_CS_PDBG,
152  ALT_CLK_CS_TRACE,
153  ALT_CLK_S2F_USER0,
154  ALT_CLK_S2F_USER1,
155  ALT_CLK_HMC_PLL_REF,
158  ALT_CLK_EMAC2,
159  ALT_CLK_EMAC_PTP,
160  ALT_CLK_GPIO,
162 
163  ALT_CLK_USB,
164  ALT_CLK_SPIM,
165  ALT_CLK_NAND,
166  ALT_CLK_QSPI,
167 
168  ALT_CLK_UNKNOWN
169 } ALT_CLK_t;
170 
171 /******************************************************************************/
185 ALT_STATUS_CODE alt_clk_freq_get(ALT_CLK_t clk, uint32_t *p_freq_khz);
186 
187 
188 
189 /******************************************************************************/
197 ALT_STATUS_CODE alt_clk_freq_get_osc1(alt_freq_t *pfreq);
198 ALT_STATUS_CODE alt_clk_freq_get_cb_intosc_hs_div2_clk(alt_freq_t *pfreq);
199 ALT_STATUS_CODE alt_clk_freq_get_f2s_free_clk(alt_freq_t *pfreq);
200 ALT_STATUS_CODE alt_clk_freq_get_main_pll(alt_freq_t *pfreq);
201 ALT_STATUS_CODE alt_clk_freq_get_peri_pll(alt_freq_t *pfreq);
202 ALT_STATUS_CODE alt_clk_freq_get_mpu(alt_freq_t *pfreq);
203 ALT_STATUS_CODE alt_clk_freq_get_mpu_periph(alt_freq_t *pfreq);
204 ALT_STATUS_CODE alt_clk_freq_get_mpu_l2ram(alt_freq_t *pfreq);
205 ALT_STATUS_CODE alt_clk_freq_get_l3_main_free(alt_freq_t *pfreq);
206 ALT_STATUS_CODE alt_clk_freq_get_l4_sys_free(alt_freq_t *pfreq);
207 ALT_STATUS_CODE alt_clk_freq_get_l4_main(alt_freq_t *pfreq);
208 ALT_STATUS_CODE alt_clk_freq_get_l4_mp(alt_freq_t *pfreq);
209 ALT_STATUS_CODE alt_clk_freq_get_l4_sp(alt_freq_t *pfreq);
210 ALT_STATUS_CODE alt_clk_freq_get_cs_timer(alt_freq_t *pfreq);
211 ALT_STATUS_CODE alt_clk_freq_get_cs_at(alt_freq_t *pfreq);
212 ALT_STATUS_CODE alt_clk_freq_get_cs_pdbg(alt_freq_t *pfreq);
213 ALT_STATUS_CODE alt_clk_freq_get_cs_trace(alt_freq_t *pfreq);
214 ALT_STATUS_CODE alt_clk_freq_get_emac0(alt_freq_t *pfreq);
215 ALT_STATUS_CODE alt_clk_freq_get_emac1(alt_freq_t *pfreq);
216 ALT_STATUS_CODE alt_clk_freq_get_emac2(alt_freq_t *pfreq);
217 ALT_STATUS_CODE alt_clk_freq_get_emac_ptp(alt_freq_t *pfreq);
218 ALT_STATUS_CODE alt_clk_freq_get_gpio(alt_freq_t *pfreq);
219 ALT_STATUS_CODE alt_clk_freq_get_sdmmc(alt_freq_t *pfreq);
220 ALT_STATUS_CODE alt_clk_freq_get_qspi(alt_freq_t *pfreq);
221 ALT_STATUS_CODE alt_clk_freq_get_s2f_user0(alt_freq_t *pfreq);
222 ALT_STATUS_CODE alt_clk_freq_get_s2f_user1(alt_freq_t *pfreq);
223 ALT_STATUS_CODE alt_clk_freq_get_hmc(alt_freq_t *pfreq);
224 ALT_STATUS_CODE alt_clk_freq_get_spim0(alt_freq_t *pfreq);
225 ALT_STATUS_CODE alt_clk_freq_get_spim1(alt_freq_t *pfreq);
226 
227 
228 /******************************************************************************/
254 ALT_STATUS_CODE alt_clk_ext_clk_freq_set(ALT_CLK_t clk,
255  alt_freq_t freq);
256 
257 /******************************************************************************/
270 ALT_STATUS_CODE alt_clk_clock_disable(ALT_CLK_t clk);
271 
272 /******************************************************************************/
285 ALT_STATUS_CODE alt_clk_clock_enable(ALT_CLK_t clk);
286 
287 /******************************************************************************/
299 ALT_STATUS_CODE alt_clk_is_enabled(ALT_CLK_t clk);
300 
301 #endif /* #ifndef __ALT_CLK_MGR_H__ */