blob: 801905d97a11c7dfeff85c909cbf826d68b532b7 [file] [log] [blame]
Patrick Williams975a06f2022-10-21 14:42:47 -05001From 7c9589c4bb056db5e1696f2a777891ab235b1b63 Mon Sep 17 00:00:00 2001
2From: Vishnu Banavath <vishnu.banavath@arm.com>
3Date: Fri, 3 Dec 2021 16:36:51 +0000
4Subject: [PATCH 01/19] Add openamp to SE proxy deployment
5
6Openamp is required to communicate between secure partitions(running on
7Cortex-A) and trusted-firmware-m(running on Cortex-M).
8These changes are to fetch libmetal and openamp from github repo's
9and build it.
10
11Upstream-Status: Pending
12Signed-off-by: Vishnu Banavath <vishnu.banavath@arm.com>
13Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
14---
15 deployments/se-proxy/opteesp/lse.S | 28 ++++++++
16 deployments/se-proxy/se-proxy.cmake | 8 +++
17 external/openamp/libmetal-init-cache.cmake.in | 20 ++++++
18 external/openamp/libmetal.cmake | 67 +++++++++++++++++++
19 external/openamp/openamp-init-cache.cmake.in | 20 ++++++
20 external/openamp/openamp.cmake | 66 ++++++++++++++++++
21 6 files changed, 209 insertions(+)
22 create mode 100644 deployments/se-proxy/opteesp/lse.S
23 create mode 100644 external/openamp/libmetal-init-cache.cmake.in
24 create mode 100644 external/openamp/libmetal.cmake
25 create mode 100644 external/openamp/openamp-init-cache.cmake.in
26 create mode 100644 external/openamp/openamp.cmake
27
28diff --git a/deployments/se-proxy/opteesp/lse.S b/deployments/se-proxy/opteesp/lse.S
29new file mode 100644
30index 000000000000..8e466d65fc2b
31--- /dev/null
32+++ b/deployments/se-proxy/opteesp/lse.S
33@@ -0,0 +1,28 @@
34+// SPDX-License-Identifier: BSD-3-Clause
35+/*
36+ * Copyright (c) 2021, Arm Limited and Contributors. All rights reserved.
37+ */
38+
39+.text
40+.globl __aarch64_cas4_acq_rel
41+.globl __aarch64_cas4_sync
42+
43+__aarch64_cas4_acq_rel:
44+ mov w16, w0
45+ ldaxr w0, [x2]
46+ cmp w0, w16
47+0: bne 1f
48+
49+ stlxr w17, w1, [x2]
50+ cbnz w17, 0b
51+1: ret
52+
53+__aarch64_cas4_sync:
54+ mov w16, w0
55+ ldxr w0, [x2]
56+ cmp w0, w16
57+0: bne 1f
58+
59+ stlxr w17, w1, [x2]
60+ cbnz w17, 0b
61+1: ret
62diff --git a/deployments/se-proxy/se-proxy.cmake b/deployments/se-proxy/se-proxy.cmake
63index 426c66c05350..d39873a0fe81 100644
64--- a/deployments/se-proxy/se-proxy.cmake
65+++ b/deployments/se-proxy/se-proxy.cmake
66@@ -61,6 +61,7 @@ add_components(TARGET "se-proxy"
67 target_sources(se-proxy PRIVATE
68 ${CMAKE_CURRENT_LIST_DIR}/common/se_proxy_sp.c
69 ${CMAKE_CURRENT_LIST_DIR}/common/service_proxy_factory.c
70+ ${CMAKE_CURRENT_LIST_DIR}/opteesp/lse.S
71 )
72
73 #-------------------------------------------------------------------------------
74@@ -73,6 +74,13 @@ include(../../../external/nanopb/nanopb.cmake)
75 target_link_libraries(se-proxy PRIVATE nanopb::protobuf-nanopb-static)
76 protobuf_generate_all(TGT "se-proxy" NAMESPACE "protobuf" BASE_DIR "${TS_ROOT}/protocols")
77
78+# libmetal
79+include(../../../external/openamp/libmetal.cmake)
80+
81+# OpenAMP
82+include(../../../external/openamp/openamp.cmake)
83+target_link_libraries(se-proxy PRIVATE openamp libmetal)
84+
85 #################################################################
86
87 target_include_directories(se-proxy PRIVATE
88diff --git a/external/openamp/libmetal-init-cache.cmake.in b/external/openamp/libmetal-init-cache.cmake.in
89new file mode 100644
90index 000000000000..04c25fbde960
91--- /dev/null
92+++ b/external/openamp/libmetal-init-cache.cmake.in
93@@ -0,0 +1,20 @@
94+#-------------------------------------------------------------------------------
95+# Copyright (c) 2021-2022, Arm Limited and Contributors. All rights reserved.
96+# Copyright (c) 2021-2022, Linaro. All rights reserved.
97+#
98+# SPDX-License-Identifier: BSD-3-Clause
99+#
100+#-------------------------------------------------------------------------------
101+
102+set(CMAKE_INSTALL_PREFIX "@BUILD_INSTALL_DIR@" CACHE STRING "")
103+set(CMAKE_TOOLCHAIN_FILE "@TS_EXTERNAL_LIB_TOOLCHAIN_FILE@" CACHE STRING "")
104+set(BUILD_SHARED_LIBS Off CACHE BOOL "")
105+set(BUILD_STATIC_LIBS On CACHE BOOL "")
106+
107+set(WITH_DOC OFF CACHE BOOL "")
108+set(WITH_TESTS OFF CACHE BOOL "")
109+set(WITH_EXAMPLES OFF CACHE BOOL "")
110+set(WITH_DEFAULT_LOGGER OFF CACHE BOOL "")
111+set(MACHINE "template" CACHE STRING "")
112+
113+@_cmake_fragment@
114diff --git a/external/openamp/libmetal.cmake b/external/openamp/libmetal.cmake
115new file mode 100644
116index 000000000000..6e5004ff555c
117--- /dev/null
118+++ b/external/openamp/libmetal.cmake
119@@ -0,0 +1,67 @@
120+#-------------------------------------------------------------------------------
121+# Copyright (c) 2022 Linaro Limited
122+# Copyright (c) 2022, Arm Limited. All rights reserved.
123+#
124+# SPDX-License-Identifier: BSD-3-Clause
125+#
126+#-------------------------------------------------------------------------------
127+
128+set (LIBMETAL_URL "https://github.com/OpenAMP/libmetal.git"
129+ CACHE STRING "libmetal repository URL")
130+set (LIBMETAL_INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/libmetal_install"
131+ CACHE DIR "libmetal installation directory")
132+set(LIBMETAL_SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/_deps/libmetal"
133+ CACHE DIR "libmetal source-code")
134+set (LIBMETAL_PACKAGE_DIR "${LIBMETAL_INSTALL_DIR}/libmetal/cmake"
135+ CACHE DIR "libmetal CMake package directory")
136+set (LIBMETAL_TARGET_NAME "libmetal")
137+set (LIBMETAL_REFSPEC "f252f0e007fbfb8b3a52b1d5901250ddac96baad"
138+ CACHE STRING "The version of libmetal to use")
139+set(LIBMETAL_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/_deps/libmetal-build")
140+
141+set(GIT_OPTIONS
142+ GIT_REPOSITORY ${LIBMETAL_URL}
143+ GIT_TAG ${LIBMETAL_REFSPEC}
144+ GIT_SHALLOW FALSE
145+)
146+
147+if(NOT LIBMETAL_DEBUG)
148+ set(LIBMETAL_BUILD_TYPE "Release")
149+else()
150+ set(LIBMETAL_BUILD_TYPE "Debug")
151+endif()
152+
153+include(FetchContent)
154+
155+# Checking git
156+find_program(GIT_COMMAND "git")
157+if (NOT GIT_COMMAND)
158+ message(FATAL_ERROR "Please install git")
159+endif()
160+
161+# Only pass libc settings to libmetal if needed. For environments where the
162+# standard library is not overridden, this is not needed.
163+if(TARGET stdlib::c)
164+ include(${TS_ROOT}/tools/cmake/common/PropertyCopy.cmake)
165+
166+ # Save libc settings
167+ save_interface_target_properties(TGT stdlib::c PREFIX LIBC)
168+ # Translate libc settings to cmake code fragment. Will be inserted into
169+ # libmetal-init-cache.cmake.in when LazyFetch configures the file.
170+ translate_interface_target_properties(PREFIX LIBC RES _cmake_fragment)
171+ unset_saved_properties(LIBC)
172+endif()
173+
174+include(${TS_ROOT}/tools/cmake/common/LazyFetch.cmake REQUIRED)
175+LazyFetch_MakeAvailable(DEP_NAME libmetal
176+ FETCH_OPTIONS "${GIT_OPTIONS}"
177+ INSTALL_DIR "${LIBMETAL_INSTALL_DIR}"
178+ CACHE_FILE "${TS_ROOT}/external/openamp/libmetal-init-cache.cmake.in"
179+ SOURCE_DIR "${LIBMETAL_SOURCE_DIR}"
180+)
181+unset(_cmake_fragment)
182+
183+#Create an imported target to have clean abstraction in the build-system.
184+add_library(libmetal STATIC IMPORTED)
185+set_property(TARGET libmetal PROPERTY IMPORTED_LOCATION "${LIBMETAL_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}metal${CMAKE_STATIC_LIBRARY_SUFFIX}")
186+set_property(TARGET libmetal PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${LIBMETAL_INSTALL_DIR}/include")
187diff --git a/external/openamp/openamp-init-cache.cmake.in b/external/openamp/openamp-init-cache.cmake.in
188new file mode 100644
189index 000000000000..302b80511bce
190--- /dev/null
191+++ b/external/openamp/openamp-init-cache.cmake.in
192@@ -0,0 +1,20 @@
193+#-------------------------------------------------------------------------------
194+# Copyright (c) 2021-2022, Arm Limited and Contributors. All rights reserved.
195+# Copyright (c) 2021-2022, Linaro. All rights reserved.
196+#
197+# SPDX-License-Identifier: BSD-3-Clause
198+#
199+#-------------------------------------------------------------------------------
200+
201+set(CMAKE_INSTALL_PREFIX "@BUILD_INSTALL_DIR@" CACHE STRING "")
202+set(CMAKE_TOOLCHAIN_FILE "@TS_EXTERNAL_LIB_TOOLCHAIN_FILE@" CACHE STRING "")
203+set(BUILD_SHARED_LIBS Off CACHE BOOL "")
204+set(BUILD_STATIC_LIBS On CACHE BOOL "")
205+
206+set(LIBMETAL_INCLUDE_DIR "@CMAKE_CURRENT_BINARY_DIR@/libmetal_install/include" CACHE
207+ STRING "")
208+set(LIBMETAL_LIB "@CMAKE_CURRENT_BINARY_DIR@/libmetal_install/lib" CACHE STRING "")
209+set(RPMSG_BUFFER_SIZE "512" CACHE STRING "")
210+set(MACHINE "template" CACHE STRING "")
211+
212+@_cmake_fragment@
213diff --git a/external/openamp/openamp.cmake b/external/openamp/openamp.cmake
214new file mode 100644
215index 000000000000..449f35f4fda4
216--- /dev/null
217+++ b/external/openamp/openamp.cmake
218@@ -0,0 +1,66 @@
219+#-------------------------------------------------------------------------------
220+# Copyright (c) 2022 Linaro Limited
221+# Copyright (c) 2022, Arm Limited. All rights reserved.
222+#
223+# SPDX-License-Identifier: BSD-3-Clause
224+#
225+#-------------------------------------------------------------------------------
226+
227+set (OPENAMP_URL "https://github.com/OpenAMP/open-amp.git"
228+ CACHE STRING "OpenAMP repository URL")
229+set (OPENAMP_INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/openamp_install"
230+ CACHE DIR "OpenAMP installation directory")
231+set (OPENAMP_SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/_deps/openamp"
232+ CACHE DIR "OpenAMP source code directory")
233+set (OPENAMP_PACKAGE_DIR "${OPENAMP_INSTALL_DIR}/openamp/cmake"
234+ CACHE DIR "OpenAMP CMake package directory")
235+set (OPENAMP_TARGET_NAME "openamp")
236+set (OPENAMP_REFSPEC "347397decaa43372fc4d00f965640ebde042966d"
237+ CACHE STRING "The version of openamp to use")
238+
239+set(GIT_OPTIONS
240+ GIT_REPOSITORY ${OPENAMP_URL}
241+ GIT_TAG ${OPENAMP_REFSPEC}
242+ GIT_SHALLOW FALSE
243+)
244+
245+if(NOT OPENAMP_DEBUG)
246+ set(OPENAMP_BUILD_TYPE "Release")
247+else()
248+ set(OPENAMP_BUILD_TYPE "Debug")
249+endif()
250+
251+include(FetchContent)
252+
253+# Checking git
254+find_program(GIT_COMMAND "git")
255+if (NOT GIT_COMMAND)
256+ message(FATAL_ERROR "Please install git")
257+endif()
258+
259+# Only pass libc settings to openamp if needed. For environments where the
260+# standard library is not overridden, this is not needed.
261+if(TARGET stdlib::c)
262+ include(${TS_ROOT}/tools/cmake/common/PropertyCopy.cmake)
263+
264+ # Save libc settings
265+ save_interface_target_properties(TGT stdlib::c PREFIX LIBC)
266+ # Translate libc settings to cmake code fragment. Will be inserted into
267+ # libmetal-init-cache.cmake.in when LazyFetch configures the file.
268+ translate_interface_target_properties(PREFIX LIBC RES _cmake_fragment)
269+ unset_saved_properties(LIBC)
270+endif()
271+
272+include(${TS_ROOT}/tools/cmake/common/LazyFetch.cmake REQUIRED)
273+LazyFetch_MakeAvailable(DEP_NAME openamp
274+ FETCH_OPTIONS "${GIT_OPTIONS}"
275+ INSTALL_DIR "${OPENAMP_INSTALL_DIR}"
276+ CACHE_FILE "${TS_ROOT}/external/openamp/openamp-init-cache.cmake.in"
277+ SOURCE_DIR "${OPENAMP_SOURCE_DIR}"
278+)
279+unset(_cmake_fragment)
280+
281+#Create an imported target to have clean abstraction in the build-system.
282+add_library(openamp STATIC IMPORTED)
283+set_property(TARGET openamp PROPERTY IMPORTED_LOCATION "${OPENAMP_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}open_amp${CMAKE_STATIC_LIBRARY_SUFFIX}")
284+set_property(TARGET openamp PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${OPENAMP_INSTALL_DIR}/include")
285--
2862.38.0
287