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;
88 ATTR_ALWAYS_INLINE
static inline void __plic_set_irq_priority(uint32_t base,
92 volatile uint32_t *priority_ptr = (
volatile uint32_t *)(base +
94 *priority_ptr = priority;
104 ATTR_ALWAYS_INLINE
static inline void __plic_set_irq_pending(uint32_t base, uint32_t irq)
106 volatile uint32_t *current_ptr = (
volatile uint32_t *)(base +
108 *current_ptr = (1 << (irq & 0x1F));
118 ATTR_ALWAYS_INLINE
static inline void __plic_enable_irq_edge_trigger(uint32_t base, uint32_t irq)
120 volatile uint32_t *current_ptr = (
volatile uint32_t *) (base +
122 *current_ptr |= (1UL << (irq & 0x1F));
132 ATTR_ALWAYS_INLINE
static inline void __plic_enable_irq_level_trigger(uint32_t base, uint32_t irq)
134 volatile uint32_t *current_ptr = (
volatile uint32_t *) (base +
136 *current_ptr &= ~(1UL << (irq & 0x1F));
147 ATTR_ALWAYS_INLINE
static inline void __plic_enable_irq(uint32_t base,
151 volatile uint32_t *current_ptr = (
volatile uint32_t *)(base +
155 uint32_t current = *current_ptr;
156 current = current | (1 << (irq & 0x1F));
157 *current_ptr = current;
168 ATTR_ALWAYS_INLINE
static inline void __plic_disable_irq(uint32_t base,
172 volatile uint32_t *current_ptr = (
volatile uint32_t *)(base +
176 uint32_t current = *current_ptr;
177 current = current & ~((1 << (irq & 0x1F)));
178 *current_ptr = current;
188 ATTR_ALWAYS_INLINE
static inline uint32_t __plic_claim_irq(uint32_t base, uint32_t target)
190 volatile uint32_t *claim_addr = (
volatile uint32_t *)(base +
204 ATTR_ALWAYS_INLINE
static inline void __plic_complete_irq(uint32_t base,
208 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