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
46 #define HPM_PLIC_CLAIM_OFFSET (0x00200004UL)
47 #define HPM_PLIC_CLAIM_SHIFT_PER_TARGET 12
49 #if !defined(__ASSEMBLER__)
58 ATTR_ALWAYS_INLINE
static inline void __plic_set_feature(uint32_t base, uint32_t feature)
71 ATTR_ALWAYS_INLINE
static inline void __plic_set_threshold(uint32_t base,
75 volatile uint32_t *threshold_ptr = (
volatile uint32_t *) (base +
78 *threshold_ptr = threshold;
88 ATTR_ALWAYS_INLINE
static inline uint32_t __plic_get_threshold(uint32_t base,
91 volatile uint32_t *threshold_ptr = (
volatile uint32_t *)(base +
94 return *threshold_ptr;
105 ATTR_ALWAYS_INLINE
static inline void __plic_set_irq_priority(uint32_t base,
109 volatile uint32_t *priority_ptr = (
volatile uint32_t *) (base +
112 *priority_ptr = priority;
122 ATTR_ALWAYS_INLINE
static inline void __plic_set_irq_pending(uint32_t base, uint32_t irq)
124 volatile uint32_t *current_ptr = (
volatile uint32_t *) (base +
126 *current_ptr = (1 << (irq & 0x1F));
136 ATTR_ALWAYS_INLINE
static inline void __plic_enable_irq_edge_trigger(uint32_t base, uint32_t irq)
138 volatile uint32_t *current_ptr = (
volatile uint32_t *) (base +
140 *current_ptr |= (1UL << (irq & 0x1F));
150 ATTR_ALWAYS_INLINE
static inline void __plic_enable_irq_level_trigger(uint32_t base, uint32_t irq)
152 volatile uint32_t *current_ptr = (
volatile uint32_t *) (base +
154 *current_ptr &= ~(1UL << (irq & 0x1F));
165 ATTR_ALWAYS_INLINE
static inline void __plic_enable_irq(uint32_t base,
169 volatile uint32_t *current_ptr = (
volatile uint32_t *) (base +
173 uint32_t current = *current_ptr;
174 current = current | (1 << (irq & 0x1F));
175 *current_ptr = current;
186 ATTR_ALWAYS_INLINE
static inline void __plic_disable_irq(uint32_t base,
190 volatile uint32_t *current_ptr = (
volatile uint32_t *) (base +
194 uint32_t current = *current_ptr;
195 current = current & ~((1 << (irq & 0x1F)));
196 *current_ptr = current;
206 ATTR_ALWAYS_INLINE
static inline uint32_t __plic_claim_irq(uint32_t base, uint32_t target)
208 volatile uint32_t *claim_addr = (
volatile uint32_t *) (base +
222 ATTR_ALWAYS_INLINE
static inline void __plic_complete_irq(uint32_t base,
226 volatile uint32_t *claim_addr = (
volatile uint32_t *) (base +
#define HPM_PLIC_CLAIM_OFFSET
Definition: hpm_plic_drv.h:46
#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:47
#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