LCOV - code coverage report
Current view: top level - zephyr/drivers/interrupt_controller - intc_vim.h Coverage Total Hit
Test: new.info Lines: 0.0 % 168 0
Test Date: 2025-09-05 22:20:39

            Line data    Source code
       1            0 : /* Copyright (C) 2023 BeagleBoard.org Foundation
       2              :  * Copyright (C) 2023 S Prashanth
       3              :  *
       4              :  * SPDX-License-Identifier: Apache-2.0
       5              :  */
       6              : 
       7              : #ifndef ZEPHYR_DRIVERS_INTC_VIM_H_
       8              : #define ZEPHYR_DRIVERS_INTC_VIM_H_
       9              : 
      10              : #include <stdint.h>
      11              : 
      12              : #include <zephyr/devicetree.h>
      13              : #include <zephyr/dt-bindings/interrupt-controller/ti-vim.h>
      14              : #include <zephyr/sys/util_macro.h>
      15              : 
      16            0 : #define VIM_BASE_ADDR             DT_REG_ADDR(DT_INST(0, ti_vim))
      17              : 
      18            0 : #define VIM_MAX_IRQ_PER_GROUP     (32)
      19            0 : #define VIM_MAX_GROUP_NUM         ((uint32_t)(CONFIG_NUM_IRQS / VIM_MAX_IRQ_PER_GROUP))
      20              : 
      21            0 : #define VIM_GET_IRQ_GROUP_NUM(n)  ((uint32_t)((n) / VIM_MAX_IRQ_PER_GROUP))
      22            0 : #define VIM_GET_IRQ_BIT_NUM(n)    ((uint32_t)((n) % VIM_MAX_IRQ_PER_GROUP))
      23              : 
      24            0 : #define VIM_PRI_INT_MAX           (15)
      25              : 
      26            0 : #define VIM_PID             (VIM_BASE_ADDR + 0x0000)
      27            0 : #define VIM_INFO            (VIM_BASE_ADDR + 0x0004)
      28            0 : #define VIM_PRIIRQ          (VIM_BASE_ADDR + 0x0008)
      29            0 : #define VIM_PRIFIQ          (VIM_BASE_ADDR + 0x000C)
      30            0 : #define VIM_IRQGSTS         (VIM_BASE_ADDR + 0x0010)
      31            0 : #define VIM_FIQGSTS         (VIM_BASE_ADDR + 0x0014)
      32            0 : #define VIM_IRQVEC          (VIM_BASE_ADDR + 0x0018)
      33            0 : #define VIM_FIQVEC          (VIM_BASE_ADDR + 0x001C)
      34            0 : #define VIM_ACTIRQ          (VIM_BASE_ADDR + 0x0020)
      35            0 : #define VIM_ACTFIQ          (VIM_BASE_ADDR + 0x0024)
      36            0 : #define VIM_DEDVEC          (VIM_BASE_ADDR + 0x0030)
      37              : 
      38            0 : #define VIM_RAW(n)          (VIM_BASE_ADDR + (0x400) + ((n) * 0x20))
      39            0 : #define VIM_STS(n)          (VIM_BASE_ADDR + (0x404) + ((n) * 0x20))
      40            0 : #define VIM_INTR_EN_SET(n)  (VIM_BASE_ADDR + (0x408) + ((n) * 0x20))
      41            0 : #define VIM_INTR_EN_CLR(n)  (VIM_BASE_ADDR + (0x40c) + ((n) * 0x20))
      42            0 : #define VIM_IRQSTS(n)       (VIM_BASE_ADDR + (0x410) + ((n) * 0x20))
      43            0 : #define VIM_FIQSTS(n)       (VIM_BASE_ADDR + (0x414) + ((n) * 0x20))
      44            0 : #define VIM_INTMAP(n)       (VIM_BASE_ADDR + (0x418) + ((n) * 0x20))
      45            0 : #define VIM_INTTYPE(n)      (VIM_BASE_ADDR + (0x41c) + ((n) * 0x20))
      46            0 : #define VIM_PRI_INT(n)      (VIM_BASE_ADDR + (0x1000) + ((n) * 0x4))
      47            0 : #define VIM_VEC_INT(n)      (VIM_BASE_ADDR + (0x2000) + ((n) * 0x4))
      48              : 
      49              : /* RAW */
      50              : 
      51            0 : #define VIM_GRP_RAW_STS_MASK                 (BIT_MASK(32))
      52            0 : #define VIM_GRP_RAW_STS_SHIFT                (0x00000000U)
      53            0 : #define VIM_GRP_RAW_STS_RESETVAL             (0x00000000U)
      54            0 : #define VIM_GRP_RAW_STS_MAX                  (BIT_MASK(32))
      55              : 
      56            0 : #define VIM_GRP_RAW_RESETVAL                 (0x00000000U)
      57              : 
      58              : /* STS */
      59              : 
      60            0 : #define VIM_GRP_STS_MSK_MASK                 (BIT_MASK(32))
      61            0 : #define VIM_GRP_STS_MSK_SHIFT                (0x00000000U)
      62            0 : #define VIM_GRP_STS_MSK_RESETVAL             (0x00000000U)
      63            0 : #define VIM_GRP_STS_MSK_MAX                  (BIT_MASK(32))
      64              : 
      65            0 : #define VIM_GRP_STS_RESETVAL                 (0x00000000U)
      66              : 
      67              : /* INTR_EN_SET */
      68              : 
      69            0 : #define VIM_GRP_INTR_EN_SET_MSK_MASK         (BIT_MASK(32))
      70            0 : #define VIM_GRP_INTR_EN_SET_MSK_SHIFT        (0x00000000U)
      71            0 : #define VIM_GRP_INTR_EN_SET_MSK_RESETVAL     (0x00000000U)
      72            0 : #define VIM_GRP_INTR_EN_SET_MSK_MAX          (BIT_MASK(32))
      73              : 
      74            0 : #define VIM_GRP_INTR_EN_SET_RESETVAL         (0x00000000U)
      75              : 
      76              : /* INTR_EN_CLR */
      77              : 
      78            0 : #define VIM_GRP_INTR_EN_CLR_MSK_MASK         (BIT_MASK(32))
      79            0 : #define VIM_GRP_INTR_EN_CLR_MSK_SHIFT        (0x00000000U)
      80            0 : #define VIM_GRP_INTR_EN_CLR_MSK_RESETVAL     (0x00000000U)
      81            0 : #define VIM_GRP_INTR_EN_CLR_MSK_MAX          (BIT_MASK(32))
      82              : 
      83            0 : #define VIM_GRP_INTR_EN_CLR_RESETVAL         (0x00000000U)
      84              : 
      85              : /* IRQSTS */
      86              : 
      87            0 : #define VIM_GRP_IRQSTS_MSK_MASK              (BIT_MASK(32))
      88            0 : #define VIM_GRP_IRQSTS_MSK_SHIFT             (0x00000000U)
      89            0 : #define VIM_GRP_IRQSTS_MSK_RESETVAL          (0x00000000U)
      90            0 : #define VIM_GRP_IRQSTS_MSK_MAX               (BIT_MASK(32))
      91              : 
      92            0 : #define VIM_GRP_IRQSTS_RESETVAL              (0x00000000U)
      93              : 
      94              : /* FIQSTS */
      95              : 
      96            0 : #define VIM_GRP_FIQSTS_MSK_MASK              (BIT_MASK(32))
      97            0 : #define VIM_GRP_FIQSTS_MSK_SHIFT             (0x00000000U)
      98            0 : #define VIM_GRP_FIQSTS_MSK_RESETVAL          (0x00000000U)
      99            0 : #define VIM_GRP_FIQSTS_MSK_MAX               (BIT_MASK(32))
     100              : 
     101            0 : #define VIM_GRP_FIQSTS_RESETVAL              (0x00000000U)
     102              : 
     103              : /* INTMAP */
     104              : 
     105            0 : #define VIM_GRP_INTMAP_MSK_MASK              (BIT_MASK(32))
     106            0 : #define VIM_GRP_INTMAP_MSK_SHIFT             (0x00000000U)
     107            0 : #define VIM_GRP_INTMAP_MSK_RESETVAL          (0x00000000U)
     108            0 : #define VIM_GRP_INTMAP_MSK_MAX               (BIT_MASK(32))
     109              : 
     110            0 : #define VIM_GRP_INTMAP_RESETVAL              (0x00000000U)
     111              : 
     112              : /* INTTYPE */
     113              : 
     114            0 : #define VIM_GRP_INTTYPE_MSK_MASK             (BIT_MASK(32))
     115            0 : #define VIM_GRP_INTTYPE_MSK_SHIFT            (0x00000000U)
     116            0 : #define VIM_GRP_INTTYPE_MSK_RESETVAL         (0x00000000U)
     117            0 : #define VIM_GRP_INTTYPE_MSK_MAX              (BIT_MASK(32))
     118              : 
     119            0 : #define VIM_GRP_INTTYPE_RESETVAL             (0x00000000U)
     120              : 
     121              : /* INT */
     122              : 
     123            0 : #define VIM_PRI_INT_VAL_MASK                 (BIT_MASK(4))
     124            0 : #define VIM_PRI_INT_VAL_SHIFT                (0x00000000U)
     125            0 : #define VIM_PRI_INT_VAL_RESETVAL             (BIT_MASK(4))
     126            0 : #define VIM_PRI_INT_VAL_MAX                  (BIT_MASK(4))
     127              : 
     128            0 : #define VIM_PRI_INT_RESETVAL                 (BIT_MASK(4))
     129              : 
     130              : /* INT */
     131              : 
     132            0 : #define VIM_VEC_INT_VAL_MASK                 (0xFFFFFFFCU)
     133            0 : #define VIM_VEC_INT_VAL_SHIFT                (0x00000002U)
     134            0 : #define VIM_VEC_INT_VAL_RESETVAL             (0x00000000U)
     135            0 : #define VIM_VEC_INT_VAL_MAX                  (BIT_MASK(30))
     136              : 
     137            0 : #define VIM_VEC_INT_RESETVAL                 (0x00000000U)
     138              : 
     139              : /* INFO */
     140              : 
     141            0 : #define VIM_INFO_INTERRUPTS_MASK             (BIT_MASK(11))
     142            0 : #define VIM_INFO_INTERRUPTS_SHIFT            (0x00000000U)
     143            0 : #define VIM_INFO_INTERRUPTS_RESETVAL         (0x00000400U)
     144            0 : #define VIM_INFO_INTERRUPTS_MAX              (BIT_MASK(11))
     145              : 
     146            0 : #define VIM_INFO_RESETVAL                    (0x00000400U)
     147              : 
     148              : /* PRIIRQ */
     149              : 
     150            0 : #define VIM_PRIIRQ_VALID_MASK                (0x80000000U)
     151            0 : #define VIM_PRIIRQ_VALID_SHIFT               (BIT_MASK(5))
     152            0 : #define VIM_PRIIRQ_VALID_RESETVAL            (0x00000000U)
     153            0 : #define VIM_PRIIRQ_VALID_MAX                 (0x00000001U)
     154              : 
     155            0 : #define VIM_PRIIRQ_VALID_VAL_TRUE            (0x1U)
     156            0 : #define VIM_PRIIRQ_VALID_VAL_FALSE           (0x0U)
     157              : 
     158            0 : #define VIM_PRIIRQ_PRI_MASK                  (0x000F0000U)
     159            0 : #define VIM_PRIIRQ_PRI_SHIFT                 (0x00000010U)
     160            0 : #define VIM_PRIIRQ_PRI_RESETVAL              (0x00000000U)
     161            0 : #define VIM_PRIIRQ_PRI_MAX                   (BIT_MASK(4))
     162              : 
     163            0 : #define VIM_PRIIRQ_NUM_MASK                  (BIT_MASK(10))
     164            0 : #define VIM_PRIIRQ_NUM_SHIFT                 (0x00000000U)
     165            0 : #define VIM_PRIIRQ_NUM_RESETVAL              (0x00000000U)
     166            0 : #define VIM_PRIIRQ_NUM_MAX                   (BIT_MASK(10))
     167              : 
     168            0 : #define VIM_PRIIRQ_RESETVAL                  (0x00000000U)
     169              : 
     170              : /* PRIFIQ */
     171              : 
     172            0 : #define VIM_PRIFIQ_VALID_MASK                (0x80000000U)
     173            0 : #define VIM_PRIFIQ_VALID_SHIFT               (BIT_MASK(5))
     174            0 : #define VIM_PRIFIQ_VALID_RESETVAL            (0x00000000U)
     175            0 : #define VIM_PRIFIQ_VALID_MAX                 (0x00000001U)
     176              : 
     177            0 : #define VIM_PRIFIQ_VALID_VAL_TRUE            (0x1U)
     178            0 : #define VIM_PRIFIQ_VALID_VAL_FALSE           (0x0U)
     179              : 
     180            0 : #define VIM_PRIFIQ_PRI_MASK                  (0x000F0000U)
     181            0 : #define VIM_PRIFIQ_PRI_SHIFT                 (0x00000010U)
     182            0 : #define VIM_PRIFIQ_PRI_RESETVAL              (0x00000000U)
     183            0 : #define VIM_PRIFIQ_PRI_MAX                   (BIT_MASK(4))
     184              : 
     185            0 : #define VIM_PRIFIQ_NUM_MASK                  (BIT_MASK(10))
     186            0 : #define VIM_PRIFIQ_NUM_SHIFT                 (0x00000000U)
     187            0 : #define VIM_PRIFIQ_NUM_RESETVAL              (0x00000000U)
     188            0 : #define VIM_PRIFIQ_NUM_MAX                   (BIT_MASK(10))
     189              : 
     190            0 : #define VIM_PRIFIQ_RESETVAL                  (0x00000000U)
     191              : 
     192              : /* IRQGSTS */
     193              : 
     194            0 : #define VIM_IRQGSTS_STS_MASK                 (BIT_MASK(32))
     195            0 : #define VIM_IRQGSTS_STS_SHIFT                (0x00000000U)
     196            0 : #define VIM_IRQGSTS_STS_RESETVAL             (0x00000000U)
     197            0 : #define VIM_IRQGSTS_STS_MAX                  (BIT_MASK(32))
     198              : 
     199            0 : #define VIM_IRQGSTS_RESETVAL                 (0x00000000U)
     200              : 
     201              : /* FIQGSTS */
     202              : 
     203            0 : #define VIM_FIQGSTS_STS_MASK                 (BIT_MASK(32))
     204            0 : #define VIM_FIQGSTS_STS_SHIFT                (0x00000000U)
     205            0 : #define VIM_FIQGSTS_STS_RESETVAL             (0x00000000U)
     206            0 : #define VIM_FIQGSTS_STS_MAX                  (BIT_MASK(32))
     207              : 
     208            0 : #define VIM_FIQGSTS_RESETVAL                 (0x00000000U)
     209              : 
     210              : /* IRQVEC */
     211              : 
     212            0 : #define VIM_IRQVEC_ADDR_MASK                 (0xFFFFFFFCU)
     213            0 : #define VIM_IRQVEC_ADDR_SHIFT                (0x00000002U)
     214            0 : #define VIM_IRQVEC_ADDR_RESETVAL             (0x00000000U)
     215            0 : #define VIM_IRQVEC_ADDR_MAX                  (BIT_MASK(30))
     216              : 
     217            0 : #define VIM_IRQVEC_RESETVAL                  (0x00000000U)
     218              : 
     219              : /* FIQVEC */
     220              : 
     221            0 : #define VIM_FIQVEC_ADDR_MASK                 (0xFFFFFFFCU)
     222            0 : #define VIM_FIQVEC_ADDR_SHIFT                (0x00000002U)
     223            0 : #define VIM_FIQVEC_ADDR_RESETVAL             (0x00000000U)
     224            0 : #define VIM_FIQVEC_ADDR_MAX                  (BIT_MASK(30))
     225              : 
     226            0 : #define VIM_FIQVEC_RESETVAL                  (0x00000000U)
     227              : 
     228              : /* ACTIRQ */
     229              : 
     230            0 : #define VIM_ACTIRQ_VALID_MASK                (0x80000000U)
     231            0 : #define VIM_ACTIRQ_VALID_SHIFT               (BIT_MASK(5))
     232            0 : #define VIM_ACTIRQ_VALID_RESETVAL            (0x00000000U)
     233            0 : #define VIM_ACTIRQ_VALID_MAX                 (0x00000001U)
     234              : 
     235            0 : #define VIM_ACTIRQ_VALID_VAL_TRUE            (0x1U)
     236            0 : #define VIM_ACTIRQ_VALID_VAL_FALSE           (0x0U)
     237              : 
     238            0 : #define VIM_ACTIRQ_PRI_MASK                  (0x000F0000U)
     239            0 : #define VIM_ACTIRQ_PRI_SHIFT                 (0x00000010U)
     240            0 : #define VIM_ACTIRQ_PRI_RESETVAL              (0x00000000U)
     241            0 : #define VIM_ACTIRQ_PRI_MAX                   (BIT_MASK(4))
     242              : 
     243            0 : #define VIM_ACTIRQ_NUM_MASK                  (BIT_MASK(10))
     244            0 : #define VIM_ACTIRQ_NUM_SHIFT                 (0x00000000U)
     245            0 : #define VIM_ACTIRQ_NUM_RESETVAL              (0x00000000U)
     246            0 : #define VIM_ACTIRQ_NUM_MAX                   (BIT_MASK(10))
     247              : 
     248            0 : #define VIM_ACTIRQ_RESETVAL                  (0x00000000U)
     249              : 
     250              : /* ACTFIQ */
     251              : 
     252            0 : #define VIM_ACTFIQ_VALID_MASK                (0x80000000U)
     253            0 : #define VIM_ACTFIQ_VALID_SHIFT               (BIT_MASK(5))
     254            0 : #define VIM_ACTFIQ_VALID_RESETVAL            (0x00000000U)
     255            0 : #define VIM_ACTFIQ_VALID_MAX                 (0x00000001U)
     256              : 
     257            0 : #define VIM_ACTFIQ_VALID_VAL_TRUE            (0x1U)
     258            0 : #define VIM_ACTFIQ_VALID_VAL_FALSE           (0x0U)
     259              : 
     260            0 : #define VIM_ACTFIQ_PRI_MASK                  (0x000F0000U)
     261            0 : #define VIM_ACTFIQ_PRI_SHIFT                 (0x00000010U)
     262            0 : #define VIM_ACTFIQ_PRI_RESETVAL              (0x00000000U)
     263            0 : #define VIM_ACTFIQ_PRI_MAX                   (BIT_MASK(4))
     264              : 
     265            0 : #define VIM_ACTFIQ_NUM_MASK                  (BIT_MASK(10))
     266            0 : #define VIM_ACTFIQ_NUM_SHIFT                 (0x00000000U)
     267            0 : #define VIM_ACTFIQ_NUM_RESETVAL              (0x00000000U)
     268            0 : #define VIM_ACTFIQ_NUM_MAX                   (BIT_MASK(10))
     269              : 
     270            0 : #define VIM_ACTFIQ_RESETVAL                  (0x00000000U)
     271              : 
     272              : /* DEDVEC */
     273              : 
     274            0 : #define VIM_DEDVEC_ADDR_MASK                 (0xFFFFFFFCU)
     275            0 : #define VIM_DEDVEC_ADDR_SHIFT                (0x00000002U)
     276            0 : #define VIM_DEDVEC_ADDR_RESETVAL             (0x00000000U)
     277            0 : #define VIM_DEDVEC_ADDR_MAX                  (BIT_MASK(30))
     278              : 
     279            0 : #define VIM_DEDVEC_RESETVAL                  (0x00000000U)
     280              : 
     281              : /*
     282              :  * VIM Driver Interface Functions
     283              :  */
     284              : 
     285              : /**
     286              :  * @brief Get active interrupt ID.
     287              :  *
     288              :  * @return Returns the ID of an active interrupt.
     289              :  */
     290              : unsigned int z_vim_irq_get_active(void);
     291              : 
     292              : /**
     293              :  * @brief Signal end-of-interrupt.
     294              :  *
     295              :  * @param irq interrupt ID.
     296              :  */
     297              : void z_vim_irq_eoi(unsigned int irq);
     298              : 
     299              : /**
     300              :  * @brief Interrupt controller initialization.
     301              :  */
     302              : void z_vim_irq_init(void);
     303              : 
     304              : /**
     305              :  * @brief Configure priority, irq type for the interrupt ID.
     306              :  *
     307              :  * @param irq interrupt ID.
     308              :  * @param prio interrupt priority.
     309              :  * @param flags interrupt flags.
     310              :  */
     311              : void z_vim_irq_priority_set(unsigned int irq, unsigned int prio, uint32_t flags);
     312              : 
     313              : /**
     314              :  * @brief Enable Interrupt.
     315              :  *
     316              :  * @param irq interrupt ID.
     317              :  */
     318              : void z_vim_irq_enable(unsigned int irq);
     319              : 
     320              : /**
     321              :  * @brief Disable Interrupt.
     322              :  *
     323              :  * @param irq interrupt ID.
     324              :  */
     325              : void z_vim_irq_disable(unsigned int irq);
     326              : 
     327              : /**
     328              :  * @brief Check if an interrupt is enabled.
     329              :  *
     330              :  * @param irq interrupt ID.
     331              :  *
     332              :  * @retval 0 If interrupt is disabled.
     333              :  * @retval 1 If interrupt is enabled.
     334              :  */
     335              : int z_vim_irq_is_enabled(unsigned int irq);
     336              : 
     337              : /**
     338              :  * @brief Raise a software interrupt.
     339              :  *
     340              :  * @param irq interrupt ID.
     341              :  */
     342              : void z_vim_arm_enter_irq(int irq);
     343              : 
     344              : #endif /* ZEPHYR_DRIVERS_INTC_VIM_H_ */
        

Generated by: LCOV version 2.0-1