|
@@ -334,4 +334,709 @@ typedef enum RccClockMuxSource {
|
|
|
RCC_CLOCK_MUX_SRC_NUMBER,
|
|
|
} RccClockMuxSource;
|
|
|
|
|
|
+/* PLL init info */
|
|
|
+typedef struct PllInitInfo {
|
|
|
+ const char *name;
|
|
|
+
|
|
|
+ const char *channel_name[RCC_NUM_CHANNEL_PLL_OUT];
|
|
|
+ bool channel_exists[RCC_NUM_CHANNEL_PLL_OUT];
|
|
|
+ uint32_t default_channel_divider[RCC_NUM_CHANNEL_PLL_OUT];
|
|
|
+
|
|
|
+ RccClockMuxSource src_mapping[RCC_NUM_CLOCK_MUX_SRC];
|
|
|
+} PllInitInfo;
|
|
|
+
|
|
|
+static const PllInitInfo PLL_INIT_INFO[] = {
|
|
|
+ [RCC_PLL_PLL] = {
|
|
|
+ .name = "pll",
|
|
|
+ .channel_name = {
|
|
|
+ "pllsai3clk",
|
|
|
+ "pll48m1clk",
|
|
|
+ "pllclk"
|
|
|
+ },
|
|
|
+ .channel_exists = {
|
|
|
+ true, true, true
|
|
|
+ },
|
|
|
+ /* From PLLCFGR register documentation */
|
|
|
+ .default_channel_divider = {
|
|
|
+ 7, 2, 2
|
|
|
+ }
|
|
|
+ },
|
|
|
+ [RCC_PLL_PLLSAI1] = {
|
|
|
+ .name = "pllsai1",
|
|
|
+ .channel_name = {
|
|
|
+ "pllsai1clk",
|
|
|
+ "pll48m2clk",
|
|
|
+ "plladc1clk"
|
|
|
+ },
|
|
|
+ .channel_exists = {
|
|
|
+ true, true, true
|
|
|
+ },
|
|
|
+ /* From PLLSAI1CFGR register documentation */
|
|
|
+ .default_channel_divider = {
|
|
|
+ 7, 2, 2
|
|
|
+ }
|
|
|
+ },
|
|
|
+ [RCC_PLL_PLLSAI2] = {
|
|
|
+ .name = "pllsai2",
|
|
|
+ .channel_name = {
|
|
|
+ "pllsai2clk",
|
|
|
+ NULL,
|
|
|
+ "plladc2clk"
|
|
|
+ },
|
|
|
+ .channel_exists = {
|
|
|
+ true, false, true
|
|
|
+ },
|
|
|
+ /* From PLLSAI2CFGR register documentation */
|
|
|
+ .default_channel_divider = {
|
|
|
+ 7, 0, 2
|
|
|
+ }
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+static inline void set_pll_init_info(RccPllState *pll,
|
|
|
+ RccPll id)
|
|
|
+{
|
|
|
+ int i;
|
|
|
+
|
|
|
+ pll->id = id;
|
|
|
+ pll->vco_multiplier = 1;
|
|
|
+ for (i = 0; i < RCC_NUM_CHANNEL_PLL_OUT; i++) {
|
|
|
+ pll->channel_enabled[i] = false;
|
|
|
+ pll->channel_exists[i] = PLL_INIT_INFO[id].channel_exists[i];
|
|
|
+ pll->channel_divider[i] = PLL_INIT_INFO[id].default_channel_divider[i];
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/* Clock mux init info */
|
|
|
+typedef struct ClockMuxInitInfo {
|
|
|
+ const char *name;
|
|
|
+
|
|
|
+ uint32_t multiplier;
|
|
|
+ uint32_t divider;
|
|
|
+ bool enabled;
|
|
|
+ /* If this is true, the clock will not be exposed outside of the device */
|
|
|
+ bool hidden;
|
|
|
+
|
|
|
+ RccClockMuxSource src_mapping[RCC_NUM_CLOCK_MUX_SRC];
|
|
|
+} ClockMuxInitInfo;
|
|
|
+
|
|
|
+#define FILL_DEFAULT_FACTOR \
|
|
|
+ .multiplier = 1, \
|
|
|
+ .divider = 1
|
|
|
+
|
|
|
+#define FILL_DEFAULT_INIT_ENABLED \
|
|
|
+ FILL_DEFAULT_FACTOR, \
|
|
|
+ .enabled = true
|
|
|
+
|
|
|
+#define FILL_DEFAULT_INIT_DISABLED \
|
|
|
+ FILL_DEFAULT_FACTOR, \
|
|
|
+ .enabled = false
|
|
|
+
|
|
|
+
|
|
|
+static const ClockMuxInitInfo CLOCK_MUX_INIT_INFO[] = {
|
|
|
+ [RCC_CLOCK_MUX_SYSCLK] = {
|
|
|
+ .name = "sysclk",
|
|
|
+ /* Same mapping as: CFGR_SW */
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_MSI,
|
|
|
+ RCC_CLOCK_MUX_SRC_HSI,
|
|
|
+ RCC_CLOCK_MUX_SRC_HSE,
|
|
|
+ RCC_CLOCK_MUX_SRC_PLL,
|
|
|
+ },
|
|
|
+ .hidden = true,
|
|
|
+ FILL_DEFAULT_INIT_ENABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_PLL_INPUT] = {
|
|
|
+ .name = "pll-input",
|
|
|
+ /* Same mapping as: PLLCFGR_PLLSRC */
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_MSI,
|
|
|
+ RCC_CLOCK_MUX_SRC_HSI,
|
|
|
+ RCC_CLOCK_MUX_SRC_HSE,
|
|
|
+ },
|
|
|
+ .hidden = true,
|
|
|
+ FILL_DEFAULT_INIT_ENABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_HCLK] = {
|
|
|
+ .name = "hclk",
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_SYSCLK,
|
|
|
+ },
|
|
|
+ .hidden = true,
|
|
|
+ FILL_DEFAULT_INIT_ENABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_PCLK1] = {
|
|
|
+ .name = "pclk1",
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_HCLK,
|
|
|
+ },
|
|
|
+ .hidden = true,
|
|
|
+ FILL_DEFAULT_INIT_ENABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_PCLK2] = {
|
|
|
+ .name = "pclk2",
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_HCLK,
|
|
|
+ },
|
|
|
+ .hidden = true,
|
|
|
+ FILL_DEFAULT_INIT_ENABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_HSE_OVER_32] = {
|
|
|
+ .name = "hse-divided-by-32",
|
|
|
+ .multiplier = 1,
|
|
|
+ .divider = 32,
|
|
|
+ .enabled = true,
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_HSE,
|
|
|
+ },
|
|
|
+ .hidden = true,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_LCD_AND_RTC_COMMON] = {
|
|
|
+ .name = "lcd-and-rtc-common-mux",
|
|
|
+ /* Same mapping as: BDCR_RTCSEL */
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_GND,
|
|
|
+ RCC_CLOCK_MUX_SRC_LSE,
|
|
|
+ RCC_CLOCK_MUX_SRC_LSI,
|
|
|
+ RCC_CLOCK_MUX_SRC_HSE_OVER_32,
|
|
|
+ },
|
|
|
+ .hidden = true,
|
|
|
+ FILL_DEFAULT_INIT_ENABLED,
|
|
|
+ },
|
|
|
+ /* From now on, muxes with a publicly available output */
|
|
|
+ [RCC_CLOCK_MUX_CORTEX_REFCLK] = {
|
|
|
+ .name = "cortex-refclk",
|
|
|
+ .multiplier = 1,
|
|
|
+ /* REFCLK is always HCLK/8 */
|
|
|
+ .divider = 8,
|
|
|
+ .enabled = true,
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_HCLK,
|
|
|
+ }
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_USART1] = {
|
|
|
+ .name = "usart1",
|
|
|
+ /* Same mapping as: CCIPR_USART1SEL */
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_PCLK2,
|
|
|
+ RCC_CLOCK_MUX_SRC_SYSCLK,
|
|
|
+ RCC_CLOCK_MUX_SRC_HSI,
|
|
|
+ RCC_CLOCK_MUX_SRC_LSE,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_USART2] = {
|
|
|
+ .name = "usart2",
|
|
|
+ /* Same mapping as: CCIPR_USART2SEL */
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_PCLK1,
|
|
|
+ RCC_CLOCK_MUX_SRC_SYSCLK,
|
|
|
+ RCC_CLOCK_MUX_SRC_HSI,
|
|
|
+ RCC_CLOCK_MUX_SRC_LSE,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_USART3] = {
|
|
|
+ .name = "usart3",
|
|
|
+ /* Same mapping as: CCIPR_USART3SEL */
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_PCLK1,
|
|
|
+ RCC_CLOCK_MUX_SRC_SYSCLK,
|
|
|
+ RCC_CLOCK_MUX_SRC_HSI,
|
|
|
+ RCC_CLOCK_MUX_SRC_LSE,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_UART4] = {
|
|
|
+ .name = "uart4",
|
|
|
+ /* Same mapping as: CCIPR_UART4SEL */
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_PCLK1,
|
|
|
+ RCC_CLOCK_MUX_SRC_SYSCLK,
|
|
|
+ RCC_CLOCK_MUX_SRC_HSI,
|
|
|
+ RCC_CLOCK_MUX_SRC_LSE,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_UART5] = {
|
|
|
+ .name = "uart5",
|
|
|
+ /* Same mapping as: CCIPR_UART5SEL */
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_PCLK1,
|
|
|
+ RCC_CLOCK_MUX_SRC_SYSCLK,
|
|
|
+ RCC_CLOCK_MUX_SRC_HSI,
|
|
|
+ RCC_CLOCK_MUX_SRC_LSE,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_LPUART1] = {
|
|
|
+ .name = "lpuart1",
|
|
|
+ /* Same mapping as: CCIPR_LPUART1SEL */
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_PCLK1,
|
|
|
+ RCC_CLOCK_MUX_SRC_SYSCLK,
|
|
|
+ RCC_CLOCK_MUX_SRC_HSI,
|
|
|
+ RCC_CLOCK_MUX_SRC_LSE,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_I2C1] = {
|
|
|
+ .name = "i2c1",
|
|
|
+ /* Same mapping as: CCIPR_I2C1SEL */
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_PCLK1,
|
|
|
+ RCC_CLOCK_MUX_SRC_SYSCLK,
|
|
|
+ RCC_CLOCK_MUX_SRC_HSI,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_I2C2] = {
|
|
|
+ .name = "i2c2",
|
|
|
+ /* Same mapping as: CCIPR_I2C2SEL */
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_PCLK1,
|
|
|
+ RCC_CLOCK_MUX_SRC_SYSCLK,
|
|
|
+ RCC_CLOCK_MUX_SRC_HSI,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_I2C3] = {
|
|
|
+ .name = "i2c3",
|
|
|
+ /* Same mapping as: CCIPR_I2C3SEL */
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_PCLK1,
|
|
|
+ RCC_CLOCK_MUX_SRC_SYSCLK,
|
|
|
+ RCC_CLOCK_MUX_SRC_HSI,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_LPTIM1] = {
|
|
|
+ .name = "lptim1",
|
|
|
+ /* Same mapping as: CCIPR_LPTIM1SEL */
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_PCLK1,
|
|
|
+ RCC_CLOCK_MUX_SRC_LSI,
|
|
|
+ RCC_CLOCK_MUX_SRC_HSI,
|
|
|
+ RCC_CLOCK_MUX_SRC_LSE,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_LPTIM2] = {
|
|
|
+ .name = "lptim2",
|
|
|
+ /* Same mapping as: CCIPR_LPTIM2SEL */
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_PCLK1,
|
|
|
+ RCC_CLOCK_MUX_SRC_LSI,
|
|
|
+ RCC_CLOCK_MUX_SRC_HSI,
|
|
|
+ RCC_CLOCK_MUX_SRC_LSE,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_SWPMI1] = {
|
|
|
+ .name = "swpmi1",
|
|
|
+ /* Same mapping as: CCIPR_SWPMI1SEL */
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_PCLK1,
|
|
|
+ RCC_CLOCK_MUX_SRC_HSI,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_MCO] = {
|
|
|
+ .name = "mco",
|
|
|
+ /* Same mapping as: CFGR_MCOSEL */
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_SYSCLK,
|
|
|
+ RCC_CLOCK_MUX_SRC_MSI,
|
|
|
+ RCC_CLOCK_MUX_SRC_HSI,
|
|
|
+ RCC_CLOCK_MUX_SRC_HSE,
|
|
|
+ RCC_CLOCK_MUX_SRC_PLL,
|
|
|
+ RCC_CLOCK_MUX_SRC_LSI,
|
|
|
+ RCC_CLOCK_MUX_SRC_LSE,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_LSCO] = {
|
|
|
+ .name = "lsco",
|
|
|
+ /* Same mapping as: BDCR_LSCOSEL */
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_LSI,
|
|
|
+ RCC_CLOCK_MUX_SRC_LSE,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_DFSDM1] = {
|
|
|
+ .name = "dfsdm1",
|
|
|
+ /* Same mapping as: CCIPR_DFSDM1SEL */
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_PCLK2,
|
|
|
+ RCC_CLOCK_MUX_SRC_SYSCLK,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_ADC] = {
|
|
|
+ .name = "adc",
|
|
|
+ /* Same mapping as: CCIPR_ADCSEL */
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_GND,
|
|
|
+ RCC_CLOCK_MUX_SRC_PLLADC1,
|
|
|
+ RCC_CLOCK_MUX_SRC_PLLADC2,
|
|
|
+ RCC_CLOCK_MUX_SRC_SYSCLK,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_CLK48] = {
|
|
|
+ .name = "clk48",
|
|
|
+ /* Same mapping as: CCIPR_CLK48SEL */
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_GND,
|
|
|
+ RCC_CLOCK_MUX_SRC_PLL48M2,
|
|
|
+ RCC_CLOCK_MUX_SRC_PLL48M1,
|
|
|
+ RCC_CLOCK_MUX_SRC_MSI,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_SAI2] = {
|
|
|
+ .name = "sai2",
|
|
|
+ /* Same mapping as: CCIPR_SAI2SEL */
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_PLLSAI1,
|
|
|
+ RCC_CLOCK_MUX_SRC_PLLSAI2,
|
|
|
+ RCC_CLOCK_MUX_SRC_PLLSAI3,
|
|
|
+ RCC_CLOCK_MUX_SRC_SAI2_EXTCLK,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_SAI1] = {
|
|
|
+ .name = "sai1",
|
|
|
+ /* Same mapping as: CCIPR_SAI1SEL */
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_PLLSAI1,
|
|
|
+ RCC_CLOCK_MUX_SRC_PLLSAI2,
|
|
|
+ RCC_CLOCK_MUX_SRC_PLLSAI3,
|
|
|
+ RCC_CLOCK_MUX_SRC_SAI1_EXTCLK,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ /* From now on, these muxes only have one valid source */
|
|
|
+ [RCC_CLOCK_MUX_TSC] = {
|
|
|
+ .name = "tsc",
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_SYSCLK,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_CRC] = {
|
|
|
+ .name = "crc",
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_SYSCLK,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_FLASH] = {
|
|
|
+ .name = "flash",
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_SYSCLK,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_DMA2] = {
|
|
|
+ .name = "dma2",
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_SYSCLK,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_DMA1] = {
|
|
|
+ .name = "dma1",
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_SYSCLK,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_RNG] = {
|
|
|
+ .name = "rng",
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_SYSCLK,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_AES] = {
|
|
|
+ .name = "aes",
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_SYSCLK,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_OTGFS] = {
|
|
|
+ .name = "otgfs",
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_SYSCLK,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_GPIOA] = {
|
|
|
+ .name = "gpioa",
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_SYSCLK,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_GPIOB] = {
|
|
|
+ .name = "gpiob",
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_SYSCLK,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_GPIOC] = {
|
|
|
+ .name = "gpioc",
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_SYSCLK,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_GPIOD] = {
|
|
|
+ .name = "gpiod",
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_SYSCLK,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_GPIOE] = {
|
|
|
+ .name = "gpioe",
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_SYSCLK,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_GPIOF] = {
|
|
|
+ .name = "gpiof",
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_SYSCLK,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_GPIOG] = {
|
|
|
+ .name = "gpiog",
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_SYSCLK,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_GPIOH] = {
|
|
|
+ .name = "gpioh",
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_SYSCLK,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_QSPI] = {
|
|
|
+ .name = "qspi",
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_SYSCLK,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_FMC] = {
|
|
|
+ .name = "fmc",
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_SYSCLK,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_OPAMP] = {
|
|
|
+ .name = "opamp",
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_PCLK1,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_DAC1] = {
|
|
|
+ .name = "dac1",
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_PCLK1,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_PWR] = {
|
|
|
+ .name = "pwr",
|
|
|
+ /*
|
|
|
+ * PWREN is in the APB1ENR1 register,
|
|
|
+ * but PWR uses SYSCLK according to the clock tree.
|
|
|
+ */
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_SYSCLK,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_CAN1] = {
|
|
|
+ .name = "can1",
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_PCLK1,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_SPI3] = {
|
|
|
+ .name = "spi3",
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_PCLK1,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_SPI2] = {
|
|
|
+ .name = "spi2",
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_PCLK1,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_WWDG] = {
|
|
|
+ .name = "wwdg",
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_PCLK1,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_LCD] = {
|
|
|
+ .name = "lcd",
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_LCD_AND_RTC_COMMON,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_TIM7] = {
|
|
|
+ .name = "tim7",
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_PCLK1,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_TIM6] = {
|
|
|
+ .name = "tim6",
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_PCLK1,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_TIM5] = {
|
|
|
+ .name = "tim5",
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_PCLK1,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_TIM4] = {
|
|
|
+ .name = "tim4",
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_PCLK1,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_TIM3] = {
|
|
|
+ .name = "tim3",
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_PCLK1,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_TIM2] = {
|
|
|
+ .name = "tim2",
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_PCLK1,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_TIM17] = {
|
|
|
+ .name = "tim17",
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_PCLK2,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_TIM16] = {
|
|
|
+ .name = "tim16",
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_PCLK2,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_TIM15] = {
|
|
|
+ .name = "tim15",
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_PCLK2,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_TIM8] = {
|
|
|
+ .name = "tim8",
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_PCLK2,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_SPI1] = {
|
|
|
+ .name = "spi1",
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_PCLK2,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_TIM1] = {
|
|
|
+ .name = "tim1",
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_PCLK2,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_SDMMC1] = {
|
|
|
+ .name = "sdmmc1",
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_PCLK2,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_FW] = {
|
|
|
+ .name = "fw",
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_PCLK2,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_SYSCFG] = {
|
|
|
+ .name = "syscfg",
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_PCLK2,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_RTC] = {
|
|
|
+ .name = "rtc",
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_LCD_AND_RTC_COMMON,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_DISABLED,
|
|
|
+ },
|
|
|
+ [RCC_CLOCK_MUX_CORTEX_FCLK] = {
|
|
|
+ .name = "cortex-fclk",
|
|
|
+ .src_mapping = {
|
|
|
+ RCC_CLOCK_MUX_SRC_HCLK,
|
|
|
+ },
|
|
|
+ FILL_DEFAULT_INIT_ENABLED,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+static inline void set_clock_mux_init_info(RccClockMuxState *mux,
|
|
|
+ RccClockMux id)
|
|
|
+{
|
|
|
+ mux->id = id;
|
|
|
+ mux->multiplier = CLOCK_MUX_INIT_INFO[id].multiplier;
|
|
|
+ mux->divider = CLOCK_MUX_INIT_INFO[id].divider;
|
|
|
+ mux->enabled = CLOCK_MUX_INIT_INFO[id].enabled;
|
|
|
+ /*
|
|
|
+ * Every peripheral has the first source of their source list as
|
|
|
+ * as their default source.
|
|
|
+ */
|
|
|
+ mux->src = 0;
|
|
|
+}
|
|
|
+
|
|
|
#endif /* HW_STM32L4X5_RCC_INTERNALS_H */
|