summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 6c9a1c1)
raw | patch | inline | side by side (parent: 6c9a1c1)
author | Wendy Liang <jliang@xilinx.com> | |
Mon, 12 Sep 2016 21:45:22 +0000 (14:45 -0700) | ||
committer | Wendy Liang <jliang@xilinx.com> | |
Fri, 14 Oct 2016 00:14:50 +0000 (17:14 -0700) |
Add apps common for RPMsg between Linux processes.
Signed-off-by: Wendy Liang <jliang@xilinx.com>
Signed-off-by: Wendy Liang <jliang@xilinx.com>
apps/system/linux/machine/generic/CMakeLists.txt | [new file with mode: 0644] | patch | blob |
apps/system/linux/machine/generic/helper.c | [new file with mode: 0644] | patch | blob |
apps/system/linux/machine/generic/platform_info.c | [new file with mode: 0755] | patch | blob |
apps/system/linux/machine/generic/platform_info.h | [new file with mode: 0644] | patch | blob |
apps/system/linux/machine/generic/rsc_table.c | [new file with mode: 0644] | patch | blob |
apps/system/linux/machine/generic/rsc_table.h | [new file with mode: 0644] | patch | blob |
diff --git a/apps/system/linux/machine/generic/CMakeLists.txt b/apps/system/linux/machine/generic/CMakeLists.txt
--- /dev/null
@@ -0,0 +1,10 @@
+collect (APP_COMMON_SOURCES helper.c)
+collect (APP_COMMON_SOURCES rsc_table.c)
+collect (APP_COMMON_SOURCES platform_info.c)
+
+collect (APP_INC_DIRS "${CMAKE_CURRENT_SOURCE_DIR}")
+
+if (WITH_REMOTEPROC_MASTER)
+ message(FATAL_ERROR "Remoteproc master is not currently supported on ${MACHINE}/${SYSTEM}.")
+endif (WITH_REMOTEPROC_MASTER)
+
diff --git a/apps/system/linux/machine/generic/helper.c b/apps/system/linux/machine/generic/helper.c
--- /dev/null
@@ -0,0 +1,53 @@
+
+/*
+ * Copyright (c) 2014, Mentor Graphics Corporation
+ * All rights reserved.
+ *
+ * Copyright (c) 2015 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 <string.h>
+#include <stdio.h>
+#include "metal/sys.h"
+#include "metal/shmem.h"
+#include "metal/device.h"
+#include "metal/io.h"
+
+
+void init_system()
+{
+ struct metal_init_params metal_param = METAL_INIT_DEFAULTS;
+
+ metal_param.log_level = LOG_DEBUG;
+ metal_init(&metal_param);
+
+ return;
+}
+
+void cleanup_system()
+{
+ metal_finish();
+}
diff --git a/apps/system/linux/machine/generic/platform_info.c b/apps/system/linux/machine/generic/platform_info.c
--- /dev/null
@@ -0,0 +1,148 @@
+/*
+ * Copyright (c) 2014, Mentor Graphics Corporation
+ * All rights reserved.
+ * Copyright (c) 2016 Xilinx, Inc.
+ *
+ * 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 Mentor Graphics Corporation 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.
+ */
+
+/**************************************************************************
+ * FILE NAME
+ *
+ * platform_info.c
+ *
+ * DESCRIPTION
+ *
+ * This file implements APIs to get platform specific
+ * information for OpenAMP.
+ *
+ **************************************************************************/
+
+#include <openamp/hil.h>
+#include <metal/io.h>
+#include <metal/atomic.h>
+
+#define IPI_CHN_BITMASK 0x01000000 /* IPI channel bit mask APU<->RPU0 */
+#define REMOTE_CPU_ID 0
+
+struct vring_ipi_info {
+ /* Socket file path */
+ char *path;
+ int fd;
+ struct metal_io_region *vring_io;
+ atomic_int sync;
+};
+
+struct rproc_info {
+ unsigned long rproc_id;
+ char *vring0_path;
+ char *vring0_bus;
+ char *vring1_path;
+ char *vring1_bus;
+ char *shm_path;
+ char *shm_bus;
+ int shm_size;
+ void *ipi0;
+ void *ipi1;
+ char *rpmsg_chnl;
+};
+
+extern struct hil_platform_ops linux_proc_ops;
+
+static struct vring_ipi_info ipi_table[] = {
+ { "unixs:/tmp/openamp.event.0", -1, NULL, 0 },
+ { "unixs:/tmp/openamp.event.1", -1, NULL, 0 },
+ { "unix:/tmp/openamp.event.0", -1, NULL, 0 },
+ { "unix:/tmp/openamp.event.1", -1, NULL, 0 },
+};
+
+static struct rproc_info rproc_table [] = {
+ {
+ 0,
+ "openamp.vrings",
+ NULL,
+ "openamp.vrings",
+ NULL,
+ "openamp.shm",
+ NULL,
+ 0x40000,
+ (void *)&ipi_table[0],
+ (void *)&ipi_table[1],
+ "rpmsg-openamp-demo-channel",
+ },
+ {
+ 0,
+ "openamp.vrings",
+ NULL,
+ "openamp.vrings",
+ NULL,
+ "openamp.shm",
+ NULL,
+ 0x40000,
+ (void *)&ipi_table[2],
+ (void *)&ipi_table[3],
+ "rpmsg-openamp-demo-channel",
+ },
+};
+
+const struct firmware_info fw_table[] =
+{
+ {"unknown",
+ 0,
+ 0}
+};
+
+const int fw_table_size = sizeof(fw_table)/sizeof(struct firmware_info);
+
+struct hil_proc *platform_create_proc(int proc_index)
+{
+
+ struct hil_proc *proc;
+ struct rproc_info *proc_data;
+ if (sizeof(rproc_table)/sizeof(struct rproc_info) <=
+ (unsigned long)proc_index){
+ fprintf(stderr, "ERROR: CPU id is invalid: %d.\n", proc_index);
+ return NULL;
+ }
+ proc_data = &rproc_table[proc_index];
+ proc = hil_create_proc(&linux_proc_ops, proc_data->rproc_id, NULL);
+ if (!proc)
+ return NULL;
+
+ /* Setup IPI info */
+ hil_set_ipi(proc, 0, (unsigned int)(-1), proc_data->ipi0);
+ hil_set_ipi(proc, 1, (unsigned int)(-1), proc_data->ipi1);
+ /* Setup vring info */
+ hil_set_vring(proc, 0, proc_data->vring0_bus, proc_data->vring0_path);
+ hil_set_vring(proc, 1, proc_data->vring1_bus, proc_data->vring1_path);
+ /* Setup shared memory info */
+ hil_set_shm (proc, proc_data->shm_bus, proc_data->shm_path,
+ 0, proc_data->shm_size);
+ /* Setup RPMSG channel info */
+ hil_set_rpmsg_channel(proc, 0, proc_data->rpmsg_chnl);
+
+ return proc;
+}
+
diff --git a/apps/system/linux/machine/generic/platform_info.h b/apps/system/linux/machine/generic/platform_info.h
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+ * 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 Mentor Graphics Corporation 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.
+ */
+
+/* This file populates resource table for BM remote
+ * for use by the Linux Master */
+
+#include "openamp/hil.h"
+#include "openamp/remoteproc_plat.h"
+
+/* remoteproc platform data structure */
+struct rproc_info_plat_local {
+ struct proc_info_hdr proc_hdr; /**< hil proc header */
+ struct plat_vring vring0; /**< vring0 data */
+ struct plat_vring vring1; /**< vring1 data */
+ struct plat_shm shm; /**< shared memory data */
+ struct plat_rpmsg_chnl rpmsg_chnl; /**< RPMSG channel data */
+ unsigned int last_type;
+};
diff --git a/apps/system/linux/machine/generic/rsc_table.c b/apps/system/linux/machine/generic/rsc_table.c
--- /dev/null
@@ -0,0 +1,87 @@
+/*
+ * 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 Mentor Graphics Corporation 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.
+ */
+
+/* This file populates resource table for BM remote
+ * for use by the Linux Master */
+
+#include "openamp/open_amp.h"
+#include "rsc_table.h"
+
+/* Place resource table in special ELF section */
+#define __section_t(S) __attribute__((__section__(#S)))
+#define __resource __section_t(.resource_table)
+
+#define RPMSG_IPU_C0_FEATURES 1
+
+/* VirtIO rpmsg device id */
+#define VIRTIO_ID_RPMSG_ 7
+
+/* Remote supports Name Service announcement */
+#define VIRTIO_RPMSG_F_NS 0
+
+#define NUM_VRINGS 0x02
+#define VRING_ALIGN 0x1000
+#define RING_TX 0x00000000
+#define RING_RX 0x00004000
+#define VRING_SIZE 256
+
+#define NUM_TABLE_ENTRIES 1
+
+const struct remote_resource_table __resource resources = {
+ /* Version */
+ 1,
+
+ /* NUmber of table entries */
+ NUM_TABLE_ENTRIES,
+ /* reserved fields */
+ {0, 0,},
+
+ /* Offsets of rsc entries */
+ {
+ offsetof(struct remote_resource_table, rpmsg_vdev),
+ },
+
+ /* Virtio device entry */
+ {
+ RSC_VDEV, VIRTIO_ID_RPMSG_, 0, RPMSG_IPU_C0_FEATURES, 0, 0, 0,
+ NUM_VRINGS, {0, 0},
+ },
+
+ /* Vring rsc entry - part of vdev rsc entry */
+ {RING_TX, VRING_ALIGN, VRING_SIZE, 1, 0},
+ {RING_RX, VRING_ALIGN, VRING_SIZE, 2, 0},
+};
+
+const void *get_resource_table (int rsc_id, int *len)
+{
+ (void) rsc_id;
+ *len = sizeof(resources);
+ return &resources;
+}
diff --git a/apps/system/linux/machine/generic/rsc_table.h b/apps/system/linux/machine/generic/rsc_table.h
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ * 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 Mentor Graphics Corporation 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.
+ */
+
+/* This file populates resource table for BM remote
+ * for use by the Linux Master */
+
+#include <stddef.h>
+#include "openamp/open_amp.h"
+
+#define NO_RESOURCE_ENTRIES 1
+
+/* Resource table for the given remote */
+struct remote_resource_table {
+ unsigned int version;
+ unsigned int num;
+ unsigned int reserved[2];
+ unsigned int offset[NO_RESOURCE_ENTRIES];
+ /* rpmsg vdev entry */
+ struct fw_rsc_vdev rpmsg_vdev;
+ struct fw_rsc_vdev_vring rpmsg_vring0;
+ struct fw_rsc_vdev_vring rpmsg_vring1;
+};