Lines Matching refs:pd

80 plic_is_pending(struct plic_data *pd, uint32_t source)  in plic_is_pending()  argument
82 return io_read32(PLIC_PENDING(pd->plic_base, source)) & in plic_is_pending()
86 static void plic_set_pending(struct plic_data *pd, uint32_t source) in plic_set_pending() argument
88 io_setbits32(PLIC_PENDING(pd->plic_base, source), BIT(source % 32)); in plic_set_pending()
91 static void plic_enable_interrupt(struct plic_data *pd, uint32_t source) in plic_enable_interrupt() argument
95 io_setbits32(PLIC_ENABLE(pd->plic_base, source, context), in plic_enable_interrupt()
100 plic_get_interrupt_enable(struct plic_data *pd, uint32_t source) in plic_get_interrupt_enable() argument
104 return io_read32(PLIC_ENABLE(pd->plic_base, source, context)) & in plic_get_interrupt_enable()
108 static void plic_disable_interrupt(struct plic_data *pd, uint32_t source) in plic_disable_interrupt() argument
112 io_clrbits32(PLIC_ENABLE(pd->plic_base, source, context), in plic_disable_interrupt()
116 static uint32_t __maybe_unused plic_get_threshold(struct plic_data *pd) in plic_get_threshold() argument
120 return io_read32(PLIC_THRESHOLD(pd->plic_base, context)); in plic_get_threshold()
123 static void plic_set_threshold(struct plic_data *pd, uint32_t threshold) in plic_set_threshold() argument
127 io_write32(PLIC_THRESHOLD(pd->plic_base, context), threshold); in plic_set_threshold()
131 plic_get_priority(struct plic_data *pd, uint32_t source) in plic_get_priority() argument
133 return io_read32(PLIC_PRIORITY(pd->plic_base, source)); in plic_get_priority()
136 static void plic_set_priority(struct plic_data *pd, uint32_t source, in plic_set_priority() argument
139 io_write32(PLIC_PRIORITY(pd->plic_base, source), priority); in plic_set_priority()
142 static uint32_t plic_claim_interrupt(struct plic_data *pd) in plic_claim_interrupt() argument
146 return io_read32(PLIC_CLAIM(pd->plic_base, context)); in plic_claim_interrupt()
149 static void plic_complete_interrupt(struct plic_data *pd, uint32_t source) in plic_complete_interrupt() argument
153 io_write32(PLIC_CLAIM(pd->plic_base, context), source); in plic_complete_interrupt()
159 struct plic_data *pd = container_of(chip, struct plic_data, chip); in plic_op_configure() local
161 if (it > pd->max_it) in plic_op_configure()
164 plic_disable_interrupt(pd, it); in plic_op_configure()
165 plic_set_priority(pd, it, prio); in plic_op_configure()
170 struct plic_data *pd = container_of(chip, struct plic_data, chip); in plic_op_enable() local
172 if (it > pd->max_it) in plic_op_enable()
175 plic_enable_interrupt(pd, it); in plic_op_enable()
180 struct plic_data *pd = container_of(chip, struct plic_data, chip); in plic_op_disable() local
182 if (it > pd->max_it) in plic_op_disable()
185 plic_disable_interrupt(pd, it); in plic_op_disable()
190 struct plic_data *pd = container_of(chip, struct plic_data, chip); in plic_op_raise_pi() local
192 if (it > pd->max_it) in plic_op_raise_pi()
195 plic_set_pending(pd, it); in plic_op_raise_pi()
231 static void plic_init_base_addr(struct plic_data *pd, paddr_t plic_base_pa) in plic_init_base_addr() argument
242 pd->plic_base = plic_base; in plic_init_base_addr()
243 pd->max_it = probe_max_it(plic_base); in plic_init_base_addr()
244 pd->chip.ops = &plic_ops; in plic_init_base_addr()
247 pd->chip.dt_get_irq = plic_dt_get_irq; in plic_init_base_addr()
257 struct plic_data *pd = &plic_data; in plic_init() local
260 plic_init_base_addr(pd, plic_base_pa); in plic_init()
262 for (n = 0; n <= pd->max_it; n++) { in plic_init()
263 plic_disable_interrupt(pd, n); in plic_init()
264 plic_set_priority(pd, n, 1); in plic_init()
267 plic_set_threshold(pd, 0); in plic_init()
274 struct plic_data *pd = &plic_data; in plic_it_handle() local
275 uint32_t id = plic_claim_interrupt(pd); in plic_it_handle()
277 if (id > 0 && id <= pd->max_it) in plic_it_handle()
278 interrupt_call_handlers(&pd->chip, id); in plic_it_handle()
282 plic_complete_interrupt(pd, id); in plic_it_handle()