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
34 #define HPM_PLIC_ENABLE_OFFSET (0x00002000UL)
35 #define HPM_PLIC_ENABLE_SHIFT_PER_TARGET 7
38 #define HPM_PLIC_THRESHOLD_OFFSET (0x00200000UL)
39 #define HPM_PLIC_THRESHOLD_SHIFT_PER_TARGET 12
42 #define HPM_PLIC_CLAIM_OFFSET (0x00200004UL)
43 #define HPM_PLIC_CLAIM_SHIFT_PER_TARGET 12
45 #if !defined(__ASSEMBLER__)
54 ATTR_ALWAYS_INLINE
static inline void __plic_set_feature(uint32_t base, uint32_t feature)
67 ATTR_ALWAYS_INLINE
static inline void __plic_set_threshold(uint32_t base,
71 volatile uint32_t *threshold_ptr = (
volatile uint32_t *)(base +
74 *threshold_ptr = threshold;
84 ATTR_ALWAYS_INLINE
static inline uint32_t __plic_get_threshold(uint32_t base,
87 volatile uint32_t *threshold_ptr = (
volatile uint32_t *)(base +
90 return *threshold_ptr;
101 ATTR_ALWAYS_INLINE
static inline void __plic_set_irq_priority(uint32_t base,
105 volatile uint32_t *priority_ptr = (
volatile uint32_t *)(base +
107 *priority_ptr = priority;
117 ATTR_ALWAYS_INLINE
static inline void __plic_set_irq_pending(uint32_t base, uint32_t irq)
119 volatile uint32_t *current_ptr = (
volatile uint32_t *)(base +
121 *current_ptr = (1 << (irq & 0x1F));
132 ATTR_ALWAYS_INLINE
static inline void __plic_enable_irq(uint32_t base,
136 volatile uint32_t *current_ptr = (
volatile uint32_t *)(base +
140 uint32_t current = *current_ptr;
141 current = current | (1 << (irq & 0x1F));
142 *current_ptr = current;
153 ATTR_ALWAYS_INLINE
static inline void __plic_disable_irq(uint32_t base,
157 volatile uint32_t *current_ptr = (
volatile uint32_t *)(base +
161 uint32_t current = *current_ptr;
162 current = current & ~((1 << (irq & 0x1F)));
163 *current_ptr = current;
173 ATTR_ALWAYS_INLINE
static inline uint32_t __plic_claim_irq(uint32_t base, uint32_t target)
175 volatile uint32_t *claim_addr = (
volatile uint32_t *)(base +
189 ATTR_ALWAYS_INLINE
static inline void __plic_complete_irq(uint32_t base,
193 volatile uint32_t *claim_addr = (
volatile uint32_t *)(base +
#define HPM_PLIC_CLAIM_OFFSET
Definition: hpm_plic_drv.h:42
#define HPM_PLIC_ENABLE_SHIFT_PER_TARGET
Definition: hpm_plic_drv.h:35
#define HPM_PLIC_CLAIM_SHIFT_PER_TARGET
Definition: hpm_plic_drv.h:43
#define HPM_PLIC_ENABLE_OFFSET
Definition: hpm_plic_drv.h:34
#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:38
#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:39