1d6b55a0fSArnaud Minier /*
2d6b55a0fSArnaud Minier * STM32L4X5 RCC (Reset and clock control)
3d6b55a0fSArnaud Minier *
4d6b55a0fSArnaud Minier * Copyright (c) 2023 Arnaud Minier <arnaud.minier@telecom-paris.fr>
5d6b55a0fSArnaud Minier * Copyright (c) 2023 Inès Varhol <ines.varhol@telecom-paris.fr>
6d6b55a0fSArnaud Minier *
7d6b55a0fSArnaud Minier * SPDX-License-Identifier: GPL-2.0-or-later
8d6b55a0fSArnaud Minier *
9d6b55a0fSArnaud Minier * This work is licensed under the terms of the GNU GPL, version 2 or later.
10d6b55a0fSArnaud Minier * See the COPYING file in the top-level directory.
11d6b55a0fSArnaud Minier *
12d6b55a0fSArnaud Minier * The reference used is the STMicroElectronics RM0351 Reference manual
13d6b55a0fSArnaud Minier * for STM32L4x5 and STM32L4x6 advanced Arm ® -based 32-bit MCUs.
14d6b55a0fSArnaud Minier *
15d6b55a0fSArnaud Minier * Inspired by the BCM2835 CPRMAN clock manager implementation by Luc Michel.
16d6b55a0fSArnaud Minier */
17d6b55a0fSArnaud Minier
18d6b55a0fSArnaud Minier #ifndef HW_STM32L4X5_RCC_INTERNALS_H
19d6b55a0fSArnaud Minier #define HW_STM32L4X5_RCC_INTERNALS_H
20d6b55a0fSArnaud Minier
21d6b55a0fSArnaud Minier #include "hw/registerfields.h"
22d6b55a0fSArnaud Minier #include "hw/misc/stm32l4x5_rcc.h"
23d6b55a0fSArnaud Minier
24ec7d83acSArnaud Minier #define TYPE_RCC_CLOCK_MUX "stm32l4x5-rcc-clock-mux"
256487653eSArnaud Minier #define TYPE_RCC_PLL "stm32l4x5-rcc-pll"
266487653eSArnaud Minier
27ec7d83acSArnaud Minier OBJECT_DECLARE_SIMPLE_TYPE(RccClockMuxState, RCC_CLOCK_MUX)
286487653eSArnaud Minier OBJECT_DECLARE_SIMPLE_TYPE(RccPllState, RCC_PLL)
29d6b55a0fSArnaud Minier
30d6b55a0fSArnaud Minier /* Register map */
31d6b55a0fSArnaud Minier REG32(CR, 0x00)
32d6b55a0fSArnaud Minier FIELD(CR, PLLSAI2RDY, 29, 1)
33d6b55a0fSArnaud Minier FIELD(CR, PLLSAI2ON, 28, 1)
34d6b55a0fSArnaud Minier FIELD(CR, PLLSAI1RDY, 27, 1)
35d6b55a0fSArnaud Minier FIELD(CR, PLLSAI1ON, 26, 1)
36d6b55a0fSArnaud Minier FIELD(CR, PLLRDY, 25, 1)
37d6b55a0fSArnaud Minier FIELD(CR, PLLON, 24, 1)
38d6b55a0fSArnaud Minier FIELD(CR, CSSON, 19, 1)
39d6b55a0fSArnaud Minier FIELD(CR, HSEBYP, 18, 1)
40d6b55a0fSArnaud Minier FIELD(CR, HSERDY, 17, 1)
41d6b55a0fSArnaud Minier FIELD(CR, HSEON, 16, 1)
42d6b55a0fSArnaud Minier FIELD(CR, HSIASFS, 11, 1)
43d6b55a0fSArnaud Minier FIELD(CR, HSIRDY, 10, 1)
44d6b55a0fSArnaud Minier FIELD(CR, HSIKERON, 9, 1)
45d6b55a0fSArnaud Minier FIELD(CR, HSION, 8, 1)
46d6b55a0fSArnaud Minier FIELD(CR, MSIRANGE, 4, 4)
47d6b55a0fSArnaud Minier FIELD(CR, MSIRGSEL, 3, 1)
48d6b55a0fSArnaud Minier FIELD(CR, MSIPLLEN, 2, 1)
49d6b55a0fSArnaud Minier FIELD(CR, MSIRDY, 1, 1)
50d6b55a0fSArnaud Minier FIELD(CR, MSION, 0, 1)
51d6b55a0fSArnaud Minier REG32(ICSCR, 0x04)
52d6b55a0fSArnaud Minier FIELD(ICSCR, HSITRIM, 24, 7)
53d6b55a0fSArnaud Minier FIELD(ICSCR, HSICAL, 16, 8)
54d6b55a0fSArnaud Minier FIELD(ICSCR, MSITRIM, 8, 8)
55d6b55a0fSArnaud Minier FIELD(ICSCR, MSICAL, 0, 8)
56d6b55a0fSArnaud Minier REG32(CFGR, 0x08)
57d6b55a0fSArnaud Minier FIELD(CFGR, MCOPRE, 28, 3)
58d6b55a0fSArnaud Minier /* MCOSEL[2:0] only for STM32L475xx/476xx/486xx devices */
59d6b55a0fSArnaud Minier FIELD(CFGR, MCOSEL, 24, 3)
60d6b55a0fSArnaud Minier FIELD(CFGR, STOPWUCK, 15, 1)
61d6b55a0fSArnaud Minier FIELD(CFGR, PPRE2, 11, 3)
62d6b55a0fSArnaud Minier FIELD(CFGR, PPRE1, 8, 3)
63d6b55a0fSArnaud Minier FIELD(CFGR, HPRE, 4, 4)
64d6b55a0fSArnaud Minier FIELD(CFGR, SWS, 2, 2)
65d6b55a0fSArnaud Minier FIELD(CFGR, SW, 0, 2)
66d6b55a0fSArnaud Minier REG32(PLLCFGR, 0x0C)
67d6b55a0fSArnaud Minier FIELD(PLLCFGR, PLLPDIV, 27, 5)
68d6b55a0fSArnaud Minier FIELD(PLLCFGR, PLLR, 25, 2)
69d6b55a0fSArnaud Minier FIELD(PLLCFGR, PLLREN, 24, 1)
70d6b55a0fSArnaud Minier FIELD(PLLCFGR, PLLQ, 21, 2)
71d6b55a0fSArnaud Minier FIELD(PLLCFGR, PLLQEN, 20, 1)
72d6b55a0fSArnaud Minier FIELD(PLLCFGR, PLLP, 17, 1)
73d6b55a0fSArnaud Minier FIELD(PLLCFGR, PLLPEN, 16, 1)
74d6b55a0fSArnaud Minier FIELD(PLLCFGR, PLLN, 8, 7)
75d6b55a0fSArnaud Minier FIELD(PLLCFGR, PLLM, 4, 3)
76d6b55a0fSArnaud Minier FIELD(PLLCFGR, PLLSRC, 0, 2)
77d6b55a0fSArnaud Minier REG32(PLLSAI1CFGR, 0x10)
78d6b55a0fSArnaud Minier FIELD(PLLSAI1CFGR, PLLSAI1PDIV, 27, 5)
79d6b55a0fSArnaud Minier FIELD(PLLSAI1CFGR, PLLSAI1R, 25, 2)
80d6b55a0fSArnaud Minier FIELD(PLLSAI1CFGR, PLLSAI1REN, 24, 1)
81d6b55a0fSArnaud Minier FIELD(PLLSAI1CFGR, PLLSAI1Q, 21, 2)
82d6b55a0fSArnaud Minier FIELD(PLLSAI1CFGR, PLLSAI1QEN, 20, 1)
83d6b55a0fSArnaud Minier FIELD(PLLSAI1CFGR, PLLSAI1P, 17, 1)
84d6b55a0fSArnaud Minier FIELD(PLLSAI1CFGR, PLLSAI1PEN, 16, 1)
85d6b55a0fSArnaud Minier FIELD(PLLSAI1CFGR, PLLSAI1N, 8, 7)
86d6b55a0fSArnaud Minier REG32(PLLSAI2CFGR, 0x14)
87d6b55a0fSArnaud Minier FIELD(PLLSAI2CFGR, PLLSAI2PDIV, 27, 5)
88d6b55a0fSArnaud Minier FIELD(PLLSAI2CFGR, PLLSAI2R, 25, 2)
89d6b55a0fSArnaud Minier FIELD(PLLSAI2CFGR, PLLSAI2REN, 24, 1)
90d6b55a0fSArnaud Minier FIELD(PLLSAI2CFGR, PLLSAI2Q, 21, 2)
91d6b55a0fSArnaud Minier FIELD(PLLSAI2CFGR, PLLSAI2QEN, 20, 1)
92d6b55a0fSArnaud Minier FIELD(PLLSAI2CFGR, PLLSAI2P, 17, 1)
93d6b55a0fSArnaud Minier FIELD(PLLSAI2CFGR, PLLSAI2PEN, 16, 1)
94d6b55a0fSArnaud Minier FIELD(PLLSAI2CFGR, PLLSAI2N, 8, 7)
95d6b55a0fSArnaud Minier REG32(CIER, 0x18)
96d6b55a0fSArnaud Minier /* HSI48RDYIE: only on STM32L496xx/4A6xx devices */
97d6b55a0fSArnaud Minier FIELD(CIER, LSECSSIE, 9, 1)
98d6b55a0fSArnaud Minier FIELD(CIER, PLLSAI2RDYIE, 7, 1)
99d6b55a0fSArnaud Minier FIELD(CIER, PLLSAI1RDYIE, 6, 1)
100d6b55a0fSArnaud Minier FIELD(CIER, PLLRDYIE, 5, 1)
101d6b55a0fSArnaud Minier FIELD(CIER, HSERDYIE, 4, 1)
102d6b55a0fSArnaud Minier FIELD(CIER, HSIRDYIE, 3, 1)
103d6b55a0fSArnaud Minier FIELD(CIER, MSIRDYIE, 2, 1)
104d6b55a0fSArnaud Minier FIELD(CIER, LSERDYIE, 1, 1)
105d6b55a0fSArnaud Minier FIELD(CIER, LSIRDYIE, 0, 1)
106d6b55a0fSArnaud Minier REG32(CIFR, 0x1C)
107d6b55a0fSArnaud Minier /* HSI48RDYF: only on STM32L496xx/4A6xx devices */
108d6b55a0fSArnaud Minier FIELD(CIFR, LSECSSF, 9, 1)
109d6b55a0fSArnaud Minier FIELD(CIFR, CSSF, 8, 1)
110d6b55a0fSArnaud Minier FIELD(CIFR, PLLSAI2RDYF, 7, 1)
111d6b55a0fSArnaud Minier FIELD(CIFR, PLLSAI1RDYF, 6, 1)
112d6b55a0fSArnaud Minier FIELD(CIFR, PLLRDYF, 5, 1)
113d6b55a0fSArnaud Minier FIELD(CIFR, HSERDYF, 4, 1)
114d6b55a0fSArnaud Minier FIELD(CIFR, HSIRDYF, 3, 1)
115d6b55a0fSArnaud Minier FIELD(CIFR, MSIRDYF, 2, 1)
116d6b55a0fSArnaud Minier FIELD(CIFR, LSERDYF, 1, 1)
117d6b55a0fSArnaud Minier FIELD(CIFR, LSIRDYF, 0, 1)
118d6b55a0fSArnaud Minier REG32(CICR, 0x20)
119d6b55a0fSArnaud Minier /* HSI48RDYC: only on STM32L496xx/4A6xx devices */
120d6b55a0fSArnaud Minier FIELD(CICR, LSECSSC, 9, 1)
121d6b55a0fSArnaud Minier FIELD(CICR, CSSC, 8, 1)
122d6b55a0fSArnaud Minier FIELD(CICR, PLLSAI2RDYC, 7, 1)
123d6b55a0fSArnaud Minier FIELD(CICR, PLLSAI1RDYC, 6, 1)
124d6b55a0fSArnaud Minier FIELD(CICR, PLLRDYC, 5, 1)
125d6b55a0fSArnaud Minier FIELD(CICR, HSERDYC, 4, 1)
126d6b55a0fSArnaud Minier FIELD(CICR, HSIRDYC, 3, 1)
127d6b55a0fSArnaud Minier FIELD(CICR, MSIRDYC, 2, 1)
128d6b55a0fSArnaud Minier FIELD(CICR, LSERDYC, 1, 1)
129d6b55a0fSArnaud Minier FIELD(CICR, LSIRDYC, 0, 1)
130d6b55a0fSArnaud Minier REG32(AHB1RSTR, 0x28)
131d6b55a0fSArnaud Minier REG32(AHB2RSTR, 0x2C)
132d6b55a0fSArnaud Minier REG32(AHB3RSTR, 0x30)
133d6b55a0fSArnaud Minier REG32(APB1RSTR1, 0x38)
134d6b55a0fSArnaud Minier REG32(APB1RSTR2, 0x3C)
135d6b55a0fSArnaud Minier REG32(APB2RSTR, 0x40)
136d6b55a0fSArnaud Minier REG32(AHB1ENR, 0x48)
137d6b55a0fSArnaud Minier /* DMA2DEN: reserved for STM32L475xx */
138d6b55a0fSArnaud Minier FIELD(AHB1ENR, TSCEN, 16, 1)
139d6b55a0fSArnaud Minier FIELD(AHB1ENR, CRCEN, 12, 1)
140d6b55a0fSArnaud Minier FIELD(AHB1ENR, FLASHEN, 8, 1)
141d6b55a0fSArnaud Minier FIELD(AHB1ENR, DMA2EN, 1, 1)
142d6b55a0fSArnaud Minier FIELD(AHB1ENR, DMA1EN, 0, 1)
143d6b55a0fSArnaud Minier REG32(AHB2ENR, 0x4C)
144d6b55a0fSArnaud Minier FIELD(AHB2ENR, RNGEN, 18, 1)
145d6b55a0fSArnaud Minier /* HASHEN: reserved for STM32L475xx */
146d6b55a0fSArnaud Minier FIELD(AHB2ENR, AESEN, 16, 1)
147d6b55a0fSArnaud Minier /* DCMIEN: reserved for STM32L475xx */
148d6b55a0fSArnaud Minier FIELD(AHB2ENR, ADCEN, 13, 1)
149d6b55a0fSArnaud Minier FIELD(AHB2ENR, OTGFSEN, 12, 1)
150d6b55a0fSArnaud Minier /* GPIOIEN: reserved for STM32L475xx */
151d6b55a0fSArnaud Minier FIELD(AHB2ENR, GPIOHEN, 7, 1)
152d6b55a0fSArnaud Minier FIELD(AHB2ENR, GPIOGEN, 6, 1)
153d6b55a0fSArnaud Minier FIELD(AHB2ENR, GPIOFEN, 5, 1)
154d6b55a0fSArnaud Minier FIELD(AHB2ENR, GPIOEEN, 4, 1)
155d6b55a0fSArnaud Minier FIELD(AHB2ENR, GPIODEN, 3, 1)
156d6b55a0fSArnaud Minier FIELD(AHB2ENR, GPIOCEN, 2, 1)
157d6b55a0fSArnaud Minier FIELD(AHB2ENR, GPIOBEN, 1, 1)
158d6b55a0fSArnaud Minier FIELD(AHB2ENR, GPIOAEN, 0, 1)
159d6b55a0fSArnaud Minier REG32(AHB3ENR, 0x50)
160d6b55a0fSArnaud Minier FIELD(AHB3ENR, QSPIEN, 8, 1)
161d6b55a0fSArnaud Minier FIELD(AHB3ENR, FMCEN, 0, 1)
162d6b55a0fSArnaud Minier REG32(APB1ENR1, 0x58)
163d6b55a0fSArnaud Minier FIELD(APB1ENR1, LPTIM1EN, 31, 1)
164d6b55a0fSArnaud Minier FIELD(APB1ENR1, OPAMPEN, 30, 1)
165d6b55a0fSArnaud Minier FIELD(APB1ENR1, DAC1EN, 29, 1)
166d6b55a0fSArnaud Minier FIELD(APB1ENR1, PWREN, 28, 1)
167d6b55a0fSArnaud Minier FIELD(APB1ENR1, CAN2EN, 26, 1)
168d6b55a0fSArnaud Minier FIELD(APB1ENR1, CAN1EN, 25, 1)
169d6b55a0fSArnaud Minier /* CRSEN: reserved for STM32L475xx */
170d6b55a0fSArnaud Minier FIELD(APB1ENR1, I2C3EN, 23, 1)
171d6b55a0fSArnaud Minier FIELD(APB1ENR1, I2C2EN, 22, 1)
172d6b55a0fSArnaud Minier FIELD(APB1ENR1, I2C1EN, 21, 1)
173d6b55a0fSArnaud Minier FIELD(APB1ENR1, UART5EN, 20, 1)
174d6b55a0fSArnaud Minier FIELD(APB1ENR1, UART4EN, 19, 1)
175d6b55a0fSArnaud Minier FIELD(APB1ENR1, USART3EN, 18, 1)
176d6b55a0fSArnaud Minier FIELD(APB1ENR1, USART2EN, 17, 1)
177d6b55a0fSArnaud Minier FIELD(APB1ENR1, SPI3EN, 15, 1)
178d6b55a0fSArnaud Minier FIELD(APB1ENR1, SPI2EN, 14, 1)
179d6b55a0fSArnaud Minier FIELD(APB1ENR1, WWDGEN, 11, 1)
180d6b55a0fSArnaud Minier /* RTCAPBEN: reserved for STM32L475xx */
181d6b55a0fSArnaud Minier FIELD(APB1ENR1, LCDEN, 9, 1)
182d6b55a0fSArnaud Minier FIELD(APB1ENR1, TIM7EN, 5, 1)
183d6b55a0fSArnaud Minier FIELD(APB1ENR1, TIM6EN, 4, 1)
184d6b55a0fSArnaud Minier FIELD(APB1ENR1, TIM5EN, 3, 1)
185d6b55a0fSArnaud Minier FIELD(APB1ENR1, TIM4EN, 2, 1)
186d6b55a0fSArnaud Minier FIELD(APB1ENR1, TIM3EN, 1, 1)
187d6b55a0fSArnaud Minier FIELD(APB1ENR1, TIM2EN, 0, 1)
188d6b55a0fSArnaud Minier REG32(APB1ENR2, 0x5C)
189d6b55a0fSArnaud Minier FIELD(APB1ENR2, LPTIM2EN, 5, 1)
190d6b55a0fSArnaud Minier FIELD(APB1ENR2, SWPMI1EN, 2, 1)
191d6b55a0fSArnaud Minier /* I2C4EN: reserved for STM32L475xx */
192d6b55a0fSArnaud Minier FIELD(APB1ENR2, LPUART1EN, 0, 1)
193d6b55a0fSArnaud Minier REG32(APB2ENR, 0x60)
194d6b55a0fSArnaud Minier FIELD(APB2ENR, DFSDM1EN, 24, 1)
195d6b55a0fSArnaud Minier FIELD(APB2ENR, SAI2EN, 22, 1)
196d6b55a0fSArnaud Minier FIELD(APB2ENR, SAI1EN, 21, 1)
197d6b55a0fSArnaud Minier FIELD(APB2ENR, TIM17EN, 18, 1)
198d6b55a0fSArnaud Minier FIELD(APB2ENR, TIM16EN, 17, 1)
199d6b55a0fSArnaud Minier FIELD(APB2ENR, TIM15EN, 16, 1)
200d6b55a0fSArnaud Minier FIELD(APB2ENR, USART1EN, 14, 1)
201d6b55a0fSArnaud Minier FIELD(APB2ENR, TIM8EN, 13, 1)
202d6b55a0fSArnaud Minier FIELD(APB2ENR, SPI1EN, 12, 1)
203d6b55a0fSArnaud Minier FIELD(APB2ENR, TIM1EN, 11, 1)
204d6b55a0fSArnaud Minier FIELD(APB2ENR, SDMMC1EN, 10, 1)
205d6b55a0fSArnaud Minier FIELD(APB2ENR, FWEN, 7, 1)
206d6b55a0fSArnaud Minier FIELD(APB2ENR, SYSCFGEN, 0, 1)
207d6b55a0fSArnaud Minier REG32(AHB1SMENR, 0x68)
208d6b55a0fSArnaud Minier REG32(AHB2SMENR, 0x6C)
209d6b55a0fSArnaud Minier REG32(AHB3SMENR, 0x70)
210d6b55a0fSArnaud Minier REG32(APB1SMENR1, 0x78)
211d6b55a0fSArnaud Minier REG32(APB1SMENR2, 0x7C)
212d6b55a0fSArnaud Minier REG32(APB2SMENR, 0x80)
213d6b55a0fSArnaud Minier REG32(CCIPR, 0x88)
214d6b55a0fSArnaud Minier FIELD(CCIPR, DFSDM1SEL, 31, 1)
215d6b55a0fSArnaud Minier FIELD(CCIPR, SWPMI1SEL, 30, 1)
216d6b55a0fSArnaud Minier FIELD(CCIPR, ADCSEL, 28, 2)
217d6b55a0fSArnaud Minier FIELD(CCIPR, CLK48SEL, 26, 2)
218d6b55a0fSArnaud Minier FIELD(CCIPR, SAI2SEL, 24, 2)
219d6b55a0fSArnaud Minier FIELD(CCIPR, SAI1SEL, 22, 2)
220d6b55a0fSArnaud Minier FIELD(CCIPR, LPTIM2SEL, 20, 2)
221d6b55a0fSArnaud Minier FIELD(CCIPR, LPTIM1SEL, 18, 2)
222d6b55a0fSArnaud Minier FIELD(CCIPR, I2C3SEL, 16, 2)
223d6b55a0fSArnaud Minier FIELD(CCIPR, I2C2SEL, 14, 2)
224d6b55a0fSArnaud Minier FIELD(CCIPR, I2C1SEL, 12, 2)
225d6b55a0fSArnaud Minier FIELD(CCIPR, LPUART1SEL, 10, 2)
226d6b55a0fSArnaud Minier FIELD(CCIPR, UART5SEL, 8, 2)
227d6b55a0fSArnaud Minier FIELD(CCIPR, UART4SEL, 6, 2)
228d6b55a0fSArnaud Minier FIELD(CCIPR, USART3SEL, 4, 2)
229d6b55a0fSArnaud Minier FIELD(CCIPR, USART2SEL, 2, 2)
230d6b55a0fSArnaud Minier FIELD(CCIPR, USART1SEL, 0, 2)
231d6b55a0fSArnaud Minier REG32(BDCR, 0x90)
232d6b55a0fSArnaud Minier FIELD(BDCR, LSCOSEL, 25, 1)
233d6b55a0fSArnaud Minier FIELD(BDCR, LSCOEN, 24, 1)
234d6b55a0fSArnaud Minier FIELD(BDCR, BDRST, 16, 1)
235d6b55a0fSArnaud Minier FIELD(BDCR, RTCEN, 15, 1)
236d6b55a0fSArnaud Minier FIELD(BDCR, RTCSEL, 8, 2)
237d6b55a0fSArnaud Minier FIELD(BDCR, LSECSSD, 6, 1)
238d6b55a0fSArnaud Minier FIELD(BDCR, LSECSSON, 5, 1)
239d6b55a0fSArnaud Minier FIELD(BDCR, LSEDRV, 3, 2)
240d6b55a0fSArnaud Minier FIELD(BDCR, LSEBYP, 2, 1)
241d6b55a0fSArnaud Minier FIELD(BDCR, LSERDY, 1, 1)
242d6b55a0fSArnaud Minier FIELD(BDCR, LSEON, 0, 1)
243d6b55a0fSArnaud Minier REG32(CSR, 0x94)
244d6b55a0fSArnaud Minier FIELD(CSR, LPWRRSTF, 31, 1)
245d6b55a0fSArnaud Minier FIELD(CSR, WWDGRSTF, 30, 1)
246d6b55a0fSArnaud Minier FIELD(CSR, IWWGRSTF, 29, 1)
247d6b55a0fSArnaud Minier FIELD(CSR, SFTRSTF, 28, 1)
248d6b55a0fSArnaud Minier FIELD(CSR, BORRSTF, 27, 1)
249d6b55a0fSArnaud Minier FIELD(CSR, PINRSTF, 26, 1)
250d6b55a0fSArnaud Minier FIELD(CSR, OBLRSTF, 25, 1)
251d6b55a0fSArnaud Minier FIELD(CSR, FWRSTF, 24, 1)
252d6b55a0fSArnaud Minier FIELD(CSR, RMVF, 23, 1)
253d6b55a0fSArnaud Minier FIELD(CSR, MSISRANGE, 8, 4)
254d6b55a0fSArnaud Minier FIELD(CSR, LSIRDY, 1, 1)
255d6b55a0fSArnaud Minier FIELD(CSR, LSION, 0, 1)
256d6b55a0fSArnaud Minier /* CRRCR and CCIPR2 registers are present on L496/L4A6 devices only. */
257d6b55a0fSArnaud Minier
258d6b55a0fSArnaud Minier /* Read Only masks to prevent writes in unauthorized bits */
259d6b55a0fSArnaud Minier #define CR_READ_ONLY_MASK (R_CR_PLLSAI2RDY_MASK | \
260d6b55a0fSArnaud Minier R_CR_PLLSAI1RDY_MASK | \
261d6b55a0fSArnaud Minier R_CR_PLLRDY_MASK | \
262d6b55a0fSArnaud Minier R_CR_HSERDY_MASK | \
263d6b55a0fSArnaud Minier R_CR_HSIRDY_MASK | \
264d6b55a0fSArnaud Minier R_CR_MSIRDY_MASK)
265d6b55a0fSArnaud Minier #define CR_READ_SET_MASK (R_CR_CSSON_MASK | R_CR_MSIRGSEL_MASK)
266d6b55a0fSArnaud Minier #define ICSCR_READ_ONLY_MASK (R_ICSCR_HSICAL_MASK | R_ICSCR_MSICAL_MASK)
267d6b55a0fSArnaud Minier #define CFGR_READ_ONLY_MASK (R_CFGR_SWS_MASK)
268d6b55a0fSArnaud Minier #define CIFR_READ_ONLY_MASK (R_CIFR_LSECSSF_MASK | \
269d6b55a0fSArnaud Minier R_CIFR_CSSF_MASK | \
270d6b55a0fSArnaud Minier R_CIFR_PLLSAI2RDYF_MASK | \
271d6b55a0fSArnaud Minier R_CIFR_PLLSAI1RDYF_MASK | \
272d6b55a0fSArnaud Minier R_CIFR_PLLRDYF_MASK | \
273d6b55a0fSArnaud Minier R_CIFR_HSERDYF_MASK | \
274d6b55a0fSArnaud Minier R_CIFR_HSIRDYF_MASK | \
275d6b55a0fSArnaud Minier R_CIFR_MSIRDYF_MASK | \
276d6b55a0fSArnaud Minier R_CIFR_LSERDYF_MASK | \
277d6b55a0fSArnaud Minier R_CIFR_LSIRDYF_MASK)
278d6b55a0fSArnaud Minier #define CIFR_IRQ_MASK CIFR_READ_ONLY_MASK
279d6b55a0fSArnaud Minier #define APB2ENR_READ_SET_MASK (R_APB2ENR_FWEN_MASK)
280d6b55a0fSArnaud Minier #define BDCR_READ_ONLY_MASK (R_BDCR_LSECSSD_MASK | R_BDCR_LSERDY_MASK)
281d6b55a0fSArnaud Minier #define CSR_READ_ONLY_MASK (R_CSR_LPWRRSTF_MASK | \
282d6b55a0fSArnaud Minier R_CSR_WWDGRSTF_MASK | \
283d6b55a0fSArnaud Minier R_CSR_IWWGRSTF_MASK | \
284d6b55a0fSArnaud Minier R_CSR_SFTRSTF_MASK | \
285d6b55a0fSArnaud Minier R_CSR_BORRSTF_MASK | \
286d6b55a0fSArnaud Minier R_CSR_PINRSTF_MASK | \
287d6b55a0fSArnaud Minier R_CSR_OBLRSTF_MASK | \
288d6b55a0fSArnaud Minier R_CSR_FWRSTF_MASK | \
289d6b55a0fSArnaud Minier R_CSR_LSIRDY_MASK)
290d6b55a0fSArnaud Minier
2916487653eSArnaud Minier /* Pll Channels */
2926487653eSArnaud Minier enum PllChannels {
2936487653eSArnaud Minier RCC_PLL_CHANNEL_PLLSAI3CLK = 0,
2946487653eSArnaud Minier RCC_PLL_CHANNEL_PLL48M1CLK = 1,
2956487653eSArnaud Minier RCC_PLL_CHANNEL_PLLCLK = 2,
2966487653eSArnaud Minier };
2976487653eSArnaud Minier
2986487653eSArnaud Minier enum PllSai1Channels {
2996487653eSArnaud Minier RCC_PLLSAI1_CHANNEL_PLLSAI1CLK = 0,
3006487653eSArnaud Minier RCC_PLLSAI1_CHANNEL_PLL48M2CLK = 1,
3016487653eSArnaud Minier RCC_PLLSAI1_CHANNEL_PLLADC1CLK = 2,
3026487653eSArnaud Minier };
3036487653eSArnaud Minier
3046487653eSArnaud Minier enum PllSai2Channels {
3056487653eSArnaud Minier RCC_PLLSAI2_CHANNEL_PLLSAI2CLK = 0,
3066487653eSArnaud Minier /* No Q channel */
3076487653eSArnaud Minier RCC_PLLSAI2_CHANNEL_PLLADC2CLK = 2,
3086487653eSArnaud Minier };
3096487653eSArnaud Minier
310ec7d83acSArnaud Minier typedef enum RccClockMuxSource {
311ec7d83acSArnaud Minier RCC_CLOCK_MUX_SRC_GND = 0,
312ec7d83acSArnaud Minier RCC_CLOCK_MUX_SRC_HSI,
313ec7d83acSArnaud Minier RCC_CLOCK_MUX_SRC_HSE,
314ec7d83acSArnaud Minier RCC_CLOCK_MUX_SRC_MSI,
315ec7d83acSArnaud Minier RCC_CLOCK_MUX_SRC_LSI,
316ec7d83acSArnaud Minier RCC_CLOCK_MUX_SRC_LSE,
317ec7d83acSArnaud Minier RCC_CLOCK_MUX_SRC_SAI1_EXTCLK,
318ec7d83acSArnaud Minier RCC_CLOCK_MUX_SRC_SAI2_EXTCLK,
319ec7d83acSArnaud Minier RCC_CLOCK_MUX_SRC_PLL,
320ec7d83acSArnaud Minier RCC_CLOCK_MUX_SRC_PLLSAI1,
321ec7d83acSArnaud Minier RCC_CLOCK_MUX_SRC_PLLSAI2,
322ec7d83acSArnaud Minier RCC_CLOCK_MUX_SRC_PLLSAI3,
323ec7d83acSArnaud Minier RCC_CLOCK_MUX_SRC_PLL48M1,
324ec7d83acSArnaud Minier RCC_CLOCK_MUX_SRC_PLL48M2,
325ec7d83acSArnaud Minier RCC_CLOCK_MUX_SRC_PLLADC1,
326ec7d83acSArnaud Minier RCC_CLOCK_MUX_SRC_PLLADC2,
327ec7d83acSArnaud Minier RCC_CLOCK_MUX_SRC_SYSCLK,
328ec7d83acSArnaud Minier RCC_CLOCK_MUX_SRC_HCLK,
329ec7d83acSArnaud Minier RCC_CLOCK_MUX_SRC_PCLK1,
330ec7d83acSArnaud Minier RCC_CLOCK_MUX_SRC_PCLK2,
331ec7d83acSArnaud Minier RCC_CLOCK_MUX_SRC_HSE_OVER_32,
332ec7d83acSArnaud Minier RCC_CLOCK_MUX_SRC_LCD_AND_RTC_COMMON,
333ec7d83acSArnaud Minier
334ec7d83acSArnaud Minier RCC_CLOCK_MUX_SRC_NUMBER,
335ec7d83acSArnaud Minier } RccClockMuxSource;
336ec7d83acSArnaud Minier
337*141c29a2SArnaud Minier /* PLL init info */
338*141c29a2SArnaud Minier typedef struct PllInitInfo {
339*141c29a2SArnaud Minier const char *name;
340*141c29a2SArnaud Minier
341*141c29a2SArnaud Minier const char *channel_name[RCC_NUM_CHANNEL_PLL_OUT];
342*141c29a2SArnaud Minier bool channel_exists[RCC_NUM_CHANNEL_PLL_OUT];
343*141c29a2SArnaud Minier uint32_t default_channel_divider[RCC_NUM_CHANNEL_PLL_OUT];
344*141c29a2SArnaud Minier
345*141c29a2SArnaud Minier RccClockMuxSource src_mapping[RCC_NUM_CLOCK_MUX_SRC];
346*141c29a2SArnaud Minier } PllInitInfo;
347*141c29a2SArnaud Minier
348*141c29a2SArnaud Minier static const PllInitInfo PLL_INIT_INFO[] = {
349*141c29a2SArnaud Minier [RCC_PLL_PLL] = {
350*141c29a2SArnaud Minier .name = "pll",
351*141c29a2SArnaud Minier .channel_name = {
352*141c29a2SArnaud Minier "pllsai3clk",
353*141c29a2SArnaud Minier "pll48m1clk",
354*141c29a2SArnaud Minier "pllclk"
355*141c29a2SArnaud Minier },
356*141c29a2SArnaud Minier .channel_exists = {
357*141c29a2SArnaud Minier true, true, true
358*141c29a2SArnaud Minier },
359*141c29a2SArnaud Minier /* From PLLCFGR register documentation */
360*141c29a2SArnaud Minier .default_channel_divider = {
361*141c29a2SArnaud Minier 7, 2, 2
362*141c29a2SArnaud Minier }
363*141c29a2SArnaud Minier },
364*141c29a2SArnaud Minier [RCC_PLL_PLLSAI1] = {
365*141c29a2SArnaud Minier .name = "pllsai1",
366*141c29a2SArnaud Minier .channel_name = {
367*141c29a2SArnaud Minier "pllsai1clk",
368*141c29a2SArnaud Minier "pll48m2clk",
369*141c29a2SArnaud Minier "plladc1clk"
370*141c29a2SArnaud Minier },
371*141c29a2SArnaud Minier .channel_exists = {
372*141c29a2SArnaud Minier true, true, true
373*141c29a2SArnaud Minier },
374*141c29a2SArnaud Minier /* From PLLSAI1CFGR register documentation */
375*141c29a2SArnaud Minier .default_channel_divider = {
376*141c29a2SArnaud Minier 7, 2, 2
377*141c29a2SArnaud Minier }
378*141c29a2SArnaud Minier },
379*141c29a2SArnaud Minier [RCC_PLL_PLLSAI2] = {
380*141c29a2SArnaud Minier .name = "pllsai2",
381*141c29a2SArnaud Minier .channel_name = {
382*141c29a2SArnaud Minier "pllsai2clk",
383*141c29a2SArnaud Minier NULL,
384*141c29a2SArnaud Minier "plladc2clk"
385*141c29a2SArnaud Minier },
386*141c29a2SArnaud Minier .channel_exists = {
387*141c29a2SArnaud Minier true, false, true
388*141c29a2SArnaud Minier },
389*141c29a2SArnaud Minier /* From PLLSAI2CFGR register documentation */
390*141c29a2SArnaud Minier .default_channel_divider = {
391*141c29a2SArnaud Minier 7, 0, 2
392*141c29a2SArnaud Minier }
393*141c29a2SArnaud Minier }
394*141c29a2SArnaud Minier };
395*141c29a2SArnaud Minier
set_pll_init_info(RccPllState * pll,RccPll id)396*141c29a2SArnaud Minier static inline void set_pll_init_info(RccPllState *pll,
397*141c29a2SArnaud Minier RccPll id)
398*141c29a2SArnaud Minier {
399*141c29a2SArnaud Minier int i;
400*141c29a2SArnaud Minier
401*141c29a2SArnaud Minier pll->id = id;
402*141c29a2SArnaud Minier pll->vco_multiplier = 1;
403*141c29a2SArnaud Minier for (i = 0; i < RCC_NUM_CHANNEL_PLL_OUT; i++) {
404*141c29a2SArnaud Minier pll->channel_enabled[i] = false;
405*141c29a2SArnaud Minier pll->channel_exists[i] = PLL_INIT_INFO[id].channel_exists[i];
406*141c29a2SArnaud Minier pll->channel_divider[i] = PLL_INIT_INFO[id].default_channel_divider[i];
407*141c29a2SArnaud Minier }
408*141c29a2SArnaud Minier }
409*141c29a2SArnaud Minier
410*141c29a2SArnaud Minier /* Clock mux init info */
411*141c29a2SArnaud Minier typedef struct ClockMuxInitInfo {
412*141c29a2SArnaud Minier const char *name;
413*141c29a2SArnaud Minier
414*141c29a2SArnaud Minier uint32_t multiplier;
415*141c29a2SArnaud Minier uint32_t divider;
416*141c29a2SArnaud Minier bool enabled;
417*141c29a2SArnaud Minier /* If this is true, the clock will not be exposed outside of the device */
418*141c29a2SArnaud Minier bool hidden;
419*141c29a2SArnaud Minier
420*141c29a2SArnaud Minier RccClockMuxSource src_mapping[RCC_NUM_CLOCK_MUX_SRC];
421*141c29a2SArnaud Minier } ClockMuxInitInfo;
422*141c29a2SArnaud Minier
423*141c29a2SArnaud Minier #define FILL_DEFAULT_FACTOR \
424*141c29a2SArnaud Minier .multiplier = 1, \
425*141c29a2SArnaud Minier .divider = 1
426*141c29a2SArnaud Minier
427*141c29a2SArnaud Minier #define FILL_DEFAULT_INIT_ENABLED \
428*141c29a2SArnaud Minier FILL_DEFAULT_FACTOR, \
429*141c29a2SArnaud Minier .enabled = true
430*141c29a2SArnaud Minier
431*141c29a2SArnaud Minier #define FILL_DEFAULT_INIT_DISABLED \
432*141c29a2SArnaud Minier FILL_DEFAULT_FACTOR, \
433*141c29a2SArnaud Minier .enabled = false
434*141c29a2SArnaud Minier
435*141c29a2SArnaud Minier
436*141c29a2SArnaud Minier static const ClockMuxInitInfo CLOCK_MUX_INIT_INFO[] = {
437*141c29a2SArnaud Minier [RCC_CLOCK_MUX_SYSCLK] = {
438*141c29a2SArnaud Minier .name = "sysclk",
439*141c29a2SArnaud Minier /* Same mapping as: CFGR_SW */
440*141c29a2SArnaud Minier .src_mapping = {
441*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_MSI,
442*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_HSI,
443*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_HSE,
444*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_PLL,
445*141c29a2SArnaud Minier },
446*141c29a2SArnaud Minier .hidden = true,
447*141c29a2SArnaud Minier FILL_DEFAULT_INIT_ENABLED,
448*141c29a2SArnaud Minier },
449*141c29a2SArnaud Minier [RCC_CLOCK_MUX_PLL_INPUT] = {
450*141c29a2SArnaud Minier .name = "pll-input",
451*141c29a2SArnaud Minier /* Same mapping as: PLLCFGR_PLLSRC */
452*141c29a2SArnaud Minier .src_mapping = {
453*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_MSI,
454*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_HSI,
455*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_HSE,
456*141c29a2SArnaud Minier },
457*141c29a2SArnaud Minier .hidden = true,
458*141c29a2SArnaud Minier FILL_DEFAULT_INIT_ENABLED,
459*141c29a2SArnaud Minier },
460*141c29a2SArnaud Minier [RCC_CLOCK_MUX_HCLK] = {
461*141c29a2SArnaud Minier .name = "hclk",
462*141c29a2SArnaud Minier .src_mapping = {
463*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_SYSCLK,
464*141c29a2SArnaud Minier },
465*141c29a2SArnaud Minier .hidden = true,
466*141c29a2SArnaud Minier FILL_DEFAULT_INIT_ENABLED,
467*141c29a2SArnaud Minier },
468*141c29a2SArnaud Minier [RCC_CLOCK_MUX_PCLK1] = {
469*141c29a2SArnaud Minier .name = "pclk1",
470*141c29a2SArnaud Minier .src_mapping = {
471*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_HCLK,
472*141c29a2SArnaud Minier },
473*141c29a2SArnaud Minier .hidden = true,
474*141c29a2SArnaud Minier FILL_DEFAULT_INIT_ENABLED,
475*141c29a2SArnaud Minier },
476*141c29a2SArnaud Minier [RCC_CLOCK_MUX_PCLK2] = {
477*141c29a2SArnaud Minier .name = "pclk2",
478*141c29a2SArnaud Minier .src_mapping = {
479*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_HCLK,
480*141c29a2SArnaud Minier },
481*141c29a2SArnaud Minier .hidden = true,
482*141c29a2SArnaud Minier FILL_DEFAULT_INIT_ENABLED,
483*141c29a2SArnaud Minier },
484*141c29a2SArnaud Minier [RCC_CLOCK_MUX_HSE_OVER_32] = {
485*141c29a2SArnaud Minier .name = "hse-divided-by-32",
486*141c29a2SArnaud Minier .multiplier = 1,
487*141c29a2SArnaud Minier .divider = 32,
488*141c29a2SArnaud Minier .enabled = true,
489*141c29a2SArnaud Minier .src_mapping = {
490*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_HSE,
491*141c29a2SArnaud Minier },
492*141c29a2SArnaud Minier .hidden = true,
493*141c29a2SArnaud Minier },
494*141c29a2SArnaud Minier [RCC_CLOCK_MUX_LCD_AND_RTC_COMMON] = {
495*141c29a2SArnaud Minier .name = "lcd-and-rtc-common-mux",
496*141c29a2SArnaud Minier /* Same mapping as: BDCR_RTCSEL */
497*141c29a2SArnaud Minier .src_mapping = {
498*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_GND,
499*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_LSE,
500*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_LSI,
501*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_HSE_OVER_32,
502*141c29a2SArnaud Minier },
503*141c29a2SArnaud Minier .hidden = true,
504*141c29a2SArnaud Minier FILL_DEFAULT_INIT_ENABLED,
505*141c29a2SArnaud Minier },
506*141c29a2SArnaud Minier /* From now on, muxes with a publicly available output */
507*141c29a2SArnaud Minier [RCC_CLOCK_MUX_CORTEX_REFCLK] = {
508*141c29a2SArnaud Minier .name = "cortex-refclk",
509*141c29a2SArnaud Minier .multiplier = 1,
510*141c29a2SArnaud Minier /* REFCLK is always HCLK/8 */
511*141c29a2SArnaud Minier .divider = 8,
512*141c29a2SArnaud Minier .enabled = true,
513*141c29a2SArnaud Minier .src_mapping = {
514*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_HCLK,
515*141c29a2SArnaud Minier }
516*141c29a2SArnaud Minier },
517*141c29a2SArnaud Minier [RCC_CLOCK_MUX_USART1] = {
518*141c29a2SArnaud Minier .name = "usart1",
519*141c29a2SArnaud Minier /* Same mapping as: CCIPR_USART1SEL */
520*141c29a2SArnaud Minier .src_mapping = {
521*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_PCLK2,
522*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_SYSCLK,
523*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_HSI,
524*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_LSE,
525*141c29a2SArnaud Minier },
526*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
527*141c29a2SArnaud Minier },
528*141c29a2SArnaud Minier [RCC_CLOCK_MUX_USART2] = {
529*141c29a2SArnaud Minier .name = "usart2",
530*141c29a2SArnaud Minier /* Same mapping as: CCIPR_USART2SEL */
531*141c29a2SArnaud Minier .src_mapping = {
532*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_PCLK1,
533*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_SYSCLK,
534*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_HSI,
535*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_LSE,
536*141c29a2SArnaud Minier },
537*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
538*141c29a2SArnaud Minier },
539*141c29a2SArnaud Minier [RCC_CLOCK_MUX_USART3] = {
540*141c29a2SArnaud Minier .name = "usart3",
541*141c29a2SArnaud Minier /* Same mapping as: CCIPR_USART3SEL */
542*141c29a2SArnaud Minier .src_mapping = {
543*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_PCLK1,
544*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_SYSCLK,
545*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_HSI,
546*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_LSE,
547*141c29a2SArnaud Minier },
548*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
549*141c29a2SArnaud Minier },
550*141c29a2SArnaud Minier [RCC_CLOCK_MUX_UART4] = {
551*141c29a2SArnaud Minier .name = "uart4",
552*141c29a2SArnaud Minier /* Same mapping as: CCIPR_UART4SEL */
553*141c29a2SArnaud Minier .src_mapping = {
554*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_PCLK1,
555*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_SYSCLK,
556*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_HSI,
557*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_LSE,
558*141c29a2SArnaud Minier },
559*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
560*141c29a2SArnaud Minier },
561*141c29a2SArnaud Minier [RCC_CLOCK_MUX_UART5] = {
562*141c29a2SArnaud Minier .name = "uart5",
563*141c29a2SArnaud Minier /* Same mapping as: CCIPR_UART5SEL */
564*141c29a2SArnaud Minier .src_mapping = {
565*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_PCLK1,
566*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_SYSCLK,
567*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_HSI,
568*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_LSE,
569*141c29a2SArnaud Minier },
570*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
571*141c29a2SArnaud Minier },
572*141c29a2SArnaud Minier [RCC_CLOCK_MUX_LPUART1] = {
573*141c29a2SArnaud Minier .name = "lpuart1",
574*141c29a2SArnaud Minier /* Same mapping as: CCIPR_LPUART1SEL */
575*141c29a2SArnaud Minier .src_mapping = {
576*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_PCLK1,
577*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_SYSCLK,
578*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_HSI,
579*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_LSE,
580*141c29a2SArnaud Minier },
581*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
582*141c29a2SArnaud Minier },
583*141c29a2SArnaud Minier [RCC_CLOCK_MUX_I2C1] = {
584*141c29a2SArnaud Minier .name = "i2c1",
585*141c29a2SArnaud Minier /* Same mapping as: CCIPR_I2C1SEL */
586*141c29a2SArnaud Minier .src_mapping = {
587*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_PCLK1,
588*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_SYSCLK,
589*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_HSI,
590*141c29a2SArnaud Minier },
591*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
592*141c29a2SArnaud Minier },
593*141c29a2SArnaud Minier [RCC_CLOCK_MUX_I2C2] = {
594*141c29a2SArnaud Minier .name = "i2c2",
595*141c29a2SArnaud Minier /* Same mapping as: CCIPR_I2C2SEL */
596*141c29a2SArnaud Minier .src_mapping = {
597*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_PCLK1,
598*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_SYSCLK,
599*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_HSI,
600*141c29a2SArnaud Minier },
601*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
602*141c29a2SArnaud Minier },
603*141c29a2SArnaud Minier [RCC_CLOCK_MUX_I2C3] = {
604*141c29a2SArnaud Minier .name = "i2c3",
605*141c29a2SArnaud Minier /* Same mapping as: CCIPR_I2C3SEL */
606*141c29a2SArnaud Minier .src_mapping = {
607*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_PCLK1,
608*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_SYSCLK,
609*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_HSI,
610*141c29a2SArnaud Minier },
611*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
612*141c29a2SArnaud Minier },
613*141c29a2SArnaud Minier [RCC_CLOCK_MUX_LPTIM1] = {
614*141c29a2SArnaud Minier .name = "lptim1",
615*141c29a2SArnaud Minier /* Same mapping as: CCIPR_LPTIM1SEL */
616*141c29a2SArnaud Minier .src_mapping = {
617*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_PCLK1,
618*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_LSI,
619*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_HSI,
620*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_LSE,
621*141c29a2SArnaud Minier },
622*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
623*141c29a2SArnaud Minier },
624*141c29a2SArnaud Minier [RCC_CLOCK_MUX_LPTIM2] = {
625*141c29a2SArnaud Minier .name = "lptim2",
626*141c29a2SArnaud Minier /* Same mapping as: CCIPR_LPTIM2SEL */
627*141c29a2SArnaud Minier .src_mapping = {
628*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_PCLK1,
629*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_LSI,
630*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_HSI,
631*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_LSE,
632*141c29a2SArnaud Minier },
633*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
634*141c29a2SArnaud Minier },
635*141c29a2SArnaud Minier [RCC_CLOCK_MUX_SWPMI1] = {
636*141c29a2SArnaud Minier .name = "swpmi1",
637*141c29a2SArnaud Minier /* Same mapping as: CCIPR_SWPMI1SEL */
638*141c29a2SArnaud Minier .src_mapping = {
639*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_PCLK1,
640*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_HSI,
641*141c29a2SArnaud Minier },
642*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
643*141c29a2SArnaud Minier },
644*141c29a2SArnaud Minier [RCC_CLOCK_MUX_MCO] = {
645*141c29a2SArnaud Minier .name = "mco",
646*141c29a2SArnaud Minier /* Same mapping as: CFGR_MCOSEL */
647*141c29a2SArnaud Minier .src_mapping = {
648*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_SYSCLK,
649*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_MSI,
650*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_HSI,
651*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_HSE,
652*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_PLL,
653*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_LSI,
654*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_LSE,
655*141c29a2SArnaud Minier },
656*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
657*141c29a2SArnaud Minier },
658*141c29a2SArnaud Minier [RCC_CLOCK_MUX_LSCO] = {
659*141c29a2SArnaud Minier .name = "lsco",
660*141c29a2SArnaud Minier /* Same mapping as: BDCR_LSCOSEL */
661*141c29a2SArnaud Minier .src_mapping = {
662*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_LSI,
663*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_LSE,
664*141c29a2SArnaud Minier },
665*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
666*141c29a2SArnaud Minier },
667*141c29a2SArnaud Minier [RCC_CLOCK_MUX_DFSDM1] = {
668*141c29a2SArnaud Minier .name = "dfsdm1",
669*141c29a2SArnaud Minier /* Same mapping as: CCIPR_DFSDM1SEL */
670*141c29a2SArnaud Minier .src_mapping = {
671*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_PCLK2,
672*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_SYSCLK,
673*141c29a2SArnaud Minier },
674*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
675*141c29a2SArnaud Minier },
676*141c29a2SArnaud Minier [RCC_CLOCK_MUX_ADC] = {
677*141c29a2SArnaud Minier .name = "adc",
678*141c29a2SArnaud Minier /* Same mapping as: CCIPR_ADCSEL */
679*141c29a2SArnaud Minier .src_mapping = {
680*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_GND,
681*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_PLLADC1,
682*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_PLLADC2,
683*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_SYSCLK,
684*141c29a2SArnaud Minier },
685*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
686*141c29a2SArnaud Minier },
687*141c29a2SArnaud Minier [RCC_CLOCK_MUX_CLK48] = {
688*141c29a2SArnaud Minier .name = "clk48",
689*141c29a2SArnaud Minier /* Same mapping as: CCIPR_CLK48SEL */
690*141c29a2SArnaud Minier .src_mapping = {
691*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_GND,
692*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_PLL48M2,
693*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_PLL48M1,
694*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_MSI,
695*141c29a2SArnaud Minier },
696*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
697*141c29a2SArnaud Minier },
698*141c29a2SArnaud Minier [RCC_CLOCK_MUX_SAI2] = {
699*141c29a2SArnaud Minier .name = "sai2",
700*141c29a2SArnaud Minier /* Same mapping as: CCIPR_SAI2SEL */
701*141c29a2SArnaud Minier .src_mapping = {
702*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_PLLSAI1,
703*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_PLLSAI2,
704*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_PLLSAI3,
705*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_SAI2_EXTCLK,
706*141c29a2SArnaud Minier },
707*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
708*141c29a2SArnaud Minier },
709*141c29a2SArnaud Minier [RCC_CLOCK_MUX_SAI1] = {
710*141c29a2SArnaud Minier .name = "sai1",
711*141c29a2SArnaud Minier /* Same mapping as: CCIPR_SAI1SEL */
712*141c29a2SArnaud Minier .src_mapping = {
713*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_PLLSAI1,
714*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_PLLSAI2,
715*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_PLLSAI3,
716*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_SAI1_EXTCLK,
717*141c29a2SArnaud Minier },
718*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
719*141c29a2SArnaud Minier },
720*141c29a2SArnaud Minier /* From now on, these muxes only have one valid source */
721*141c29a2SArnaud Minier [RCC_CLOCK_MUX_TSC] = {
722*141c29a2SArnaud Minier .name = "tsc",
723*141c29a2SArnaud Minier .src_mapping = {
724*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_SYSCLK,
725*141c29a2SArnaud Minier },
726*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
727*141c29a2SArnaud Minier },
728*141c29a2SArnaud Minier [RCC_CLOCK_MUX_CRC] = {
729*141c29a2SArnaud Minier .name = "crc",
730*141c29a2SArnaud Minier .src_mapping = {
731*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_SYSCLK,
732*141c29a2SArnaud Minier },
733*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
734*141c29a2SArnaud Minier },
735*141c29a2SArnaud Minier [RCC_CLOCK_MUX_FLASH] = {
736*141c29a2SArnaud Minier .name = "flash",
737*141c29a2SArnaud Minier .src_mapping = {
738*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_SYSCLK,
739*141c29a2SArnaud Minier },
740*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
741*141c29a2SArnaud Minier },
742*141c29a2SArnaud Minier [RCC_CLOCK_MUX_DMA2] = {
743*141c29a2SArnaud Minier .name = "dma2",
744*141c29a2SArnaud Minier .src_mapping = {
745*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_SYSCLK,
746*141c29a2SArnaud Minier },
747*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
748*141c29a2SArnaud Minier },
749*141c29a2SArnaud Minier [RCC_CLOCK_MUX_DMA1] = {
750*141c29a2SArnaud Minier .name = "dma1",
751*141c29a2SArnaud Minier .src_mapping = {
752*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_SYSCLK,
753*141c29a2SArnaud Minier },
754*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
755*141c29a2SArnaud Minier },
756*141c29a2SArnaud Minier [RCC_CLOCK_MUX_RNG] = {
757*141c29a2SArnaud Minier .name = "rng",
758*141c29a2SArnaud Minier .src_mapping = {
759*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_SYSCLK,
760*141c29a2SArnaud Minier },
761*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
762*141c29a2SArnaud Minier },
763*141c29a2SArnaud Minier [RCC_CLOCK_MUX_AES] = {
764*141c29a2SArnaud Minier .name = "aes",
765*141c29a2SArnaud Minier .src_mapping = {
766*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_SYSCLK,
767*141c29a2SArnaud Minier },
768*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
769*141c29a2SArnaud Minier },
770*141c29a2SArnaud Minier [RCC_CLOCK_MUX_OTGFS] = {
771*141c29a2SArnaud Minier .name = "otgfs",
772*141c29a2SArnaud Minier .src_mapping = {
773*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_SYSCLK,
774*141c29a2SArnaud Minier },
775*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
776*141c29a2SArnaud Minier },
777*141c29a2SArnaud Minier [RCC_CLOCK_MUX_GPIOA] = {
778*141c29a2SArnaud Minier .name = "gpioa",
779*141c29a2SArnaud Minier .src_mapping = {
780*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_SYSCLK,
781*141c29a2SArnaud Minier },
782*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
783*141c29a2SArnaud Minier },
784*141c29a2SArnaud Minier [RCC_CLOCK_MUX_GPIOB] = {
785*141c29a2SArnaud Minier .name = "gpiob",
786*141c29a2SArnaud Minier .src_mapping = {
787*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_SYSCLK,
788*141c29a2SArnaud Minier },
789*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
790*141c29a2SArnaud Minier },
791*141c29a2SArnaud Minier [RCC_CLOCK_MUX_GPIOC] = {
792*141c29a2SArnaud Minier .name = "gpioc",
793*141c29a2SArnaud Minier .src_mapping = {
794*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_SYSCLK,
795*141c29a2SArnaud Minier },
796*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
797*141c29a2SArnaud Minier },
798*141c29a2SArnaud Minier [RCC_CLOCK_MUX_GPIOD] = {
799*141c29a2SArnaud Minier .name = "gpiod",
800*141c29a2SArnaud Minier .src_mapping = {
801*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_SYSCLK,
802*141c29a2SArnaud Minier },
803*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
804*141c29a2SArnaud Minier },
805*141c29a2SArnaud Minier [RCC_CLOCK_MUX_GPIOE] = {
806*141c29a2SArnaud Minier .name = "gpioe",
807*141c29a2SArnaud Minier .src_mapping = {
808*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_SYSCLK,
809*141c29a2SArnaud Minier },
810*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
811*141c29a2SArnaud Minier },
812*141c29a2SArnaud Minier [RCC_CLOCK_MUX_GPIOF] = {
813*141c29a2SArnaud Minier .name = "gpiof",
814*141c29a2SArnaud Minier .src_mapping = {
815*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_SYSCLK,
816*141c29a2SArnaud Minier },
817*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
818*141c29a2SArnaud Minier },
819*141c29a2SArnaud Minier [RCC_CLOCK_MUX_GPIOG] = {
820*141c29a2SArnaud Minier .name = "gpiog",
821*141c29a2SArnaud Minier .src_mapping = {
822*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_SYSCLK,
823*141c29a2SArnaud Minier },
824*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
825*141c29a2SArnaud Minier },
826*141c29a2SArnaud Minier [RCC_CLOCK_MUX_GPIOH] = {
827*141c29a2SArnaud Minier .name = "gpioh",
828*141c29a2SArnaud Minier .src_mapping = {
829*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_SYSCLK,
830*141c29a2SArnaud Minier },
831*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
832*141c29a2SArnaud Minier },
833*141c29a2SArnaud Minier [RCC_CLOCK_MUX_QSPI] = {
834*141c29a2SArnaud Minier .name = "qspi",
835*141c29a2SArnaud Minier .src_mapping = {
836*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_SYSCLK,
837*141c29a2SArnaud Minier },
838*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
839*141c29a2SArnaud Minier },
840*141c29a2SArnaud Minier [RCC_CLOCK_MUX_FMC] = {
841*141c29a2SArnaud Minier .name = "fmc",
842*141c29a2SArnaud Minier .src_mapping = {
843*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_SYSCLK,
844*141c29a2SArnaud Minier },
845*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
846*141c29a2SArnaud Minier },
847*141c29a2SArnaud Minier [RCC_CLOCK_MUX_OPAMP] = {
848*141c29a2SArnaud Minier .name = "opamp",
849*141c29a2SArnaud Minier .src_mapping = {
850*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_PCLK1,
851*141c29a2SArnaud Minier },
852*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
853*141c29a2SArnaud Minier },
854*141c29a2SArnaud Minier [RCC_CLOCK_MUX_DAC1] = {
855*141c29a2SArnaud Minier .name = "dac1",
856*141c29a2SArnaud Minier .src_mapping = {
857*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_PCLK1,
858*141c29a2SArnaud Minier },
859*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
860*141c29a2SArnaud Minier },
861*141c29a2SArnaud Minier [RCC_CLOCK_MUX_PWR] = {
862*141c29a2SArnaud Minier .name = "pwr",
863*141c29a2SArnaud Minier /*
864*141c29a2SArnaud Minier * PWREN is in the APB1ENR1 register,
865*141c29a2SArnaud Minier * but PWR uses SYSCLK according to the clock tree.
866*141c29a2SArnaud Minier */
867*141c29a2SArnaud Minier .src_mapping = {
868*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_SYSCLK,
869*141c29a2SArnaud Minier },
870*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
871*141c29a2SArnaud Minier },
872*141c29a2SArnaud Minier [RCC_CLOCK_MUX_CAN1] = {
873*141c29a2SArnaud Minier .name = "can1",
874*141c29a2SArnaud Minier .src_mapping = {
875*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_PCLK1,
876*141c29a2SArnaud Minier },
877*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
878*141c29a2SArnaud Minier },
879*141c29a2SArnaud Minier [RCC_CLOCK_MUX_SPI3] = {
880*141c29a2SArnaud Minier .name = "spi3",
881*141c29a2SArnaud Minier .src_mapping = {
882*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_PCLK1,
883*141c29a2SArnaud Minier },
884*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
885*141c29a2SArnaud Minier },
886*141c29a2SArnaud Minier [RCC_CLOCK_MUX_SPI2] = {
887*141c29a2SArnaud Minier .name = "spi2",
888*141c29a2SArnaud Minier .src_mapping = {
889*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_PCLK1,
890*141c29a2SArnaud Minier },
891*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
892*141c29a2SArnaud Minier },
893*141c29a2SArnaud Minier [RCC_CLOCK_MUX_WWDG] = {
894*141c29a2SArnaud Minier .name = "wwdg",
895*141c29a2SArnaud Minier .src_mapping = {
896*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_PCLK1,
897*141c29a2SArnaud Minier },
898*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
899*141c29a2SArnaud Minier },
900*141c29a2SArnaud Minier [RCC_CLOCK_MUX_LCD] = {
901*141c29a2SArnaud Minier .name = "lcd",
902*141c29a2SArnaud Minier .src_mapping = {
903*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_LCD_AND_RTC_COMMON,
904*141c29a2SArnaud Minier },
905*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
906*141c29a2SArnaud Minier },
907*141c29a2SArnaud Minier [RCC_CLOCK_MUX_TIM7] = {
908*141c29a2SArnaud Minier .name = "tim7",
909*141c29a2SArnaud Minier .src_mapping = {
910*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_PCLK1,
911*141c29a2SArnaud Minier },
912*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
913*141c29a2SArnaud Minier },
914*141c29a2SArnaud Minier [RCC_CLOCK_MUX_TIM6] = {
915*141c29a2SArnaud Minier .name = "tim6",
916*141c29a2SArnaud Minier .src_mapping = {
917*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_PCLK1,
918*141c29a2SArnaud Minier },
919*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
920*141c29a2SArnaud Minier },
921*141c29a2SArnaud Minier [RCC_CLOCK_MUX_TIM5] = {
922*141c29a2SArnaud Minier .name = "tim5",
923*141c29a2SArnaud Minier .src_mapping = {
924*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_PCLK1,
925*141c29a2SArnaud Minier },
926*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
927*141c29a2SArnaud Minier },
928*141c29a2SArnaud Minier [RCC_CLOCK_MUX_TIM4] = {
929*141c29a2SArnaud Minier .name = "tim4",
930*141c29a2SArnaud Minier .src_mapping = {
931*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_PCLK1,
932*141c29a2SArnaud Minier },
933*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
934*141c29a2SArnaud Minier },
935*141c29a2SArnaud Minier [RCC_CLOCK_MUX_TIM3] = {
936*141c29a2SArnaud Minier .name = "tim3",
937*141c29a2SArnaud Minier .src_mapping = {
938*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_PCLK1,
939*141c29a2SArnaud Minier },
940*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
941*141c29a2SArnaud Minier },
942*141c29a2SArnaud Minier [RCC_CLOCK_MUX_TIM2] = {
943*141c29a2SArnaud Minier .name = "tim2",
944*141c29a2SArnaud Minier .src_mapping = {
945*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_PCLK1,
946*141c29a2SArnaud Minier },
947*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
948*141c29a2SArnaud Minier },
949*141c29a2SArnaud Minier [RCC_CLOCK_MUX_TIM17] = {
950*141c29a2SArnaud Minier .name = "tim17",
951*141c29a2SArnaud Minier .src_mapping = {
952*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_PCLK2,
953*141c29a2SArnaud Minier },
954*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
955*141c29a2SArnaud Minier },
956*141c29a2SArnaud Minier [RCC_CLOCK_MUX_TIM16] = {
957*141c29a2SArnaud Minier .name = "tim16",
958*141c29a2SArnaud Minier .src_mapping = {
959*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_PCLK2,
960*141c29a2SArnaud Minier },
961*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
962*141c29a2SArnaud Minier },
963*141c29a2SArnaud Minier [RCC_CLOCK_MUX_TIM15] = {
964*141c29a2SArnaud Minier .name = "tim15",
965*141c29a2SArnaud Minier .src_mapping = {
966*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_PCLK2,
967*141c29a2SArnaud Minier },
968*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
969*141c29a2SArnaud Minier },
970*141c29a2SArnaud Minier [RCC_CLOCK_MUX_TIM8] = {
971*141c29a2SArnaud Minier .name = "tim8",
972*141c29a2SArnaud Minier .src_mapping = {
973*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_PCLK2,
974*141c29a2SArnaud Minier },
975*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
976*141c29a2SArnaud Minier },
977*141c29a2SArnaud Minier [RCC_CLOCK_MUX_SPI1] = {
978*141c29a2SArnaud Minier .name = "spi1",
979*141c29a2SArnaud Minier .src_mapping = {
980*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_PCLK2,
981*141c29a2SArnaud Minier },
982*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
983*141c29a2SArnaud Minier },
984*141c29a2SArnaud Minier [RCC_CLOCK_MUX_TIM1] = {
985*141c29a2SArnaud Minier .name = "tim1",
986*141c29a2SArnaud Minier .src_mapping = {
987*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_PCLK2,
988*141c29a2SArnaud Minier },
989*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
990*141c29a2SArnaud Minier },
991*141c29a2SArnaud Minier [RCC_CLOCK_MUX_SDMMC1] = {
992*141c29a2SArnaud Minier .name = "sdmmc1",
993*141c29a2SArnaud Minier .src_mapping = {
994*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_PCLK2,
995*141c29a2SArnaud Minier },
996*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
997*141c29a2SArnaud Minier },
998*141c29a2SArnaud Minier [RCC_CLOCK_MUX_FW] = {
999*141c29a2SArnaud Minier .name = "fw",
1000*141c29a2SArnaud Minier .src_mapping = {
1001*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_PCLK2,
1002*141c29a2SArnaud Minier },
1003*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
1004*141c29a2SArnaud Minier },
1005*141c29a2SArnaud Minier [RCC_CLOCK_MUX_SYSCFG] = {
1006*141c29a2SArnaud Minier .name = "syscfg",
1007*141c29a2SArnaud Minier .src_mapping = {
1008*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_PCLK2,
1009*141c29a2SArnaud Minier },
1010*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
1011*141c29a2SArnaud Minier },
1012*141c29a2SArnaud Minier [RCC_CLOCK_MUX_RTC] = {
1013*141c29a2SArnaud Minier .name = "rtc",
1014*141c29a2SArnaud Minier .src_mapping = {
1015*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_LCD_AND_RTC_COMMON,
1016*141c29a2SArnaud Minier },
1017*141c29a2SArnaud Minier FILL_DEFAULT_INIT_DISABLED,
1018*141c29a2SArnaud Minier },
1019*141c29a2SArnaud Minier [RCC_CLOCK_MUX_CORTEX_FCLK] = {
1020*141c29a2SArnaud Minier .name = "cortex-fclk",
1021*141c29a2SArnaud Minier .src_mapping = {
1022*141c29a2SArnaud Minier RCC_CLOCK_MUX_SRC_HCLK,
1023*141c29a2SArnaud Minier },
1024*141c29a2SArnaud Minier FILL_DEFAULT_INIT_ENABLED,
1025*141c29a2SArnaud Minier },
1026*141c29a2SArnaud Minier };
1027*141c29a2SArnaud Minier
set_clock_mux_init_info(RccClockMuxState * mux,RccClockMux id)1028*141c29a2SArnaud Minier static inline void set_clock_mux_init_info(RccClockMuxState *mux,
1029*141c29a2SArnaud Minier RccClockMux id)
1030*141c29a2SArnaud Minier {
1031*141c29a2SArnaud Minier mux->id = id;
1032*141c29a2SArnaud Minier mux->multiplier = CLOCK_MUX_INIT_INFO[id].multiplier;
1033*141c29a2SArnaud Minier mux->divider = CLOCK_MUX_INIT_INFO[id].divider;
1034*141c29a2SArnaud Minier mux->enabled = CLOCK_MUX_INIT_INFO[id].enabled;
1035*141c29a2SArnaud Minier /*
1036*141c29a2SArnaud Minier * Every peripheral has the first source of their source list as
1037*141c29a2SArnaud Minier * as their default source.
1038*141c29a2SArnaud Minier */
1039*141c29a2SArnaud Minier mux->src = 0;
1040*141c29a2SArnaud Minier }
1041*141c29a2SArnaud Minier
1042d6b55a0fSArnaud Minier #endif /* HW_STM32L4X5_RCC_INTERNALS_H */
1043