test/system/generic/main.c | 12 +++--
test/system/generic/zynq7/CMakeLists.txt | 2 +
test/system/generic/zynq7/helper.c | 80 +++++++++++++++++++++++++++
test/system/generic/zynqmp_r5/CMakeLists.txt | 2 +
test/system/generic/zynqmp_r5/helper.c | 81 ++++++++++++++++++++++++++++
5 files changed, 174 insertions(+), 3 deletions(-)
create mode 100644 test/system/generic/zynq7/helper.c
create mode 100644 test/system/generic/zynqmp_r5/helper.c
diff --git a/test/system/generic/main.c b/test/system/generic/main.c
index 46a2d6e..ce76ad5 100644
--- a/test/system/generic/main.c
+++ b/test/system/generic/main.c
@@ -30,11 +30,17 @@
#include "metal-test.h"
+extern int init_system(void);
+
int main(void)
{
- int status;
+ (void)init_system();
+ (void)metal_tests_run();
- status = metal_tests_run();
+ while (1) {
+ __asm__("wfi\n\t");
+ }
- return status;
+ /* will not return, but quiet the compiler */
+ return 0;
}
diff --git a/test/system/generic/zynq7/CMakeLists.txt b/test/system/generic/zynq7/CMakeLists.txt
index 77cb05e..8a3035e 100644
--- a/test/system/generic/zynq7/CMakeLists.txt
+++ b/test/system/generic/zynq7/CMakeLists.txt
@@ -1,3 +1,5 @@
+collect (PROJECT_LIB_TESTS helper.c)
+
set (_test_lib_external "xil")
collect (PROJECT_LIB_DEPS ${_test_lib_external})
diff --git a/test/system/generic/zynq7/helper.c b/test/system/generic/zynq7/helper.c
new file mode 100644
index 0000000..4119276
--- /dev/null
+++ b/test/system/generic/zynq7/helper.c
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2014, Mentor Graphics Corporation
+ * All rights reserved.
+ *
+ * Copyright (c) 2016 Xilinx, Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. Neither the name of the <ORGANIZATION> nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "xscugic.h"
+
+#define INTC_DEVICE_ID XPAR_SCUGIC_0_DEVICE_ID
+
+static XScuGic xInterruptController;
+
+/* Interrupt Controller setup */
+static int app_gic_initialize(void)
+{
+ u32 Status;
+ XScuGic_Config *IntcConfig; /* The configuration parameters of the interrupt controller */
+
+ Xil_ExceptionDisable();
+
+ /*
+ * Initialize the interrupt controller driver
+ */
+ IntcConfig = XScuGic_LookupConfig(INTC_DEVICE_ID);
+ if (NULL == IntcConfig) {
+ return XST_FAILURE;
+ }
+
+ Status = XScuGic_CfgInitialize(&xInterruptController, IntcConfig,
+ IntcConfig->CpuBaseAddress);
+ if (Status != XST_SUCCESS) {
+ return XST_FAILURE;
+ }
+
+ /*
+ * Register the interrupt handler to the hardware interrupt handling
+ * logic in the ARM processor.
+ */
+ Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_IRQ_INT,
+ (Xil_ExceptionHandler)XScuGic_InterruptHandler,
+ &xInterruptController);
+
+ Xil_ExceptionEnable();
+
+ return 0;
+}
+
+/* Main hw machinery initialization entry point, called from main()*/
+/* return 0 on success */
+int init_system(void)
+{
+ /* configure the global interrupt controller */
+ app_gic_initialize();
+
+ return 0;
+}
diff --git a/test/system/generic/zynqmp_r5/CMakeLists.txt b/test/system/generic/zynqmp_r5/CMakeLists.txt
index f45421b..bd9f714 100644
--- a/test/system/generic/zynqmp_r5/CMakeLists.txt
+++ b/test/system/generic/zynqmp_r5/CMakeLists.txt
@@ -1,3 +1,5 @@
+collect (PROJECT_LIB_TESTS helper.c)
+
set (_test_lib_external "xil")
collect (PROJECT_LIB_DEPS ${_test_lib_external})
diff --git a/test/system/generic/zynqmp_r5/helper.c b/test/system/generic/zynqmp_r5/helper.c
new file mode 100644
index 0000000..90a7dcd
--- /dev/null
+++ b/test/system/generic/zynqmp_r5/helper.c
@@ -0,0 +1,81 @@
+/*
+ * Copyright (c) 2014, Mentor Graphics Corporation
+ * All rights reserved.
+ *
+ * Copyright (c) 2016 Xilinx, Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. Neither the name of the <ORGANIZATION> nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "xscugic.h"
+
+
+#define INTC_DEVICE_ID XPAR_SCUGIC_0_DEVICE_ID
+
+static XScuGic xInterruptController;
+
+/* Interrupt Controller setup */
+static int app_gic_initialize(void)
+{
+ u32 Status;
+ XScuGic_Config *IntcConfig; /* The configuration parameters of the interrupt controller */
+
+ Xil_ExceptionDisable();
+
+ /*
+ * Initialize the interrupt controller driver
+ */
+ IntcConfig = XScuGic_LookupConfig(INTC_DEVICE_ID);
+ if (NULL == IntcConfig) {
+ return XST_FAILURE;
+ }
+
+ Status = XScuGic_CfgInitialize(&xInterruptController, IntcConfig,
+ IntcConfig->CpuBaseAddress);
+ if (Status != XST_SUCCESS) {
+ return XST_FAILURE;
+ }
+
+ /*
+ * Register the interrupt handler to the hardware interrupt handling
+ * logic in the ARM processor.
+ */
+ Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_IRQ_INT,
+ (Xil_ExceptionHandler)XScuGic_InterruptHandler,&xInterruptController);
+
+ Xil_ExceptionEnable();
+
+ return 0;
+}
+
+/* Main hw machinery initialization entry point, called from main()*/
+/* return 0 on success */
+int init_system(void)
+{
+ /* configure the global interrupt controller */
+ app_gic_initialize();
+
+ return 0;
+}
--
1.9.1