LCOV - code coverage report
Current view: top level - zephyr/arch/riscv - csr.h Hit Total Coverage
Test: new.info Lines: 0 154 0.0 %
Date: 2024-12-22 00:14:23

          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 1.14