xref: /rk3399_ARM-atf/include/drivers/st/stm32mp1_clk.h (revision f66358afeeea6b78912b1c59b0e87f9b96451d5f)
17839a050SYann Gautier /*
23f9c9784SYann Gautier  * Copyright (c) 2018-2019, STMicroelectronics - All Rights Reserved
37839a050SYann Gautier  *
47839a050SYann Gautier  * SPDX-License-Identifier: BSD-3-Clause
57839a050SYann Gautier  */
67839a050SYann Gautier 
7c3cf06f1SAntonio Nino Diaz #ifndef STM32MP1_CLK_H
8c3cf06f1SAntonio Nino Diaz #define STM32MP1_CLK_H
97839a050SYann Gautier 
1009d40e0eSAntonio Nino Diaz #include <arch_helpers.h>
1109d40e0eSAntonio Nino Diaz 
12*f66358afSYann Gautier enum stm32mp_osc_id {
13*f66358afSYann Gautier 	_HSI,
14*f66358afSYann Gautier 	_HSE,
15*f66358afSYann Gautier 	_CSI,
16*f66358afSYann Gautier 	_LSI,
17*f66358afSYann Gautier 	_LSE,
18*f66358afSYann Gautier 	_I2S_CKIN,
19*f66358afSYann Gautier 	NB_OSC,
20*f66358afSYann Gautier 	_UNKNOWN_OSC_ID = 0xFF
21*f66358afSYann Gautier };
22*f66358afSYann Gautier 
23*f66358afSYann Gautier extern const char *stm32mp_osc_node_label[NB_OSC];
24*f66358afSYann Gautier 
257839a050SYann Gautier int stm32mp1_clk_probe(void);
267839a050SYann Gautier int stm32mp1_clk_init(void);
270d21680cSYann Gautier 
280d21680cSYann Gautier bool stm32mp1_rcc_is_secure(void);
29b053a22eSYann Gautier bool stm32mp1_rcc_is_mckprot(void);
300d21680cSYann Gautier 
310d21680cSYann Gautier void __stm32mp1_clk_enable(unsigned long id, bool caller_is_secure);
320d21680cSYann Gautier void __stm32mp1_clk_disable(unsigned long id, bool caller_is_secure);
330d21680cSYann Gautier 
340d21680cSYann Gautier static inline void stm32mp1_clk_enable_non_secure(unsigned long id)
350d21680cSYann Gautier {
360d21680cSYann Gautier 	__stm32mp1_clk_enable(id, false);
370d21680cSYann Gautier }
380d21680cSYann Gautier 
390d21680cSYann Gautier static inline void stm32mp1_clk_enable_secure(unsigned long id)
400d21680cSYann Gautier {
410d21680cSYann Gautier 	__stm32mp1_clk_enable(id, true);
420d21680cSYann Gautier }
430d21680cSYann Gautier 
440d21680cSYann Gautier static inline void stm32mp1_clk_disable_non_secure(unsigned long id)
450d21680cSYann Gautier {
460d21680cSYann Gautier 	__stm32mp1_clk_disable(id, false);
470d21680cSYann Gautier }
480d21680cSYann Gautier 
490d21680cSYann Gautier static inline void stm32mp1_clk_disable_secure(unsigned long id)
500d21680cSYann Gautier {
510d21680cSYann Gautier 	__stm32mp1_clk_disable(id, true);
520d21680cSYann Gautier }
530d21680cSYann Gautier 
540d21680cSYann Gautier unsigned int stm32mp1_clk_get_refcount(unsigned long id);
550d21680cSYann Gautier 
560d21680cSYann Gautier /* SMP protection on RCC registers access */
570d21680cSYann Gautier void stm32mp1_clk_rcc_regs_lock(void);
580d21680cSYann Gautier void stm32mp1_clk_rcc_regs_unlock(void);
590d21680cSYann Gautier 
607839a050SYann Gautier void stm32mp1_stgen_increment(unsigned long long offset_in_ms);
617839a050SYann Gautier 
62c3cf06f1SAntonio Nino Diaz #endif /* STM32MP1_CLK_H */
63