LCOV - code coverage report
Current view: top level - zephyr/drivers/clock_control - clock_control_ifx_cat1.h Coverage Total Hit
Test: new.info Lines: 10.0 % 20 2
Test Date: 2025-10-20 12:20:01

            Line data    Source code
       1            0 : /*
       2              :  * Copyright (c) 2025 Cypress Semiconductor Corporation (an Infineon company) or
       3              :  * an affiliate of Cypress Semiconductor Corporation
       4              :  *
       5              :  * SPDX-License-Identifier: Apache-2.0
       6              :  */
       7              : 
       8              : #include <cy_sysclk.h>
       9              : #include <cy_systick.h>
      10              : 
      11            0 : #define IFX_CAT1_PERIPHERAL_GROUP_GET_DIVIDER_TYPE(block) ((cy_en_divider_types_t)((block) & 0x03))
      12              : 
      13              : #if !defined(CONFIG_SOC_FAMILY_INFINEON_EDGE)
      14              : /* Converts the group/div pair into a unique block number. */
      15            0 : #define IFX_CAT1_PERIPHERAL_GROUP_ADJUST(group, div) (((group) << 2) | (div))
      16              : 
      17            1 : #define IFX_CAT1_CLOCK_BLOCK_PERI_GROUP(gr)                                                        \
      18              :         IFX_CAT1_CLOCK_BLOCK_PERIPHERAL##gr##_8BIT = IFX_CAT1_PERIPHERAL_GROUP_ADJUST(             \
      19              :                 (gr), CY_SYSCLK_DIV_8_BIT), /*!< 8bit Peripheral Divider Group */                  \
      20              :                 IFX_CAT1_CLOCK_BLOCK_PERIPHERAL##gr##_16BIT = IFX_CAT1_PERIPHERAL_GROUP_ADJUST(    \
      21              :                         (gr), CY_SYSCLK_DIV_16_BIT), /*!< 16bit Peripheral Divider Group */        \
      22              :                 IFX_CAT1_CLOCK_BLOCK_PERIPHERAL##gr##_16_5BIT = IFX_CAT1_PERIPHERAL_GROUP_ADJUST(  \
      23              :                         (gr), CY_SYSCLK_DIV_16_5_BIT), /*!< 16.5bit Peripheral Divider Group */    \
      24              :                 IFX_CAT1_CLOCK_BLOCK_PERIPHERAL##gr##_24_5BIT = IFX_CAT1_PERIPHERAL_GROUP_ADJUST(  \
      25              :                         (gr), CY_SYSCLK_DIV_24_5_BIT) /*!< 24.5bit Peripheral Divider Group */
      26              : #else
      27              : /* Converts the group/div pair into a unique block number. */
      28              : #define IFX_CAT1_PERIPHERAL_GROUP_ADJUST(instance, group, div)                                     \
      29              :         (((group + (instance * PERI0_PERI_PCLK_PCLK_GROUP_NR)) << 2) | (div))
      30              : #define IFX_CAT1_PERIPHERAL_CLOCK_GET_INSTANCE(clock) ((clock >> 2) / PERI0_PERI_PCLK_PCLK_GROUP_NR)
      31              : #define IFX_CAT1_PERIPHERAL_CLOCK_GET_GROUP(clock)                                                 \
      32              :         ((clock >> 2) -                                                                            \
      33              :          (IFX_CAT1_PERIPHERAL_CLOCK_GET_INSTANCE(clock) * PERI0_PERI_PCLK_PCLK_GROUP_NR))
      34              : 
      35              : #define IFX_CAT1_CLOCK_BLOCK_PERI_GROUP(instance, gr)                                              \
      36              :         IFX_CAT1_CLOCK_BLOCK##instance##_PERIPHERAL##gr##_8BIT =                                   \
      37              :                 IFX_CAT1_PERIPHERAL_GROUP_ADJUST((instance), (gr), CY_SYSCLK_DIV_8_BIT),           \
      38              :         IFX_CAT1_CLOCK_BLOCK##instance##_PERIPHERAL##gr##_16BIT =                                  \
      39              :                 IFX_CAT1_PERIPHERAL_GROUP_ADJUST((instance), (gr), CY_SYSCLK_DIV_16_BIT),          \
      40              :         IFX_CAT1_CLOCK_BLOCK##instance##_PERIPHERAL##gr##_16_5BIT =                                \
      41              :                 IFX_CAT1_PERIPHERAL_GROUP_ADJUST((instance), (gr), CY_SYSCLK_DIV_16_5_BIT),        \
      42              :         IFX_CAT1_CLOCK_BLOCK##instance##_PERIPHERAL##gr##_24_5BIT =                                \
      43              :                 IFX_CAT1_PERIPHERAL_GROUP_ADJUST((instance), (gr), CY_SYSCLK_DIV_24_5_BIT)
      44              : #endif
      45              : 
      46            0 : enum ifx_cat1_clock_block {
      47              : #if defined(CONFIG_SOC_FAMILY_INFINEON_CAT1A)
      48              :         /* The first four items are here for backwards compatibility with old clock APIs */
      49              :         IFX_CAT1_CLOCK_BLOCK_PERIPHERAL_8BIT = CY_SYSCLK_DIV_8_BIT, /*!< 8bit Peripheral Divider */
      50              :         IFX_CAT1_CLOCK_BLOCK_PERIPHERAL_16BIT =
      51              :                 CY_SYSCLK_DIV_16_BIT, /*!< 16bit Peripheral Divider */
      52              :         IFX_CAT1_CLOCK_BLOCK_PERIPHERAL_16_5BIT =
      53              :                 CY_SYSCLK_DIV_16_5_BIT, /*!< 16.5bit Peripheral Divider */
      54              :         IFX_CAT1_CLOCK_BLOCK_PERIPHERAL_24_5BIT =
      55              :                 CY_SYSCLK_DIV_24_5_BIT, /*!< 24.5bit Peripheral Divider */
      56              : 
      57              :         IFX_CAT1_CLOCK_BLOCK_IMO,   /*!< Internal Main Oscillator Input Clock */
      58              :         IFX_CAT1_CLOCK_BLOCK_ECO,   /*!< External Crystal Oscillator Input Clock */
      59              :         IFX_CAT1_CLOCK_BLOCK_EXT,   /*!< External Input Clock */
      60              :         IFX_CAT1_CLOCK_BLOCK_ALTHF, /*!< Alternate High Frequency Input Clock */
      61              :         IFX_CAT1_CLOCK_BLOCK_ALTLF, /*!< Alternate Low Frequency Input Clock */
      62              :         IFX_CAT1_CLOCK_BLOCK_ILO,   /*!< Internal Low Speed Oscillator Input Clock */
      63              : #if !(defined(SRSS_HT_VARIANT) && (SRSS_HT_VARIANT > 0))
      64              :         IFX_CAT1_CLOCK_BLOCK_PILO, /*!< Precision ILO Input Clock */
      65              : #endif
      66              : 
      67              :         IFX_CAT1_CLOCK_BLOCK_WCO, /*!< Watch Crystal Oscillator Input Clock */
      68              :         IFX_CAT1_CLOCK_BLOCK_MFO, /*!< Medium Frequency Oscillator Clock */
      69              : 
      70              :         IFX_CAT1_CLOCK_BLOCK_PATHMUX, /*!< Path selection mux for input to FLL/PLLs */
      71              : 
      72              :         IFX_CAT1_CLOCK_BLOCK_FLL, /*!< Frequency-Locked Loop Clock */
      73              : #if defined(CY_IP_MXS40SRSS) && (CY_IP_MXS40SRSS_VERSION >= 3)
      74              :         IFX_CAT1_CLOCK_BLOCK_PLL200, /*!< 200MHz Phase-Locked Loop Clock */
      75              :         IFX_CAT1_CLOCK_BLOCK_PLL400, /*!< 400MHz Phase-Locked Loop Clock */
      76              : #else
      77              :         IFX_CAT1_CLOCK_BLOCK_PLL, /*!< Phase-Locked Loop Clock */
      78              : #endif
      79              : 
      80              :         IFX_CAT1_CLOCK_BLOCK_LF, /*!< Low Frequency Clock */
      81              :         IFX_CAT1_CLOCK_BLOCK_MF, /*!< Medium Frequency Clock */
      82              :         IFX_CAT1_CLOCK_BLOCK_HF, /*!< High Frequency Clock */
      83              : 
      84              :         IFX_CAT1_CLOCK_BLOCK_PUMP,         /*!< Analog Pump Clock */
      85              :         IFX_CAT1_CLOCK_BLOCK_BAK,          /*!< Backup Power Domain Clock */
      86              :         IFX_CAT1_CLOCK_BLOCK_TIMER,        /*!< Timer Clock */
      87              :         IFX_CAT1_CLOCK_BLOCK_ALT_SYS_TICK, /*!< Alternative SysTick Clock */
      88              : 
      89              :         IFX_CAT1_CLOCK_BLOCK_FAST, /*!< Fast Clock for CM4 */
      90              :         IFX_CAT1_CLOCK_BLOCK_PERI, /*!< Peripheral Clock */
      91              :         IFX_CAT1_CLOCK_BLOCK_SLOW, /*!< Slow Clock for CM0+ */
      92              : 
      93              : #elif defined(COMPONENT_CAT1B)
      94              : 
      95              :         IFX_CAT1_CLOCK_BLOCK_PERIPHERAL_8BIT =
      96              :                 CY_SYSCLK_DIV_8_BIT, /*!< Equivalent to IFX_CAT1_CLOCK_BLOCK_PERIPHERAL0_8_BIT */
      97              :         IFX_CAT1_CLOCK_BLOCK_PERIPHERAL_16BIT =
      98              :                 CY_SYSCLK_DIV_16_BIT, /*!< Equivalent to IFX_CAT1_CLOCK_BLOCK_PERIPHERAL0_16_BIT */
      99              :         IFX_CAT1_CLOCK_BLOCK_PERIPHERAL_16_5BIT =
     100              :                 CY_SYSCLK_DIV_16_5_BIT, /*!< Equivalent to IFX_CAT1_CLOCK_BLOCK_PERIPHERAL0_16_5_BIT
     101              :                                          */
     102              :         IFX_CAT1_CLOCK_BLOCK_PERIPHERAL_24_5BIT =
     103              :                 CY_SYSCLK_DIV_24_5_BIT, /*!< Equivalent to IFX_CAT1_CLOCK_BLOCK_PERIPHERAL0_24_5_BIT
     104              :                                          */
     105              : 
     106              : /* The first four items are here for backwards compatibility with old clock APIs */
     107              : #if (PERI_PERI_PCLK_PCLK_GROUP_NR >= 1)
     108              :         IFX_CAT1_CLOCK_BLOCK_PERI_GROUP(0),
     109              : #endif
     110              : #if (PERI_PERI_PCLK_PCLK_GROUP_NR >= 2)
     111              :         IFX_CAT1_CLOCK_BLOCK_PERI_GROUP(1),
     112              : #endif
     113              : #if (PERI_PERI_PCLK_PCLK_GROUP_NR >= 3)
     114              :         IFX_CAT1_CLOCK_BLOCK_PERI_GROUP(2),
     115              : #endif
     116              : #if (PERI_PERI_PCLK_PCLK_GROUP_NR >= 4)
     117              :         IFX_CAT1_CLOCK_BLOCK_PERI_GROUP(3),
     118              : #endif
     119              : #if (PERI_PERI_PCLK_PCLK_GROUP_NR >= 5)
     120              :         IFX_CAT1_CLOCK_BLOCK_PERI_GROUP(4),
     121              : #endif
     122              : #if (PERI_PERI_PCLK_PCLK_GROUP_NR >= 6)
     123              :         IFX_CAT1_CLOCK_BLOCK_PERI_GROUP(5),
     124              : #endif
     125              : #if (PERI_PERI_PCLK_PCLK_GROUP_NR >= 7)
     126              :         IFX_CAT1_CLOCK_BLOCK_PERI_GROUP(6),
     127              : #endif
     128              : #if (PERI_PERI_PCLK_PCLK_GROUP_NR >= 8)
     129              :         IFX_CAT1_CLOCK_BLOCK_PERI_GROUP(7),
     130              : #endif
     131              : #if (PERI_PERI_PCLK_PCLK_GROUP_NR >= 9)
     132              :         IFX_CAT1_CLOCK_BLOCK_PERI_GROUP(8),
     133              : #endif
     134              : #if (PERI_PERI_PCLK_PCLK_GROUP_NR >= 10)
     135              :         IFX_CAT1_CLOCK_BLOCK_PERI_GROUP(9),
     136              : #endif
     137              : #if (PERI_PERI_PCLK_PCLK_GROUP_NR >= 11)
     138              :         IFX_CAT1_CLOCK_BLOCK_PERI_GROUP(10),
     139              : #endif
     140              : #if (PERI_PERI_PCLK_PCLK_GROUP_NR >= 12)
     141              :         IFX_CAT1_CLOCK_BLOCK_PERI_GROUP(11),
     142              : #endif
     143              : #if (PERI_PERI_PCLK_PCLK_GROUP_NR >= 13)
     144              :         IFX_CAT1_CLOCK_BLOCK_PERI_GROUP(12),
     145              : #endif
     146              : #if (PERI_PERI_PCLK_PCLK_GROUP_NR >= 14)
     147              :         IFX_CAT1_CLOCK_BLOCK_PERI_GROUP(13),
     148              : #endif
     149              : #if (PERI_PERI_PCLK_PCLK_GROUP_NR >= 15)
     150              :         IFX_CAT1_CLOCK_BLOCK_PERI_GROUP(14),
     151              : #endif
     152              : #if (PERI_PERI_PCLK_PCLK_GROUP_NR >= 16)
     153              :         IFX_CAT1_CLOCK_BLOCK_PERI_GROUP(15),
     154              : #endif
     155              : 
     156              :         IFX_CAT1_CLOCK_BLOCK_IHO,   /*!< Internal High Speed Oscillator Input Clock */
     157              :         IFX_CAT1_CLOCK_BLOCK_IMO,   /*!< Internal Main Oscillator Input Clock */
     158              :         IFX_CAT1_CLOCK_BLOCK_ECO,   /*!< External Crystal Oscillator Input Clock */
     159              :         IFX_CAT1_CLOCK_BLOCK_EXT,   /*!< External Input Clock */
     160              :         IFX_CAT1_CLOCK_BLOCK_ALTHF, /*!< Alternate High Frequency Input Clock */
     161              :         IFX_CAT1_CLOCK_BLOCK_ALTLF, /*!< Alternate Low Frequency Input Clock */
     162              :         IFX_CAT1_CLOCK_BLOCK_ILO,   /*!< Internal Low Speed Oscillator Input Clock */
     163              :         IFX_CAT1_CLOCK_BLOCK_PILO,  /*!< Precision ILO Input Clock */
     164              :         IFX_CAT1_CLOCK_BLOCK_WCO,   /*!< Watch Crystal Oscillator Input Clock */
     165              :         IFX_CAT1_CLOCK_BLOCK_MFO,   /*!< Medium Frequency Oscillator Clock */
     166              : 
     167              :         IFX_CAT1_CLOCK_BLOCK_PATHMUX, /*!< Path selection mux for input to FLL/PLLs */
     168              : 
     169              :         IFX_CAT1_CLOCK_BLOCK_FLL,           /*!< Frequency-Locked Loop Clock */
     170              :         IFX_CAT1_CLOCK_BLOCK_PLL200,        /*!< 200MHz Phase-Locked Loop Clock */
     171              :         IFX_CAT1_CLOCK_BLOCK_PLL400,        /*!< 400MHz Phase-Locked Loop Clock */
     172              :         IFX_CAT1_CLOCK_BLOCK_ECO_PRESCALER, /*!< ECO Prescaler Divider */
     173              : 
     174              :         IFX_CAT1_CLOCK_BLOCK_LF, /*!< Low Frequency Clock */
     175              :         IFX_CAT1_CLOCK_BLOCK_MF, /*!< Medium Frequency Clock */
     176              :         IFX_CAT1_CLOCK_BLOCK_HF, /*!< High Frequency Clock */
     177              : 
     178              :         IFX_CAT1_CLOCK_BLOCK_PUMP,         /*!< Analog Pump Clock */
     179              :         IFX_CAT1_CLOCK_BLOCK_BAK,          /*!< Backup Power Domain Clock */
     180              :         IFX_CAT1_CLOCK_BLOCK_ALT_SYS_TICK, /*!< Alternative SysTick Clock */
     181              :         IFX_CAT1_CLOCK_BLOCK_PERI,         /*!< Peripheral Clock Group */
     182              : 
     183              : #elif defined(COMPONENT_CAT1C)
     184              : 
     185              :         IFX_CAT1_CLOCK_BLOCK_PERIPHERAL_8BIT =
     186              :                 CY_SYSCLK_DIV_8_BIT, /*!< Equivalent to IFX_CAT1_CLOCK_BLOCK_PERIPHERAL0_8_BIT */
     187              :         IFX_CAT1_CLOCK_BLOCK_PERIPHERAL_16BIT =
     188              :                 CY_SYSCLK_DIV_16_BIT, /*!< Equivalent to IFX_CAT1_CLOCK_BLOCK_PERIPHERAL0_16_BIT */
     189              :         IFX_CAT1_CLOCK_BLOCK_PERIPHERAL_16_5BIT =
     190              :                 CY_SYSCLK_DIV_16_5_BIT, /*!< Equivalent to IFX_CAT1_CLOCK_BLOCK_PERIPHERAL0_16_5_BIT
     191              :                                          */
     192              :         IFX_CAT1_CLOCK_BLOCK_PERIPHERAL_24_5BIT =
     193              :                 CY_SYSCLK_DIV_24_5_BIT, /*!< Equivalent to IFX_CAT1_CLOCK_BLOCK_PERIPHERAL0_24_5_BIT
     194              :                                          */
     195              : 
     196              : /* The first four items are here for backwards compatibility with old clock APIs */
     197              : #if (PERI_PERI_PCLK_PCLK_GROUP_NR >= 1)
     198              :         IFX_CAT1_CLOCK_BLOCK_PERI_GROUP(0),
     199              : #endif
     200              : #if (PERI_PERI_PCLK_PCLK_GROUP_NR >= 2)
     201              :         IFX_CAT1_CLOCK_BLOCK_PERI_GROUP(1),
     202              : #endif
     203              : #if (PERI_PERI_PCLK_PCLK_GROUP_NR >= 3)
     204              :         IFX_CAT1_CLOCK_BLOCK_PERI_GROUP(2),
     205              : #endif
     206              : #if (PERI_PERI_PCLK_PCLK_GROUP_NR >= 4)
     207              :         IFX_CAT1_CLOCK_BLOCK_PERI_GROUP(3),
     208              : #endif
     209              : #if (PERI_PERI_PCLK_PCLK_GROUP_NR >= 5)
     210              :         IFX_CAT1_CLOCK_BLOCK_PERI_GROUP(4),
     211              : #endif
     212              : #if (PERI_PERI_PCLK_PCLK_GROUP_NR >= 6)
     213              :         IFX_CAT1_CLOCK_BLOCK_PERI_GROUP(5),
     214              : #endif
     215              : #if (PERI_PERI_PCLK_PCLK_GROUP_NR >= 7)
     216              :         IFX_CAT1_CLOCK_BLOCK_PERI_GROUP(6),
     217              : #endif
     218              : #if (PERI_PERI_PCLK_PCLK_GROUP_NR >= 8)
     219              :         IFX_CAT1_CLOCK_BLOCK_PERI_GROUP(7),
     220              : #endif
     221              : #if (PERI_PERI_PCLK_PCLK_GROUP_NR >= 9)
     222              :         IFX_CAT1_CLOCK_BLOCK_PERI_GROUP(8),
     223              : #endif
     224              : #if (PERI_PERI_PCLK_PCLK_GROUP_NR >= 10)
     225              :         IFX_CAT1_CLOCK_BLOCK_PERI_GROUP(9),
     226              : #endif
     227              : #if (PERI_PERI_PCLK_PCLK_GROUP_NR >= 11)
     228              :         IFX_CAT1_CLOCK_BLOCK_PERI_GROUP(10),
     229              : #endif
     230              : #if (PERI_PERI_PCLK_PCLK_GROUP_NR >= 12)
     231              :         IFX_CAT1_CLOCK_BLOCK_PERI_GROUP(11),
     232              : #endif
     233              : #if (PERI_PERI_PCLK_PCLK_GROUP_NR >= 13)
     234              :         IFX_CAT1_CLOCK_BLOCK_PERI_GROUP(12),
     235              : #endif
     236              : #if (PERI_PERI_PCLK_PCLK_GROUP_NR >= 14)
     237              :         IFX_CAT1_CLOCK_BLOCK_PERI_GROUP(13),
     238              : #endif
     239              : #if (PERI_PERI_PCLK_PCLK_GROUP_NR >= 15)
     240              :         IFX_CAT1_CLOCK_BLOCK_PERI_GROUP(14),
     241              : #endif
     242              : #if (PERI_PERI_PCLK_PCLK_GROUP_NR >= 16)
     243              :         IFX_CAT1_CLOCK_BLOCK_PERI_GROUP(15),
     244              : #endif
     245              : 
     246              :         IFX_CAT1_CLOCK_BLOCK_IMO, /*!< Internal Main Oscillator Input Clock */
     247              :         IFX_CAT1_CLOCK_BLOCK_ECO, /*!< External Crystal Oscillator Input Clock */
     248              :         IFX_CAT1_CLOCK_BLOCK_EXT, /*!< External Input Clock */
     249              :         IFX_CAT1_CLOCK_BLOCK_ILO, /*!< Internal Low Speed Oscillator Input Clock */
     250              :         IFX_CAT1_CLOCK_BLOCK_WCO, /*!< Watch Crystal Oscillator Input Clock */
     251              : 
     252              :         IFX_CAT1_CLOCK_BLOCK_PATHMUX, /*!< Path selection mux for input to FLL/PLLs */
     253              : 
     254              :         IFX_CAT1_CLOCK_BLOCK_FLL,    /*!< Frequency-Locked Loop Clock */
     255              :         IFX_CAT1_CLOCK_BLOCK_PLL200, /*!< 200MHz Phase-Locked Loop Clock */
     256              :         IFX_CAT1_CLOCK_BLOCK_PLL400, /*!< 400MHz Phase-Locked Loop Clock */
     257              : 
     258              :         IFX_CAT1_CLOCK_BLOCK_LF,           /*!< Low Frequency Clock */
     259              :         IFX_CAT1_CLOCK_BLOCK_HF,           /*!< High Frequency Clock */
     260              :         IFX_CAT1_CLOCK_BLOCK_BAK,          /*!< Backup Power Domain Clock */
     261              :         IFX_CAT1_CLOCK_BLOCK_ALT_SYS_TICK, /*!< Alternative SysTick Clock */
     262              : 
     263              :         IFX_CAT1_CLOCK_BLOCK_PERI,  /*!< Peripheral Clock Group */
     264              :         IFX_CAT1_CLOCK_BLOCK_FAST,  /*!< Fast Clock for CM7 */
     265              :         IFX_CAT1_CLOCK_BLOCK_SLOW,  /*!< Slow Clock for CM0+ */
     266              :         IFX_CAT1_CLOCK_BLOCK_MEM,   /*!< CLK MEM */
     267              :         IFX_CAT1_CLOCK_BLOCK_TIMER, /*!< CLK Timer */
     268              : #elif defined(CONFIG_SOC_FAMILY_INFINEON_EDGE)
     269              : 
     270              :         IFX_CAT1_CLOCK_BLOCK_PERIPHERAL_8BIT =
     271              :                 CY_SYSCLK_DIV_8_BIT, /*!< Equivalent to IFX_CAT1_CLOCK_BLOCK_PERIPHERAL0_8_BIT */
     272              :         IFX_CAT1_CLOCK_BLOCK_PERIPHERAL_16BIT =
     273              :                 CY_SYSCLK_DIV_16_BIT, /*!< Equivalent to IFX_CAT1_CLOCK_BLOCK_PERIPHERAL0_16_BIT */
     274              :         IFX_CAT1_CLOCK_BLOCK_PERIPHERAL_16_5BIT =
     275              :                 CY_SYSCLK_DIV_16_5_BIT, /*!< Equivalent to IFX_CAT1_CLOCK_BLOCK_PERIPHERAL0_16_5_BIT
     276              :                                          */
     277              :         IFX_CAT1_CLOCK_BLOCK_PERIPHERAL_24_5BIT =
     278              :                 CY_SYSCLK_DIV_24_5_BIT, /*!< Equivalent to IFX_CAT1_CLOCK_BLOCK_PERIPHERAL0_24_5_BIT
     279              :                                          */
     280              : 
     281              : #if (PERI0_PERI_PCLK_PCLK_GROUP_NR >= 1)
     282              :         IFX_CAT1_CLOCK_BLOCK_PERI_GROUP(0, 0),
     283              : #endif
     284              : #if (PERI0_PERI_PCLK_PCLK_GROUP_NR >= 2)
     285              :         IFX_CAT1_CLOCK_BLOCK_PERI_GROUP(0, 1),
     286              : #endif
     287              : #if (PERI0_PERI_PCLK_PCLK_GROUP_NR >= 3)
     288              :         IFX_CAT1_CLOCK_BLOCK_PERI_GROUP(0, 2),
     289              : #endif
     290              : #if (PERI0_PERI_PCLK_PCLK_GROUP_NR >= 4)
     291              :         IFX_CAT1_CLOCK_BLOCK_PERI_GROUP(0, 3),
     292              : #endif
     293              : #if (PERI0_PERI_PCLK_PCLK_GROUP_NR >= 5)
     294              :         IFX_CAT1_CLOCK_BLOCK_PERI_GROUP(0, 4),
     295              : #endif
     296              : #if (PERI0_PERI_PCLK_PCLK_GROUP_NR >= 6)
     297              :         IFX_CAT1_CLOCK_BLOCK_PERI_GROUP(0, 5),
     298              : #endif
     299              : #if (PERI0_PERI_PCLK_PCLK_GROUP_NR >= 7)
     300              :         IFX_CAT1_CLOCK_BLOCK_PERI_GROUP(0, 6),
     301              : #endif
     302              : #if (PERI0_PERI_PCLK_PCLK_GROUP_NR >= 8)
     303              :         IFX_CAT1_CLOCK_BLOCK_PERI_GROUP(0, 7),
     304              : #endif
     305              : #if (PERI0_PERI_PCLK_PCLK_GROUP_NR >= 9)
     306              :         IFX_CAT1_CLOCK_BLOCK_PERI_GROUP(0, 8),
     307              : #endif
     308              : #if (PERI0_PERI_PCLK_PCLK_GROUP_NR >= 10)
     309              :         IFX_CAT1_CLOCK_BLOCK_PERI_GROUP(0, 9),
     310              : #endif
     311              : #if (PERI0_PERI_PCLK_PCLK_GROUP_NR >= 11)
     312              : #warning "Unhandled PERI0 PCLK number"
     313              : #endif
     314              : 
     315              : #if (PERI1_PERI_PCLK_PCLK_GROUP_NR >= 1)
     316              :         IFX_CAT1_CLOCK_BLOCK_PERI_GROUP(1, 0),
     317              : #endif
     318              : #if (PERI1_PERI_PCLK_PCLK_GROUP_NR >= 2)
     319              :         IFX_CAT1_CLOCK_BLOCK_PERI_GROUP(1, 1),
     320              : #endif
     321              : #if (PERI1_PERI_PCLK_PCLK_GROUP_NR >= 3)
     322              :         IFX_CAT1_CLOCK_BLOCK_PERI_GROUP(1, 2),
     323              : #endif
     324              : #if (PERI1_PERI_PCLK_PCLK_GROUP_NR >= 4)
     325              :         IFX_CAT1_CLOCK_BLOCK_PERI_GROUP(1, 3),
     326              : #endif
     327              : #if (PERI1_PERI_PCLK_PCLK_GROUP_NR >= 5)
     328              :         IFX_CAT1_CLOCK_BLOCK_PERI_GROUP(1, 4),
     329              : #endif
     330              : #if (PERI1_PERI_PCLK_PCLK_GROUP_NR >= 6)
     331              :         IFX_CAT1_CLOCK_BLOCK_PERI_GROUP(1, 5),
     332              : #endif
     333              : #if (PERI1_PERI_PCLK_PCLK_GROUP_NR >= 7)
     334              : #warning "Unhandled PERI1 PCLK number"
     335              : #endif
     336              : 
     337              :         IFX_CAT1_CLOCK_BLOCK_IHO,  /*!< Internal High Speed Oscillator Input Clock */
     338              :         IFX_CAT1_CLOCK_BLOCK_ECO,  /*!< External Crystal Oscillator Input Clock */
     339              :         IFX_CAT1_CLOCK_BLOCK_EXT,  /*!< External Input Clock */
     340              :         IFX_CAT1_CLOCK_BLOCK_PILO, /*!< Precision ILO Input Clock */
     341              :         IFX_CAT1_CLOCK_BLOCK_WCO,  /*!< Watch Crystal Oscillator Input Clock */
     342              : 
     343              :         IFX_CAT1_CLOCK_BLOCK_PATHMUX, /*!< Path selection mux for input to FLL/PLLs */
     344              : 
     345              :         IFX_CAT1_CLOCK_BLOCK_DPLL250,       /*!< 250MHz Digital Phase-Locked Loop Clock */
     346              :         IFX_CAT1_CLOCK_BLOCK_DPLL500,       /*!< 500MHz Digital Phase-Locked Loop Clock */
     347              :         IFX_CAT1_CLOCK_BLOCK_ECO_PRESCALER, /*!< ECO Prescaler Divider */
     348              : 
     349              :         IFX_CAT1_CLOCK_BLOCK_LF, /*!< Low Frequency Clock */
     350              :         IFX_CAT1_CLOCK_BLOCK_MF, /*!< Medium Frequency Clock */
     351              :         IFX_CAT1_CLOCK_BLOCK_HF, /*!< High Frequency Clock */
     352              : 
     353              :         IFX_CAT1_CLOCK_BLOCK_BAK,  /*!< Backup Power Domain Clock */
     354              :         IFX_CAT1_CLOCK_BLOCK_PERI, /*!< Peripheral Clock Group */
     355              : 
     356              : #endif
     357              : };
     358              : 
     359            0 : struct ifx_cat1_clock {
     360            0 :         enum ifx_cat1_clock_block block;
     361            0 :         uint8_t channel;
     362            0 :         bool reserved;
     363            0 :         const void *funcs;
     364              : };
     365              : 
     366            0 : struct ifx_cat1_resource_inst {
     367            0 :         uint8_t type;      /* !< The resource block type */
     368            0 :         uint8_t block_num; /* !< The resource block index */
     369              :         /**
     370              :          * The channel number, if the resource type defines multiple channels
     371              :          * per block instance. Otherwise, 0
     372              :          */
     373            1 :         uint8_t channel_num;
     374              : };
     375              : 
     376            0 : int ifx_cat1_clock_control_get_frequency(uint32_t dt_ord, uint32_t *frequency);
     377              : 
     378            0 : en_clk_dst_t ifx_cat1_scb_get_clock_index(uint32_t block_num);
     379              : 
     380            0 : static inline cy_rslt_t ifx_cat1_utils_peri_pclk_enable_divider(en_clk_dst_t clk_dest,
     381              :                                                                 const struct ifx_cat1_clock *_clock)
     382              : {
     383              : #if defined(COMPONENT_CAT1B) || defined(COMPONENT_CAT1C) || defined(CONFIG_SOC_FAMILY_INFINEON_EDGE)
     384              :         return Cy_SysClk_PeriPclkEnableDivider(
     385              :                 clk_dest, IFX_CAT1_PERIPHERAL_GROUP_GET_DIVIDER_TYPE(_clock->block),
     386              :                 _clock->channel);
     387              : #else
     388              :         CY_UNUSED_PARAMETER(clk_dest);
     389              :         return Cy_SysClk_PeriphEnableDivider(
     390              :                 IFX_CAT1_PERIPHERAL_GROUP_GET_DIVIDER_TYPE(_clock->block), _clock->channel);
     391              : #endif
     392              : }
     393              : 
     394            0 : static inline cy_rslt_t ifx_cat1_utils_peri_pclk_set_divider(en_clk_dst_t clk_dest,
     395              :                                                              const struct ifx_cat1_clock *_clock,
     396              :                                                              uint32_t div)
     397              : {
     398              : #if defined(COMPONENT_CAT1B) || defined(COMPONENT_CAT1C) || defined(CONFIG_SOC_FAMILY_INFINEON_EDGE)
     399              :         return Cy_SysClk_PeriPclkSetDivider(
     400              :                 clk_dest, IFX_CAT1_PERIPHERAL_GROUP_GET_DIVIDER_TYPE(_clock->block),
     401              :                 _clock->channel, div);
     402              : #else
     403              :         CY_UNUSED_PARAMETER(clk_dest);
     404              :         return Cy_SysClk_PeriphSetDivider(IFX_CAT1_PERIPHERAL_GROUP_GET_DIVIDER_TYPE(_clock->block),
     405              :                                           _clock->channel, div);
     406              : #endif
     407              : }
     408              : 
     409              : static inline cy_rslt_t
     410            0 : ifx_cat1_utils_peri_pclk_set_frac_divider(en_clk_dst_t clk_dest,
     411              :                                           const struct ifx_cat1_clock *_clock, uint32_t div_int,
     412              :                                           uint32_t div_frac)
     413              : {
     414              : #if defined(COMPONENT_CAT1B) || defined(COMPONENT_CAT1C) || defined(CONFIG_SOC_FAMILY_INFINEON_EDGE)
     415              :         return Cy_SysClk_PeriPclkSetFracDivider(
     416              :                 clk_dest, IFX_CAT1_PERIPHERAL_GROUP_GET_DIVIDER_TYPE(_clock->block),
     417              :                 _clock->channel, div_int, div_frac);
     418              : #else
     419              :         CY_UNUSED_PARAMETER(clk_dest);
     420              :         return Cy_SysClk_PeriphSetFracDivider(
     421              :                 IFX_CAT1_PERIPHERAL_GROUP_GET_DIVIDER_TYPE(_clock->block), _clock->channel, div_int,
     422              :                 div_frac);
     423              : #endif
     424              : }
     425              : 
     426            0 : static inline cy_rslt_t ifx_cat1_utils_peri_pclk_assign_divider(en_clk_dst_t clk_dest,
     427              :                                                                 const struct ifx_cat1_clock *_clock)
     428              : {
     429              : #if defined(COMPONENT_CAT1B) || defined(COMPONENT_CAT1C) || defined(CONFIG_SOC_FAMILY_INFINEON_EDGE)
     430              :         return Cy_SysClk_PeriPclkAssignDivider(
     431              :                 clk_dest, IFX_CAT1_PERIPHERAL_GROUP_GET_DIVIDER_TYPE(_clock->block),
     432              :                 _clock->channel);
     433              : #else
     434              :         return Cy_SysClk_PeriphAssignDivider(
     435              :                 clk_dest, IFX_CAT1_PERIPHERAL_GROUP_GET_DIVIDER_TYPE(_clock->block),
     436              :                 _clock->channel);
     437              : #endif
     438              : }
        

Generated by: LCOV version 2.0-1