protect header file and reformat/cleanup code
[processor-sdk/open-amp.git] / apps / system / generic / machine / zynq7 / helper.c
1 /*
2  * Copyright (c) 2014, Mentor Graphics Corporation
3  * All rights reserved.
4  *
5  * Copyright (c) 2015 Xilinx, Inc. All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions are met:
9  *
10  * 1. Redistributions of source code must retain the above copyright notice,
11  *    this list of conditions and the following disclaimer.
12  * 2. Redistributions in binary form must reproduce the above copyright notice,
13  *    this list of conditions and the following disclaimer in the documentation
14  *    and/or other materials provided with the distribution.
15  * 3. Neither the name of the <ORGANIZATION> nor the names of its contributors
16  *    may be used to endorse or promote products derived from this software
17  *    without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
23  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29  * POSSIBILITY OF SUCH DAMAGE.
30  */
32 #include "xparameters.h"
33 #include "xil_exception.h"
34 #include "xscugic.h"
35 #include "xil_cache.h"
36 #include "metal/sys.h"
37 #include "metal/irq.h"
38 #include "platform_info.h"
41 #define INTC_DEVICE_ID          XPAR_SCUGIC_0_DEVICE_ID
43 static XScuGic xInterruptController;
45 /* Interrupt Controller setup */
46 static int app_gic_initialize(void)
47 {
48         u32 Status;
49         XScuGic_Config *IntcConfig;     /* The configuration parameters of the interrupt controller */
51         Xil_ExceptionDisable();
53         /*
54          * Initialize the interrupt controller driver
55          */
56         IntcConfig = XScuGic_LookupConfig(INTC_DEVICE_ID);
57         if (NULL == IntcConfig) {
58                 return XST_FAILURE;
59         }
61         Status = XScuGic_CfgInitialize(&xInterruptController, IntcConfig,
62                                        IntcConfig->CpuBaseAddress);
63         if (Status != XST_SUCCESS) {
64                 return XST_FAILURE;
65         }
67         /*
68          * Register the interrupt handler to the hardware interrupt handling
69          * logic in the ARM processor.
70          */
71         Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_IRQ_INT,
72                         (Xil_ExceptionHandler)XScuGic_InterruptHandler,
73                         &xInterruptController);
75         Xil_ExceptionEnable();
77         /* Connect IPI0 Interrupt ID with ISR */
78         XScuGic_Connect(&xInterruptController, VRING0_IPI_INTR_VECT,
79                         (Xil_ExceptionHandler)metal_irq_isr,
80                         (void *)VRING0_IPI_INTR_VECT);
82         /* Connect IPI1 Interrupt ID with ISR */
83         XScuGic_Connect(&xInterruptController, VRING1_IPI_INTR_VECT,
84                         (Xil_ExceptionHandler)metal_irq_isr,
85                         (void *)VRING1_IPI_INTR_VECT);
87         return 0;
88 }
90 /* Main hw machinery initialization entry point, called from main()*/
91 /* return 0 on success */
92 int init_system(void)
93 {
94         struct metal_init_params metal_param = METAL_INIT_DEFAULTS;
96         /* Low level abstraction layer for openamp initialization */
97         metal_init(&metal_param);
99         /* configure the global interrupt controller */
100         app_gic_initialize();
102         return 0;
105 void cleanup_system()
107         metal_finish();
109         Xil_DCacheDisable();
110         Xil_ICacheDisable();
111         Xil_DCacheInvalidate();
112         Xil_ICacheInvalidate();