samples: openamp_performance: remove sample

Remove sample as its only supported on one platform, should really
utilize the ipc subsystem, and so forth.

For now its better to drop it and when we have something better we
can add that.

Signed-off-by: Kumar Gala <galak@kernel.org>
diff --git a/samples/subsys/ipc/openamp_performance/CMakeLists.txt b/samples/subsys/ipc/openamp_performance/CMakeLists.txt
deleted file mode 100644
index 3494b9d..0000000
--- a/samples/subsys/ipc/openamp_performance/CMakeLists.txt
+++ /dev/null
@@ -1,38 +0,0 @@
-#
-# Copyright (c) 2021 Carlo Caione <ccaione@baylibre.com>
-#
-# SPDX-License-Identifier: Apache-2.0
-#
-
-cmake_minimum_required(VERSION 3.20.0)
-
-set(REMOTE_ZEPHYR_DIR ${CMAKE_CURRENT_BINARY_DIR}/openamp_remote-prefix/src/openamp_remote-build/zephyr)
-
-if("${BOARD}" STREQUAL "nrf5340dk_nrf5340_cpuapp")
-  set(BOARD_REMOTE "nrf5340dk_nrf5340_cpunet")
-else()
-  message(FATAL_ERROR "${BOARD} was not supported for this sample")
-endif()
-
-message(INFO " ${BOARD} compile as Master in this sample")
-
-find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
-project(openamp_performance)
-
-enable_language(C ASM)
-
-target_sources(app PRIVATE src/main.c)
-
-include(ExternalProject)
-
-ExternalProject_Add(
-  openamp_performance_remote
-  SOURCE_DIR ${APPLICATION_SOURCE_DIR}/remote
-  INSTALL_COMMAND ""      # This particular build system has no install command
-  CMAKE_CACHE_ARGS -DBOARD:STRING=${BOARD_REMOTE}
-  BUILD_BYPRODUCTS "${REMOTE_ZEPHYR_DIR}/${KERNEL_BIN_NAME}"
-  # NB: Do we need to pass on more CMake variables?
-  BUILD_ALWAYS True
-)
-
-target_include_directories(app PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
diff --git a/samples/subsys/ipc/openamp_performance/Kconfig b/samples/subsys/ipc/openamp_performance/Kconfig
deleted file mode 100644
index 80880d1..0000000
--- a/samples/subsys/ipc/openamp_performance/Kconfig
+++ /dev/null
@@ -1,26 +0,0 @@
-# Private config options for openamp sample app
-
-# Copyright (c) 2021 Carlo Caione <ccaione@baylibre.com>
-# SPDX-License-Identifier: Apache-2.0
-
-# Workaround for not being able to have commas in macro arguments
-DT_CHOSEN_Z_IPC_TX := zephyr,ipc_tx
-DT_CHOSEN_Z_IPC_RX := zephyr,ipc_rx
-
-config OPENAMP_IPC_DEV_TX_NAME
-	string
-	default "$(dt_chosen_label,$(DT_CHOSEN_Z_IPC_TX))" if !IPM_NRFX
-	default "IPM_1" if (IPM_NRFX && OPENAMP_MASTER)
-	default "IPM_0" if (IPM_NRFX && OPENAMP_SLAVE)
-	help
-	  This option specifies the device name for the IPC device to be used (TX)
-
-config OPENAMP_IPC_DEV_RX_NAME
-	string
-	default "$(dt_chosen_label,$(DT_CHOSEN_Z_IPC_RX))" if !IPM_NRFX
-	default "IPM_0" if (IPM_NRFX && OPENAMP_MASTER)
-	default "IPM_1" if (IPM_NRFX && OPENAMP_SLAVE)
-	help
-	  This option specifies the device name for the IPC device to be used (RX)
-
-source "Kconfig.zephyr"
diff --git a/samples/subsys/ipc/openamp_performance/README.rst b/samples/subsys/ipc/openamp_performance/README.rst
deleted file mode 100644
index c481c70..0000000
--- a/samples/subsys/ipc/openamp_performance/README.rst
+++ /dev/null
@@ -1,47 +0,0 @@
-.. _openAMP_performance_sample:
-
-OpenAMP performance Sample Application
-######################################
-
-Overview
-********
-
-This application demonstrates how to measure OpenAMP performance / throughput
-with Zephyr.
-
-Building the application for nrf5340dk_nrf5340_cpuapp
-*****************************************************
-
-.. zephyr-app-commands::
-   :zephyr-app: samples/subsys/ipc/openamp_performance
-   :board: nrf5340dk_nrf5340_cpuapp
-   :goals: debug
-
-Open a serial terminal (minicom, putty, etc.) and connect the board with the
-following settings:
-
-- Speed: 115200
-- Data: 8 bits
-- Parity: None
-- Stop bits: 1
-
-Reset the board and the following message will appear on the corresponding
-serial port, one is host another is remote:
-
-.. code-block:: console
-
-   OpenAMP[master] demo started
-   Δpkt: 6193 (496 B/pkt) | throughput: 24573824 bit/s
-   Δpkt: 6203 (496 B/pkt) | throughput: 24613504 bit/s
-   Δpkt: 6203 (496 B/pkt) | throughput: 24613504 bit/s
-   Δpkt: 6202 (496 B/pkt) | throughput: 24609536 bit/s
-   Δpkt: 6202 (496 B/pkt) | throughput: 24609536 bit/s
-   Δpkt: 6202 (496 B/pkt) | throughput: 24609536 bit/s
-   Δpkt: 6202 (496 B/pkt) | throughput: 24609536 bit/s
-
-
-.. code-block:: console
-
-   *** Booting Zephyr OS build zephyr-v3.1.0-2383-g147aee22f273  ***
-
-   OpenAMP[remote] demo started
diff --git a/samples/subsys/ipc/openamp_performance/boards/nrf5340dk_nrf5340_cpuapp.conf b/samples/subsys/ipc/openamp_performance/boards/nrf5340dk_nrf5340_cpuapp.conf
deleted file mode 100644
index 2dcbb18..0000000
--- a/samples/subsys/ipc/openamp_performance/boards/nrf5340dk_nrf5340_cpuapp.conf
+++ /dev/null
@@ -1,10 +0,0 @@
-CONFIG_BOARD_ENABLE_CPUNET=y
-
-CONFIG_IPM=y
-CONFIG_IPM_NRFX=y
-
-CONFIG_IPM_MSG_CH_0_ENABLE=y
-CONFIG_IPM_MSG_CH_1_ENABLE=y
-
-CONFIG_IPM_MSG_CH_0_RX=y
-CONFIG_IPM_MSG_CH_1_TX=y
diff --git a/samples/subsys/ipc/openamp_performance/common.h b/samples/subsys/ipc/openamp_performance/common.h
deleted file mode 100644
index 09fdebe..0000000
--- a/samples/subsys/ipc/openamp_performance/common.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (c) 2021 Carlo Caione <ccaione@baylibre.com>
- *
- * SPDX-License-Identifier: Apache-2.0
- */
-
-#ifndef COMMON_H__
-#define COMMON_H__
-
-#define VDEV_START_ADDR		DT_REG_ADDR(DT_CHOSEN(zephyr_ipc_shm))
-#define VDEV_SIZE		DT_REG_SIZE(DT_CHOSEN(zephyr_ipc_shm))
-
-#define VDEV_STATUS_ADDR	VDEV_START_ADDR
-#define VDEV_STATUS_SIZE	0x400
-
-#define SHM_START_ADDR		(VDEV_START_ADDR + VDEV_STATUS_SIZE)
-#define SHM_SIZE		(VDEV_SIZE - VDEV_STATUS_SIZE)
-#define SHM_DEVICE_NAME		"sramx.shm"
-
-#define VRING_COUNT		2
-#define VRING_RX_ADDRESS	(VDEV_START_ADDR + SHM_SIZE - VDEV_STATUS_SIZE)
-#define VRING_TX_ADDRESS	(VDEV_START_ADDR + SHM_SIZE)
-#define VRING_ALIGNMENT		4
-#define VRING_SIZE		16
-
-struct payload {
-	unsigned long cnt;
-	unsigned long size;
-	unsigned char data[];
-};
-
-#endif
diff --git a/samples/subsys/ipc/openamp_performance/prj.conf b/samples/subsys/ipc/openamp_performance/prj.conf
deleted file mode 100644
index 9e7952b..0000000
--- a/samples/subsys/ipc/openamp_performance/prj.conf
+++ /dev/null
@@ -1,9 +0,0 @@
-CONFIG_PRINTK=y
-
-CONFIG_IPM=y
-CONFIG_TIMESLICE_SIZE=1
-CONFIG_MAIN_STACK_SIZE=2048
-CONFIG_HEAP_MEM_POOL_SIZE=4096
-
-CONFIG_OPENAMP=y
-CONFIG_OPENAMP_SLAVE=n
diff --git a/samples/subsys/ipc/openamp_performance/remote/CMakeLists.txt b/samples/subsys/ipc/openamp_performance/remote/CMakeLists.txt
deleted file mode 100644
index 7472005..0000000
--- a/samples/subsys/ipc/openamp_performance/remote/CMakeLists.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# Copyright (c) 2021 Carlo Caione <ccaione@baylibre.com>
-#
-# SPDX-License-Identifier: Apache-2.0
-#
-
-cmake_minimum_required(VERSION 3.20.0)
-
-if("${BOARD}" STREQUAL "nrf5340dk_nrf5340_cpunet")
-	message(INFO " ${BOARD} compiles as remote in this sample")
-else()
-	message(FATAL_ERROR "${BOARD} was not supported for this sample")
-endif()
-
-find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
-project(openamp_performance_remote)
-
-target_sources(app PRIVATE src/main.c)
-target_include_directories(app PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/..)
diff --git a/samples/subsys/ipc/openamp_performance/remote/Kconfig b/samples/subsys/ipc/openamp_performance/remote/Kconfig
deleted file mode 100644
index 80880d1..0000000
--- a/samples/subsys/ipc/openamp_performance/remote/Kconfig
+++ /dev/null
@@ -1,26 +0,0 @@
-# Private config options for openamp sample app
-
-# Copyright (c) 2021 Carlo Caione <ccaione@baylibre.com>
-# SPDX-License-Identifier: Apache-2.0
-
-# Workaround for not being able to have commas in macro arguments
-DT_CHOSEN_Z_IPC_TX := zephyr,ipc_tx
-DT_CHOSEN_Z_IPC_RX := zephyr,ipc_rx
-
-config OPENAMP_IPC_DEV_TX_NAME
-	string
-	default "$(dt_chosen_label,$(DT_CHOSEN_Z_IPC_TX))" if !IPM_NRFX
-	default "IPM_1" if (IPM_NRFX && OPENAMP_MASTER)
-	default "IPM_0" if (IPM_NRFX && OPENAMP_SLAVE)
-	help
-	  This option specifies the device name for the IPC device to be used (TX)
-
-config OPENAMP_IPC_DEV_RX_NAME
-	string
-	default "$(dt_chosen_label,$(DT_CHOSEN_Z_IPC_RX))" if !IPM_NRFX
-	default "IPM_0" if (IPM_NRFX && OPENAMP_MASTER)
-	default "IPM_1" if (IPM_NRFX && OPENAMP_SLAVE)
-	help
-	  This option specifies the device name for the IPC device to be used (RX)
-
-source "Kconfig.zephyr"
diff --git a/samples/subsys/ipc/openamp_performance/remote/boards/nrf5340dk_nrf5340_cpunet.conf b/samples/subsys/ipc/openamp_performance/remote/boards/nrf5340dk_nrf5340_cpunet.conf
deleted file mode 100644
index 8d3b7a2..0000000
--- a/samples/subsys/ipc/openamp_performance/remote/boards/nrf5340dk_nrf5340_cpunet.conf
+++ /dev/null
@@ -1,8 +0,0 @@
-CONFIG_IPM=y
-CONFIG_IPM_NRFX=y
-
-CONFIG_IPM_MSG_CH_0_ENABLE=y
-CONFIG_IPM_MSG_CH_1_ENABLE=y
-
-CONFIG_IPM_MSG_CH_0_TX=y
-CONFIG_IPM_MSG_CH_1_RX=y
diff --git a/samples/subsys/ipc/openamp_performance/remote/prj.conf b/samples/subsys/ipc/openamp_performance/remote/prj.conf
deleted file mode 100644
index 928d741..0000000
--- a/samples/subsys/ipc/openamp_performance/remote/prj.conf
+++ /dev/null
@@ -1,7 +0,0 @@
-CONFIG_PRINTK=y
-
-CONFIG_IPM=y
-CONFIG_HEAP_MEM_POOL_SIZE=4096
-
-CONFIG_OPENAMP=y
-CONFIG_OPENAMP_MASTER=n
diff --git a/samples/subsys/ipc/openamp_performance/remote/sample.yaml b/samples/subsys/ipc/openamp_performance/remote/sample.yaml
deleted file mode 100644
index 68a53d8..0000000
--- a/samples/subsys/ipc/openamp_performance/remote/sample.yaml
+++ /dev/null
@@ -1,11 +0,0 @@
-sample:
-    description: This app provides an example of how to test OpenAMP
-      performance with Zephyr.
-    name: OpenAMP performance example integration (remote)
-tests:
-    sample.subsys.ipc.openamp_performance_remote:
-        platform_allow: nrf5340dk_nrf5340_cpunet
-        integration_platforms:
-          - nrf5340dk_nrf5340_cpunet
-        tags: ipm
-        harness: remote
diff --git a/samples/subsys/ipc/openamp_performance/remote/src/main.c b/samples/subsys/ipc/openamp_performance/remote/src/main.c
deleted file mode 100644
index 42ddb40..0000000
--- a/samples/subsys/ipc/openamp_performance/remote/src/main.c
+++ /dev/null
@@ -1,252 +0,0 @@
-/*
- * Copyright (c) 2021 Carlo Caione <ccaione@baylibre.com>
- *
- * SPDX-License-Identifier: Apache-2.0
- */
-
-#include <zephyr/zephyr.h>
-#include <zephyr/drivers/ipm.h>
-#include <zephyr/sys/printk.h>
-#include <zephyr/device.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <openamp/open_amp.h>
-#include <metal/device.h>
-
-#include "common.h"
-
-#define READ_BUFFER		(1)
-
-#define APP_TASK_STACK_SIZE	(1024)
-
-static const struct device *ipm_tx_handle;
-static const struct device *ipm_rx_handle;
-
-static struct virtqueue *vq[2];
-
-static volatile struct payload *received_data;
-
-#if READ_BUFFER
-static volatile uint8_t *buffer;
-static int max_payload_size;
-#endif
-
-static K_SEM_DEFINE(data_sem, 0, 1);
-
-static struct rpmsg_endpoint ep;
-
-static metal_phys_addr_t shm_physmap[] = { SHM_START_ADDR };
-static struct metal_device shm_device = {
-	.name = SHM_DEVICE_NAME,
-	.bus = NULL,
-	.num_regions = 1,
-	{
-		{
-			.virt       = (void *) SHM_START_ADDR,
-			.physmap    = shm_physmap,
-			.size       = SHM_SIZE,
-			.page_shift = 0xffffffff,
-			.page_mask  = 0xffffffff,
-			.mem_flags  = 0,
-			.ops        = { NULL },
-		},
-	},
-	.node = { NULL },
-	.irq_num = 0,
-	.irq_info = NULL
-};
-
-static struct virtio_vring_info rvrings[2] = {
-	[0] = {
-		.info.align = VRING_ALIGNMENT,
-	},
-	[1] = {
-		.info.align = VRING_ALIGNMENT,
-	},
-};
-
-static unsigned char virtio_get_status(struct virtio_device *vdev)
-{
-	return sys_read8(VDEV_STATUS_ADDR);
-}
-
-static uint32_t virtio_get_features(struct virtio_device *vdev)
-{
-	return BIT(VIRTIO_RPMSG_F_NS);
-}
-
-static void virtio_notify(struct virtqueue *vq)
-{
-	ipm_send(ipm_tx_handle, 0, 0, NULL, 0);
-}
-
-static struct virtio_dispatch dispatch = {
-	.get_status = virtio_get_status,
-	.get_features = virtio_get_features,
-	.notify = virtio_notify,
-};
-
-static void platform_ipm_callback(const struct device *dev, void *context,
-				  uint32_t id, volatile void *data)
-{
-	k_sem_give(&data_sem);
-}
-
-static int endpoint_cb(struct rpmsg_endpoint *ept, void *data,
-		       size_t len, uint32_t src, void *priv)
-{
-	received_data = ((struct payload *) data);
-
-	/* We do some work here */
-
-#if READ_BUFFER
-	memcpy((void *) buffer, (void *) received_data->data, received_data->size);
-#endif
-
-	return RPMSG_SUCCESS;
-}
-
-static void rpmsg_service_unbind(struct rpmsg_endpoint *ept)
-{
-	(void)ept;
-
-	rpmsg_destroy_ept(&ep);
-}
-
-static void receive_message(void)
-{
-	k_sem_take(&data_sem, K_FOREVER);
-
-	virtqueue_notification(vq[1]);
-}
-
-static void receive_task(void *arg1, void *arg2, void *arg3)
-{
-	ARG_UNUSED(arg1);
-	ARG_UNUSED(arg2);
-	ARG_UNUSED(arg3);
-
-	struct metal_init_params metal_params = METAL_INIT_DEFAULTS;
-	struct rpmsg_virtio_device rvdev;
-	struct metal_device *device;
-	struct metal_io_region *io;
-	struct rpmsg_device *rdev;
-	struct virtio_device vdev;
-	int status = 0;
-
-	printk("\r\nOpenAMP[remote] demo started\r\n");
-
-	status = metal_init(&metal_params);
-	if (status != 0) {
-		printk("metal_init: failed - error code %d\n", status);
-		return;
-	}
-
-	status = metal_register_generic_device(&shm_device);
-	if (status != 0) {
-		printk("Couldn't register shared memory device: %d\n", status);
-		return;
-	}
-
-	status = metal_device_open("generic", SHM_DEVICE_NAME, &device);
-	if (status != 0) {
-		printk("metal_device_open failed: %d\n", status);
-		return;
-	}
-
-	io = metal_device_io_region(device, 0);
-	if (io == NULL) {
-		printk("metal_device_io_region failed to get region\n");
-		return;
-	}
-
-	/* setup IPM */
-	ipm_tx_handle = device_get_binding(CONFIG_OPENAMP_IPC_DEV_TX_NAME);
-	if (ipm_tx_handle == NULL) {
-		printk("device_get_binding failed to find device\n");
-		return;
-	}
-
-	ipm_rx_handle = device_get_binding(CONFIG_OPENAMP_IPC_DEV_RX_NAME);
-	if (ipm_rx_handle == NULL) {
-		printk("device_get_binding failed to find device\n");
-		return;
-	}
-
-	ipm_register_callback(ipm_rx_handle, platform_ipm_callback, NULL);
-
-	status = ipm_set_enabled(ipm_rx_handle, 1);
-	if (status != 0) {
-		printk("ipm_set_enabled failed\n");
-		return;
-	}
-
-	/* setup vdev */
-	vq[0] = virtqueue_allocate(VRING_SIZE);
-	if (vq[0] == NULL) {
-		printk("virtqueue_allocate failed to alloc vq[0]\n");
-		return;
-	}
-	vq[1] = virtqueue_allocate(VRING_SIZE);
-	if (vq[1] == NULL) {
-		printk("virtqueue_allocate failed to alloc vq[1]\n");
-		return;
-	}
-
-	vdev.role = RPMSG_REMOTE;
-	vdev.vrings_num = VRING_COUNT;
-	vdev.func = &dispatch;
-	rvrings[0].io = io;
-	rvrings[0].info.vaddr = (void *)VRING_TX_ADDRESS;
-	rvrings[0].info.num_descs = VRING_SIZE;
-	rvrings[0].info.align = VRING_ALIGNMENT;
-	rvrings[0].vq = vq[0];
-
-	rvrings[1].io = io;
-	rvrings[1].info.vaddr = (void *)VRING_RX_ADDRESS;
-	rvrings[1].info.num_descs = VRING_SIZE;
-	rvrings[1].info.align = VRING_ALIGNMENT;
-	rvrings[1].vq = vq[1];
-
-	vdev.vrings_info = &rvrings[0];
-
-	/* setup rvdev */
-	status = rpmsg_init_vdev(&rvdev, &vdev, NULL, io, NULL);
-	if (status != 0) {
-		printk("rpmsg_init_vdev failed %d\n", status);
-		return;
-	}
-
-	rdev = rpmsg_virtio_get_rpmsg_device(&rvdev);
-
-	status = rpmsg_create_ept(&ep, rdev, "k", RPMSG_ADDR_ANY,
-			RPMSG_ADDR_ANY, endpoint_cb, rpmsg_service_unbind);
-	if (status != 0) {
-		printk("rpmsg_create_ept failed %d\n", status);
-		return;
-	}
-
-#if READ_BUFFER
-	max_payload_size = rpmsg_virtio_get_buffer_size(rdev);
-	if (max_payload_size < 0) {
-		printk("No available buffer size\n");
-		return;
-	}
-
-	buffer = (uint8_t *) metal_allocate_memory(max_payload_size - sizeof(struct payload));
-	if (!buffer) {
-		printk("memory allocation failed\n");
-		return;
-	}
-#endif
-
-	while (1) {
-		receive_message();
-	}
-
-	/* How did we get here? */
-}
-K_THREAD_DEFINE(thread_receive_id, APP_TASK_STACK_SIZE, receive_task, NULL, NULL, NULL,
-		K_PRIO_PREEMPT(1), 0, 0);
diff --git a/samples/subsys/ipc/openamp_performance/sample.yaml b/samples/subsys/ipc/openamp_performance/sample.yaml
deleted file mode 100644
index 160a946..0000000
--- a/samples/subsys/ipc/openamp_performance/sample.yaml
+++ /dev/null
@@ -1,11 +0,0 @@
-sample:
-    description: This app provides an example of how to test OpenAMP
-      performance with Zephyr.
-    name: OpenAMP performance example integration
-tests:
-    sample.subsys.ipc.openamp_performance:
-        platform_allow: nrf5340dk_nrf5340_cpuapp
-        integration_platforms:
-          - nrf5340dk_nrf5340_cpuapp
-        tags: ipm
-        harness: remote
diff --git a/samples/subsys/ipc/openamp_performance/src/main.c b/samples/subsys/ipc/openamp_performance/src/main.c
deleted file mode 100644
index ba4c7b4..0000000
--- a/samples/subsys/ipc/openamp_performance/src/main.c
+++ /dev/null
@@ -1,316 +0,0 @@
-/*
- * Copyright (c) 2021 Carlo Caione <ccaione@baylibre.com>
- *
- * SPDX-License-Identifier: Apache-2.0
- */
-
-#include <zephyr/zephyr.h>
-#include <zephyr/drivers/ipm.h>
-#include <zephyr/sys/printk.h>
-#include <zephyr/device.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <zephyr/init.h>
-
-#include <openamp/open_amp.h>
-#include <metal/device.h>
-
-#include "common.h"
-
-static struct payload *s_payload;
-
-#define APP_TASK_STACK_SIZE (1024)
-
-static const struct device *ipm_tx_handle;
-static const struct device *ipm_rx_handle;
-
-static int max_payload_size;
-
-static K_SEM_DEFINE(data_sem, 0, 1);
-static K_SEM_DEFINE(ept_sem, 0, 1);
-
-static struct rpmsg_endpoint ep;
-
-static metal_phys_addr_t shm_physmap[] = { SHM_START_ADDR };
-static struct metal_device shm_device = {
-	.name = SHM_DEVICE_NAME,
-	.bus = NULL,
-	.num_regions = 1,
-	{
-		{
-			.virt       = (void *) SHM_START_ADDR,
-			.physmap    = shm_physmap,
-			.size       = SHM_SIZE,
-			.page_shift = 0xffffffff,
-			.page_mask  = 0xffffffff,
-			.mem_flags  = 0,
-			.ops        = { NULL },
-		},
-	},
-	.node = { NULL },
-	.irq_num = 0,
-	.irq_info = NULL
-};
-
-
-static struct virtio_vring_info rvrings[2] = {
-	[0] = {
-		.info.align = VRING_ALIGNMENT,
-	},
-	[1] = {
-		.info.align = VRING_ALIGNMENT,
-	},
-};
-
-static unsigned char virtio_get_status(struct virtio_device *vdev)
-{
-	return VIRTIO_CONFIG_STATUS_DRIVER_OK;
-}
-
-static void virtio_set_status(struct virtio_device *vdev, unsigned char status)
-{
-	sys_write8(status, VDEV_STATUS_ADDR);
-}
-
-static uint32_t virtio_get_features(struct virtio_device *vdev)
-{
-	return BIT(VIRTIO_RPMSG_F_NS);
-}
-
-static void virtio_set_features(struct virtio_device *vdev,
-				uint32_t features)
-{
-}
-
-static void virtio_notify(struct virtqueue *vq)
-{
-	ipm_send(ipm_tx_handle, 0, 0, NULL, 0);
-}
-
-static struct virtio_dispatch dispatch = {
-	.get_status = virtio_get_status,
-	.set_status = virtio_set_status,
-	.get_features = virtio_get_features,
-	.set_features = virtio_set_features,
-	.notify = virtio_notify,
-};
-
-static void platform_ipm_callback(const struct device *dev, void *context,
-				  uint32_t id, volatile void *data)
-{
-	k_sem_give(&data_sem);
-}
-
-static int endpoint_cb(struct rpmsg_endpoint *ept, void *data,
-		       size_t len, uint32_t src, void *priv)
-{
-	return RPMSG_SUCCESS;
-}
-
-static void rpmsg_service_unbind(struct rpmsg_endpoint *ept)
-{
-	(void)ept;
-
-	rpmsg_destroy_ept(&ep);
-}
-
-static void ns_bind_cb(struct rpmsg_device *rdev, const char *name, uint32_t dest)
-{
-	(void)rpmsg_create_ept(&ep, rdev, name,
-			RPMSG_ADDR_ANY, dest,
-			endpoint_cb,
-			rpmsg_service_unbind);
-
-	k_sem_give(&ept_sem);
-}
-
-static void send_pkt(struct rpmsg_virtio_device *rvdev)
-{
-	struct rpmsg_device *rpdev;
-	int status;
-
-	rpdev = rpmsg_virtio_get_rpmsg_device(rvdev);
-	max_payload_size = rpmsg_virtio_get_buffer_size(rpdev);
-	if (max_payload_size < 0) {
-		printk("No available buffer size\n");
-		return;
-	}
-
-	s_payload = (struct payload *) metal_allocate_memory(max_payload_size);
-	if (!s_payload) {
-		printk("memory allocation failed\n");
-		return;
-	}
-
-	memset(s_payload->data, 0xA5, max_payload_size - sizeof(struct payload));
-
-	s_payload->size = max_payload_size;
-	s_payload->cnt = 0;
-
-	while (1) {
-		status = rpmsg_send(&ep, s_payload, max_payload_size);
-		if (status < 0) {
-			printk("%s failed with status %d\n", __func__, status);
-			return;
-		}
-
-		s_payload->cnt++;
-	}
-}
-
-
-static void send_task(void *arg1, void *arg2, void *arg3)
-{
-	ARG_UNUSED(arg1);
-	ARG_UNUSED(arg2);
-	ARG_UNUSED(arg3);
-
-	struct metal_init_params metal_params = METAL_INIT_DEFAULTS;
-	struct rpmsg_virtio_shm_pool shpool;
-	struct rpmsg_virtio_device rvdev;
-	struct metal_device *device;
-	struct metal_io_region *io;
-	struct virtio_device vdev;
-	struct virtqueue *vq[2];
-	int status = 0;
-
-	printk("\r\nOpenAMP[master] demo started\r\n");
-
-	status = metal_init(&metal_params);
-	if (status != 0) {
-		printk("metal_init: failed - error code %d\n", status);
-		return;
-	}
-
-	status = metal_register_generic_device(&shm_device);
-	if (status != 0) {
-		printk("Couldn't register shared memory device: %d\n", status);
-		return;
-	}
-
-	status = metal_device_open("generic", SHM_DEVICE_NAME, &device);
-	if (status != 0) {
-		printk("metal_device_open failed: %d\n", status);
-		return;
-	}
-
-	io = metal_device_io_region(device, 0);
-	if (io == NULL) {
-		printk("metal_device_io_region failed to get region\n");
-		return;
-	}
-
-	/* setup IPM */
-	ipm_tx_handle = device_get_binding(CONFIG_OPENAMP_IPC_DEV_TX_NAME);
-	if (ipm_tx_handle == NULL) {
-		printk("device_get_binding failed to find device\n");
-		return;
-	}
-
-	ipm_rx_handle = device_get_binding(CONFIG_OPENAMP_IPC_DEV_RX_NAME);
-	if (ipm_rx_handle == NULL) {
-		printk("device_get_binding failed to find device\n");
-		return;
-	}
-
-	ipm_register_callback(ipm_rx_handle, platform_ipm_callback, NULL);
-
-	status = ipm_set_enabled(ipm_rx_handle, 1);
-	if (status != 0) {
-		printk("ipm_set_enabled failed\n");
-		return;
-	}
-
-	/* setup vdev */
-	vq[0] = virtqueue_allocate(VRING_SIZE);
-	if (vq[0] == NULL) {
-		printk("virtqueue_allocate failed to alloc vq[0]\n");
-		return;
-	}
-	vq[1] = virtqueue_allocate(VRING_SIZE);
-	if (vq[1] == NULL) {
-		printk("virtqueue_allocate failed to alloc vq[1]\n");
-		return;
-	}
-
-	vdev.role = RPMSG_HOST;
-	vdev.vrings_num = VRING_COUNT;
-	vdev.func = &dispatch;
-	rvrings[0].io = io;
-	rvrings[0].info.vaddr = (void *)VRING_TX_ADDRESS;
-	rvrings[0].info.num_descs = VRING_SIZE;
-	rvrings[0].info.align = VRING_ALIGNMENT;
-	rvrings[0].vq = vq[0];
-
-	rvrings[1].io = io;
-	rvrings[1].info.vaddr = (void *)VRING_RX_ADDRESS;
-	rvrings[1].info.num_descs = VRING_SIZE;
-	rvrings[1].info.align = VRING_ALIGNMENT;
-	rvrings[1].vq = vq[1];
-
-	vdev.vrings_info = &rvrings[0];
-
-	/* setup rvdev */
-	rpmsg_virtio_init_shm_pool(&shpool, (void *)SHM_START_ADDR, SHM_SIZE);
-	status = rpmsg_init_vdev(&rvdev, &vdev, ns_bind_cb, io, &shpool);
-	if (status != 0) {
-		printk("rpmsg_init_vdev failed %d\n", status);
-		return;
-	}
-
-	/* Since we are using name service, we need to wait for a response
-	 * from NS setup and than we need to process it
-	 */
-	k_sem_take(&data_sem, K_FOREVER);
-	virtqueue_notification(vq[0]);
-
-	/* Wait til nameservice ep is setup */
-	k_sem_take(&ept_sem, K_FOREVER);
-
-	/* Start the flood */
-	send_pkt(&rvdev);
-
-	/* We should get here only on error */
-	rpmsg_deinit_vdev(&rvdev);
-	metal_finish();
-
-	printk("OpenAMP demo ended.\n");
-}
-K_THREAD_DEFINE(thread_send_id, APP_TASK_STACK_SIZE, send_task, NULL, NULL, NULL,
-		K_PRIO_PREEMPT(2), 0, 0);
-
-static void check_task(void *arg1, void *arg2, void *arg3)
-{
-	ARG_UNUSED(arg1);
-	ARG_UNUSED(arg2);
-	ARG_UNUSED(arg3);
-
-	unsigned long last_cnt = s_payload->cnt;
-	unsigned long delta;
-
-	while (1) {
-		k_sleep(K_SECONDS(1));
-
-		delta = s_payload->cnt - last_cnt;
-
-		printk("Δpkt: %ld (%ld B/pkt) | throughput: %ld bit/s\n",
-			delta, s_payload->size, delta * max_payload_size * 8);
-
-		last_cnt = s_payload->cnt;
-	}
-}
-K_THREAD_DEFINE(thread_check_id, APP_TASK_STACK_SIZE, check_task, NULL, NULL, NULL,
-		K_PRIO_PREEMPT(1), 0, 1000);
-
-
-/* Make sure we clear out the status flag very early (before we bringup the
- * secondary core) so the secondary core see's the proper status
- */
-static int init_status_flag(const struct device *arg)
-{
-	virtio_set_status(NULL, 0);
-
-	return 0;
-}
-SYS_INIT(init_status_flag, PRE_KERNEL_1, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT);