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