LCOV - code coverage report
Current view: top level - zephyr/arch/riscv - csr.h Coverage Total Hit
Test: new.info Lines: 0.0 % 154 0
Test Date: 2025-09-05 20:47:19

            Line data    Source code
       1            0 : /*
       2              :  * Copyright (c) 2020 Michael Schaffner
       3              :  * Copyright (c) 2020 BayLibre, SAS
       4              :  *
       5              :  * SPDX-License-Identifier: SHL-0.51
       6              :  * SPDX-License-Identifier: Apache-2.0
       7              :  */
       8              : 
       9              : #ifndef CSR_H_
      10              : #define CSR_H_
      11              : 
      12            0 : #define MSTATUS_UIE     0x00000001
      13            0 : #define MSTATUS_SIE     0x00000002
      14            0 : #define MSTATUS_HIE     0x00000004
      15            0 : #define MSTATUS_MIE     0x00000008
      16            0 : #define MSTATUS_UPIE    0x00000010
      17            0 : #define MSTATUS_SPIE    0x00000020
      18            0 : #define MSTATUS_HPIE    0x00000040
      19            0 : #define MSTATUS_MPIE    0x00000080
      20            0 : #define MSTATUS_SPP     0x00000100
      21            0 : #define MSTATUS_HPP     0x00000600
      22            0 : #define MSTATUS_MPP     0x00001800
      23            0 : #define MSTATUS_FS      0x00006000
      24            0 : #define MSTATUS_XS      0x00018000
      25            0 : #define MSTATUS_MPRV    0x00020000
      26            0 : #define MSTATUS_SUM     0x00040000
      27            0 : #define MSTATUS_MXR     0x00080000
      28            0 : #define MSTATUS_TVM     0x00100000
      29            0 : #define MSTATUS_TW      0x00200000
      30            0 : #define MSTATUS_TSR     0x00400000
      31            0 : #define MSTATUS32_SD    0x80000000
      32            0 : #define MSTATUS_UXL     0x0000000300000000
      33            0 : #define MSTATUS_SXL     0x0000000C00000000
      34            0 : #define MSTATUS64_SD    0x8000000000000000
      35              : 
      36            0 : #define SSTATUS_UIE     0x00000001
      37            0 : #define SSTATUS_SIE     0x00000002
      38            0 : #define SSTATUS_UPIE    0x00000010
      39            0 : #define SSTATUS_SPIE    0x00000020
      40            0 : #define SSTATUS_SPP     0x00000100
      41            0 : #define SSTATUS_FS      0x00006000
      42            0 : #define SSTATUS_XS      0x00018000
      43            0 : #define SSTATUS_SUM     0x00040000
      44            0 : #define SSTATUS_MXR     0x00080000
      45            0 : #define SSTATUS32_SD    0x80000000
      46            0 : #define SSTATUS_UXL     0x0000000300000000
      47            0 : #define SSTATUS64_SD    0x8000000000000000
      48              : 
      49            0 : #define DCSR_XDEBUGVER  (3U<<30)
      50            0 : #define DCSR_NDRESET    (1<<29)
      51            0 : #define DCSR_FULLRESET  (1<<28)
      52            0 : #define DCSR_EBREAKM    (1<<15)
      53            0 : #define DCSR_EBREAKH    (1<<14)
      54            0 : #define DCSR_EBREAKS    (1<<13)
      55            0 : #define DCSR_EBREAKU    (1<<12)
      56            0 : #define DCSR_STOPCYCLE  (1<<10)
      57            0 : #define DCSR_STOPTIME   (1<<9)
      58            0 : #define DCSR_CAUSE      (7<<6)
      59            0 : #define DCSR_DEBUGINT   (1<<5)
      60            0 : #define DCSR_HALT       (1<<3)
      61            0 : #define DCSR_STEP       (1<<2)
      62            0 : #define DCSR_PRV        (3<<0)
      63              : 
      64            0 : #define DCSR_CAUSE_NONE         0
      65            0 : #define DCSR_CAUSE_SWBP         1
      66            0 : #define DCSR_CAUSE_HWBP         2
      67            0 : #define DCSR_CAUSE_DEBUGINT     3
      68            0 : #define DCSR_CAUSE_STEP         4
      69            0 : #define DCSR_CAUSE_HALT         5
      70              : 
      71            0 : #define MCONTROL_TYPE(xlen)     (0xfULL<<((xlen)-4))
      72            0 : #define MCONTROL_DMODE(xlen)    (1ULL<<((xlen)-5))
      73            0 : #define MCONTROL_MASKMAX(xlen)  (0x3fULL<<((xlen)-11))
      74              : 
      75            0 : #define MCONTROL_SELECT         (1<<19)
      76            0 : #define MCONTROL_TIMING         (1<<18)
      77            0 : #define MCONTROL_ACTION         (0x3f<<12)
      78            0 : #define MCONTROL_CHAIN          (1<<11)
      79            0 : #define MCONTROL_MATCH          (0xf<<7)
      80            0 : #define MCONTROL_M              (1<<6)
      81            0 : #define MCONTROL_H              (1<<5)
      82            0 : #define MCONTROL_S              (1<<4)
      83            0 : #define MCONTROL_U              (1<<3)
      84            0 : #define MCONTROL_EXECUTE        (1<<2)
      85            0 : #define MCONTROL_STORE          (1<<1)
      86            0 : #define MCONTROL_LOAD           (1<<0)
      87              : 
      88            0 : #define MCONTROL_TYPE_NONE      0
      89            0 : #define MCONTROL_TYPE_MATCH     2
      90              : 
      91            0 : #define MCONTROL_ACTION_DEBUG_EXCEPTION 0
      92            0 : #define MCONTROL_ACTION_DEBUG_MODE      1
      93            0 : #define MCONTROL_ACTION_TRACE_START     2
      94            0 : #define MCONTROL_ACTION_TRACE_STOP      3
      95            0 : #define MCONTROL_ACTION_TRACE_EMIT      4
      96              : 
      97            0 : #define MCONTROL_MATCH_EQUAL            0
      98            0 : #define MCONTROL_MATCH_NAPOT            1
      99            0 : #define MCONTROL_MATCH_GE               2
     100            0 : #define MCONTROL_MATCH_LT               3
     101            0 : #define MCONTROL_MATCH_MASK_LOW         4
     102            0 : #define MCONTROL_MATCH_MASK_HIGH        5
     103              : 
     104            0 : #define MIP_SSIP        (1 << IRQ_S_SOFT)
     105            0 : #define MIP_HSIP        (1 << IRQ_H_SOFT)
     106            0 : #define MIP_MSIP        (1 << IRQ_M_SOFT)
     107            0 : #define MIP_STIP        (1 << IRQ_S_TIMER)
     108            0 : #define MIP_HTIP        (1 << IRQ_H_TIMER)
     109            0 : #define MIP_MTIP        (1 << IRQ_M_TIMER)
     110            0 : #define MIP_SEIP        (1 << IRQ_S_EXT)
     111            0 : #define MIP_HEIP        (1 << IRQ_H_EXT)
     112            0 : #define MIP_MEIP        (1 << IRQ_M_EXT)
     113              : 
     114            0 : #define SIP_SSIP        MIP_SSIP
     115            0 : #define SIP_STIP        MIP_STIP
     116              : 
     117            0 : #define PRV_U   0
     118            0 : #define PRV_S   1
     119            0 : #define PRV_H   2
     120            0 : #define PRV_M   3
     121              : 
     122            0 : #define SATP32_MODE     0x80000000
     123            0 : #define SATP32_ASID     0x7FC00000
     124            0 : #define SATP32_PPN      0x003FFFFF
     125            0 : #define SATP64_MODE     0xF000000000000000
     126            0 : #define SATP64_ASID     0x0FFFF00000000000
     127            0 : #define SATP64_PPN      0x00000FFFFFFFFFFF
     128              : 
     129            0 : #define SATP_MODE_OFF   0
     130            0 : #define SATP_MODE_SV32  1
     131            0 : #define SATP_MODE_SV39  8
     132            0 : #define SATP_MODE_SV48  9
     133            0 : #define SATP_MODE_SV57  10
     134            0 : #define SATP_MODE_SV64  11
     135              : 
     136            0 : #define PMP_R           0x01
     137            0 : #define PMP_W           0x02
     138            0 : #define PMP_X           0x04
     139            0 : #define PMP_A           0x18
     140            0 : #define PMP_L           0x80
     141            0 : #define PMP_SHIFT       2
     142              : 
     143            0 : #define PMP_TOR         0x08
     144            0 : #define PMP_NA4         0x10
     145            0 : #define PMP_NAPOT       0x18
     146              : 
     147            0 : #define IRQ_S_SOFT      1
     148            0 : #define IRQ_H_SOFT      2
     149            0 : #define IRQ_M_SOFT      3
     150            0 : #define IRQ_S_TIMER     5
     151            0 : #define IRQ_H_TIMER     6
     152            0 : #define IRQ_M_TIMER     7
     153            0 : #define IRQ_S_EXT       9
     154            0 : #define IRQ_H_EXT       10
     155            0 : #define IRQ_M_EXT       11
     156            0 : #define IRQ_COP         12
     157            0 : #define IRQ_HOST        13
     158              : 
     159            0 : #define DEFAULT_RSTVEC  0x00001000
     160            0 : #define CLINT_BASE      0x02000000
     161            0 : #define CLINT_SIZE      0x000c0000
     162            0 : #define EXT_IO_BASE     0x40000000
     163            0 : #define DRAM_BASE       0x80000000
     164              : 
     165              : /* page table entry (PTE) fields */
     166            0 : #define PTE_V           0x001 /* Valid */
     167            0 : #define PTE_R           0x002 /* Read */
     168            0 : #define PTE_W           0x004 /* Write */
     169            0 : #define PTE_X           0x008 /* Execute */
     170            0 : #define PTE_U           0x010 /* User */
     171            0 : #define PTE_G           0x020 /* Global */
     172            0 : #define PTE_A           0x040 /* Accessed */
     173            0 : #define PTE_D           0x080 /* Dirty */
     174            0 : #define PTE_SOFT        0x300 /* Reserved for Software */
     175              : 
     176            0 : #define PTE_PPN_SHIFT   10
     177              : 
     178            0 : #define PTE_TABLE(PTE) (((PTE) & (PTE_V | PTE_R | PTE_W | PTE_X)) == PTE_V)
     179              : 
     180            0 : #define INSERT_FIELD(val, which, fieldval)                              \
     181              : (                                                                       \
     182              :         ((val) & ~(which)) | ((fieldval) * ((which) & ~((which)-1)))    \
     183              : )                                                                       \
     184              : 
     185            0 : #define csr_read(csr)                                           \
     186              : ({                                                              \
     187              :         register unsigned long __rv;                            \
     188              :         __asm__ volatile ("csrr %0, " STRINGIFY(csr)          \
     189              :                                 : "=r" (__rv));                       \
     190              :         __rv;                                                   \
     191              : })
     192              : 
     193            0 : #define csr_write(csr, val)                                     \
     194              : ({                                                              \
     195              :         unsigned long __wv = (unsigned long)(val);              \
     196              :         __asm__ volatile ("csrw " STRINGIFY(csr) ", %0"             \
     197              :                                 : : "rK" (__wv)                       \
     198              :                                 : "memory");                  \
     199              : })
     200              : 
     201              : 
     202            0 : #define csr_read_set(csr, val)                                  \
     203              : ({                                                              \
     204              :         unsigned long __rsv = (unsigned long)(val);             \
     205              :         __asm__ volatile ("csrrs %0, " STRINGIFY(csr) ", %1"        \
     206              :                                 : "=r" (__rsv) : "rK" (__rsv)       \
     207              :                                 : "memory");                  \
     208              :         __rsv;                                                  \
     209              : })
     210              : 
     211            0 : #define csr_set(csr, val)                                       \
     212              : ({                                                              \
     213              :         unsigned long __sv = (unsigned long)(val);              \
     214              :         __asm__ volatile ("csrs " STRINGIFY(csr) ", %0"             \
     215              :                                 : : "rK" (__sv)                       \
     216              :                                 : "memory");                  \
     217              : })
     218              : 
     219            0 : #define csr_read_clear(csr, val)                                \
     220              : ({                                                              \
     221              :         unsigned long __rcv = (unsigned long)(val);             \
     222              :         __asm__ volatile ("csrrc %0, " STRINGIFY(csr) ", %1"        \
     223              :                                 : "=r" (__rcv) : "rK" (__rcv)       \
     224              :                                 : "memory");                  \
     225              :         __rcv;                                                  \
     226              : })
     227              : 
     228            0 : #define csr_clear(csr, val)                                     \
     229              : ({                                                              \
     230              :         unsigned long __cv = (unsigned long)(val);              \
     231              :         __asm__ volatile ("csrc " STRINGIFY(csr) ", %0"             \
     232              :                                 : : "rK" (__cv)                       \
     233              :                                 : "memory");                  \
     234              : })
     235              : 
     236              : #endif /* CSR_H_ */
        

Generated by: LCOV version 2.0-1