1 /*
2  * Copyright 2020, Data61, CSIRO (ABN 41 687 119 230)
3  * Copyright 2021, HENSOLDT Cyber
4  *
5  * SPDX-License-Identifier: GPL-2.0-only
6  *
7  * A dummy PLIC driver for platforms like spike that do not implement a PLIC.
8  * This can be taken as a template for platform specific PLIC drivers.
9  */
10 
11 #pragma once
12 
13 /* Since this is a template, it has a dummy implementation for the trigger API
14  * function plic_irq_set_trigger().
15  */
16 #define HAVE_SET_TRIGGER 1
17 
18 #include <arch/machine/plic.h>
19 
plic_get_claim(void)20 static inline irq_t plic_get_claim(void)
21 {
22     printf("no PLIC present, can't claim any interrupt\n");
23     return irqInvalid;
24 }
25 
plic_complete_claim(irq_t irq)26 static inline void plic_complete_claim(irq_t irq)
27 {
28     printf("no PLIC present, can't complete claim for interrupt %d\n",
29            (int)irq);
30 }
31 
plic_mask_irq(bool_t disable,irq_t irq)32 static inline void plic_mask_irq(bool_t disable, irq_t irq)
33 {
34     printf("no PLIC present, can't %s interrupt %d\n",
35            disable ? "mask" : "unmask", (int)irq);
36 }
37 
plic_irq_set_trigger(irq_t irq,bool_t edge_triggered)38 static inline void plic_irq_set_trigger(irq_t irq, bool_t edge_triggered)
39 {
40     printf("no PLIC present, can't set interrupt %d to %s triggered\n",
41            (int)irq, edge_triggered ? "edge" : "level");
42 }
43 
plic_init_hart(void)44 static inline void plic_init_hart(void)
45 {
46     printf("no PLIC present, skip hart specific initialisation\n");
47 }
48 
plic_init_controller(void)49 static inline void plic_init_controller(void)
50 {
51     printf("no PLIC present, skip platform specific initialisation\n");
52 }
53