lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <6d3b47da-00c8-43da-8b31-fc950d5c9c49@foss.st.com>
Date: Wed, 21 May 2025 12:01:36 +0200
From: Gabriel FERNANDEZ <gabriel.fernandez@...s.st.com>
To: ALOK TIWARI <alok.a.tiwari@...cle.com>,
        Michael Turquette
	<mturquette@...libre.com>,
        Stephen Boyd <sboyd@...nel.org>, Rob Herring
	<robh@...nel.org>,
        Krzysztof Kozlowski <krzk+dt@...nel.org>,
        Conor Dooley
	<conor+dt@...nel.org>,
        Maxime Coquelin <mcoquelin.stm32@...il.com>,
        Alexandre
 Torgue <alexandre.torgue@...s.st.com>,
        Philipp Zabel <p.zabel@...gutronix.de>
CC: <linux-clk@...r.kernel.org>, <devicetree@...r.kernel.org>,
        <linux-stm32@...md-mailman.stormreply.com>,
        <linux-arm-kernel@...ts.infradead.org>, <linux-kernel@...r.kernel.org>,
        Nicolas Le Bayon <nicolas.le.bayon@...s.st.com>
Subject: Re: [PATCH v2 2/2] clk: stm32: introduce clocks for STM32MP21
 platform


On 5/21/25 11:33, ALOK TIWARI wrote:
>
>
> On 20-05-2025 20:58, Gabriel Fernandez wrote:
>> This driver is intended for the STM32MP21 clock family.
>>
>> Signed-off-by: Nicolas Le Bayon <nicolas.le.bayon@...s.st.com>
>> Signed-off-by: Gabriel Fernandez <gabriel.fernandez@...s.st.com>
> [snip]
>> +
>> +enum enum_mux_cfg {
>> +    MUX_ADC1,
>> +    MUX_ADC2,
>> +    MUX_DTS,
>> +    MUX_MCO1,
>> +    MUX_MCO2,
>> +    MUX_USB2PHY1,
>> +    MUX_USB2PHY2,
>> +    MUX_NB
>> +};
>> +
>> +#define MUX_CFG(id, _offset, _shift, _witdh)    \
>> +    [id] = {                \
>> +        .offset        = (_offset),    \
>> +        .shift        = (_shift),    \
>> +        .width        = (_witdh),    \
>> +    }
>
> typo _witdh -> _width

ok


>
>> +
>> +static const struct stm32_mux_cfg stm32mp21_muxes[MUX_NB] = {
>> +    MUX_CFG(MUX_ADC1,        RCC_ADC1CFGR,        12,    1),
>> +    MUX_CFG(MUX_ADC2,        RCC_ADC2CFGR,        12,    2),
>> +    MUX_CFG(MUX_DTS,        RCC_DTSCFGR,        12,    2),
>> +    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),
>> +};
>> +
>> +enum enum_gate_cfg {
>> +    GATE_ADC1,
>> +    GATE_ADC2,
>> +    GATE_CRC,
>> +    GATE_CRYP1,
>> +    GATE_CRYP2,
>> +    GATE_CSI,
>> +    GATE_DCMIPP,
>> +    GATE_DCMIPSSI,
>> +    GATE_DDRPERFM,
>> +    GATE_DTS,
>> +    GATE_ETH1,
>> +    GATE_ETH1MAC,
>> +    GATE_ETH1RX,
>> +    GATE_ETH1STP,
>> +    GATE_ETH1TX,
>> +    GATE_ETH2,
>> +    GATE_ETH2MAC,
>> +    GATE_ETH2RX,
>> +    GATE_ETH2STP,
>> +    GATE_ETH2TX,
>> +    GATE_FDCAN,
>> +    GATE_HASH1,
>> +    GATE_HASH2,
>> +    GATE_HDP,
>> +    GATE_I2C1,
>> +    GATE_I2C2,
>> +    GATE_I2C3,
>> +    GATE_I3C1,
>> +    GATE_I3C2,
>> +    GATE_I3C3,
>> +    GATE_IWDG1,
>> +    GATE_IWDG2,
>> +    GATE_IWDG3,
>> +    GATE_IWDG4,
>> +    GATE_LPTIM1,
>> +    GATE_LPTIM2,
>> +    GATE_LPTIM3,
>> +    GATE_LPTIM4,
>> +    GATE_LPTIM5,
>> +    GATE_LPUART1,
>> +    GATE_LTDC,
>> +    GATE_MCO1,
>> +    GATE_MCO2,
>> +    GATE_MDF1,
>> +    GATE_OTG,
>> +    GATE_PKA,
>> +    GATE_RNG1,
>> +    GATE_RNG2,
>> +    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_TIM1,
>> +    GATE_TIM10,
>> +    GATE_TIM11,
>> +    GATE_TIM12,
>> +    GATE_TIM13,
>> +    GATE_TIM14,
>> +    GATE_TIM15,
>> +    GATE_TIM16,
>> +    GATE_TIM17,
>> +    GATE_TIM2,
>> +    GATE_TIM3,
>> +    GATE_TIM4,
>> +    GATE_TIM5,
>> +    GATE_TIM6,
>> +    GATE_TIM7,
>> +    GATE_TIM8,
>> +    GATE_UART4,
>> +    GATE_UART5,
>> +    GATE_UART7,
>> +    GATE_USART1,
>> +    GATE_USART2,
>> +    GATE_USART3,
>> +    GATE_USART6,
>> +    GATE_USB2PHY1,
>> +    GATE_USB2PHY2,
>> +    GATE_USBH,
>> +    GATE_VREF,
>> +    GATE_WWDG1,
>> +    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 stm32mp21_gates[GATE_NB] = {
>> +    GATE_CFG(GATE_ADC1,        RCC_ADC1CFGR,        1,    0),
>> +    GATE_CFG(GATE_ADC2,        RCC_ADC2CFGR,        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_DCMIPSSI,        RCC_DCMIPSSICFGR,    1, 0),
>> +    GATE_CFG(GATE_DDRPERFM,        RCC_DDRPERFMCFGR,    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_FDCAN,        RCC_FDCANCFGR,        1,    0),
>> +    GATE_CFG(GATE_HASH1,        RCC_HASH1CFGR,        1,    0),
>> +    GATE_CFG(GATE_HASH2,        RCC_HASH2CFGR,        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_I3C1,        RCC_I3C1CFGR,        1,    0),
>> +    GATE_CFG(GATE_I3C2,        RCC_I3C2CFGR,        1,    0),
>> +    GATE_CFG(GATE_I3C3,        RCC_I3C3CFGR,        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_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_MCO1,        RCC_MCO1CFGR,        8,    0),
>> +    GATE_CFG(GATE_MCO2,        RCC_MCO2CFGR,        8,    0),
>> +    GATE_CFG(GATE_MDF1,        RCC_MDF1CFGR,        1,    0),
>> +    GATE_CFG(GATE_OTG,        RCC_OTGCFGR,        1,    0),
>> +    GATE_CFG(GATE_PKA,        RCC_PKACFGR,        1,    0),
>> +    GATE_CFG(GATE_RNG1,        RCC_RNG1CFGR,        1,    0),
>> +    GATE_CFG(GATE_RNG2,        RCC_RNG2CFGR,        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_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_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_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_USB2PHY1,        RCC_USB2PHY1CFGR,    1, 0),
>> +    GATE_CFG(GATE_USB2PHY2,        RCC_USB2PHY2CFGR,    1, 0),
>> +    GATE_CFG(GATE_USBH,        RCC_USBHCFGR,        1,    0),
>> +    GATE_CFG(GATE_VREF,        RCC_VREFCFGR,        1,    0),
>> +    GATE_CFG(GATE_WWDG1,        RCC_WWDG1CFGR,        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_adc1 = {
>> +    .gate_id = GATE_ADC1,
>> +    .hw.init = CLK_HW_INIT_INDEX("ck_icn_p_adc1", ICN_LS_MCU, 
>> &clk_stm32_gate_ops, 0),
>> +};
>> +
>> +static struct clk_stm32_composite ck_ker_adc1 = {
>> +    .gate_id = GATE_ADC1,
>> +    .mux_id = MUX_ADC1,
>> +    .div_id = NO_STM32_DIV,
>> +    .hw.init = CLK_HW_INIT_PARENTS_DATA("ck_ker_adc1", adc1_src, 
>> &clk_stm32_composite_ops, 0),
>> +};
>> +
>> +static struct clk_stm32_gate ck_icn_p_adc2 = {
>> +    .gate_id = GATE_ADC2,
>> +    .hw.init = CLK_HW_INIT_INDEX("ck_icn_p_adc2", ICN_LS_MCU, 
>> &clk_stm32_gate_ops, 0),
>> +};
>> +
>> +static struct clk_stm32_composite ck_ker_adc2 = {
>> +    .gate_id = GATE_ADC2,
>> +    .mux_id = MUX_ADC2,
>> +    .div_id = NO_STM32_DIV,
>> +    .hw.init = CLK_HW_INIT_PARENTS_DATA("ck_ker_adc2", adc2_src, 
>> &clk_stm32_composite_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),
>> +};
>> +
>> +static struct clk_stm32_gate ck_icn_p_dcmipssi = {
>> +    .gate_id = GATE_DCMIPSSI,
>> +    .hw.init = CLK_HW_INIT_INDEX("ck_icn_p_dcmipssi", ICN_LS_MCU, 
>> &clk_stm32_gate_ops, 0),
>> +};
>> +
>> +/* DDRPERMF */
>> +static struct clk_stm32_gate ck_icn_p_ddrperfm = {
>> +    .gate_id = GATE_DDRPERFM,
>> +    .hw.init = CLK_HW_INIT_INDEX("ck_icn_p_ddrperfm", 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*/
>
> ' ' after */
>
ok


>> +/* 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),
>> +};
>> +
>> +/* 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),
>> +};
>
> ck_ker_eth2ptp and ck_ker_eth1ptp both use FLEXGEN_56, is this ok?

Yes, it's okay. Some Flexgens can gate several peripherals.



>
>> +
>> +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),
>> +};
>> +
>> +/* 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),
>> +};
>> +
>> +/* HASH */
>> +static struct clk_stm32_gate ck_icn_p_hash1 = {
>> +    .gate_id = GATE_HASH1,
>> +    .hw.init = CLK_HW_INIT_INDEX("ck_icn_p_hash1", ICN_LS_MCU, 
>> &clk_stm32_gate_ops, 0),
>> +};
>> +
>> +static struct clk_stm32_gate ck_icn_p_hash2 = {
>> +    .gate_id = GATE_HASH2,
>> +    .hw.init = CLK_HW_INIT_INDEX("ck_icn_p_hash2", 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_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_APB5, 
>> &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_13, 
>> &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_13, 
>> &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_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_APB5, 
>> &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_14, 
>> &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_14, 
>> &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_36, 
>> &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),
>> +};
>> +
>> +/* 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_42, 
>> &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_21, 
>> &clk_stm32_gate_ops, 0),
>> +};
>> +
>> +/* OTG */
>> +static struct clk_stm32_gate ck_icn_m_otg = {
>> +    .gate_id = GATE_OTG,
>> +    .hw.init = CLK_HW_INIT_INDEX("ck_icn_m_otg", 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_rng1 = {
>> +    .gate_id = GATE_RNG1,
>> +    .hw.init = CLK_HW_INIT_INDEX("ck_icn_p_rng1", ICN_LS_MCU, 
>> &clk_stm32_gate_ops, 0),
>> +};
>> +
>> +static struct clk_stm32_gate ck_icn_p_rng2 = {
>> +    .gate_id = GATE_RNG2,
>> +    .hw.init = CLK_HW_INIT_INDEX("ck_icn_p_rng2", 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_22, 
>> &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_23, 
>> &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_24, 
>> &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_12, 
>> &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_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_11, 
>> &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),
>> +};
>> +
>
> SPI4 and SPI5 both use FLEXGEN_17

dito


>
>> +static struct clk_stm32_gate ck_ker_spi6 = {
>> +    .gate_id = GATE_SPI6,
>> +    .hw.init = CLK_HW_INIT_INDEX("ck_ker_spi6", 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_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),
>> +};
>> +
>> +/* 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_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_18, 
>> &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_19, 
>> &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_20, 
>> &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),
>> +};
>> +
>> +/* USBH */
>> +static struct clk_stm32_gate ck_icn_m_usbhehci = {
>> +    .gate_id = GATE_USBH,
>> +    .hw.init = CLK_HW_INIT_INDEX("ck_icn_m_usbhehci", ICN_HSL, 
>> &clk_stm32_gate_ops, 0),
>> +};
>> +
>> +static struct clk_stm32_gate ck_icn_m_usbhohci = {
>> +    .gate_id = GATE_USBH,
>> +    .hw.init = CLK_HW_INIT_INDEX("ck_icn_m_usbhohci", ICN_HSL, 
>> &clk_stm32_gate_ops, 0),
>> +};
>
> Confirm whether GATE_USBH is intended to be shared or if 
> GATE_USBH_EHCI and GATE_USBH_OHCI similar
>
Yes, the GATE_USBH gates ck_icn_m_usbhehci and ck_icn_m_usbhohci clocks  
as described in the reference manual


Many Thanks Alok

Best Regards

Gabriel


>> +
>> +/* 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),
>> +};
>> +
>> +/* 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),
>> +};
>
>
> Thanks,
> Alok

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ