From 0e770c652a5ef3c034ca7ccb79f0484082341796 Mon Sep 17 00:00:00 2001 From: Karl Zhang Date: Tue, 16 Jul 2019 10:26:13 +0800 Subject: [PATCH] samples: openamp: Add support for Musca A Musca A is a dual core SoC with both cores are CM33. Add openAMP to support on it. Signed-off-by: Karl Zhang --- samples/subsys/ipc/openamp/CMakeLists.txt | 2 ++ samples/subsys/ipc/openamp/README.rst | 8 ++++++++ .../subsys/ipc/openamp/remote/CMakeLists.txt | 3 ++- samples/subsys/ipc/openamp/remote/src/main.c | 3 ++- samples/subsys/ipc/openamp/sample.yaml | 2 +- samples/subsys/ipc/openamp/src/main.c | 6 ++++-- samples/subsys/ipc/openamp/v2m_musca.overlay | 20 +++++++++++++++++++ 7 files changed, 39 insertions(+), 5 deletions(-) create mode 100644 samples/subsys/ipc/openamp/v2m_musca.overlay diff --git a/samples/subsys/ipc/openamp/CMakeLists.txt b/samples/subsys/ipc/openamp/CMakeLists.txt index e6d6a723d87..67a3ba6ace3 100644 --- a/samples/subsys/ipc/openamp/CMakeLists.txt +++ b/samples/subsys/ipc/openamp/CMakeLists.txt @@ -12,6 +12,8 @@ if("${BOARD}" STREQUAL "lpcxpresso54114_m4") elseif("${BOARD}" STREQUAL "mps2_an521") set(QEMU_EXTRA_FLAGS "-device;loader,file=${REMOTE_ZEPHYR_DIR}/zephyr.elf") set(BOARD_REMOTE "mps2_an521_nonsecure") +elseif("${BOARD}" STREQUAL "v2m_musca") + set(BOARD_REMOTE "v2m_musca_nonsecure") else() message(FATAL_ERROR "${BOARD} was not supported for this sample") endif() diff --git a/samples/subsys/ipc/openamp/README.rst b/samples/subsys/ipc/openamp/README.rst index 757c2d0b8e3..fe3b143762a 100644 --- a/samples/subsys/ipc/openamp/README.rst +++ b/samples/subsys/ipc/openamp/README.rst @@ -26,6 +26,14 @@ Building the application for mps2_an521 :board: mps2_an521 :goals: debug +Building the application for v2m_musca +************************************** + +.. zephyr-app-commands:: + :zephyr-app: samples/subsys/ipc/openamp + :board: v2m_musca + :goals: debug + Open a serial terminal (minicom, putty, etc.) and connect the board with the following settings: diff --git a/samples/subsys/ipc/openamp/remote/CMakeLists.txt b/samples/subsys/ipc/openamp/remote/CMakeLists.txt index 971085e2ac3..0561d91e55c 100644 --- a/samples/subsys/ipc/openamp/remote/CMakeLists.txt +++ b/samples/subsys/ipc/openamp/remote/CMakeLists.txt @@ -6,7 +6,8 @@ cmake_minimum_required(VERSION 3.13.1) # if(("${BOARD}" STREQUAL "lpcxpresso54114_m0") - OR "${BOARD}" STREQUAL "mps2_an521_nonsecure") + OR "${BOARD}" STREQUAL "mps2_an521_nonsecure" + OR "${BOARD}" STREQUAL "v2m_musca_nonsecure") message(INFO " ${BOARD} compile as slave in this sample") else() message(FATAL_ERROR "${BOARD} was not supported for this sample") diff --git a/samples/subsys/ipc/openamp/remote/src/main.c b/samples/subsys/ipc/openamp/remote/src/main.c index c3e99453a20..66b03816d2a 100644 --- a/samples/subsys/ipc/openamp/remote/src/main.c +++ b/samples/subsys/ipc/openamp/remote/src/main.c @@ -73,7 +73,8 @@ static u32_t virtio_get_features(struct virtio_device *vdev) static void virtio_notify(struct virtqueue *vq) { -#if defined(CONFIG_SOC_MPS2_AN521) +#if defined(CONFIG_SOC_MPS2_AN521) || \ + defined(CONFIG_SOC_V2M_MUSCA_A) u32_t current_core = sse_200_platform_get_cpu_id(); ipm_send(ipm_handle, 0, current_core ? 0 : 1, 0, 1); diff --git a/samples/subsys/ipc/openamp/sample.yaml b/samples/subsys/ipc/openamp/sample.yaml index 7d04f96407e..2f0a083ecfe 100644 --- a/samples/subsys/ipc/openamp/sample.yaml +++ b/samples/subsys/ipc/openamp/sample.yaml @@ -4,7 +4,7 @@ sample: name: OpenAMP example integration tests: sample.ipc.openamp: - platform_whitelist: lpcxpresso54114_m4 mps2_an521 + platform_whitelist: lpcxpresso54114_m4 mps2_an521 v2m_musca tags: ipm harness: console harness_config: diff --git a/samples/subsys/ipc/openamp/src/main.c b/samples/subsys/ipc/openamp/src/main.c index 09adbf2c601..31f43289911 100644 --- a/samples/subsys/ipc/openamp/src/main.c +++ b/samples/subsys/ipc/openamp/src/main.c @@ -84,7 +84,8 @@ static void virtio_set_features(struct virtio_device *vdev, static void virtio_notify(struct virtqueue *vq) { -#if defined(CONFIG_SOC_MPS2_AN521) +#if defined(CONFIG_SOC_MPS2_AN521) || \ + defined(CONFIG_SOC_V2M_MUSCA_A) u32_t current_core = sse_200_platform_get_cpu_id(); ipm_send(ipm_handle, 0, current_core ? 0 : 1, 0, 1); @@ -286,7 +287,8 @@ void main(void) (k_thread_entry_t)app_task, NULL, NULL, NULL, K_PRIO_COOP(7), 0, K_NO_WAIT); -#if defined(CONFIG_SOC_MPS2_AN521) +#if defined(CONFIG_SOC_MPS2_AN521) || \ + defined(CONFIG_SOC_V2M_MUSCA_A) wakeup_cpu1(); k_sleep(500); #endif /* #if defined(CONFIG_SOC_MPS2_AN521) */ diff --git a/samples/subsys/ipc/openamp/v2m_musca.overlay b/samples/subsys/ipc/openamp/v2m_musca.overlay new file mode 100644 index 00000000000..a713dd60469 --- /dev/null +++ b/samples/subsys/ipc/openamp/v2m_musca.overlay @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2019 Linaro Limited + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/ { + chosen { + /* + * shared memory reserved for the inter-processor communication + */ + zephyr,ipc_shm = &sramx; + zephyr,ipc = &mhu0; + }; + + sramx: memory@20018000 { + compatible = "mmio-sram"; + reg = <0x20018000 0x8000>; + }; +};