17 #define HPM_PLIC_TARGET_M_MODE 0
18 #define HPM_PLIC_TARGET_S_MODE 1
21 #define HPM_PLIC_FEATURE_OFFSET (0x00000000UL)
22 #define HPM_PLIC_FEATURE_VECTORED_MODE (0x2UL)
23 #define HPM_PLIC_FEATURE_PREEMPTIVE_PRIORITY_IRQ (0x1UL)
26 #define HPM_PLIC_PRIORITY_OFFSET (0x00000004UL)
27 #define HPM_PLIC_PRIORITY_SHIFT_PER_SOURCE 2
30 #define HPM_PLIC_PENDING_OFFSET (0x00001000UL)
31 #define HPM_PLIC_PENDING_SHIFT_PER_SOURCE 0
33 #define HPM_PLIC_TRIGGER_TYPE_OFFSET (0x00001080UL)
34 #define HPM_PLIC_TRIGGER_TYPE_SHIFT_PER_SORUCE 1
37 #define HPM_PLIC_ENABLE_OFFSET (0x00002000UL)
38 #define HPM_PLIC_ENABLE_SHIFT_PER_TARGET 7
41 #define HPM_PLIC_THRESHOLD_OFFSET (0x00200000UL)
42 #define HPM_PLIC_THRESHOLD_SHIFT_PER_TARGET 12
45 #define HPM_PLIC_CLAIM_OFFSET (0x00200004UL)
46 #define HPM_PLIC_CLAIM_SHIFT_PER_TARGET 12
48 #if !defined(__ASSEMBLER__)
57 ATTR_ALWAYS_INLINE
static inline void __plic_set_feature(uint32_t base, uint32_t feature)
70 ATTR_ALWAYS_INLINE
static inline void __plic_set_threshold(uint32_t base,
74 volatile uint32_t *threshold_ptr = (
volatile uint32_t *)(base +
77 *threshold_ptr = threshold;
87 ATTR_ALWAYS_INLINE
static inline uint32_t __plic_get_threshold(uint32_t base,
90 volatile uint32_t *threshold_ptr = (
volatile uint32_t *)(base +
93 return *threshold_ptr;
104 ATTR_ALWAYS_INLINE
static inline void __plic_set_irq_priority(uint32_t base,
108 volatile uint32_t *priority_ptr = (
volatile uint32_t *)(base +
110 *priority_ptr = priority;
120 ATTR_ALWAYS_INLINE
static inline void __plic_set_irq_pending(uint32_t base, uint32_t irq)
122 volatile uint32_t *current_ptr = (
volatile uint32_t *)(base +
124 *current_ptr = (1 << (irq & 0x1F));
134 ATTR_ALWAYS_INLINE
static inline void __plic_enable_irq_edge_trigger(uint32_t base, uint32_t irq)
136 volatile uint32_t *current_ptr = (
volatile uint32_t *) (base +
138 *current_ptr |= (1UL << (irq & 0x1F));
148 ATTR_ALWAYS_INLINE
static inline void __plic_enable_irq_level_trigger(uint32_t base, uint32_t irq)
150 volatile uint32_t *current_ptr = (
volatile uint32_t *) (base +
152 *current_ptr &= ~(1UL << (irq & 0x1F));
163 ATTR_ALWAYS_INLINE
static inline void __plic_enable_irq(uint32_t base,
167 volatile uint32_t *current_ptr = (
volatile uint32_t *)(base +
171 uint32_t current = *current_ptr;
172 current = current | (1 << (irq & 0x1F));
173 *current_ptr = current;
184 ATTR_ALWAYS_INLINE
static inline void __plic_disable_irq(uint32_t base,
188 volatile uint32_t *current_ptr = (
volatile uint32_t *)(base +
192 uint32_t current = *current_ptr;
193 current = current & ~((1 << (irq & 0x1F)));
194 *current_ptr = current;
204 ATTR_ALWAYS_INLINE
static inline uint32_t __plic_claim_irq(uint32_t base, uint32_t target)
206 volatile uint32_t *claim_addr = (
volatile uint32_t *)(base +
220 ATTR_ALWAYS_INLINE
static inline void __plic_complete_irq(uint32_t base,
224 volatile uint32_t *claim_addr = (
volatile uint32_t *)(base +
#define HPM_PLIC_CLAIM_OFFSET
Definition: hpm_plic_drv.h:45
#define HPM_PLIC_ENABLE_SHIFT_PER_TARGET
Definition: hpm_plic_drv.h:38
#define HPM_PLIC_CLAIM_SHIFT_PER_TARGET
Definition: hpm_plic_drv.h:46
#define HPM_PLIC_ENABLE_OFFSET
Definition: hpm_plic_drv.h:37
#define HPM_PLIC_FEATURE_OFFSET
Definition: hpm_plic_drv.h:21
#define HPM_PLIC_PRIORITY_SHIFT_PER_SOURCE
Definition: hpm_plic_drv.h:27
#define HPM_PLIC_THRESHOLD_OFFSET
Definition: hpm_plic_drv.h:41
#define HPM_PLIC_TRIGGER_TYPE_OFFSET
Definition: hpm_plic_drv.h:33
#define HPM_PLIC_PENDING_OFFSET
Definition: hpm_plic_drv.h:30
#define HPM_PLIC_PRIORITY_OFFSET
Definition: hpm_plic_drv.h:26
#define HPM_PLIC_THRESHOLD_SHIFT_PER_TARGET
Definition: hpm_plic_drv.h:42