183d290c5STom Rini /* SPDX-License-Identifier: GPL-2.0+ */ 2928954feSPatrice Chotard /* 3928954feSPatrice Chotard * Copyright (C) STMicroelectronics SA 2017 4928954feSPatrice Chotard * Author(s): Patrice CHOTARD, <patrice.chotard@st.com> for STMicroelectronics. 5928954feSPatrice Chotard */ 6928954feSPatrice Chotard 7928954feSPatrice Chotard #ifndef __STM32_RCC_H_ 8928954feSPatrice Chotard #define __STM32_RCC_H_ 9928954feSPatrice Chotard 10928954feSPatrice Chotard #define AHB_PSC_1 0 11928954feSPatrice Chotard #define AHB_PSC_2 0x8 12928954feSPatrice Chotard #define AHB_PSC_4 0x9 13928954feSPatrice Chotard #define AHB_PSC_8 0xA 14928954feSPatrice Chotard #define AHB_PSC_16 0xB 15928954feSPatrice Chotard #define AHB_PSC_64 0xC 16928954feSPatrice Chotard #define AHB_PSC_128 0xD 17928954feSPatrice Chotard #define AHB_PSC_256 0xE 18928954feSPatrice Chotard #define AHB_PSC_512 0xF 19928954feSPatrice Chotard 20928954feSPatrice Chotard #define APB_PSC_1 0 21928954feSPatrice Chotard #define APB_PSC_2 0x4 22928954feSPatrice Chotard #define APB_PSC_4 0x5 23928954feSPatrice Chotard #define APB_PSC_8 0x6 24928954feSPatrice Chotard #define APB_PSC_16 0x7 25928954feSPatrice Chotard 26928954feSPatrice Chotard struct pll_psc { 27928954feSPatrice Chotard u8 pll_m; 28928954feSPatrice Chotard u16 pll_n; 29928954feSPatrice Chotard u8 pll_p; 30928954feSPatrice Chotard u8 pll_q; 31928954feSPatrice Chotard u8 ahb_psc; 32928954feSPatrice Chotard u8 apb1_psc; 33928954feSPatrice Chotard u8 apb2_psc; 34928954feSPatrice Chotard }; 35928954feSPatrice Chotard 36928954feSPatrice Chotard struct stm32_clk_info { 37928954feSPatrice Chotard struct pll_psc sys_pll_psc; 38928954feSPatrice Chotard bool has_overdrive; 394e97e257SPatrice Chotard bool v2; 40928954feSPatrice Chotard }; 41928954feSPatrice Chotard 42928954feSPatrice Chotard enum soc_family { 438b414645SPatrice Chotard STM32F42X, 448b414645SPatrice Chotard STM32F469, 45928954feSPatrice Chotard STM32F7, 46*d090cbabSPatrick Delaunay STM32MP1, 47928954feSPatrice Chotard }; 48928954feSPatrice Chotard 4961803a95SPatrice Chotard enum apb { 5061803a95SPatrice Chotard APB1, 5161803a95SPatrice Chotard APB2, 5261803a95SPatrice Chotard }; 5361803a95SPatrice Chotard 54928954feSPatrice Chotard struct stm32_rcc_clk { 55928954feSPatrice Chotard char *drv_name; 56928954feSPatrice Chotard enum soc_family soc; 57928954feSPatrice Chotard }; 58928954feSPatrice Chotard 59014a953cSPatrice Chotard struct stm32_rcc_regs { 60014a953cSPatrice Chotard u32 cr; /* RCC clock control */ 61014a953cSPatrice Chotard u32 pllcfgr; /* RCC PLL configuration */ 62014a953cSPatrice Chotard u32 cfgr; /* RCC clock configuration */ 63014a953cSPatrice Chotard u32 cir; /* RCC clock interrupt */ 64014a953cSPatrice Chotard u32 ahb1rstr; /* RCC AHB1 peripheral reset */ 65014a953cSPatrice Chotard u32 ahb2rstr; /* RCC AHB2 peripheral reset */ 66014a953cSPatrice Chotard u32 ahb3rstr; /* RCC AHB3 peripheral reset */ 67014a953cSPatrice Chotard u32 rsv0; 68014a953cSPatrice Chotard u32 apb1rstr; /* RCC APB1 peripheral reset */ 69014a953cSPatrice Chotard u32 apb2rstr; /* RCC APB2 peripheral reset */ 70014a953cSPatrice Chotard u32 rsv1[2]; 71014a953cSPatrice Chotard u32 ahb1enr; /* RCC AHB1 peripheral clock enable */ 72014a953cSPatrice Chotard u32 ahb2enr; /* RCC AHB2 peripheral clock enable */ 73014a953cSPatrice Chotard u32 ahb3enr; /* RCC AHB3 peripheral clock enable */ 74014a953cSPatrice Chotard u32 rsv2; 75014a953cSPatrice Chotard u32 apb1enr; /* RCC APB1 peripheral clock enable */ 76014a953cSPatrice Chotard u32 apb2enr; /* RCC APB2 peripheral clock enable */ 77014a953cSPatrice Chotard u32 rsv3[2]; 78014a953cSPatrice Chotard u32 ahb1lpenr; /* RCC AHB1 periph clk enable in low pwr mode */ 79014a953cSPatrice Chotard u32 ahb2lpenr; /* RCC AHB2 periph clk enable in low pwr mode */ 80014a953cSPatrice Chotard u32 ahb3lpenr; /* RCC AHB3 periph clk enable in low pwr mode */ 81014a953cSPatrice Chotard u32 rsv4; 82014a953cSPatrice Chotard u32 apb1lpenr; /* RCC APB1 periph clk enable in low pwr mode */ 83014a953cSPatrice Chotard u32 apb2lpenr; /* RCC APB2 periph clk enable in low pwr mode */ 84014a953cSPatrice Chotard u32 rsv5[2]; 85014a953cSPatrice Chotard u32 bdcr; /* RCC Backup domain control */ 86014a953cSPatrice Chotard u32 csr; /* RCC clock control & status */ 87014a953cSPatrice Chotard u32 rsv6[2]; 88014a953cSPatrice Chotard u32 sscgr; /* RCC spread spectrum clock generation */ 89014a953cSPatrice Chotard u32 plli2scfgr; /* RCC PLLI2S configuration */ 90014a953cSPatrice Chotard /* below registers are only available on STM32F46x and STM32F7 SoCs*/ 91014a953cSPatrice Chotard u32 pllsaicfgr; /* PLLSAI configuration */ 92014a953cSPatrice Chotard u32 dckcfgr; /* dedicated clocks configuration register */ 93014a953cSPatrice Chotard /* Below registers are only available on STM32F7 SoCs */ 94014a953cSPatrice Chotard u32 dckcfgr2; /* dedicated clocks configuration register */ 95014a953cSPatrice Chotard }; 96014a953cSPatrice Chotard 97928954feSPatrice Chotard #endif /* __STM32_RCC_H_ */ 98