LCOV - code coverage report
Current view: top level - zephyr/arch/arc/v2 - arc_connect.h Coverage Total Hit
Test: new.info Lines: 1.1 % 88 1
Test Date: 2025-09-05 20:47:19

            Line data    Source code
       1            1 : /*
       2              :  * Copyright (c) 2019 Synopsys.
       3              :  *
       4              :  * SPDX-License-Identifier: Apache-2.0
       5              :  */
       6              : 
       7              : /**
       8              :  * @file
       9              :  * @brief ARCv2 ARC Connect driver
      10              :  *
      11              :  * ARCv2 ARC Connect driver interface. Included by arc/arch.h.
      12              :  */
      13              : 
      14              : #ifndef ZEPHYR_INCLUDE_ARCH_ARC_V2_ARC_CONNECT_H_
      15              : #define ZEPHYR_INCLUDE_ARCH_ARC_V2_ARC_CONNECT_H_
      16              : 
      17              : #ifndef _ASMLANGUAGE
      18              : #include <zephyr/types.h>
      19              : #include <zephyr/arch/arc/v2/aux_regs.h>
      20              : 
      21              : #ifdef __cplusplus
      22              : extern "C" {
      23              : #endif
      24              : 
      25              : #define _ARC_V2_CONNECT_BCR 0x0d0
      26              : #define _ARC_V2_CONNECT_IDU_BCR 0x0d5
      27              : #define _ARC_V2_CONNECT_GFRC_BCR 0x0d6
      28              : #define _ARC_V2_CONNECT_CMD 0x600
      29              : #define _ARC_V2_CONNECT_WDATA 0x601
      30              : #define _ARC_V2_CONNECT_READBACK 0x602
      31              : 
      32              : 
      33            0 : #define ARC_CONNECT_CMD_CHECK_CORE_ID                   0x0
      34              : 
      35            0 : #define ARC_CONNECT_CMD_INTRPT_GENERATE_IRQ             0x1
      36            0 : #define ARC_CONNECT_CMD_INTRPT_GENERATE_ACK             0x2
      37            0 : #define ARC_CONNECT_CMD_INTRPT_READ_STATUS              0x3
      38            0 : #define ARC_CONNECT_CMD_INTRPT_CHECK_SOURCE             0x4
      39              : 
      40            0 : #define ARC_CONNECT_CMD_SEMA_CLAIM_AND_READ             0x11
      41            0 : #define ARC_CONNECT_CMD_SEMA_RELEASE                    0x12
      42            0 : #define ARC_CONNECT_CMD_SEMA_FORCE_RELEASE              0x13
      43              : 
      44            0 : #define ARC_CONNECT_CMD_MSG_SRAM_SET_ADDR               0x21
      45            0 : #define ARC_CONNECT_CMD_MSG_SRAM_READ_ADDR              0x22
      46            0 : #define ARC_CONNECT_CMD_MSG_SRAM_SET_ADDR_OFFSET        0x23
      47            0 : #define ARC_CONNECT_CMD_MSG_SRAM_READ_ADDR_OFFSET       0x24
      48            0 : #define ARC_CONNECT_CMD_MSG_SRAM_WRITE                  0x25
      49            0 : #define ARC_CONNECT_CMD_MSG_SRAM_WRITE_INC              0x26
      50            0 : #define ARC_CONNECT_CMD_MSG_SRAM_WRITE_IMM              0x27
      51            0 : #define ARC_CONNECT_CMD_MSG_SRAM_READ                   0x28
      52            0 : #define ARC_CONNECT_CMD_MSG_SRAM_READ_INC               0x29
      53            0 : #define ARC_CONNECT_CMD_MSG_SRAM_READ_IMM               0x2a
      54            0 : #define ARC_CONNECT_CMD_MSG_SRAM_SET_ECC_CTRL           0x2b
      55            0 : #define ARC_CONNECT_CMD_MSG_SRAM_READ_ECC_CTRL          0x2c
      56              : 
      57            0 : #define ARC_CONNECT_CMD_DEBUG_RESET                     0x31
      58            0 : #define ARC_CONNECT_CMD_DEBUG_HALT                      0x32
      59            0 : #define ARC_CONNECT_CMD_DEBUG_RUN                       0x33
      60            0 : #define ARC_CONNECT_CMD_DEBUG_SET_MASK                  0x34
      61            0 : #define ARC_CONNECT_CMD_DEBUG_READ_MASK                 0x35
      62            0 : #define ARC_CONNECT_CMD_DEBUG_SET_SELECT                0x36
      63            0 : #define ARC_CONNECT_CMD_DEBUG_READ_SELECT               0x37
      64            0 : #define ARC_CONNECT_CMD_DEBUG_READ_EN                   0x38
      65            0 : #define ARC_CONNECT_CMD_DEBUG_READ_CMD                  0x39
      66            0 : #define ARC_CONNECT_CMD_DEBUG_READ_CORE                 0x3a
      67              : 
      68            0 : #define ARC_CONNECT_CMD_DEBUG_MASK_SH                   0x08    /* if a self-halt occurs, a global halt is triggered */
      69            0 : #define ARC_CONNECT_CMD_DEBUG_MASK_BH                   0x04    /* if a breakpoint caused halt occurs, a global halt is triggered */
      70            0 : #define ARC_CONNECT_CMD_DEBUG_MASK_AH                   0x02    /* if an actionpoint caused halt occurs, a global halt is triggered */
      71            0 : #define ARC_CONNECT_CMD_DEBUG_MASK_H                    0x01    /* whenever the core is halted, a global halt is triggered */
      72              : 
      73            0 : #define ARC_CONNECT_CMD_GFRC_CLEAR                      0x41
      74            0 : #define ARC_CONNECT_CMD_GFRC_READ_LO                    0x42
      75            0 : #define ARC_CONNECT_CMD_GFRC_READ_HI                    0x43
      76            0 : #define ARC_CONNECT_CMD_GFRC_ENABLE                     0x44
      77            0 : #define ARC_CONNECT_CMD_GFRC_DISABLE                    0x45
      78            0 : #define ARC_CONNECT_CMD_GFRC_READ_DISABLE               0x46
      79            0 : #define ARC_CONNECT_CMD_GFRC_SET_CORE                   0x47
      80            0 : #define ARC_CONNECT_CMD_GFRC_READ_CORE                  0x48
      81            0 : #define ARC_CONNECT_CMD_GFRC_READ_HALT                  0x49
      82              : 
      83            0 : #define ARC_CONNECT_CMD_PDM_SET_PM                      0x81
      84            0 : #define ARC_CONNECT_CMD_PDM_READ_PSTATUS                0x82
      85              : 
      86            0 : #define ARC_CONNECT_CMD_PMU_SET_PUCNT                   0x51
      87            0 : #define ARC_CONNECT_CMD_PMU_READ_PUCNT                  0x52
      88            0 : #define ARC_CONNECT_CMD_PMU_SET_RSTCNT                  0x53
      89            0 : #define ARC_CONNECT_CMD_PMU_READ_RSTCNT                 0x54
      90            0 : #define ARC_CONNECT_CMD_PMU_SET_PDCNT                   0x55
      91            0 : #define ARC_CONNECT_CMD_PMU_READ_PDCNT                  0x56
      92              : 
      93            0 : #define ARC_CONNECT_CMD_IDU_ENABLE                      0x71
      94            0 : #define ARC_CONNECT_CMD_IDU_DISABLE                     0x72
      95            0 : #define ARC_CONNECT_CMD_IDU_READ_ENABLE                 0x73
      96            0 : #define ARC_CONNECT_CMD_IDU_SET_MODE                    0x74
      97            0 : #define ARC_CONNECT_CMD_IDU_READ_MODE                   0x75
      98            0 : #define ARC_CONNECT_CMD_IDU_SET_DEST                    0x76
      99            0 : #define ARC_CONNECT_CMD_IDU_READ_DEST                   0x77
     100            0 : #define ARC_CONNECT_CMD_IDU_GEN_CIRQ                    0x78
     101            0 : #define ARC_CONNECT_CMD_IDU_ACK_CIRQ                    0x79
     102            0 : #define ARC_CONNECT_CMD_IDU_CHECK_STATUS                0x7a
     103            0 : #define ARC_CONNECT_CMD_IDU_CHECK_SOURCE                0x7b
     104            0 : #define ARC_CONNECT_CMD_IDU_SET_MASK                    0x7c
     105            0 : #define ARC_CONNECT_CMD_IDU_READ_MASK                   0x7d
     106            0 : #define ARC_CONNECT_CMD_IDU_CHECK_FIRST                 0x7e
     107              : 
     108              : /* the start intno of common interrupt managed by IDU */
     109            0 : #define ARC_CONNECT_IDU_IRQ_START                       24
     110              : 
     111            0 : #define ARC_CONNECT_INTRPT_TRIGGER_LEVEL        0
     112            0 : #define ARC_CONNECT_INTRPT_TRIGGER_EDGE         1
     113              : 
     114              : 
     115            0 : #define ARC_CONNECT_DISTRI_MODE_ROUND_ROBIN     0
     116            0 : #define ARC_CONNECT_DISTRI_MODE_FIRST_ACK       1
     117            0 : #define ARC_CONNECT_DISTRI_ALL_DEST             2
     118              : 
     119            0 : struct arc_connect_cmd {
     120              :         union {
     121              :                 struct {
     122              : #ifdef CONFIG_BIG_ENDIAN
     123              :                         uint32_t pad:8, param:16, cmd:8;
     124              : #else
     125            0 :                         uint32_t cmd:8, param:16, pad:8;
     126              : #endif
     127              :                 };
     128            0 :                 uint32_t val;
     129            0 :         };
     130              : };
     131              : 
     132            0 : struct arc_connect_bcr {
     133              :         union {
     134              :                 struct {
     135              : #ifdef CONFIG_BIG_ENDIAN
     136              :                         uint32_t pad4:6, pw_dom:1, pad3:1,
     137              :                         idu:1, pad2:1, num_cores:6,
     138              :                         pad:1,  gfrc:1, dbg:1, pw:1,
     139              :                         msg:1, sem:1, ipi:1, slv:1,
     140              :                         ver:8;
     141              : #else
     142            0 :                         uint32_t ver:8,
     143            0 :                         slv:1, ipi:1, sem:1, msg:1,
     144            0 :                         pw:1, dbg:1, gfrc:1, pad:1,
     145            0 :                         num_cores:6, pad2:1, idu:1,
     146            0 :                         pad3:1, pw_dom:1, pad4:6;
     147              : #endif
     148              :                 };
     149            0 :                 uint32_t val;
     150            0 :         };
     151              : };
     152              : 
     153            0 : struct arc_connect_idu_bcr {
     154              :         union {
     155              :                 struct {
     156              : #ifdef CONFIG_BIG_ENDIAN
     157              :                         uint32_t pad:21, cirqnum:3, ver:8;
     158              : #else
     159            0 :                         uint32_t ver:8, cirqnum:3, pad:21;
     160              : #endif
     161              :                 };
     162            0 :                 uint32_t val;
     163            0 :         };
     164              : };
     165              : 
     166              : static inline void z_arc_connect_cmd(uint32_t cmd, uint32_t param)
     167              : {
     168              :         struct arc_connect_cmd regval;
     169              : 
     170              :         regval.pad = 0;
     171              :         regval.cmd = cmd;
     172              :         regval.param = param;
     173              : 
     174              :         z_arc_v2_aux_reg_write(_ARC_V2_CONNECT_CMD, regval.val);
     175              : }
     176              : 
     177              : static inline void z_arc_connect_cmd_data(uint32_t cmd, uint32_t param,
     178              :                                    uint32_t data)
     179              : {
     180              :         z_arc_v2_aux_reg_write(_ARC_V2_CONNECT_WDATA, data);
     181              :         z_arc_connect_cmd(cmd, param);
     182              : }
     183              : 
     184              : static inline uint32_t z_arc_connect_cmd_readback(void)
     185              : {
     186              :         return z_arc_v2_aux_reg_read(_ARC_V2_CONNECT_READBACK);
     187              : }
     188              : 
     189              : 
     190              : /* inter-core interrupt related functions */
     191              : extern void z_arc_connect_ici_generate(uint32_t core_id);
     192              : extern void z_arc_connect_ici_ack(uint32_t core_id);
     193              : extern uint32_t z_arc_connect_ici_read_status(uint32_t core_id);
     194              : extern uint32_t z_arc_connect_ici_check_src(void);
     195              : extern void z_arc_connect_ici_clear(void);
     196              : 
     197              : /* inter-core debug related functions */
     198              : extern void z_arc_connect_debug_reset(uint32_t core_mask);
     199              : extern void z_arc_connect_debug_halt(uint32_t core_mask);
     200              : extern void z_arc_connect_debug_run(uint32_t core_mask);
     201              : extern void z_arc_connect_debug_mask_set(uint32_t core_mask, uint32_t mask);
     202              : extern uint32_t z_arc_connect_debug_mask_read(uint32_t core_mask);
     203              : extern void z_arc_connect_debug_select_set(uint32_t core_mask);
     204              : extern uint32_t z_arc_connect_debug_select_read(void);
     205              : extern uint32_t z_arc_connect_debug_en_read(void);
     206              : extern uint32_t z_arc_connect_debug_cmd_read(void);
     207              : extern uint32_t z_arc_connect_debug_core_read(void);
     208              : 
     209              : /* global free-running counter(gfrc) related functions */
     210              : extern void z_arc_connect_gfrc_clear(void);
     211              : extern uint64_t z_arc_connect_gfrc_read(void);
     212              : extern void z_arc_connect_gfrc_enable(void);
     213              : extern void z_arc_connect_gfrc_disable(void);
     214              : extern void z_arc_connect_gfrc_core_set(uint32_t core_mask);
     215              : extern uint32_t z_arc_connect_gfrc_halt_read(void);
     216              : extern uint32_t z_arc_connect_gfrc_core_read(void);
     217              : 
     218              : /* interrupt distribute unit related functions */
     219              : extern void z_arc_connect_idu_enable(void);
     220              : extern void z_arc_connect_idu_disable(void);
     221              : extern uint32_t z_arc_connect_idu_read_enable(void);
     222              : extern void z_arc_connect_idu_set_mode(uint32_t irq_num,
     223              :         uint16_t trigger_mode, uint16_t distri_mode);
     224              : extern uint32_t z_arc_connect_idu_read_mode(uint32_t irq_num);
     225              : extern void z_arc_connect_idu_set_dest(uint32_t irq_num, uint32_t core_mask);
     226              : extern uint32_t z_arc_connect_idu_read_dest(uint32_t irq_num);
     227              : extern void z_arc_connect_idu_gen_cirq(uint32_t irq_num);
     228              : extern void z_arc_connect_idu_ack_cirq(uint32_t irq_num);
     229              : extern uint32_t z_arc_connect_idu_check_status(uint32_t irq_num);
     230              : extern uint32_t z_arc_connect_idu_check_source(uint32_t irq_num);
     231              : extern void z_arc_connect_idu_set_mask(uint32_t irq_num, uint32_t mask);
     232              : extern uint32_t z_arc_connect_idu_read_mask(uint32_t irq_num);
     233              : extern uint32_t z_arc_connect_idu_check_first(uint32_t irq_num);
     234              : 
     235              : #ifdef __cplusplus
     236              : }
     237              : #endif
     238              : 
     239              : #endif /* _ASMLANGUAGE */
     240              : 
     241              : #endif /* ZEPHYR_INCLUDE_ARCH_ARC_V2_ARC_CONNECT_H_ */
        

Generated by: LCOV version 2.0-1