xref: /qemu/include/hw/misc/stm32l4x5_rcc_internals.h (revision db596ae19040574e41d086e78469014191d7d7fc)
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