[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Minios-devel] [UNIKRAFT PATCH 5/7] plat/kvm: Implement intctrl APIs for Arm64



Before GICv2 become ready, we had marked the intctrl APIs as TODO.
Now, we have enabled the GICv2, we can implement intctrl APIs with
related GIC APIs.

Signed-off-by: Wei Chen <wei.chen@xxxxxxx>
---
 plat/kvm/arm/intctrl.c | 25 ++++++++++++++++++-------
 plat/kvm/arm/setup.c   |  4 ++++
 2 files changed, 22 insertions(+), 7 deletions(-)

diff --git a/plat/kvm/arm/intctrl.c b/plat/kvm/arm/intctrl.c
index ac604a7..0662159 100644
--- a/plat/kvm/arm/intctrl.c
+++ b/plat/kvm/arm/intctrl.c
@@ -31,24 +31,35 @@
  *
  * THIS HEADER MAY NOT BE EXTRACTED OR MODIFIED IN ANY WAY.
  */
+#include <uk/assert.h>
+#include <kvm/kernel.h>
 #include <kvm/intctrl.h>
+#include <arm/cpu.h>
+#include <arm/irq.h>
+#include <arm/gic-v2.h>
 
 void intctrl_init(void)
 {
-       // TO DO
+       int ret;
+
+       /* Initialize GIC from DTB */
+       ret = _dtb_init_gic(_libkvmplat_dtb);
+       if (ret)
+               UK_CRASH("Initialize GIC from DTB failed, ret=%d\n", ret);
+
 }
 
-void intctrl_ack_irq(unsigned int irq)
+void intctrl_ack_irq(uint32_t irq)
 {
-       // TO DO
+       gic_eoi_irq(irq);
 }
 
-void intctrl_mask_irq(unsigned int irq)
+void intctrl_mask_irq(uint32_t irq)
 {
-       // TO DO
+       gic_disable_irq(irq);
 }
 
-void intctrl_clear_irq(unsigned int irq)
+void intctrl_clear_irq(uint32_t irq)
 {
-       // TO DO
+       gic_enable_irq(irq);
 }
diff --git a/plat/kvm/arm/setup.c b/plat/kvm/arm/setup.c
index 7974e45..2cb0005 100644
--- a/plat/kvm/arm/setup.c
+++ b/plat/kvm/arm/setup.c
@@ -23,6 +23,7 @@
 #include <kvm/console.h>
 #include <uk/assert.h>
 #include <kvm-arm/mm.h>
+#include <kvm/intctrl.h>
 #include <arm/cpu.h>
 #include <uk/arch/limits.h>
 
@@ -200,6 +201,9 @@ void _libkvmplat_start(void *dtb_pointer)
        /* Initialize memory from DTB */
        _init_dtb_mem();
 
+       /* Initialize interrupt controller */
+       intctrl_init();
+
        uk_pr_info("pagetable start: %p\n", _libkvmplat_pagetable);
        uk_pr_info("     heap start: %p\n", _libkvmplat_heap_start);
        uk_pr_info("      stack top: %p\n", _libkvmplat_stack_top);
-- 
2.17.1


_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.