cleanup: const definition, unused includes,...
[processor-sdk/open-amp.git] / apps / system / generic / machine / zynqmp_r5 / sys_init.c
2 /*
3  * Copyright (c) 2014, Mentor Graphics Corporation
4  * All rights reserved.
5  *
6  * Copyright (c) 2015 Xilinx, Inc. All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions are met:
10  *
11  * 1. Redistributions of source code must retain the above copyright notice,
12  *    this list of conditions and the following disclaimer.
13  * 2. Redistributions in binary form must reproduce the above copyright notice,
14  *    this list of conditions and the following disclaimer in the documentation
15  *    and/or other materials provided with the distribution.
16  * 3. Neither the name of the <ORGANIZATION> nor the names of its contributors
17  *    may be used to endorse or promote products derived from this software
18  *    without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
24  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30  * POSSIBILITY OF SUCH DAMAGE.
31  */
33 #include "metal/sys.h"
34 #include "metal/device.h"
35 #include "metal/io.h"
36 #include "metal/shmem.h"
38 /** Device base address */
39 #define IPI_BASE_ADDR           0xFF310000
40 #define UNDEFINE_BASE_ADDR      0x0
42 #define UNDEFINE_MEM_SIZE       0xFFFFFFFF
44 /** IPI IRQ ID */
45 #define IPI_IRQ_VECT_ID         65
47 #define IPI_DEV_NAME            "ff310000.ipi"
48 #define VRING_DEV_NAME          "vrings"
49 #define SHM_NAME                "shm"
51 const metal_phys_addr_t ipi_base_addr = IPI_BASE_ADDR;
52 const metal_phys_addr_t undefine_mem_addr = UNDEFINE_BASE_ADDR;
54 struct metal_device metal_dev_table[] = {
55         {
56                 /* IPI device */
57                 IPI_DEV_NAME,
58                 NULL,
59                 1,
60                 {
61                         {
62                                 (void *)IPI_BASE_ADDR,
63                                 &ipi_base_addr,
64                                 0x1000,
65                                 (sizeof(metal_phys_addr_t) << 3),
66                                 (unsigned long)(-1),
67                                 METAL_UNCACHED,
68                                 {NULL},
69                         }
70                 },
71                 {NULL},
72                 1,
73                 (void *)IPI_IRQ_VECT_ID,
75         },
76         {
77                 /* Shared memory management device */
78                 VRING_DEV_NAME,
79                 NULL,
80                 1,
81                 {
82                         {
83                                 (void *)UNDEFINE_BASE_ADDR,
84                                 &undefine_mem_addr,
85                                 UNDEFINE_MEM_SIZE,
86                                 (sizeof(metal_phys_addr_t) << 3),
87                                 (unsigned long)(-1),
88                                 METAL_UNCACHED | METAL_SHARED_MEM,
89                                 {NULL},
90                         }
91                 },
92                 {NULL},
93                 0,
94                 NULL,
96         },
97 };
99 struct metal_generic_shmem shm = {
100         SHM_NAME,
101         {
102                 (void *)UNDEFINE_BASE_ADDR,
103                 &undefine_mem_addr,
104                 UNDEFINE_MEM_SIZE,
105                 (sizeof(metal_phys_addr_t) << 3),
106                 (unsigned long)(-1),
107                 0,
108                 {NULL},
109         },
110         {NULL, NULL},
111 };
113 const int metal_dev_table_sz = sizeof (metal_dev_table)/sizeof(struct metal_device);
116 /**
117  * This funciton is to install baremeta/RTOS libmetal devices.
118  */
119 int platform_register_metal_device(void)
121         int i;
122         int ret;
123         struct metal_device *dev;
125         /* Register device */
126         metal_bus_register(&metal_generic_bus);
127         for (i = 0; i < metal_dev_table_sz; i++) {
128                 dev = &metal_dev_table[i];
129                 ret = metal_register_generic_device(dev);
130                 if (ret)
131                         return ret;
132         }
134         /* Register shared memory */
135         metal_shmem_register_generic(&shm);
137         return 0;