1 /*
2 * Copyright (c) 2014, Mentor Graphics Corporation
3 * All rights reserved.
4 * Copyright (c) 2015 Xilinx, Inc.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met:
8 *
9 * 1. Redistributions of source code must retain the above copyright notice,
10 * this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright notice,
12 * this list of conditions and the following disclaimer in the documentation
13 * and/or other materials provided with the distribution.
14 * 3. Neither the name of Mentor Graphics Corporation nor the names of its
15 * contributors may be used to endorse or promote products derived from this
16 * software without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
22 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28 * POSSIBILITY OF SUCH DAMAGE.
29 */
31 /**************************************************************************
32 * FILE NAME
33 *
34 * platform_info.c
35 *
36 * DESCRIPTION
37 *
38 * This file implements APIs to get platform specific
39 * information for OpenAMP.
40 *
41 **************************************************************************/
43 #include "openamp/hil.h"
44 #include "metal/atomic.h"
46 #define RPU_CPU_ID 0 /* RPU ID */
47 #define IPI_CHN_BITMASK 0x00000100 /* IPI channel bit mask APU<->RPU0 */
48 #define RPMSG_CHAN_NAME "rpmsg-openamp-demo-channel"
49 #define DEV_BUS_NAME "platform"
50 #define IPI_DEV_NAME "ff340000.ipi"
51 #define VRING_DEV_NAME "3ed40000.vring"
52 #define SHM_DEV_NAME "3ed80000.shm"
54 /* -- FIX ME: ipi info is to be defined -- */
55 struct ipi_info {
56 const char *name;
57 const char *bus_name;
58 struct meta_device *dev;
59 struct metal_io_region *io;
60 metal_phys_addr_t paddr;
61 uint32_t ipi_chn_mask;
62 int need_reg;
63 atomic_int sync;
64 };
66 extern struct hil_platform_ops zynqmp_a53_r5_proc_ops;
68 static struct ipi_info chn_ipi_info[] = {
69 {IPI_DEV_NAME, DEV_BUS_NAME, NULL, NULL, 0, IPI_CHN_BITMASK, 1, 0},
70 {IPI_DEV_NAME, DEV_BUS_NAME, NULL, NULL, 0, IPI_CHN_BITMASK, 0, 0},
71 };
74 const struct firmware_info fw_table[] =
75 {
76 {"unknown",
77 0,
78 0}
79 };
81 const int fw_table_size = sizeof(fw_table)/sizeof(struct firmware_info);
83 struct hil_proc *platform_create_proc(int proc_index)
84 {
85 (void) proc_index;
86 struct hil_proc *proc;
87 proc = hil_create_proc(&zynqmp_a53_r5_proc_ops, RPU_CPU_ID, NULL);
88 if (!proc)
89 return NULL;
91 /* Setup IPI info */
92 hil_set_ipi(proc, 0, (unsigned int)(-1), (void *)&chn_ipi_info[0]);
93 hil_set_ipi(proc, 1, (unsigned int)(-1), (void *)&chn_ipi_info[1]);
94 /* Setup vring info */
95 hil_set_vring(proc, 0, DEV_BUS_NAME, VRING_DEV_NAME);
96 hil_set_vring(proc, 1, DEV_BUS_NAME, VRING_DEV_NAME);
97 /* Setup shared memory info */
98 hil_set_shm (proc, DEV_BUS_NAME, SHM_DEV_NAME, 0, 0x40000);
99 /* Setup RPMSG channel info */
100 hil_set_rpmsg_channel(proc, 0, RPMSG_CHAN_NAME);
101 return proc;
102 }