Moving test VM interrupt handling to arch directory.
Also abstract out GIC configuration.
Bug: 117270899
Change-Id: I8679eb0758ab04850d8ac3af15e5c26a8da76912
diff --git a/build/toolchain/embedded.gni b/build/toolchain/embedded.gni
index 8971029..d96d86e 100644
--- a/build/toolchain/embedded.gni
+++ b/build/toolchain/embedded.gni
@@ -232,6 +232,12 @@
"\"max_cpus\" must be defined for ${target_name}.")
assert(defined(invoker.max_vms),
"\"max_vms\" must be defined for ${target_name}.")
+ if (invoker.gic_version == 3 || invoker.gic_version == 4) {
+ assert(defined(invoker.gicd_base_address),
+ "\"gicd_base_address\" must be defined for ${target_name}.")
+ assert(defined(invoker.gicr_base_address),
+ "\"gicr_base_address\" must be defined for ${target_name}.")
+ }
embedded_platform_toolchain(target_name) {
forward_variables_from(invoker,
@@ -246,10 +252,17 @@
tool_prefix = "aarch64-linux-gnu-" # TODO: this isn't right for bare metal but it works.
extra_cflags = "-mcpu=${invoker.cpu} -mstrict-align"
+ extra_defines = ""
if (invoker.use_pl011) {
assert(defined(invoker.pl011_base_address),
"\"pl011_base_address\" must be defined for ${target_name}.")
- extra_defines = "-DPL011_BASE=${invoker.pl011_base_address}"
+ extra_defines += " -DPL011_BASE=${invoker.pl011_base_address}"
+ }
+ if (invoker.gic_version > 0) {
+ extra_defines += " -DGIC_VERSION=${invoker.gic_version}"
+ }
+ if (invoker.gic_version == 3 || invoker.gic_version == 4) {
+ extra_defines += " -DGICD_BASE=${invoker.gicd_base_address} -DGICR_BASE=${invoker.gicr_base_address}"
}
toolchain_args = {
diff --git a/project/reference b/project/reference
index 75da2d1..f1aa19e 160000
--- a/project/reference
+++ b/project/reference
@@ -1 +1 @@
-Subproject commit 75da2d171f0641c9a637885423c2ece8a1d08015
+Subproject commit f1aa19eba6b8160cac7b4c4f2368b2885df2621c
diff --git a/src/arch/aarch64/hftest/BUILD.gn b/src/arch/aarch64/hftest/BUILD.gn
index 63ff813..dca75b0 100644
--- a/src/arch/aarch64/hftest/BUILD.gn
+++ b/src/arch/aarch64/hftest/BUILD.gn
@@ -39,3 +39,12 @@
"//src/arch/aarch64:smc",
]
}
+
+# Exception handlers for interrupts
+source_set("interrupts_gicv3") {
+ testonly = true
+ sources = [
+ "exceptions.S",
+ "interrupts_gicv3.c",
+ ]
+}
diff --git a/test/vmapi/exceptions.S b/src/arch/aarch64/hftest/exceptions.S
similarity index 100%
rename from test/vmapi/exceptions.S
rename to src/arch/aarch64/hftest/exceptions.S
diff --git a/test/vmapi/interrupts.c b/src/arch/aarch64/hftest/interrupts_gicv3.c
similarity index 98%
rename from test/vmapi/interrupts.c
rename to src/arch/aarch64/hftest/interrupts_gicv3.c
index 1c09532..01d331d 100644
--- a/test/vmapi/interrupts.c
+++ b/src/arch/aarch64/hftest/interrupts_gicv3.c
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-#include "interrupts.h"
+#include "hf/arch/vm/interrupts_gicv3.h"
#include <stdbool.h>
#include <stdint.h>
diff --git a/test/vmapi/interrupts.h b/src/arch/aarch64/inc/hf/arch/vm/interrupts_gicv3.h
similarity index 94%
rename from test/vmapi/interrupts.h
rename to src/arch/aarch64/inc/hf/arch/vm/interrupts_gicv3.h
index 01663e5..a581964 100644
--- a/test/vmapi/interrupts.h
+++ b/src/arch/aarch64/inc/hf/arch/vm/interrupts_gicv3.h
@@ -19,8 +19,10 @@
#include <stdbool.h>
#include <stdint.h>
-#define GICD_BASE 0x08000000
-#define GICR_BASE 0x080A0000
+#if GIC_VERSION != 3 && GIC_VERSION != 4
+#error This header should only be included for GICv3 or v4.
+#endif
+
#define SGI_BASE (GICR_BASE + 0x10000)
#define GICD_CTLR (*(volatile uint32_t *)(GICD_BASE + 0x0000))
diff --git a/test/vmapi/BUILD.gn b/test/vmapi/BUILD.gn
index 84feced..b8277f5 100644
--- a/test/vmapi/BUILD.gn
+++ b/test/vmapi/BUILD.gn
@@ -48,12 +48,11 @@
testonly = true
sources = [
- "exceptions.S",
"gicv3.c",
- "interrupts.c",
]
deps = [
+ "//src/arch/${plat_arch}/hftest:interrupts_gicv3",
"//test/hftest:hftest_primary_vm",
]
}
diff --git a/test/vmapi/gicv3.c b/test/vmapi/gicv3.c
index 5d54efe..fdf485c 100644
--- a/test/vmapi/gicv3.c
+++ b/test/vmapi/gicv3.c
@@ -14,13 +14,14 @@
* limitations under the License.
*/
+#include "hf/arch/vm/interrupts_gicv3.h"
+
#include "hf/dlog.h"
#include "vmapi/hf/call.h"
#include "../msr.h"
#include "hftest.h"
-#include "interrupts.h"
#define PPI_IRQ_BASE 16
#define PHYSICAL_TIMER_IRQ (PPI_IRQ_BASE + 14)