SHA256
1
0
forked from pool/openamp
Files
openamp/openamp-fix-build-with-libmetal.patch
Petr Gajdos a713ab96f9 - version update to 2020.01
* Added virtio feature negotiation.
  * update IRQ registration in apps
  * bug fixes
- added patches
  fix https://github.com/OpenAMP/open-amp/pull/196
  + openamp-fix-build-with-libmetal.patch
  fix https://github.com/OpenAMP/open-amp/pull/197
  + openamp-wait-when-no-more-buffer-avail.patch

OBS-URL: https://build.opensuse.org/package/show/science:machinelearning/openamp?expand=0&rev=2
2020-02-25 10:05:46 +00:00

141 lines
3.8 KiB
Diff

diff --git a/apps/system/linux/machine/generic/platform_info.c b/apps/system/linux/machine/generic/platform_info.c
index 5743c5c3..0b0f7219 100644
--- a/apps/system/linux/machine/generic/platform_info.c
+++ b/apps/system/linux/machine/generic/platform_info.c
@@ -23,7 +23,6 @@
#include <metal/io.h>
#include <metal/irq.h>
#include <metal/shmem.h>
-#include <metal/scatterlist.h>
#include <metal/utilities.h>
#include <openamp/remoteproc.h>
#include <openamp/rpmsg_virtio.h>
@@ -59,22 +58,20 @@ struct remoteproc_priv {
int shm_size;
struct metal_io_region *shm_old_io;
struct metal_io_region shm_new_io;
- struct metal_generic_shmem *metal_shm;
- struct metal_scatter_list *sg;
struct remoteproc_mem shm;
struct vring_ipi_info ipi;
};
static struct remoteproc_priv rproc_priv_table [] = {
{
- .shm_file = "linux_shm/openamp.shm",
+ .shm_file = "openamp.shm",
.shm_size = 0x80000,
.ipi = {
.path = "unixs:/tmp/openamp.event.0",
},
},
{
- .shm_file = "linux_shm/openamp.shm",
+ .shm_file = "openamp.shm",
.shm_size = 0x80000,
.ipi = {
.path = "unix:/tmp/openamp.event.0",
@@ -231,8 +228,6 @@ linux_proc_init(struct remoteproc *rproc,
struct remoteproc_priv *prproc = arg;
struct metal_io_region *io;
struct remoteproc_mem *shm;
- struct metal_generic_shmem *metal_shm = NULL;
- struct metal_scatter_list *sg = NULL;
struct vring_ipi_info *ipi;
int ret;
@@ -240,20 +235,12 @@ linux_proc_init(struct remoteproc *rproc,
return NULL;
rproc->priv = prproc;
/* Create shared memory io */
- ret = metal_shmem_open(prproc->shm_file, prproc->shm_size, 0, &metal_shm);
+ ret = metal_shmem_open(prproc->shm_file, prproc->shm_size, &io);
if (ret) {
printf("Failed to init rproc, failed to open shm %s.\r\n",
prproc->shm_file);
return NULL;
}
- prproc->metal_shm = metal_shm;
- sg = metal_shmem_mmap(metal_shm, prproc->shm_size);
- if (sg == NULL) {
- printf("Failed mmap shmem with libmetal.\n");
- goto err;
- }
- prproc->sg = sg;
- io = sg->ios;
prproc->shm_old_io = io;
shm = &prproc->shm;
shm->pa = 0;
@@ -283,12 +270,6 @@ linux_proc_init(struct remoteproc *rproc,
return rproc;
err:
- if (sg != NULL) {
- metal_shmem_munmap(metal_shm, sg);
- }
- if (metal_shm != NULL) {
- metal_shmem_close(metal_shm);
- }
return NULL;
}
@@ -297,6 +278,7 @@ static void linux_proc_remove(struct remoteproc *rproc)
{
struct remoteproc_priv *prproc;
struct vring_ipi_info *ipi;
+ struct metal_io_region *io;
if (!rproc)
return;
@@ -311,11 +293,10 @@ static void linux_proc_remove(struct remoteproc *rproc)
}
/* Close shared memory */
- if (prproc->metal_shm) {
- if (prproc->sg) {
- metal_shmem_munmap(prproc->metal_shm, prproc->sg);
- }
- metal_shmem_close(prproc->metal_shm);
+ io = prproc->shm_old_io;
+ if (io && io->ops.close) {
+ io->ops.close(io);
+ prproc->shm_old_io = NULL;
}
}
@@ -390,29 +371,19 @@ static int platform_slave_setup_resource_table(const char *shm_file,
metal_phys_addr_t rsc_pa)
{
struct metal_io_region *io;
- struct metal_generic_shmem *metal_shm = NULL;
- struct metal_scatter_list *sg = NULL;
void *rsc_shm;
int ret;
- /* Get shared memory io */
- ret = metal_shmem_open(shm_file, shm_size, 0, &metal_shm);
+ ret = metal_shmem_open(shm_file, shm_size, &io);
if (ret) {
- printf("Failed to setup rsc table, failed to open shm %s.\r\n",
+ printf("Failed to init rproc, failed to open shm %s.\r\n",
shm_file);
return -1;
}
- sg = metal_shmem_mmap(metal_shm, shm_size);
- if (sg == NULL) {
- printf("Failed to setup rsc table, mmap with libmetal failed.\r\n");
- metal_shmem_close(metal_shm);
- return -1;
- }
- io = sg->ios;
rsc_shm = metal_io_virt(io, rsc_pa);
memcpy(rsc_shm, rsc_table, rsc_size);
- metal_shmem_munmap(metal_shm, sg);
- metal_shmem_close(metal_shm);
+ io->ops.close(io);
+ free(io);
return 0;
}