mirror of
				https://github.com/torvalds/linux.git
				synced 2025-10-31 16:48:26 +02:00 
			
		
		
		
	 a542e9d70c
			
		
	
	
		a542e9d70c
		
	
	
	
	
		
			
			Add ck_icn_p_iwdg1, ck_icn_p_pka, ck_icn_p_rng, ck_icn_p_saes, ck_icn_p_serc clocks. They could be configured for non secured world. Signed-off-by: Gabriel Fernandez <gabriel.fernandez@foss.st.com> Link: https://lore.kernel.org/r/20240529131310.260954-3-gabriel.fernandez@foss.st.com Signed-off-by: Stephen Boyd <sboyd@kernel.org>
		
			
				
	
	
		
			2001 lines
		
	
	
	
		
			64 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			2001 lines
		
	
	
	
		
			64 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| // SPDX-License-Identifier: GPL-2.0-only
 | |
| /*
 | |
|  * Copyright (C) STMicroelectronics 2023 - All Rights Reserved
 | |
|  * Author: Gabriel Fernandez <gabriel.fernandez@foss.st.com> for STMicroelectronics.
 | |
|  */
 | |
| 
 | |
| #include <linux/bus/stm32_firewall_device.h>
 | |
| #include <linux/clk-provider.h>
 | |
| #include <linux/io.h>
 | |
| #include <linux/platform_device.h>
 | |
| 
 | |
| #include "clk-stm32-core.h"
 | |
| #include "reset-stm32.h"
 | |
| #include "stm32mp25_rcc.h"
 | |
| 
 | |
| #include <dt-bindings/clock/st,stm32mp25-rcc.h>
 | |
| #include <dt-bindings/reset/st,stm32mp25-rcc.h>
 | |
| 
 | |
| /* Clock security definition */
 | |
| #define SECF_NONE		-1
 | |
| 
 | |
| #define RCC_REG_SIZE	32
 | |
| #define RCC_SECCFGR(x)	(((x) / RCC_REG_SIZE) * 0x4 + RCC_SECCFGR0)
 | |
| #define RCC_CIDCFGR(x)	((x) * 0x8 + RCC_R0CIDCFGR)
 | |
| #define RCC_SEMCR(x)	((x) * 0x8 + RCC_R0SEMCR)
 | |
| #define RCC_CID1	1
 | |
| 
 | |
| /* Register: RIFSC_CIDCFGR */
 | |
| #define RCC_CIDCFGR_CFEN	BIT(0)
 | |
| #define RCC_CIDCFGR_SEM_EN	BIT(1)
 | |
| #define RCC_CIDCFGR_SEMWLC1_EN	BIT(17)
 | |
| #define RCC_CIDCFGR_SCID_MASK	GENMASK(6, 4)
 | |
| 
 | |
| /* Register: RIFSC_SEMCR */
 | |
| #define RCC_SEMCR_SEMCID_MASK	GENMASK(6, 4)
 | |
| 
 | |
| #define MP25_RIF_RCC_IS2M	107
 | |
| #define MP25_RIF_RCC_MCO1	108
 | |
| #define MP25_RIF_RCC_MCO2	109
 | |
| 
 | |
| #define SEC_RIFSC_FLAG		BIT(31)
 | |
| #define SEC_RIFSC(_id)		((_id) | SEC_RIFSC_FLAG)
 | |
| 
 | |
| enum {
 | |
| 	HSE,
 | |
| 	HSI,
 | |
| 	MSI,
 | |
| 	LSE,
 | |
| 	LSI,
 | |
| 	HSE_DIV2,
 | |
| 	ICN_HS_MCU,
 | |
| 	ICN_LS_MCU,
 | |
| 	ICN_SDMMC,
 | |
| 	ICN_DDR,
 | |
| 	ICN_DISPLAY,
 | |
| 	ICN_HSL,
 | |
| 	ICN_NIC,
 | |
| 	ICN_VID,
 | |
| 	FLEXGEN_07,
 | |
| 	FLEXGEN_08,
 | |
| 	FLEXGEN_09,
 | |
| 	FLEXGEN_10,
 | |
| 	FLEXGEN_11,
 | |
| 	FLEXGEN_12,
 | |
| 	FLEXGEN_13,
 | |
| 	FLEXGEN_14,
 | |
| 	FLEXGEN_15,
 | |
| 	FLEXGEN_16,
 | |
| 	FLEXGEN_17,
 | |
| 	FLEXGEN_18,
 | |
| 	FLEXGEN_19,
 | |
| 	FLEXGEN_20,
 | |
| 	FLEXGEN_21,
 | |
| 	FLEXGEN_22,
 | |
| 	FLEXGEN_23,
 | |
| 	FLEXGEN_24,
 | |
| 	FLEXGEN_25,
 | |
| 	FLEXGEN_26,
 | |
| 	FLEXGEN_27,
 | |
| 	FLEXGEN_28,
 | |
| 	FLEXGEN_29,
 | |
| 	FLEXGEN_30,
 | |
| 	FLEXGEN_31,
 | |
| 	FLEXGEN_32,
 | |
| 	FLEXGEN_33,
 | |
| 	FLEXGEN_34,
 | |
| 	FLEXGEN_35,
 | |
| 	FLEXGEN_36,
 | |
| 	FLEXGEN_37,
 | |
| 	FLEXGEN_38,
 | |
| 	FLEXGEN_39,
 | |
| 	FLEXGEN_40,
 | |
| 	FLEXGEN_41,
 | |
| 	FLEXGEN_42,
 | |
| 	FLEXGEN_43,
 | |
| 	FLEXGEN_44,
 | |
| 	FLEXGEN_45,
 | |
| 	FLEXGEN_46,
 | |
| 	FLEXGEN_47,
 | |
| 	FLEXGEN_48,
 | |
| 	FLEXGEN_49,
 | |
| 	FLEXGEN_50,
 | |
| 	FLEXGEN_51,
 | |
| 	FLEXGEN_52,
 | |
| 	FLEXGEN_53,
 | |
| 	FLEXGEN_54,
 | |
| 	FLEXGEN_55,
 | |
| 	FLEXGEN_56,
 | |
| 	FLEXGEN_57,
 | |
| 	FLEXGEN_58,
 | |
| 	FLEXGEN_59,
 | |
| 	FLEXGEN_60,
 | |
| 	FLEXGEN_61,
 | |
| 	FLEXGEN_62,
 | |
| 	FLEXGEN_63,
 | |
| 	ICN_APB1,
 | |
| 	ICN_APB2,
 | |
| 	ICN_APB3,
 | |
| 	ICN_APB4,
 | |
| 	ICN_APBDBG,
 | |
| 	TIMG1,
 | |
| 	TIMG2,
 | |
| 	PLL3,
 | |
| 	DSI_TXBYTE,
 | |
| };
 | |
| 
 | |
| static const struct clk_parent_data adc12_src[] = {
 | |
| 	{ .index = FLEXGEN_46 },
 | |
| 	{ .index = ICN_LS_MCU },
 | |
| };
 | |
| 
 | |
| static const struct clk_parent_data adc3_src[] = {
 | |
| 	{ .index = FLEXGEN_47 },
 | |
| 	{ .index = ICN_LS_MCU },
 | |
| 	{ .index = FLEXGEN_46 },
 | |
| };
 | |
| 
 | |
| static const struct clk_parent_data usb2phy1_src[] = {
 | |
| 	{ .index = FLEXGEN_57 },
 | |
| 	{ .index = HSE_DIV2 },
 | |
| };
 | |
| 
 | |
| static const struct clk_parent_data usb2phy2_src[] = {
 | |
| 	{ .index = FLEXGEN_58 },
 | |
| 	{ .index = HSE_DIV2 },
 | |
| };
 | |
| 
 | |
| static const struct clk_parent_data usb3pciphy_src[] = {
 | |
| 	{ .index = FLEXGEN_34 },
 | |
| 	{ .index = HSE_DIV2 },
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_ltdc;
 | |
| 
 | |
| static const struct clk_parent_data dsiblane_src[] = {
 | |
| 	{ .index = DSI_TXBYTE },
 | |
| 	{ .hw = &ck_ker_ltdc.hw },
 | |
| };
 | |
| 
 | |
| static const struct clk_parent_data dsiphy_src[] = {
 | |
| 	{ .index = FLEXGEN_28 },
 | |
| 	{ .index = HSE },
 | |
| };
 | |
| 
 | |
| static const struct clk_parent_data lvdsphy_src[] = {
 | |
| 	{ .index = FLEXGEN_32 },
 | |
| 	{ .index = HSE },
 | |
| };
 | |
| 
 | |
| static const struct clk_parent_data dts_src[] = {
 | |
| 	{ .index = HSI },
 | |
| 	{ .index = HSE },
 | |
| 	{ .index = MSI },
 | |
| };
 | |
| 
 | |
| static const struct clk_parent_data mco1_src[] = {
 | |
| 	{ .index = FLEXGEN_61 },
 | |
| };
 | |
| 
 | |
| static const struct clk_parent_data mco2_src[] = {
 | |
| 	{ .index = FLEXGEN_62 },
 | |
| };
 | |
| 
 | |
| enum enum_mux_cfg {
 | |
| 	MUX_ADC12,
 | |
| 	MUX_ADC3,
 | |
| 	MUX_DSIBLANE,
 | |
| 	MUX_DSIPHY,
 | |
| 	MUX_DTS,
 | |
| 	MUX_LVDSPHY,
 | |
| 	MUX_MCO1,
 | |
| 	MUX_MCO2,
 | |
| 	MUX_USB2PHY1,
 | |
| 	MUX_USB2PHY2,
 | |
| 	MUX_USB3PCIEPHY,
 | |
| 	MUX_NB
 | |
| };
 | |
| 
 | |
| #define MUX_CFG(id, _offset, _shift, _witdh)	\
 | |
| 	[id] = {				\
 | |
| 		.offset		= (_offset),	\
 | |
| 		.shift		= (_shift),	\
 | |
| 		.width		= (_witdh),	\
 | |
| 	}
 | |
| 
 | |
| static const struct stm32_mux_cfg stm32mp25_muxes[MUX_NB] = {
 | |
| 	MUX_CFG(MUX_ADC12,		RCC_ADC12CFGR,		12,	1),
 | |
| 	MUX_CFG(MUX_ADC3,		RCC_ADC3CFGR,		12,	2),
 | |
| 	MUX_CFG(MUX_DSIBLANE,		RCC_DSICFGR,		12,	1),
 | |
| 	MUX_CFG(MUX_DSIPHY,		RCC_DSICFGR,		15,	1),
 | |
| 	MUX_CFG(MUX_DTS,		RCC_DTSCFGR,		12,	2),
 | |
| 	MUX_CFG(MUX_LVDSPHY,		RCC_LVDSCFGR,		15,	1),
 | |
| 	MUX_CFG(MUX_MCO1,		RCC_MCO1CFGR,		0,	1),
 | |
| 	MUX_CFG(MUX_MCO2,		RCC_MCO2CFGR,		0,	1),
 | |
| 	MUX_CFG(MUX_USB2PHY1,		RCC_USB2PHY1CFGR,	15,	1),
 | |
| 	MUX_CFG(MUX_USB2PHY2,		RCC_USB2PHY2CFGR,	15,	1),
 | |
| 	MUX_CFG(MUX_USB3PCIEPHY,	RCC_USB3PCIEPHYCFGR,	15,	1),
 | |
| };
 | |
| 
 | |
| enum enum_gate_cfg {
 | |
| 	GATE_ADC12,
 | |
| 	GATE_ADC3,
 | |
| 	GATE_ADF1,
 | |
| 	GATE_CCI,
 | |
| 	GATE_CRC,
 | |
| 	GATE_CRYP1,
 | |
| 	GATE_CRYP2,
 | |
| 	GATE_CSI,
 | |
| 	GATE_DCMIPP,
 | |
| 	GATE_DSI,
 | |
| 	GATE_DTS,
 | |
| 	GATE_ETH1,
 | |
| 	GATE_ETH1MAC,
 | |
| 	GATE_ETH1RX,
 | |
| 	GATE_ETH1STP,
 | |
| 	GATE_ETH1TX,
 | |
| 	GATE_ETH2,
 | |
| 	GATE_ETH2MAC,
 | |
| 	GATE_ETH2RX,
 | |
| 	GATE_ETH2STP,
 | |
| 	GATE_ETH2TX,
 | |
| 	GATE_ETHSW,
 | |
| 	GATE_ETHSWACMCFG,
 | |
| 	GATE_ETHSWACMMSG,
 | |
| 	GATE_ETHSWMAC,
 | |
| 	GATE_ETHSWREF,
 | |
| 	GATE_FDCAN,
 | |
| 	GATE_GPU,
 | |
| 	GATE_HASH,
 | |
| 	GATE_HDP,
 | |
| 	GATE_I2C1,
 | |
| 	GATE_I2C2,
 | |
| 	GATE_I2C3,
 | |
| 	GATE_I2C4,
 | |
| 	GATE_I2C5,
 | |
| 	GATE_I2C6,
 | |
| 	GATE_I2C7,
 | |
| 	GATE_I2C8,
 | |
| 	GATE_I3C1,
 | |
| 	GATE_I3C2,
 | |
| 	GATE_I3C3,
 | |
| 	GATE_I3C4,
 | |
| 	GATE_IS2M,
 | |
| 	GATE_IWDG1,
 | |
| 	GATE_IWDG2,
 | |
| 	GATE_IWDG3,
 | |
| 	GATE_IWDG4,
 | |
| 	GATE_IWDG5,
 | |
| 	GATE_LPTIM1,
 | |
| 	GATE_LPTIM2,
 | |
| 	GATE_LPTIM3,
 | |
| 	GATE_LPTIM4,
 | |
| 	GATE_LPTIM5,
 | |
| 	GATE_LPUART1,
 | |
| 	GATE_LTDC,
 | |
| 	GATE_LVDS,
 | |
| 	GATE_MCO1,
 | |
| 	GATE_MCO2,
 | |
| 	GATE_MDF1,
 | |
| 	GATE_OSPIIOM,
 | |
| 	GATE_PCIE,
 | |
| 	GATE_PKA,
 | |
| 	GATE_RNG,
 | |
| 	GATE_SAES,
 | |
| 	GATE_SAI1,
 | |
| 	GATE_SAI2,
 | |
| 	GATE_SAI3,
 | |
| 	GATE_SAI4,
 | |
| 	GATE_SDMMC1,
 | |
| 	GATE_SDMMC2,
 | |
| 	GATE_SDMMC3,
 | |
| 	GATE_SERC,
 | |
| 	GATE_SPDIFRX,
 | |
| 	GATE_SPI1,
 | |
| 	GATE_SPI2,
 | |
| 	GATE_SPI3,
 | |
| 	GATE_SPI4,
 | |
| 	GATE_SPI5,
 | |
| 	GATE_SPI6,
 | |
| 	GATE_SPI7,
 | |
| 	GATE_SPI8,
 | |
| 	GATE_TIM1,
 | |
| 	GATE_TIM10,
 | |
| 	GATE_TIM11,
 | |
| 	GATE_TIM12,
 | |
| 	GATE_TIM13,
 | |
| 	GATE_TIM14,
 | |
| 	GATE_TIM15,
 | |
| 	GATE_TIM16,
 | |
| 	GATE_TIM17,
 | |
| 	GATE_TIM2,
 | |
| 	GATE_TIM20,
 | |
| 	GATE_TIM3,
 | |
| 	GATE_TIM4,
 | |
| 	GATE_TIM5,
 | |
| 	GATE_TIM6,
 | |
| 	GATE_TIM7,
 | |
| 	GATE_TIM8,
 | |
| 	GATE_UART4,
 | |
| 	GATE_UART5,
 | |
| 	GATE_UART7,
 | |
| 	GATE_UART8,
 | |
| 	GATE_UART9,
 | |
| 	GATE_USART1,
 | |
| 	GATE_USART2,
 | |
| 	GATE_USART3,
 | |
| 	GATE_USART6,
 | |
| 	GATE_USBH,
 | |
| 	GATE_USB2PHY1,
 | |
| 	GATE_USB2PHY2,
 | |
| 	GATE_USB3DR,
 | |
| 	GATE_USB3PCIEPHY,
 | |
| 	GATE_USBTC,
 | |
| 	GATE_VDEC,
 | |
| 	GATE_VENC,
 | |
| 	GATE_VREF,
 | |
| 	GATE_WWDG1,
 | |
| 	GATE_WWDG2,
 | |
| 	GATE_NB
 | |
| };
 | |
| 
 | |
| #define GATE_CFG(id, _offset, _bit_idx, _offset_clr)	\
 | |
| 	[id] = {					\
 | |
| 		.offset		= (_offset),		\
 | |
| 		.bit_idx	= (_bit_idx),		\
 | |
| 		.set_clr	= (_offset_clr),	\
 | |
| 	}
 | |
| 
 | |
| static const struct stm32_gate_cfg stm32mp25_gates[GATE_NB] = {
 | |
| 	GATE_CFG(GATE_ADC12,		RCC_ADC12CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_ADC3,		RCC_ADC3CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_ADF1,		RCC_ADF1CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_CCI,		RCC_CCICFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_CRC,		RCC_CRCCFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_CRYP1,		RCC_CRYP1CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_CRYP2,		RCC_CRYP2CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_CSI,		RCC_CSICFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_DCMIPP,		RCC_DCMIPPCFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_DSI,		RCC_DSICFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_DTS,		RCC_DTSCFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_ETH1,		RCC_ETH1CFGR,		5,	0),
 | |
| 	GATE_CFG(GATE_ETH1MAC,		RCC_ETH1CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_ETH1RX,		RCC_ETH1CFGR,		10,	0),
 | |
| 	GATE_CFG(GATE_ETH1STP,		RCC_ETH1CFGR,		4,	0),
 | |
| 	GATE_CFG(GATE_ETH1TX,		RCC_ETH1CFGR,		8,	0),
 | |
| 	GATE_CFG(GATE_ETH2,		RCC_ETH2CFGR,		5,	0),
 | |
| 	GATE_CFG(GATE_ETH2MAC,		RCC_ETH2CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_ETH2RX,		RCC_ETH2CFGR,		10,	0),
 | |
| 	GATE_CFG(GATE_ETH2STP,		RCC_ETH2CFGR,		4,	0),
 | |
| 	GATE_CFG(GATE_ETH2TX,		RCC_ETH2CFGR,		8,	0),
 | |
| 	GATE_CFG(GATE_ETHSW,		RCC_ETHSWCFGR,		5,	0),
 | |
| 	GATE_CFG(GATE_ETHSWACMCFG,	RCC_ETHSWACMCFGR,	1,	0),
 | |
| 	GATE_CFG(GATE_ETHSWACMMSG,	RCC_ETHSWACMMSGCFGR,	1,	0),
 | |
| 	GATE_CFG(GATE_ETHSWMAC,		RCC_ETHSWCFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_ETHSWREF,		RCC_ETHSWCFGR,		21,	0),
 | |
| 	GATE_CFG(GATE_FDCAN,		RCC_FDCANCFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_GPU,		RCC_GPUCFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_HASH,		RCC_HASHCFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_HDP,		RCC_HDPCFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_I2C1,		RCC_I2C1CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_I2C2,		RCC_I2C2CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_I2C3,		RCC_I2C3CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_I2C4,		RCC_I2C4CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_I2C5,		RCC_I2C5CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_I2C6,		RCC_I2C6CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_I2C7,		RCC_I2C7CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_I2C8,		RCC_I2C8CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_I3C1,		RCC_I3C1CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_I3C2,		RCC_I3C2CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_I3C3,		RCC_I3C3CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_I3C4,		RCC_I3C4CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_IS2M,		RCC_IS2MCFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_IWDG1,		RCC_IWDG1CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_IWDG2,		RCC_IWDG2CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_IWDG3,		RCC_IWDG3CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_IWDG4,		RCC_IWDG4CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_IWDG5,		RCC_IWDG5CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_LPTIM1,		RCC_LPTIM1CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_LPTIM2,		RCC_LPTIM2CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_LPTIM3,		RCC_LPTIM3CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_LPTIM4,		RCC_LPTIM4CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_LPTIM5,		RCC_LPTIM5CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_LPUART1,		RCC_LPUART1CFGR,	1,	0),
 | |
| 	GATE_CFG(GATE_LTDC,		RCC_LTDCCFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_LVDS,		RCC_LVDSCFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_MCO1,		RCC_MCO1CFGR,		8,	0),
 | |
| 	GATE_CFG(GATE_MCO2,		RCC_MCO2CFGR,		8,	0),
 | |
| 	GATE_CFG(GATE_MDF1,		RCC_MDF1CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_OSPIIOM,		RCC_OSPIIOMCFGR,	1,	0),
 | |
| 	GATE_CFG(GATE_PCIE,		RCC_PCIECFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_PKA,		RCC_PKACFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_RNG,		RCC_RNGCFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_SAES,		RCC_SAESCFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_SAI1,		RCC_SAI1CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_SAI2,		RCC_SAI2CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_SAI3,		RCC_SAI3CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_SAI4,		RCC_SAI4CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_SDMMC1,		RCC_SDMMC1CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_SDMMC2,		RCC_SDMMC2CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_SDMMC3,		RCC_SDMMC3CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_SERC,		RCC_SERCCFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_SPDIFRX,		RCC_SPDIFRXCFGR,	1,	0),
 | |
| 	GATE_CFG(GATE_SPI1,		RCC_SPI1CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_SPI2,		RCC_SPI2CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_SPI3,		RCC_SPI3CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_SPI4,		RCC_SPI4CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_SPI5,		RCC_SPI5CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_SPI6,		RCC_SPI6CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_SPI7,		RCC_SPI7CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_SPI8,		RCC_SPI8CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_TIM1,		RCC_TIM1CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_TIM10,		RCC_TIM10CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_TIM11,		RCC_TIM11CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_TIM12,		RCC_TIM12CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_TIM13,		RCC_TIM13CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_TIM14,		RCC_TIM14CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_TIM15,		RCC_TIM15CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_TIM16,		RCC_TIM16CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_TIM17,		RCC_TIM17CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_TIM2,		RCC_TIM2CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_TIM20,		RCC_TIM20CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_TIM3,		RCC_TIM3CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_TIM4,		RCC_TIM4CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_TIM5,		RCC_TIM5CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_TIM6,		RCC_TIM6CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_TIM7,		RCC_TIM7CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_TIM8,		RCC_TIM8CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_UART4,		RCC_UART4CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_UART5,		RCC_UART5CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_UART7,		RCC_UART7CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_UART8,		RCC_UART8CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_UART9,		RCC_UART9CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_USART1,		RCC_USART1CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_USART2,		RCC_USART2CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_USART3,		RCC_USART3CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_USART6,		RCC_USART6CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_USBH,		RCC_USBHCFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_USB2PHY1,		RCC_USB2PHY1CFGR,	1,	0),
 | |
| 	GATE_CFG(GATE_USB2PHY2,		RCC_USB2PHY2CFGR,	1,	0),
 | |
| 	GATE_CFG(GATE_USB3DR,		RCC_USB3DRCFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_USB3PCIEPHY,	RCC_USB3PCIEPHYCFGR,	1,	0),
 | |
| 	GATE_CFG(GATE_USBTC,		RCC_USBTCCFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_VDEC,		RCC_VDECCFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_VENC,		RCC_VENCCFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_VREF,		RCC_VREFCFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_WWDG1,		RCC_WWDG1CFGR,		1,	0),
 | |
| 	GATE_CFG(GATE_WWDG2,		RCC_WWDG2CFGR,		1,	0),
 | |
| };
 | |
| 
 | |
| #define CLK_HW_INIT_INDEX(_name, _parent, _ops, _flags)		\
 | |
| 	(&(struct clk_init_data) {					\
 | |
| 		.flags		= _flags,				\
 | |
| 		.name		= _name,				\
 | |
| 		.parent_data	= (const struct clk_parent_data[]) {	\
 | |
| 					{ .index = _parent },		\
 | |
| 				  },					\
 | |
| 		.num_parents	= 1,					\
 | |
| 		.ops		= _ops,					\
 | |
| 	})
 | |
| 
 | |
| /* ADC */
 | |
| static struct clk_stm32_gate ck_icn_p_adc12 = {
 | |
| 	.gate_id = GATE_ADC12,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_adc12", ICN_LS_MCU, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_composite ck_ker_adc12 = {
 | |
| 	.gate_id = GATE_ADC12,
 | |
| 	.mux_id = MUX_ADC12,
 | |
| 	.div_id = NO_STM32_DIV,
 | |
| 	.hw.init = CLK_HW_INIT_PARENTS_DATA("ck_ker_adc12", adc12_src, &clk_stm32_composite_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_adc3 = {
 | |
| 	.gate_id = GATE_ADC3,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_adc3", ICN_LS_MCU, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_composite ck_ker_adc3 = {
 | |
| 	.gate_id = GATE_ADC3,
 | |
| 	.mux_id = MUX_ADC3,
 | |
| 	.div_id = NO_STM32_DIV,
 | |
| 	.hw.init = CLK_HW_INIT_PARENTS_DATA("ck_ker_adc3", adc3_src, &clk_stm32_composite_ops, 0),
 | |
| };
 | |
| 
 | |
| /* ADF */
 | |
| static struct clk_stm32_gate ck_icn_p_adf1 = {
 | |
| 	.gate_id = GATE_ADF1,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_adf1", ICN_LS_MCU, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_adf1 = {
 | |
| 	.gate_id = GATE_ADF1,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_adf1", FLEXGEN_42, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| /* DCMI */
 | |
| static struct clk_stm32_gate ck_icn_p_cci = {
 | |
| 	.gate_id = GATE_CCI,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_cci", ICN_LS_MCU, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| /* CSI-HOST */
 | |
| static struct clk_stm32_gate ck_icn_p_csi = {
 | |
| 	.gate_id = GATE_CSI,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_csi", ICN_APB4, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_csi = {
 | |
| 	.gate_id = GATE_CSI,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_csi", FLEXGEN_29, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_csitxesc = {
 | |
| 	.gate_id = GATE_CSI,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_csitxesc", FLEXGEN_30, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| /* CSI-PHY */
 | |
| static struct clk_stm32_gate ck_ker_csiphy = {
 | |
| 	.gate_id = GATE_CSI,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_csiphy", FLEXGEN_31, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| /* DCMIPP */
 | |
| static struct clk_stm32_gate ck_icn_p_dcmipp = {
 | |
| 	.gate_id = GATE_DCMIPP,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_dcmipp", ICN_APB4, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| /* CRC */
 | |
| static struct clk_stm32_gate ck_icn_p_crc = {
 | |
| 	.gate_id = GATE_CRC,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_crc", ICN_LS_MCU, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| /* CRYP */
 | |
| static struct clk_stm32_gate ck_icn_p_cryp1 = {
 | |
| 	.gate_id = GATE_CRYP1,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_cryp1", ICN_LS_MCU, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_cryp2 = {
 | |
| 	.gate_id = GATE_CRYP2,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_cryp2", ICN_LS_MCU, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| /* DBG & TRACE*/
 | |
| /* Trace and debug clocks are managed by SCMI */
 | |
| 
 | |
| /* LTDC */
 | |
| static struct clk_stm32_gate ck_icn_p_ltdc = {
 | |
| 	.gate_id = GATE_LTDC,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_ltdc", ICN_APB4, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_ltdc = {
 | |
| 	.gate_id = GATE_LTDC,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_ltdc", FLEXGEN_27, &clk_stm32_gate_ops,
 | |
| 				     CLK_SET_RATE_PARENT),
 | |
| };
 | |
| 
 | |
| /* DSI */
 | |
| static struct clk_stm32_gate ck_icn_p_dsi = {
 | |
| 	.gate_id = GATE_DSI,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_dsi", ICN_APB4, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_composite clk_lanebyte = {
 | |
| 	.gate_id = GATE_DSI,
 | |
| 	.mux_id = MUX_DSIBLANE,
 | |
| 	.div_id = NO_STM32_DIV,
 | |
| 	.hw.init = CLK_HW_INIT_PARENTS_DATA("clk_lanebyte", dsiblane_src,
 | |
| 					    &clk_stm32_composite_ops, 0),
 | |
| };
 | |
| 
 | |
| /* LVDS */
 | |
| static struct clk_stm32_gate ck_icn_p_lvds = {
 | |
| 	.gate_id = GATE_LVDS,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_lvds", ICN_APB4, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| /* DSI PHY */
 | |
| static struct clk_stm32_composite clk_phy_dsi = {
 | |
| 	.gate_id = GATE_DSI,
 | |
| 	.mux_id = MUX_DSIPHY,
 | |
| 	.div_id = NO_STM32_DIV,
 | |
| 	.hw.init = CLK_HW_INIT_PARENTS_DATA("clk_phy_dsi", dsiphy_src,
 | |
| 					    &clk_stm32_composite_ops, 0),
 | |
| };
 | |
| 
 | |
| /* LVDS PHY */
 | |
| static struct clk_stm32_composite ck_ker_lvdsphy = {
 | |
| 	.gate_id = GATE_LVDS,
 | |
| 	.mux_id = MUX_LVDSPHY,
 | |
| 	.div_id = NO_STM32_DIV,
 | |
| 	.hw.init = CLK_HW_INIT_PARENTS_DATA("ck_ker_lvdsphy", lvdsphy_src,
 | |
| 					    &clk_stm32_composite_ops, 0),
 | |
| };
 | |
| 
 | |
| /* DTS */
 | |
| static struct clk_stm32_composite ck_ker_dts = {
 | |
| 	.gate_id = GATE_DTS,
 | |
| 	.mux_id = MUX_DTS,
 | |
| 	.div_id = NO_STM32_DIV,
 | |
| 	.hw.init = CLK_HW_INIT_PARENTS_DATA("ck_ker_dts", dts_src,
 | |
| 					    &clk_stm32_composite_ops, 0),
 | |
| };
 | |
| 
 | |
| /* ETHERNET */
 | |
| static struct clk_stm32_gate ck_icn_p_eth1 = {
 | |
| 	.gate_id = GATE_ETH1,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_eth1", ICN_LS_MCU, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_eth1stp = {
 | |
| 	.gate_id = GATE_ETH1STP,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_eth1stp", ICN_LS_MCU, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_eth1 = {
 | |
| 	.gate_id = GATE_ETH1,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_eth1", FLEXGEN_54, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_eth1ptp = {
 | |
| 	.gate_id = GATE_ETH1,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_eth1ptp", FLEXGEN_56, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_eth1mac = {
 | |
| 	.gate_id = GATE_ETH1MAC,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_eth1mac", ICN_LS_MCU, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_eth1tx = {
 | |
| 	.gate_id = GATE_ETH1TX,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_eth1tx", ICN_LS_MCU, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_eth1rx = {
 | |
| 	.gate_id = GATE_ETH1RX,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_eth1rx", ICN_LS_MCU, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_eth2 = {
 | |
| 	.gate_id = GATE_ETH2,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_eth2", ICN_LS_MCU, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_eth2stp = {
 | |
| 	.gate_id = GATE_ETH2STP,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_eth2stp", ICN_LS_MCU, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_eth2 = {
 | |
| 	.gate_id = GATE_ETH2,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_eth2", FLEXGEN_55, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_eth2ptp = {
 | |
| 	.gate_id = GATE_ETH2,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_eth2ptp", FLEXGEN_56, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_eth2mac = {
 | |
| 	.gate_id = GATE_ETH2MAC,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_eth2mac", ICN_LS_MCU, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_eth2tx = {
 | |
| 	.gate_id = GATE_ETH2TX,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_eth2tx", ICN_LS_MCU, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_eth2rx = {
 | |
| 	.gate_id = GATE_ETH2RX,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_eth2rx", ICN_LS_MCU, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_ethsw = {
 | |
| 	.gate_id = GATE_ETHSWMAC,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_ethsw", ICN_LS_MCU, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_ethsw = {
 | |
| 	.gate_id = GATE_ETHSW,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_ethsw", FLEXGEN_54, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_ethswref = {
 | |
| 	.gate_id = GATE_ETHSWREF,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_ethswref", FLEXGEN_60, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_ethsw_acm_cfg = {
 | |
| 	.gate_id = GATE_ETHSWACMCFG,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_ethsw_acm_cfg", ICN_LS_MCU,
 | |
| 				     &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_ethsw_acm_msg = {
 | |
| 	.gate_id = GATE_ETHSWACMMSG,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_ethsw_acm_msg", ICN_LS_MCU,
 | |
| 				     &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| /* FDCAN */
 | |
| static struct clk_stm32_gate ck_icn_p_fdcan = {
 | |
| 	.gate_id = GATE_FDCAN,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_fdcan", ICN_APB2, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_fdcan = {
 | |
| 	.gate_id = GATE_FDCAN,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_fdcan", FLEXGEN_26, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| /* GPU */
 | |
| static struct clk_stm32_gate ck_icn_m_gpu = {
 | |
| 	.gate_id = GATE_GPU,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_m_gpu", FLEXGEN_59, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_gpu = {
 | |
| 	.gate_id = GATE_GPU,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_gpu", PLL3, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| /* HASH */
 | |
| static struct clk_stm32_gate ck_icn_p_hash = {
 | |
| 	.gate_id = GATE_HASH,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_hash", ICN_LS_MCU, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| /* HDP */
 | |
| static struct clk_stm32_gate ck_icn_p_hdp = {
 | |
| 	.gate_id = GATE_HDP,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_hdp", ICN_APB3, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| /* I2C */
 | |
| static struct clk_stm32_gate ck_icn_p_i2c8 = {
 | |
| 	.gate_id = GATE_I2C8,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_i2c8", ICN_LS_MCU, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_i2c1 = {
 | |
| 	.gate_id = GATE_I2C1,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_i2c1", ICN_APB1, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_i2c2 = {
 | |
| 	.gate_id = GATE_I2C2,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_i2c2", ICN_APB1, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_i2c3 = {
 | |
| 	.gate_id = GATE_I2C3,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_i2c3", ICN_APB1, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_i2c4 = {
 | |
| 	.gate_id = GATE_I2C4,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_i2c4", ICN_APB1, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_i2c5 = {
 | |
| 	.gate_id = GATE_I2C5,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_i2c5", ICN_APB1, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_i2c6 = {
 | |
| 	.gate_id = GATE_I2C6,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_i2c6", ICN_APB1, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_i2c7 = {
 | |
| 	.gate_id = GATE_I2C7,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_i2c7", ICN_APB1, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_i2c1 = {
 | |
| 	.gate_id = GATE_I2C1,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_i2c1", FLEXGEN_12, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_i2c2 = {
 | |
| 	.gate_id = GATE_I2C2,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_i2c2", FLEXGEN_12, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_i2c3 = {
 | |
| 	.gate_id = GATE_I2C3,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_i2c3", FLEXGEN_13, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_i2c5 = {
 | |
| 	.gate_id = GATE_I2C5,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_i2c5", FLEXGEN_13, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_i2c4 = {
 | |
| 	.gate_id = GATE_I2C4,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_i2c4", FLEXGEN_14, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_i2c6 = {
 | |
| 	.gate_id = GATE_I2C6,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_i2c6", FLEXGEN_14, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_i2c7 = {
 | |
| 	.gate_id = GATE_I2C7,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_i2c7", FLEXGEN_15, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_i2c8 = {
 | |
| 	.gate_id = GATE_I2C8,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_i2c8", FLEXGEN_38, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| /* I3C */
 | |
| static struct clk_stm32_gate ck_icn_p_i3c1 = {
 | |
| 	.gate_id = GATE_I3C1,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_i3c1", ICN_APB1, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_i3c2 = {
 | |
| 	.gate_id = GATE_I3C2,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_i3c2", ICN_APB1, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_i3c3 = {
 | |
| 	.gate_id = GATE_I3C3,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_i3c3", ICN_APB1, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_i3c4 = {
 | |
| 	.gate_id = GATE_I3C4,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_i3c4", ICN_LS_MCU, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_i3c1 = {
 | |
| 	.gate_id = GATE_I3C1,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_i3c1", FLEXGEN_12, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_i3c2 = {
 | |
| 	.gate_id = GATE_I3C2,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_i3c2", FLEXGEN_12, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_i3c3 = {
 | |
| 	.gate_id = GATE_I3C3,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_i3c3", FLEXGEN_13, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_i3c4 = {
 | |
| 	.gate_id = GATE_I3C4,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_i3c4", FLEXGEN_36, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| /* I2S */
 | |
| static struct clk_stm32_gate ck_icn_p_is2m = {
 | |
| 	.gate_id = GATE_IS2M,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_is2m", ICN_APB3, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| /* IWDG */
 | |
| static struct clk_stm32_gate ck_icn_p_iwdg1 = {
 | |
| 	.gate_id = GATE_IWDG1,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_iwdg1", ICN_APB3, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_iwdg2 = {
 | |
| 	.gate_id = GATE_IWDG2,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_iwdg2", ICN_APB3, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_iwdg3 = {
 | |
| 	.gate_id = GATE_IWDG3,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_iwdg3", ICN_APB3, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_iwdg4 = {
 | |
| 	.gate_id = GATE_IWDG4,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_iwdg4", ICN_APB3, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_iwdg5 = {
 | |
| 	.gate_id = GATE_IWDG5,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_iwdg5", ICN_LS_MCU, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| /* LPTIM */
 | |
| static struct clk_stm32_gate ck_icn_p_lptim1 = {
 | |
| 	.gate_id = GATE_LPTIM1,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_lptim1", ICN_APB1, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_lptim2 = {
 | |
| 	.gate_id = GATE_LPTIM2,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_lptim2", ICN_APB1, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_lptim3 = {
 | |
| 	.gate_id = GATE_LPTIM3,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_lptim3", ICN_LS_MCU, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_lptim4 = {
 | |
| 	.gate_id = GATE_LPTIM4,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_lptim4", ICN_LS_MCU, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_lptim5 = {
 | |
| 	.gate_id = GATE_LPTIM5,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_lptim5", ICN_LS_MCU, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_lptim1 = {
 | |
| 	.gate_id = GATE_LPTIM1,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_lptim1", FLEXGEN_07, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_lptim2 = {
 | |
| 	.gate_id = GATE_LPTIM2,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_lptim2", FLEXGEN_07, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_lptim3 = {
 | |
| 	.gate_id = GATE_LPTIM3,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_lptim3", FLEXGEN_40, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_lptim4 = {
 | |
| 	.gate_id = GATE_LPTIM4,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_lptim4", FLEXGEN_41, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_lptim5 = {
 | |
| 	.gate_id = GATE_LPTIM5,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_lptim5", FLEXGEN_41, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| /* LPUART */
 | |
| static struct clk_stm32_gate ck_icn_p_lpuart1 = {
 | |
| 	.gate_id = GATE_LPUART1,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_lpuart1", ICN_LS_MCU, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_lpuart1 = {
 | |
| 	.gate_id = GATE_LPUART1,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_lpuart1", FLEXGEN_39, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| /* MCO1 & MCO2 */
 | |
| static struct clk_stm32_composite ck_mco1 = {
 | |
| 	.gate_id = GATE_MCO1,
 | |
| 	.mux_id = MUX_MCO1,
 | |
| 	.div_id = NO_STM32_DIV,
 | |
| 	.hw.init = CLK_HW_INIT_PARENTS_DATA("ck_mco1", mco1_src, &clk_stm32_composite_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_composite ck_mco2 = {
 | |
| 	.gate_id = GATE_MCO2,
 | |
| 	.mux_id = MUX_MCO2,
 | |
| 	.div_id = NO_STM32_DIV,
 | |
| 	.hw.init = CLK_HW_INIT_PARENTS_DATA("ck_mco2", mco2_src, &clk_stm32_composite_ops, 0),
 | |
| };
 | |
| 
 | |
| /* MDF */
 | |
| static struct clk_stm32_gate ck_icn_p_mdf1 = {
 | |
| 	.gate_id = GATE_MDF1,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_mdf1", ICN_LS_MCU, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_mdf1 = {
 | |
| 	.gate_id = GATE_MDF1,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_mdf1", FLEXGEN_23, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| /* OSPI */
 | |
| static struct clk_stm32_gate ck_icn_p_ospiiom = {
 | |
| 	.gate_id = GATE_OSPIIOM,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_ospiiom", ICN_LS_MCU, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| /* PCIE */
 | |
| static struct clk_stm32_gate ck_icn_p_pcie = {
 | |
| 	.gate_id = GATE_PCIE,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_pcie", ICN_LS_MCU, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| /* PKA */
 | |
| static struct clk_stm32_gate ck_icn_p_pka = {
 | |
| 	.gate_id = GATE_PKA,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_pka", ICN_LS_MCU, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| /* RNG */
 | |
| static struct clk_stm32_gate ck_icn_p_rng = {
 | |
| 	.gate_id = GATE_RNG,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_rng", ICN_LS_MCU, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| /* SAES */
 | |
| static struct clk_stm32_gate ck_icn_p_saes = {
 | |
| 	.gate_id = GATE_SAES,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_saes", ICN_LS_MCU, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| /* SAI */
 | |
| static struct clk_stm32_gate ck_icn_p_sai1 = {
 | |
| 	.gate_id = GATE_SAI1,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_sai1", ICN_APB2, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_sai2 = {
 | |
| 	.gate_id = GATE_SAI2,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_sai2", ICN_APB2, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_sai3 = {
 | |
| 	.gate_id = GATE_SAI3,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_sai3", ICN_APB2, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_sai4 = {
 | |
| 	.gate_id = GATE_SAI4,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_sai4", ICN_APB2, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_sai1 = {
 | |
| 	.gate_id = GATE_SAI1,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_sai1", FLEXGEN_23, &clk_stm32_gate_ops,
 | |
| 				     CLK_SET_RATE_PARENT),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_sai2 = {
 | |
| 	.gate_id = GATE_SAI2,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_sai2", FLEXGEN_24, &clk_stm32_gate_ops,
 | |
| 				     CLK_SET_RATE_PARENT),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_sai3 = {
 | |
| 	.gate_id = GATE_SAI3,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_sai3", FLEXGEN_25, &clk_stm32_gate_ops,
 | |
| 				     CLK_SET_RATE_PARENT),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_sai4 = {
 | |
| 	.gate_id = GATE_SAI4,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_sai4", FLEXGEN_25, &clk_stm32_gate_ops,
 | |
| 				     CLK_SET_RATE_PARENT),
 | |
| };
 | |
| 
 | |
| /* SDMMC */
 | |
| static struct clk_stm32_gate ck_icn_m_sdmmc1 = {
 | |
| 	.gate_id = GATE_SDMMC1,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_m_sdmmc1", ICN_SDMMC, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_m_sdmmc2 = {
 | |
| 	.gate_id = GATE_SDMMC2,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_m_sdmmc2", ICN_SDMMC, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_m_sdmmc3 = {
 | |
| 	.gate_id = GATE_SDMMC3,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_m_sdmmc3", ICN_SDMMC, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_sdmmc1 = {
 | |
| 	.gate_id = GATE_SDMMC1,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_sdmmc1", FLEXGEN_51, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_sdmmc2 = {
 | |
| 	.gate_id = GATE_SDMMC2,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_sdmmc2", FLEXGEN_52, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_sdmmc3 = {
 | |
| 	.gate_id = GATE_SDMMC3,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_sdmmc3", FLEXGEN_53, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| /* SERC */
 | |
| static struct clk_stm32_gate ck_icn_p_serc = {
 | |
| 	.gate_id = GATE_SERC,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_serc", ICN_APB3, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| /* SPDIF */
 | |
| static struct clk_stm32_gate ck_icn_p_spdifrx = {
 | |
| 	.gate_id = GATE_SPDIFRX,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_spdifrx", ICN_APB1, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_spdifrx = {
 | |
| 	.gate_id = GATE_SPDIFRX,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_spdifrx", FLEXGEN_11, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| /* SPI */
 | |
| static struct clk_stm32_gate ck_icn_p_spi1 = {
 | |
| 	.gate_id = GATE_SPI1,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_spi1", ICN_APB2, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_spi2 = {
 | |
| 	.gate_id = GATE_SPI2,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_spi2", ICN_APB1, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_spi3 = {
 | |
| 	.gate_id = GATE_SPI3,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_spi3", ICN_APB1, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_spi4 = {
 | |
| 	.gate_id = GATE_SPI4,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_spi4", ICN_APB2, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_spi5 = {
 | |
| 	.gate_id = GATE_SPI5,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_spi5", ICN_APB2, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_spi6 = {
 | |
| 	.gate_id = GATE_SPI6,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_spi6", ICN_APB2, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_spi7 = {
 | |
| 	.gate_id = GATE_SPI7,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_spi7", ICN_APB2, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_spi8 = {
 | |
| 	.gate_id = GATE_SPI8,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_spi8", ICN_LS_MCU, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_spi1 = {
 | |
| 	.gate_id = GATE_SPI1,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_spi1", FLEXGEN_16, &clk_stm32_gate_ops,
 | |
| 				     CLK_SET_RATE_PARENT),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_spi2 = {
 | |
| 	.gate_id = GATE_SPI2,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_spi2", FLEXGEN_10, &clk_stm32_gate_ops,
 | |
| 				     CLK_SET_RATE_PARENT),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_spi3 = {
 | |
| 	.gate_id = GATE_SPI3,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_spi3", FLEXGEN_10, &clk_stm32_gate_ops,
 | |
| 				     CLK_SET_RATE_PARENT),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_spi4 = {
 | |
| 	.gate_id = GATE_SPI4,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_spi4", FLEXGEN_17, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_spi5 = {
 | |
| 	.gate_id = GATE_SPI5,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_spi5", FLEXGEN_17, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_spi6 = {
 | |
| 	.gate_id = GATE_SPI6,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_spi6", FLEXGEN_18, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_spi7 = {
 | |
| 	.gate_id = GATE_SPI7,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_spi7", FLEXGEN_18, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_spi8 = {
 | |
| 	.gate_id = GATE_SPI8,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_spi8", FLEXGEN_37, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| /* Timers */
 | |
| static struct clk_stm32_gate ck_icn_p_tim2 = {
 | |
| 	.gate_id = GATE_TIM2,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_tim2", ICN_APB1, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_tim3 = {
 | |
| 	.gate_id = GATE_TIM3,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_tim3", ICN_APB1, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_tim4 = {
 | |
| 	.gate_id = GATE_TIM4,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_tim4", ICN_APB1, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_tim5 = {
 | |
| 	.gate_id = GATE_TIM5,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_tim5", ICN_APB1, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_tim6 = {
 | |
| 	.gate_id = GATE_TIM6,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_tim6", ICN_APB1, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_tim7 = {
 | |
| 	.gate_id = GATE_TIM7,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_tim7", ICN_APB1, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_tim10 = {
 | |
| 	.gate_id = GATE_TIM10,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_tim10", ICN_APB1, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_tim11 = {
 | |
| 	.gate_id = GATE_TIM11,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_tim11", ICN_APB1, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_tim12 = {
 | |
| 	.gate_id = GATE_TIM12,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_tim12", ICN_APB1, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_tim13 = {
 | |
| 	.gate_id = GATE_TIM13,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_tim13", ICN_APB1, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_tim14 = {
 | |
| 	.gate_id = GATE_TIM14,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_tim14", ICN_APB1, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_tim1 = {
 | |
| 	.gate_id = GATE_TIM1,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_tim1", ICN_APB2, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_tim8 = {
 | |
| 	.gate_id = GATE_TIM8,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_tim8", ICN_APB2, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_tim15 = {
 | |
| 	.gate_id = GATE_TIM15,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_tim15", ICN_APB2, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_tim16 = {
 | |
| 	.gate_id = GATE_TIM16,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_tim16", ICN_APB2, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_tim17 = {
 | |
| 	.gate_id = GATE_TIM17,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_tim17", ICN_APB2, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_tim20 = {
 | |
| 	.gate_id = GATE_TIM20,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_tim20", ICN_APB2, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_tim2 = {
 | |
| 	.gate_id = GATE_TIM2,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_tim2", TIMG1, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_tim3 = {
 | |
| 	.gate_id = GATE_TIM3,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_tim3", TIMG1, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_tim4 = {
 | |
| 	.gate_id = GATE_TIM4,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_tim4", TIMG1, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_tim5 = {
 | |
| 	.gate_id = GATE_TIM5,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_tim5", TIMG1, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_tim6 = {
 | |
| 	.gate_id = GATE_TIM6,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_tim6", TIMG1, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_tim7 = {
 | |
| 	.gate_id = GATE_TIM7,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_tim7", TIMG1, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_tim10 = {
 | |
| 	.gate_id = GATE_TIM10,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_tim10", TIMG1, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_tim11 = {
 | |
| 	.gate_id = GATE_TIM11,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_tim11", TIMG1, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_tim12 = {
 | |
| 	.gate_id = GATE_TIM12,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_tim12", TIMG1, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_tim13 = {
 | |
| 	.gate_id = GATE_TIM13,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_tim13", TIMG1, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_tim14 = {
 | |
| 	.gate_id = GATE_TIM14,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_tim14", TIMG1, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_tim1 = {
 | |
| 	.gate_id = GATE_TIM1,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_tim1", TIMG2, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_tim8 = {
 | |
| 	.gate_id = GATE_TIM8,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_tim8", TIMG2, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_tim15 = {
 | |
| 	.gate_id = GATE_TIM15,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_tim15", TIMG2, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_tim16 = {
 | |
| 	.gate_id = GATE_TIM16,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_tim16", TIMG2, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_tim17 = {
 | |
| 	.gate_id = GATE_TIM17,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_tim17", TIMG2, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_tim20 = {
 | |
| 	.gate_id = GATE_TIM20,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_tim20", TIMG2, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| /* UART/USART */
 | |
| static struct clk_stm32_gate ck_icn_p_usart2 = {
 | |
| 	.gate_id = GATE_USART2,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_usart2", ICN_APB1, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_usart3 = {
 | |
| 	.gate_id = GATE_USART3,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_usart3", ICN_APB1, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_uart4 = {
 | |
| 	.gate_id = GATE_UART4,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_uart4", ICN_APB1, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_uart5 = {
 | |
| 	.gate_id = GATE_UART5,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_uart5", ICN_APB1, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_usart1 = {
 | |
| 	.gate_id = GATE_USART1,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_usart1", ICN_APB2, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_usart6 = {
 | |
| 	.gate_id = GATE_USART6,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_usart6", ICN_APB2, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_uart7 = {
 | |
| 	.gate_id = GATE_UART7,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_uart7", ICN_APB2, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_uart8 = {
 | |
| 	.gate_id = GATE_UART8,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_uart8", ICN_APB2, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_uart9 = {
 | |
| 	.gate_id = GATE_UART9,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_uart9", ICN_APB2, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_usart2 = {
 | |
| 	.gate_id = GATE_USART2,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_usart2", FLEXGEN_08, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_uart4 = {
 | |
| 	.gate_id = GATE_UART4,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_uart4", FLEXGEN_08, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_usart3 = {
 | |
| 	.gate_id = GATE_USART3,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_usart3", FLEXGEN_09, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_uart5 = {
 | |
| 	.gate_id = GATE_UART5,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_uart5", FLEXGEN_09, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_usart1 = {
 | |
| 	.gate_id = GATE_USART1,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_usart1", FLEXGEN_19, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_usart6 = {
 | |
| 	.gate_id = GATE_USART6,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_usart6", FLEXGEN_20, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_uart7 = {
 | |
| 	.gate_id = GATE_UART7,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_uart7", FLEXGEN_21, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_uart8 = {
 | |
| 	.gate_id = GATE_UART8,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_uart8", FLEXGEN_21, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_uart9 = {
 | |
| 	.gate_id = GATE_UART9,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_uart9", FLEXGEN_22, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| /* USB2PHY1 */
 | |
| static struct clk_stm32_composite ck_ker_usb2phy1 = {
 | |
| 	.gate_id = GATE_USB2PHY1,
 | |
| 	.mux_id = MUX_USB2PHY1,
 | |
| 	.div_id = NO_STM32_DIV,
 | |
| 	.hw.init = CLK_HW_INIT_PARENTS_DATA("ck_ker_usb2phy1", usb2phy1_src,
 | |
| 					    &clk_stm32_composite_ops, 0),
 | |
| };
 | |
| 
 | |
| /* USB2H */
 | |
| static struct clk_stm32_gate ck_icn_m_usb2ehci = {
 | |
| 	.gate_id = GATE_USBH,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_m_usb2ehci", ICN_HSL, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_m_usb2ohci = {
 | |
| 	.gate_id = GATE_USBH,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_m_usb2ohci", ICN_HSL, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| /* USB2PHY2 */
 | |
| static struct clk_stm32_composite ck_ker_usb2phy2_en = {
 | |
| 	.gate_id = GATE_USB2PHY2,
 | |
| 	.mux_id = MUX_USB2PHY2,
 | |
| 	.div_id = NO_STM32_DIV,
 | |
| 	.hw.init = CLK_HW_INIT_PARENTS_DATA("ck_ker_usb2phy2_en", usb2phy2_src,
 | |
| 					    &clk_stm32_composite_ops, 0),
 | |
| };
 | |
| 
 | |
| /* USB3 PCIe COMBOPHY */
 | |
| static struct clk_stm32_gate ck_icn_p_usb3pciephy = {
 | |
| 	.gate_id = GATE_USB3PCIEPHY,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_usb3pciephy", ICN_APB4, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_composite ck_ker_usb3pciephy = {
 | |
| 	.gate_id = GATE_USB3PCIEPHY,
 | |
| 	.mux_id = MUX_USB3PCIEPHY,
 | |
| 	.div_id = NO_STM32_DIV,
 | |
| 	.hw.init = CLK_HW_INIT_PARENTS_DATA("ck_ker_usb3pciephy", usb3pciphy_src,
 | |
| 					    &clk_stm32_composite_ops, 0),
 | |
| };
 | |
| 
 | |
| /* USB3 DRD */
 | |
| static struct clk_stm32_gate ck_icn_m_usb3dr = {
 | |
| 	.gate_id = GATE_USB3DR,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_m_usb3dr", ICN_HSL, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_usb2phy2 = {
 | |
| 	.gate_id = GATE_USB3DR,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_usb2phy2", FLEXGEN_58, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| /* USBTC */
 | |
| static struct clk_stm32_gate ck_icn_p_usbtc = {
 | |
| 	.gate_id = GATE_USBTC,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_usbtc", ICN_APB4, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_ker_usbtc = {
 | |
| 	.gate_id = GATE_USBTC,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_ker_usbtc", FLEXGEN_35, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| /* VDEC / VENC */
 | |
| static struct clk_stm32_gate ck_icn_p_vdec = {
 | |
| 	.gate_id = GATE_VDEC,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_vdec", ICN_APB4, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_venc = {
 | |
| 	.gate_id = GATE_VENC,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_venc", ICN_APB4, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| /* VREF */
 | |
| static struct clk_stm32_gate ck_icn_p_vref = {
 | |
| 	.gate_id = GATE_VREF,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_vref", ICN_APB3, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| /* WWDG */
 | |
| static struct clk_stm32_gate ck_icn_p_wwdg1 = {
 | |
| 	.gate_id = GATE_WWDG1,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_wwdg1", ICN_APB3, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_gate ck_icn_p_wwdg2 = {
 | |
| 	.gate_id = GATE_WWDG2,
 | |
| 	.hw.init = CLK_HW_INIT_INDEX("ck_icn_p_wwdg2", ICN_LS_MCU, &clk_stm32_gate_ops, 0),
 | |
| };
 | |
| 
 | |
| static struct stm32_firewall firewall;
 | |
| 
 | |
| static int stm32_rcc_get_access(void __iomem *base, u32 index)
 | |
| {
 | |
| 	u32 seccfgr, cidcfgr, semcr;
 | |
| 	int bit, cid;
 | |
| 
 | |
| 	bit = index % RCC_REG_SIZE;
 | |
| 
 | |
| 	seccfgr = readl(base + RCC_SECCFGR(index));
 | |
| 	if (seccfgr & BIT(bit))
 | |
| 		return -EACCES;
 | |
| 
 | |
| 	cidcfgr = readl(base + RCC_CIDCFGR(index));
 | |
| 	if (!(cidcfgr & RCC_CIDCFGR_CFEN))
 | |
| 		/* CID filtering is turned off: access granted */
 | |
| 		return 0;
 | |
| 
 | |
| 	if (!(cidcfgr & RCC_CIDCFGR_SEM_EN)) {
 | |
| 		/* Static CID mode */
 | |
| 		cid = FIELD_GET(RCC_CIDCFGR_SCID_MASK, cidcfgr);
 | |
| 		if (cid != RCC_CID1)
 | |
| 			return -EACCES;
 | |
| 		return 0;
 | |
| 	}
 | |
| 
 | |
| 	/* Pass-list with semaphore mode */
 | |
| 	if (!(cidcfgr & RCC_CIDCFGR_SEMWLC1_EN))
 | |
| 		return -EACCES;
 | |
| 
 | |
| 	semcr = readl(base + RCC_SEMCR(index));
 | |
| 
 | |
| 	cid = FIELD_GET(RCC_SEMCR_SEMCID_MASK, semcr);
 | |
| 	if (cid != RCC_CID1)
 | |
| 		return -EACCES;
 | |
| 
 | |
| 	return 0;
 | |
| }
 | |
| 
 | |
| static int stm32mp25_check_security(struct device_node *np, void __iomem *base,
 | |
| 				    const struct clock_config *cfg)
 | |
| {
 | |
| 	int ret = 0;
 | |
| 
 | |
| 	if (cfg->sec_id != SECF_NONE) {
 | |
| 		u32 index = (u32)cfg->sec_id;
 | |
| 
 | |
| 		if (index & SEC_RIFSC_FLAG) {
 | |
| 			ret = stm32_firewall_grant_access_by_id(&firewall, index & ~SEC_RIFSC_FLAG);
 | |
| 
 | |
| 			/* If firewall is not present, assume that we have access */
 | |
| 			if (ret == -ENODEV)
 | |
| 				return 0;
 | |
| 		} else {
 | |
| 			ret = stm32_rcc_get_access(base, cfg->sec_id & ~SEC_RIFSC_FLAG);
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	return ret;
 | |
| }
 | |
| 
 | |
| static const struct clock_config stm32mp25_clock_cfg[] = {
 | |
| 	STM32_GATE_CFG(CK_BUS_ETH1,		ck_icn_p_eth1,		SEC_RIFSC(60)),
 | |
| 	STM32_GATE_CFG(CK_BUS_ETH2,		ck_icn_p_eth2,		SEC_RIFSC(61)),
 | |
| 	STM32_GATE_CFG(CK_BUS_PCIE,		ck_icn_p_pcie,		SEC_RIFSC(68)),
 | |
| 	STM32_GATE_CFG(CK_BUS_ETHSW,		ck_icn_p_ethsw,		SEC_RIFSC(70)),
 | |
| 	STM32_GATE_CFG(CK_BUS_ADC12,		ck_icn_p_adc12,		SEC_RIFSC(58)),
 | |
| 	STM32_GATE_CFG(CK_BUS_ADC3,		ck_icn_p_adc3,		SEC_RIFSC(59)),
 | |
| 	STM32_GATE_CFG(CK_BUS_CCI,		ck_icn_p_cci,		SEC_RIFSC(88)),
 | |
| 	STM32_GATE_CFG(CK_BUS_CRC,		ck_icn_p_crc,		SEC_RIFSC(109)),
 | |
| 	STM32_GATE_CFG(CK_BUS_MDF1,		ck_icn_p_mdf1,		SEC_RIFSC(54)),
 | |
| 	STM32_GATE_CFG(CK_BUS_OSPIIOM,		ck_icn_p_ospiiom,	SEC_RIFSC(111)),
 | |
| 	STM32_GATE_CFG(CK_BUS_HASH,		ck_icn_p_hash,		SEC_RIFSC(95)),
 | |
| 	STM32_GATE_CFG(CK_BUS_RNG,		ck_icn_p_rng,		SEC_RIFSC(92)),
 | |
| 	STM32_GATE_CFG(CK_BUS_CRYP1,		ck_icn_p_cryp1,		SEC_RIFSC(96)),
 | |
| 	STM32_GATE_CFG(CK_BUS_CRYP2,		ck_icn_p_cryp2,		SEC_RIFSC(97)),
 | |
| 	STM32_GATE_CFG(CK_BUS_SAES,		ck_icn_p_saes,		SEC_RIFSC(94)),
 | |
| 	STM32_GATE_CFG(CK_BUS_PKA,		ck_icn_p_pka,		SEC_RIFSC(93)),
 | |
| 	STM32_GATE_CFG(CK_BUS_ADF1,		ck_icn_p_adf1,		SEC_RIFSC(55)),
 | |
| 	STM32_GATE_CFG(CK_BUS_SPI8,		ck_icn_p_spi8,		SEC_RIFSC(29)),
 | |
| 	STM32_GATE_CFG(CK_BUS_LPUART1,		ck_icn_p_lpuart1,	SEC_RIFSC(40)),
 | |
| 	STM32_GATE_CFG(CK_BUS_I2C8,		ck_icn_p_i2c8,		SEC_RIFSC(48)),
 | |
| 	STM32_GATE_CFG(CK_BUS_LPTIM3,		ck_icn_p_lptim3,	SEC_RIFSC(19)),
 | |
| 	STM32_GATE_CFG(CK_BUS_LPTIM4,		ck_icn_p_lptim4,	SEC_RIFSC(20)),
 | |
| 	STM32_GATE_CFG(CK_BUS_LPTIM5,		ck_icn_p_lptim5,	SEC_RIFSC(21)),
 | |
| 	STM32_GATE_CFG(CK_BUS_IWDG5,		ck_icn_p_iwdg5,		SEC_RIFSC(102)),
 | |
| 	STM32_GATE_CFG(CK_BUS_WWDG2,		ck_icn_p_wwdg2,		SEC_RIFSC(104)),
 | |
| 	STM32_GATE_CFG(CK_BUS_I3C4,		ck_icn_p_i3c4,		SEC_RIFSC(117)),
 | |
| 	STM32_GATE_CFG(CK_BUS_SDMMC1,		ck_icn_m_sdmmc1,	SEC_RIFSC(76)),
 | |
| 	STM32_GATE_CFG(CK_BUS_SDMMC2,		ck_icn_m_sdmmc2,	SEC_RIFSC(77)),
 | |
| 	STM32_GATE_CFG(CK_BUS_SDMMC3,		ck_icn_m_sdmmc3,	SEC_RIFSC(78)),
 | |
| 	STM32_GATE_CFG(CK_BUS_USB2OHCI,		ck_icn_m_usb2ohci,	SEC_RIFSC(63)),
 | |
| 	STM32_GATE_CFG(CK_BUS_USB2EHCI,		ck_icn_m_usb2ehci,	SEC_RIFSC(63)),
 | |
| 	STM32_GATE_CFG(CK_BUS_USB3DR,		ck_icn_m_usb3dr,	SEC_RIFSC(66)),
 | |
| 	STM32_GATE_CFG(CK_BUS_TIM2,		ck_icn_p_tim2,		SEC_RIFSC(1)),
 | |
| 	STM32_GATE_CFG(CK_BUS_TIM3,		ck_icn_p_tim3,		SEC_RIFSC(2)),
 | |
| 	STM32_GATE_CFG(CK_BUS_TIM4,		ck_icn_p_tim4,		SEC_RIFSC(3)),
 | |
| 	STM32_GATE_CFG(CK_BUS_TIM5,		ck_icn_p_tim5,		SEC_RIFSC(4)),
 | |
| 	STM32_GATE_CFG(CK_BUS_TIM6,		ck_icn_p_tim6,		SEC_RIFSC(5)),
 | |
| 	STM32_GATE_CFG(CK_BUS_TIM7,		ck_icn_p_tim7,		SEC_RIFSC(6)),
 | |
| 	STM32_GATE_CFG(CK_BUS_TIM10,		ck_icn_p_tim10,		SEC_RIFSC(8)),
 | |
| 	STM32_GATE_CFG(CK_BUS_TIM11,		ck_icn_p_tim11,		SEC_RIFSC(9)),
 | |
| 	STM32_GATE_CFG(CK_BUS_TIM12,		ck_icn_p_tim12,		SEC_RIFSC(10)),
 | |
| 	STM32_GATE_CFG(CK_BUS_TIM13,		ck_icn_p_tim13,		SEC_RIFSC(11)),
 | |
| 	STM32_GATE_CFG(CK_BUS_TIM14,		ck_icn_p_tim14,		SEC_RIFSC(12)),
 | |
| 	STM32_GATE_CFG(CK_BUS_LPTIM1,		ck_icn_p_lptim1,	SEC_RIFSC(17)),
 | |
| 	STM32_GATE_CFG(CK_BUS_LPTIM2,		ck_icn_p_lptim2,	SEC_RIFSC(18)),
 | |
| 	STM32_GATE_CFG(CK_BUS_SPI2,		ck_icn_p_spi2,		SEC_RIFSC(23)),
 | |
| 	STM32_GATE_CFG(CK_BUS_SPI3,		ck_icn_p_spi3,		SEC_RIFSC(24)),
 | |
| 	STM32_GATE_CFG(CK_BUS_SPDIFRX,		ck_icn_p_spdifrx,	SEC_RIFSC(30)),
 | |
| 	STM32_GATE_CFG(CK_BUS_USART2,		ck_icn_p_usart2,	SEC_RIFSC(32)),
 | |
| 	STM32_GATE_CFG(CK_BUS_USART3,		ck_icn_p_usart3,	SEC_RIFSC(33)),
 | |
| 	STM32_GATE_CFG(CK_BUS_UART4,		ck_icn_p_uart4,		SEC_RIFSC(34)),
 | |
| 	STM32_GATE_CFG(CK_BUS_UART5,		ck_icn_p_uart5,		SEC_RIFSC(35)),
 | |
| 	STM32_GATE_CFG(CK_BUS_I2C1,		ck_icn_p_i2c1,		SEC_RIFSC(41)),
 | |
| 	STM32_GATE_CFG(CK_BUS_I2C2,		ck_icn_p_i2c2,		SEC_RIFSC(42)),
 | |
| 	STM32_GATE_CFG(CK_BUS_I2C3,		ck_icn_p_i2c3,		SEC_RIFSC(43)),
 | |
| 	STM32_GATE_CFG(CK_BUS_I2C4,		ck_icn_p_i2c4,		SEC_RIFSC(44)),
 | |
| 	STM32_GATE_CFG(CK_BUS_I2C5,		ck_icn_p_i2c5,		SEC_RIFSC(45)),
 | |
| 	STM32_GATE_CFG(CK_BUS_I2C6,		ck_icn_p_i2c6,		SEC_RIFSC(46)),
 | |
| 	STM32_GATE_CFG(CK_BUS_I2C7,		ck_icn_p_i2c7,		SEC_RIFSC(47)),
 | |
| 	STM32_GATE_CFG(CK_BUS_I3C1,		ck_icn_p_i3c1,		SEC_RIFSC(114)),
 | |
| 	STM32_GATE_CFG(CK_BUS_I3C2,		ck_icn_p_i3c2,		SEC_RIFSC(115)),
 | |
| 	STM32_GATE_CFG(CK_BUS_I3C3,		ck_icn_p_i3c3,		SEC_RIFSC(116)),
 | |
| 	STM32_GATE_CFG(CK_BUS_TIM1,		ck_icn_p_tim1,		SEC_RIFSC(0)),
 | |
| 	STM32_GATE_CFG(CK_BUS_TIM8,		ck_icn_p_tim8,		SEC_RIFSC(7)),
 | |
| 	STM32_GATE_CFG(CK_BUS_TIM15,		ck_icn_p_tim15,		SEC_RIFSC(13)),
 | |
| 	STM32_GATE_CFG(CK_BUS_TIM16,		ck_icn_p_tim16,		SEC_RIFSC(14)),
 | |
| 	STM32_GATE_CFG(CK_BUS_TIM17,		ck_icn_p_tim17,		SEC_RIFSC(15)),
 | |
| 	STM32_GATE_CFG(CK_BUS_TIM20,		ck_icn_p_tim20,		SEC_RIFSC(16)),
 | |
| 	STM32_GATE_CFG(CK_BUS_SAI1,		ck_icn_p_sai1,		SEC_RIFSC(49)),
 | |
| 	STM32_GATE_CFG(CK_BUS_SAI2,		ck_icn_p_sai2,		SEC_RIFSC(50)),
 | |
| 	STM32_GATE_CFG(CK_BUS_SAI3,		ck_icn_p_sai3,		SEC_RIFSC(51)),
 | |
| 	STM32_GATE_CFG(CK_BUS_SAI4,		ck_icn_p_sai4,		SEC_RIFSC(52)),
 | |
| 	STM32_GATE_CFG(CK_BUS_USART1,		ck_icn_p_usart1,	SEC_RIFSC(31)),
 | |
| 	STM32_GATE_CFG(CK_BUS_USART6,		ck_icn_p_usart6,	SEC_RIFSC(36)),
 | |
| 	STM32_GATE_CFG(CK_BUS_UART7,		ck_icn_p_uart7,		SEC_RIFSC(37)),
 | |
| 	STM32_GATE_CFG(CK_BUS_UART8,		ck_icn_p_uart8,		SEC_RIFSC(38)),
 | |
| 	STM32_GATE_CFG(CK_BUS_UART9,		ck_icn_p_uart9,		SEC_RIFSC(39)),
 | |
| 	STM32_GATE_CFG(CK_BUS_FDCAN,		ck_icn_p_fdcan,		SEC_RIFSC(56)),
 | |
| 	STM32_GATE_CFG(CK_BUS_SPI1,		ck_icn_p_spi1,		SEC_RIFSC(22)),
 | |
| 	STM32_GATE_CFG(CK_BUS_SPI4,		ck_icn_p_spi4,		SEC_RIFSC(25)),
 | |
| 	STM32_GATE_CFG(CK_BUS_SPI5,		ck_icn_p_spi5,		SEC_RIFSC(26)),
 | |
| 	STM32_GATE_CFG(CK_BUS_SPI6,		ck_icn_p_spi6,		SEC_RIFSC(27)),
 | |
| 	STM32_GATE_CFG(CK_BUS_SPI7,		ck_icn_p_spi7,		SEC_RIFSC(28)),
 | |
| 	STM32_GATE_CFG(CK_BUS_IWDG1,		ck_icn_p_iwdg1,		SEC_RIFSC(98)),
 | |
| 	STM32_GATE_CFG(CK_BUS_IWDG2,		ck_icn_p_iwdg2,		SEC_RIFSC(99)),
 | |
| 	STM32_GATE_CFG(CK_BUS_IWDG3,		ck_icn_p_iwdg3,		SEC_RIFSC(100)),
 | |
| 	STM32_GATE_CFG(CK_BUS_IWDG4,		ck_icn_p_iwdg4,		SEC_RIFSC(101)),
 | |
| 	STM32_GATE_CFG(CK_BUS_WWDG1,		ck_icn_p_wwdg1,		SEC_RIFSC(103)),
 | |
| 	STM32_GATE_CFG(CK_BUS_VREF,		ck_icn_p_vref,		SEC_RIFSC(106)),
 | |
| 	STM32_GATE_CFG(CK_BUS_SERC,		ck_icn_p_serc,		SEC_RIFSC(110)),
 | |
| 	STM32_GATE_CFG(CK_BUS_HDP,		ck_icn_p_hdp,		SEC_RIFSC(57)),
 | |
| 	STM32_GATE_CFG(CK_BUS_IS2M,		ck_icn_p_is2m,		MP25_RIF_RCC_IS2M),
 | |
| 	STM32_GATE_CFG(CK_BUS_DSI,		ck_icn_p_dsi,		SEC_RIFSC(81)),
 | |
| 	STM32_GATE_CFG(CK_BUS_LTDC,		ck_icn_p_ltdc,		SEC_RIFSC(80)),
 | |
| 	STM32_GATE_CFG(CK_BUS_CSI,		ck_icn_p_csi,		SEC_RIFSC(86)),
 | |
| 	STM32_GATE_CFG(CK_BUS_DCMIPP,		ck_icn_p_dcmipp,	SEC_RIFSC(87)),
 | |
| 	STM32_GATE_CFG(CK_BUS_LVDS,		ck_icn_p_lvds,		SEC_RIFSC(84)),
 | |
| 	STM32_GATE_CFG(CK_BUS_USBTC,		ck_icn_p_usbtc,		SEC_RIFSC(69)),
 | |
| 	STM32_GATE_CFG(CK_BUS_USB3PCIEPHY,	ck_icn_p_usb3pciephy,	SEC_RIFSC(67)),
 | |
| 	STM32_GATE_CFG(CK_BUS_VDEC,		ck_icn_p_vdec,		SEC_RIFSC(89)),
 | |
| 	STM32_GATE_CFG(CK_BUS_VENC,		ck_icn_p_venc,		SEC_RIFSC(90)),
 | |
| 	STM32_GATE_CFG(CK_KER_TIM2,		ck_ker_tim2,		SEC_RIFSC(1)),
 | |
| 	STM32_GATE_CFG(CK_KER_TIM3,		ck_ker_tim3,		SEC_RIFSC(2)),
 | |
| 	STM32_GATE_CFG(CK_KER_TIM4,		ck_ker_tim4,		SEC_RIFSC(3)),
 | |
| 	STM32_GATE_CFG(CK_KER_TIM5,		ck_ker_tim5,		SEC_RIFSC(4)),
 | |
| 	STM32_GATE_CFG(CK_KER_TIM6,		ck_ker_tim6,		SEC_RIFSC(5)),
 | |
| 	STM32_GATE_CFG(CK_KER_TIM7,		ck_ker_tim7,		SEC_RIFSC(6)),
 | |
| 	STM32_GATE_CFG(CK_KER_TIM10,		ck_ker_tim10,		SEC_RIFSC(8)),
 | |
| 	STM32_GATE_CFG(CK_KER_TIM11,		ck_ker_tim11,		SEC_RIFSC(9)),
 | |
| 	STM32_GATE_CFG(CK_KER_TIM12,		ck_ker_tim12,		SEC_RIFSC(10)),
 | |
| 	STM32_GATE_CFG(CK_KER_TIM13,		ck_ker_tim13,		SEC_RIFSC(11)),
 | |
| 	STM32_GATE_CFG(CK_KER_TIM14,		ck_ker_tim14,		SEC_RIFSC(12)),
 | |
| 	STM32_GATE_CFG(CK_KER_TIM1,		ck_ker_tim1,		SEC_RIFSC(0)),
 | |
| 	STM32_GATE_CFG(CK_KER_TIM8,		ck_ker_tim8,		SEC_RIFSC(7)),
 | |
| 	STM32_GATE_CFG(CK_KER_TIM15,		ck_ker_tim15,		SEC_RIFSC(13)),
 | |
| 	STM32_GATE_CFG(CK_KER_TIM16,		ck_ker_tim16,		SEC_RIFSC(14)),
 | |
| 	STM32_GATE_CFG(CK_KER_TIM17,		ck_ker_tim17,		SEC_RIFSC(15)),
 | |
| 	STM32_GATE_CFG(CK_KER_TIM20,		ck_ker_tim20,		SEC_RIFSC(16)),
 | |
| 	STM32_GATE_CFG(CK_KER_LPTIM1,		ck_ker_lptim1,		SEC_RIFSC(17)),
 | |
| 	STM32_GATE_CFG(CK_KER_LPTIM2,		ck_ker_lptim2,		SEC_RIFSC(18)),
 | |
| 	STM32_GATE_CFG(CK_KER_USART2,		ck_ker_usart2,		SEC_RIFSC(32)),
 | |
| 	STM32_GATE_CFG(CK_KER_UART4,		ck_ker_uart4,		SEC_RIFSC(34)),
 | |
| 	STM32_GATE_CFG(CK_KER_USART3,		ck_ker_usart3,		SEC_RIFSC(33)),
 | |
| 	STM32_GATE_CFG(CK_KER_UART5,		ck_ker_uart5,		SEC_RIFSC(35)),
 | |
| 	STM32_GATE_CFG(CK_KER_SPI2,		ck_ker_spi2,		SEC_RIFSC(23)),
 | |
| 	STM32_GATE_CFG(CK_KER_SPI3,		ck_ker_spi3,		SEC_RIFSC(24)),
 | |
| 	STM32_GATE_CFG(CK_KER_SPDIFRX,		ck_ker_spdifrx,		SEC_RIFSC(30)),
 | |
| 	STM32_GATE_CFG(CK_KER_I2C1,		ck_ker_i2c1,		SEC_RIFSC(41)),
 | |
| 	STM32_GATE_CFG(CK_KER_I2C2,		ck_ker_i2c2,		SEC_RIFSC(42)),
 | |
| 	STM32_GATE_CFG(CK_KER_I3C1,		ck_ker_i3c1,		SEC_RIFSC(114)),
 | |
| 	STM32_GATE_CFG(CK_KER_I3C2,		ck_ker_i3c2,		SEC_RIFSC(115)),
 | |
| 	STM32_GATE_CFG(CK_KER_I2C3,		ck_ker_i2c3,		SEC_RIFSC(43)),
 | |
| 	STM32_GATE_CFG(CK_KER_I2C5,		ck_ker_i2c5,		SEC_RIFSC(45)),
 | |
| 	STM32_GATE_CFG(CK_KER_I3C3,		ck_ker_i3c3,		SEC_RIFSC(116)),
 | |
| 	STM32_GATE_CFG(CK_KER_I2C4,		ck_ker_i2c4,		SEC_RIFSC(44)),
 | |
| 	STM32_GATE_CFG(CK_KER_I2C6,		ck_ker_i2c6,		SEC_RIFSC(46)),
 | |
| 	STM32_GATE_CFG(CK_KER_I2C7,		ck_ker_i2c7,		SEC_RIFSC(47)),
 | |
| 	STM32_GATE_CFG(CK_KER_SPI1,		ck_ker_spi1,		SEC_RIFSC(22)),
 | |
| 	STM32_GATE_CFG(CK_KER_SPI4,		ck_ker_spi4,		SEC_RIFSC(25)),
 | |
| 	STM32_GATE_CFG(CK_KER_SPI5,		ck_ker_spi5,		SEC_RIFSC(26)),
 | |
| 	STM32_GATE_CFG(CK_KER_SPI6,		ck_ker_spi6,		SEC_RIFSC(27)),
 | |
| 	STM32_GATE_CFG(CK_KER_SPI7,		ck_ker_spi7,		SEC_RIFSC(28)),
 | |
| 	STM32_GATE_CFG(CK_KER_USART1,		ck_ker_usart1,		SEC_RIFSC(31)),
 | |
| 	STM32_GATE_CFG(CK_KER_USART6,		ck_ker_usart6,		SEC_RIFSC(36)),
 | |
| 	STM32_GATE_CFG(CK_KER_UART7,		ck_ker_uart7,		SEC_RIFSC(37)),
 | |
| 	STM32_GATE_CFG(CK_KER_UART8,		ck_ker_uart8,		SEC_RIFSC(38)),
 | |
| 	STM32_GATE_CFG(CK_KER_UART9,		ck_ker_uart9,		SEC_RIFSC(39)),
 | |
| 	STM32_GATE_CFG(CK_KER_MDF1,		ck_ker_mdf1,		SEC_RIFSC(54)),
 | |
| 	STM32_GATE_CFG(CK_KER_SAI1,		ck_ker_sai1,		SEC_RIFSC(49)),
 | |
| 	STM32_GATE_CFG(CK_KER_SAI2,		ck_ker_sai2,		SEC_RIFSC(50)),
 | |
| 	STM32_GATE_CFG(CK_KER_SAI3,		ck_ker_sai3,		SEC_RIFSC(51)),
 | |
| 	STM32_GATE_CFG(CK_KER_SAI4,		ck_ker_sai4,		SEC_RIFSC(52)),
 | |
| 	STM32_GATE_CFG(CK_KER_FDCAN,		ck_ker_fdcan,		SEC_RIFSC(56)),
 | |
| 	STM32_GATE_CFG(CK_KER_CSI,		ck_ker_csi,		SEC_RIFSC(86)),
 | |
| 	STM32_GATE_CFG(CK_KER_CSITXESC,		ck_ker_csitxesc,	SEC_RIFSC(86)),
 | |
| 	STM32_GATE_CFG(CK_KER_CSIPHY,		ck_ker_csiphy,		SEC_RIFSC(86)),
 | |
| 	STM32_GATE_CFG(CK_KER_USBTC,		ck_ker_usbtc,		SEC_RIFSC(69)),
 | |
| 	STM32_GATE_CFG(CK_KER_I3C4,		ck_ker_i3c4,		SEC_RIFSC(117)),
 | |
| 	STM32_GATE_CFG(CK_KER_SPI8,		ck_ker_spi8,		SEC_RIFSC(29)),
 | |
| 	STM32_GATE_CFG(CK_KER_I2C8,		ck_ker_i2c8,		SEC_RIFSC(48)),
 | |
| 	STM32_GATE_CFG(CK_KER_LPUART1,		ck_ker_lpuart1,		SEC_RIFSC(40)),
 | |
| 	STM32_GATE_CFG(CK_KER_LPTIM3,		ck_ker_lptim3,		SEC_RIFSC(19)),
 | |
| 	STM32_GATE_CFG(CK_KER_LPTIM4,		ck_ker_lptim4,		SEC_RIFSC(20)),
 | |
| 	STM32_GATE_CFG(CK_KER_LPTIM5,		ck_ker_lptim5,		SEC_RIFSC(21)),
 | |
| 	STM32_GATE_CFG(CK_KER_ADF1,		ck_ker_adf1,		SEC_RIFSC(55)),
 | |
| 	STM32_GATE_CFG(CK_KER_SDMMC1,		ck_ker_sdmmc1,		SEC_RIFSC(76)),
 | |
| 	STM32_GATE_CFG(CK_KER_SDMMC2,		ck_ker_sdmmc2,		SEC_RIFSC(77)),
 | |
| 	STM32_GATE_CFG(CK_KER_SDMMC3,		ck_ker_sdmmc3,		SEC_RIFSC(78)),
 | |
| 	STM32_GATE_CFG(CK_KER_ETH1,		ck_ker_eth1,		SEC_RIFSC(60)),
 | |
| 	STM32_GATE_CFG(CK_ETH1_STP,		ck_ker_eth1stp,		SEC_RIFSC(60)),
 | |
| 	STM32_GATE_CFG(CK_KER_ETHSW,		ck_ker_ethsw,		SEC_RIFSC(70)),
 | |
| 	STM32_GATE_CFG(CK_KER_ETH2,		ck_ker_eth2,		SEC_RIFSC(61)),
 | |
| 	STM32_GATE_CFG(CK_ETH2_STP,		ck_ker_eth2stp,		SEC_RIFSC(61)),
 | |
| 	STM32_GATE_CFG(CK_KER_ETH1PTP,		ck_ker_eth1ptp,		SEC_RIFSC(60)),
 | |
| 	STM32_GATE_CFG(CK_KER_ETH2PTP,		ck_ker_eth2ptp,		SEC_RIFSC(61)),
 | |
| 	STM32_GATE_CFG(CK_BUS_GPU,		ck_icn_m_gpu,		SEC_RIFSC(79)),
 | |
| 	STM32_GATE_CFG(CK_KER_GPU,		ck_ker_gpu,		SEC_RIFSC(79)),
 | |
| 	STM32_GATE_CFG(CK_KER_ETHSWREF,		ck_ker_ethswref,	SEC_RIFSC(70)),
 | |
| 	STM32_GATE_CFG(CK_BUS_ETHSWACMCFG,	ck_icn_p_ethsw_acm_cfg,	SEC_RIFSC(71)),
 | |
| 	STM32_GATE_CFG(CK_BUS_ETHSWACMMSG,	ck_icn_p_ethsw_acm_msg,	SEC_RIFSC(72)),
 | |
| 	STM32_GATE_CFG(CK_ETH1_MAC,		ck_ker_eth1mac,		SEC_RIFSC(60)),
 | |
| 	STM32_GATE_CFG(CK_ETH1_TX,		ck_ker_eth1tx,		SEC_RIFSC(60)),
 | |
| 	STM32_GATE_CFG(CK_ETH1_RX,		ck_ker_eth1rx,		SEC_RIFSC(60)),
 | |
| 	STM32_GATE_CFG(CK_ETH2_MAC,		ck_ker_eth2mac,		SEC_RIFSC(61)),
 | |
| 	STM32_GATE_CFG(CK_ETH2_TX,		ck_ker_eth2tx,		SEC_RIFSC(61)),
 | |
| 	STM32_GATE_CFG(CK_ETH2_RX,		ck_ker_eth2rx,		SEC_RIFSC(61)),
 | |
| 	STM32_COMPOSITE_CFG(CK_MCO1,		ck_mco1,		MP25_RIF_RCC_MCO1),
 | |
| 	STM32_COMPOSITE_CFG(CK_MCO2,		ck_mco2,		MP25_RIF_RCC_MCO1),
 | |
| 	STM32_COMPOSITE_CFG(CK_KER_ADC12,	ck_ker_adc12,		SEC_RIFSC(58)),
 | |
| 	STM32_COMPOSITE_CFG(CK_KER_ADC3,	ck_ker_adc3,		SEC_RIFSC(59)),
 | |
| 	STM32_COMPOSITE_CFG(CK_KER_USB2PHY1,	ck_ker_usb2phy1,	SEC_RIFSC(63)),
 | |
| 	STM32_GATE_CFG(CK_KER_USB2PHY2,		ck_ker_usb2phy2,	SEC_RIFSC(63)),
 | |
| 	STM32_COMPOSITE_CFG(CK_KER_USB2PHY2EN,	ck_ker_usb2phy2_en,	SEC_RIFSC(63)),
 | |
| 	STM32_COMPOSITE_CFG(CK_KER_USB3PCIEPHY,	ck_ker_usb3pciephy,	SEC_RIFSC(67)),
 | |
| 	STM32_COMPOSITE_CFG(CK_KER_DSIBLANE,	clk_lanebyte,		SEC_RIFSC(81)),
 | |
| 	STM32_COMPOSITE_CFG(CK_KER_DSIPHY,	clk_phy_dsi,		SEC_RIFSC(81)),
 | |
| 	STM32_COMPOSITE_CFG(CK_KER_LVDSPHY,	ck_ker_lvdsphy,		SEC_RIFSC(84)),
 | |
| 	STM32_COMPOSITE_CFG(CK_KER_DTS,		ck_ker_dts,		SEC_RIFSC(107)),
 | |
| 	STM32_GATE_CFG(CK_KER_LTDC,		ck_ker_ltdc,		SEC_RIFSC(80)),
 | |
| };
 | |
| 
 | |
| #define RESET_MP25(id, _offset, _bit_idx, _set_clr)	\
 | |
| 	[id] = &(struct stm32_reset_cfg){		\
 | |
| 		.offset		= (_offset),		\
 | |
| 		.bit_idx	= (_bit_idx),		\
 | |
| 		.set_clr	= (_set_clr),		\
 | |
| 	}
 | |
| 
 | |
| static const struct stm32_reset_cfg *stm32mp25_reset_cfg[STM32MP25_LAST_RESET] = {
 | |
| 	RESET_MP25(TIM1_R,		RCC_TIM1CFGR,		0,	0),
 | |
| 	RESET_MP25(TIM2_R,		RCC_TIM2CFGR,		0,	0),
 | |
| 	RESET_MP25(TIM3_R,		RCC_TIM3CFGR,		0,	0),
 | |
| 	RESET_MP25(TIM4_R,		RCC_TIM4CFGR,		0,	0),
 | |
| 	RESET_MP25(TIM5_R,		RCC_TIM5CFGR,		0,	0),
 | |
| 	RESET_MP25(TIM6_R,		RCC_TIM6CFGR,		0,	0),
 | |
| 	RESET_MP25(TIM7_R,		RCC_TIM7CFGR,		0,	0),
 | |
| 	RESET_MP25(TIM8_R,		RCC_TIM8CFGR,		0,	0),
 | |
| 	RESET_MP25(TIM10_R,		RCC_TIM10CFGR,		0,	0),
 | |
| 	RESET_MP25(TIM11_R,		RCC_TIM11CFGR,		0,	0),
 | |
| 	RESET_MP25(TIM12_R,		RCC_TIM12CFGR,		0,	0),
 | |
| 	RESET_MP25(TIM13_R,		RCC_TIM13CFGR,		0,	0),
 | |
| 	RESET_MP25(TIM14_R,		RCC_TIM14CFGR,		0,	0),
 | |
| 	RESET_MP25(TIM15_R,		RCC_TIM15CFGR,		0,	0),
 | |
| 	RESET_MP25(TIM16_R,		RCC_TIM16CFGR,		0,	0),
 | |
| 	RESET_MP25(TIM17_R,		RCC_TIM17CFGR,		0,	0),
 | |
| 	RESET_MP25(TIM20_R,		RCC_TIM20CFGR,		0,	0),
 | |
| 	RESET_MP25(LPTIM1_R,		RCC_LPTIM1CFGR,		0,	0),
 | |
| 	RESET_MP25(LPTIM2_R,		RCC_LPTIM2CFGR,		0,	0),
 | |
| 	RESET_MP25(LPTIM3_R,		RCC_LPTIM3CFGR,		0,	0),
 | |
| 	RESET_MP25(LPTIM4_R,		RCC_LPTIM4CFGR,		0,	0),
 | |
| 	RESET_MP25(LPTIM5_R,		RCC_LPTIM5CFGR,		0,	0),
 | |
| 	RESET_MP25(SPI1_R,		RCC_SPI1CFGR,		0,	0),
 | |
| 	RESET_MP25(SPI2_R,		RCC_SPI2CFGR,		0,	0),
 | |
| 	RESET_MP25(SPI3_R,		RCC_SPI3CFGR,		0,	0),
 | |
| 	RESET_MP25(SPI4_R,		RCC_SPI4CFGR,		0,	0),
 | |
| 	RESET_MP25(SPI5_R,		RCC_SPI5CFGR,		0,	0),
 | |
| 	RESET_MP25(SPI6_R,		RCC_SPI6CFGR,		0,	0),
 | |
| 	RESET_MP25(SPI7_R,		RCC_SPI7CFGR,		0,	0),
 | |
| 	RESET_MP25(SPI8_R,		RCC_SPI8CFGR,		0,	0),
 | |
| 	RESET_MP25(SPDIFRX_R,		RCC_SPDIFRXCFGR,	0,	0),
 | |
| 	RESET_MP25(USART1_R,		RCC_USART1CFGR,		0,	0),
 | |
| 	RESET_MP25(USART2_R,		RCC_USART2CFGR,		0,	0),
 | |
| 	RESET_MP25(USART3_R,		RCC_USART3CFGR,		0,	0),
 | |
| 	RESET_MP25(UART4_R,		RCC_UART4CFGR,		0,	0),
 | |
| 	RESET_MP25(UART5_R,		RCC_UART5CFGR,		0,	0),
 | |
| 	RESET_MP25(USART6_R,		RCC_USART6CFGR,		0,	0),
 | |
| 	RESET_MP25(UART7_R,		RCC_UART7CFGR,		0,	0),
 | |
| 	RESET_MP25(UART8_R,		RCC_UART8CFGR,		0,	0),
 | |
| 	RESET_MP25(UART9_R,		RCC_UART9CFGR,		0,	0),
 | |
| 	RESET_MP25(LPUART1_R,		RCC_LPUART1CFGR,	0,	0),
 | |
| 	RESET_MP25(IS2M_R,		RCC_IS2MCFGR,		0,	0),
 | |
| 	RESET_MP25(I2C1_R,		RCC_I2C1CFGR,		0,	0),
 | |
| 	RESET_MP25(I2C2_R,		RCC_I2C2CFGR,		0,	0),
 | |
| 	RESET_MP25(I2C3_R,		RCC_I2C3CFGR,		0,	0),
 | |
| 	RESET_MP25(I2C4_R,		RCC_I2C4CFGR,		0,	0),
 | |
| 	RESET_MP25(I2C5_R,		RCC_I2C5CFGR,		0,	0),
 | |
| 	RESET_MP25(I2C6_R,		RCC_I2C6CFGR,		0,	0),
 | |
| 	RESET_MP25(I2C7_R,		RCC_I2C7CFGR,		0,	0),
 | |
| 	RESET_MP25(I2C8_R,		RCC_I2C8CFGR,		0,	0),
 | |
| 	RESET_MP25(SAI1_R,		RCC_SAI1CFGR,		0,	0),
 | |
| 	RESET_MP25(SAI2_R,		RCC_SAI2CFGR,		0,	0),
 | |
| 	RESET_MP25(SAI3_R,		RCC_SAI3CFGR,		0,	0),
 | |
| 	RESET_MP25(SAI4_R,		RCC_SAI4CFGR,		0,	0),
 | |
| 	RESET_MP25(MDF1_R,		RCC_MDF1CFGR,		0,	0),
 | |
| 	RESET_MP25(MDF2_R,		RCC_ADF1CFGR,		0,	0),
 | |
| 	RESET_MP25(FDCAN_R,		RCC_FDCANCFGR,		0,	0),
 | |
| 	RESET_MP25(HDP_R,		RCC_HDPCFGR,		0,	0),
 | |
| 	RESET_MP25(ADC12_R,		RCC_ADC12CFGR,		0,	0),
 | |
| 	RESET_MP25(ADC3_R,		RCC_ADC3CFGR,		0,	0),
 | |
| 	RESET_MP25(ETH1_R,		RCC_ETH1CFGR,		0,	0),
 | |
| 	RESET_MP25(ETH2_R,		RCC_ETH2CFGR,		0,	0),
 | |
| 	RESET_MP25(USBH_R,		RCC_USBHCFGR,		0,	0),
 | |
| 	RESET_MP25(USB2PHY1_R,		RCC_USB2PHY1CFGR,	0,	0),
 | |
| 	RESET_MP25(USB2PHY2_R,		RCC_USB2PHY2CFGR,	0,	0),
 | |
| 	RESET_MP25(USB3DR_R,		RCC_USB3DRCFGR,		0,	0),
 | |
| 	RESET_MP25(USB3PCIEPHY_R,	RCC_USB3PCIEPHYCFGR,	0,	0),
 | |
| 	RESET_MP25(USBTC_R,		RCC_USBTCCFGR,		0,	0),
 | |
| 	RESET_MP25(ETHSW_R,		RCC_ETHSWCFGR,		0,	0),
 | |
| 	RESET_MP25(SDMMC1_R,		RCC_SDMMC1CFGR,		0,	0),
 | |
| 	RESET_MP25(SDMMC1DLL_R,		RCC_SDMMC1CFGR,		16,	0),
 | |
| 	RESET_MP25(SDMMC2_R,		RCC_SDMMC2CFGR,		0,	0),
 | |
| 	RESET_MP25(SDMMC2DLL_R,		RCC_SDMMC2CFGR,		16,	0),
 | |
| 	RESET_MP25(SDMMC3_R,		RCC_SDMMC3CFGR,		0,	0),
 | |
| 	RESET_MP25(SDMMC3DLL_R,		RCC_SDMMC3CFGR,		16,	0),
 | |
| 	RESET_MP25(GPU_R,		RCC_GPUCFGR,		0,	0),
 | |
| 	RESET_MP25(LTDC_R,		RCC_LTDCCFGR,		0,	0),
 | |
| 	RESET_MP25(DSI_R,		RCC_DSICFGR,		0,	0),
 | |
| 	RESET_MP25(LVDS_R,		RCC_LVDSCFGR,		0,	0),
 | |
| 	RESET_MP25(CSI_R,		RCC_CSICFGR,		0,	0),
 | |
| 	RESET_MP25(DCMIPP_R,		RCC_DCMIPPCFGR,		0,	0),
 | |
| 	RESET_MP25(CCI_R,		RCC_CCICFGR,		0,	0),
 | |
| 	RESET_MP25(VDEC_R,		RCC_VDECCFGR,		0,	0),
 | |
| 	RESET_MP25(VENC_R,		RCC_VENCCFGR,		0,	0),
 | |
| 	RESET_MP25(WWDG1_R,		RCC_WWDG1CFGR,		0,	0),
 | |
| 	RESET_MP25(WWDG2_R,		RCC_WWDG2CFGR,		0,	0),
 | |
| 	RESET_MP25(VREF_R,		RCC_VREFCFGR,		0,	0),
 | |
| 	RESET_MP25(DTS_R,		RCC_DTSCFGR,		0,	0),
 | |
| 	RESET_MP25(CRC_R,		RCC_CRCCFGR,		0,	0),
 | |
| 	RESET_MP25(SERC_R,		RCC_SERCCFGR,		0,	0),
 | |
| 	RESET_MP25(OSPIIOM_R,		RCC_OSPIIOMCFGR,	0,	0),
 | |
| 	RESET_MP25(I3C1_R,		RCC_I3C1CFGR,		0,	0),
 | |
| 	RESET_MP25(I3C2_R,		RCC_I3C2CFGR,		0,	0),
 | |
| 	RESET_MP25(I3C3_R,		RCC_I3C3CFGR,		0,	0),
 | |
| 	RESET_MP25(I3C4_R,		RCC_I3C4CFGR,		0,	0),
 | |
| 	RESET_MP25(IWDG2_KER_R,		RCC_IWDGC1CFGSETR,	18,	1),
 | |
| 	RESET_MP25(IWDG4_KER_R,		RCC_IWDGC2CFGSETR,	18,	1),
 | |
| 	RESET_MP25(RNG_R,		RCC_RNGCFGR,		0,	0),
 | |
| 	RESET_MP25(PKA_R,		RCC_PKACFGR,		0,	0),
 | |
| 	RESET_MP25(SAES_R,		RCC_SAESCFGR,		0,	0),
 | |
| 	RESET_MP25(HASH_R,		RCC_HASHCFGR,		0,	0),
 | |
| 	RESET_MP25(CRYP1_R,		RCC_CRYP1CFGR,		0,	0),
 | |
| 	RESET_MP25(CRYP2_R,		RCC_CRYP2CFGR,		0,	0),
 | |
| 	RESET_MP25(PCIE_R,		RCC_PCIECFGR,		0,	0),
 | |
| };
 | |
| 
 | |
| static u16 stm32mp25_cpt_gate[GATE_NB];
 | |
| 
 | |
| static struct clk_stm32_clock_data stm32mp25_clock_data = {
 | |
| 	.gate_cpt	= stm32mp25_cpt_gate,
 | |
| 	.gates		= stm32mp25_gates,
 | |
| 	.muxes		= stm32mp25_muxes,
 | |
| };
 | |
| 
 | |
| static struct clk_stm32_reset_data stm32mp25_reset_data = {
 | |
| 	.reset_lines	= stm32mp25_reset_cfg,
 | |
| 	.nr_lines	= ARRAY_SIZE(stm32mp25_reset_cfg),
 | |
| };
 | |
| 
 | |
| static const struct stm32_rcc_match_data stm32mp25_data = {
 | |
| 	.tab_clocks	= stm32mp25_clock_cfg,
 | |
| 	.num_clocks	= ARRAY_SIZE(stm32mp25_clock_cfg),
 | |
| 	.maxbinding	= STM32MP25_LAST_CLK,
 | |
| 	.clock_data	= &stm32mp25_clock_data,
 | |
| 	.reset_data	= &stm32mp25_reset_data,
 | |
| 	.check_security = &stm32mp25_check_security,
 | |
| };
 | |
| 
 | |
| static const struct of_device_id stm32mp25_match_data[] = {
 | |
| 	{ .compatible = "st,stm32mp25-rcc", .data = &stm32mp25_data, },
 | |
| 	{ }
 | |
| };
 | |
| MODULE_DEVICE_TABLE(of, stm32mp25_match_data);
 | |
| 
 | |
| static int stm32mp25_rcc_clocks_probe(struct platform_device *pdev)
 | |
| {
 | |
| 	struct device *dev = &pdev->dev;
 | |
| 	void __iomem *base;
 | |
| 	int ret;
 | |
| 
 | |
| 	base = devm_platform_ioremap_resource(pdev, 0);
 | |
| 	if (IS_ERR(base))
 | |
| 		return PTR_ERR(base);
 | |
| 
 | |
| 	ret = stm32_firewall_get_firewall(dev->of_node, &firewall, 1);
 | |
| 	if (ret)
 | |
| 		return ret;
 | |
| 
 | |
| 	return stm32_rcc_init(dev, stm32mp25_match_data, base);
 | |
| }
 | |
| 
 | |
| static struct platform_driver stm32mp25_rcc_clocks_driver = {
 | |
| 	.driver	= {
 | |
| 		.name = "stm32mp25_rcc",
 | |
| 		.of_match_table = stm32mp25_match_data,
 | |
| 	},
 | |
| 	.probe = stm32mp25_rcc_clocks_probe,
 | |
| };
 | |
| 
 | |
| static int __init stm32mp25_clocks_init(void)
 | |
| {
 | |
| 	return platform_driver_register(&stm32mp25_rcc_clocks_driver);
 | |
| }
 | |
| 
 | |
| core_initcall(stm32mp25_clocks_init);
 |