Patrick Williams | 7784c42 | 2022-11-17 07:29:11 -0600 | [diff] [blame^] | 1 | From 13de79cd4f0d25b812e5f4ad4a19bc075496be83 Mon Sep 17 00:00:00 2001 |
Patrick Williams | 975a06f | 2022-10-21 14:42:47 -0500 | [diff] [blame] | 2 | From: Vishnu Banavath <vishnu.banavath@arm.com> |
| 3 | Date: Fri, 3 Dec 2021 16:36:51 +0000 |
Patrick Williams | 7784c42 | 2022-11-17 07:29:11 -0600 | [diff] [blame^] | 4 | Subject: [PATCH 01/20] Add openamp to SE proxy deployment |
Patrick Williams | 975a06f | 2022-10-21 14:42:47 -0500 | [diff] [blame] | 5 | |
| 6 | Openamp is required to communicate between secure partitions(running on |
| 7 | Cortex-A) and trusted-firmware-m(running on Cortex-M). |
| 8 | These changes are to fetch libmetal and openamp from github repo's |
| 9 | and build it. |
| 10 | |
| 11 | Upstream-Status: Pending |
| 12 | Signed-off-by: Vishnu Banavath <vishnu.banavath@arm.com> |
| 13 | Signed-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 | |
| 28 | diff --git a/deployments/se-proxy/opteesp/lse.S b/deployments/se-proxy/opteesp/lse.S |
| 29 | new file mode 100644 |
| 30 | index 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 |
| 62 | diff --git a/deployments/se-proxy/se-proxy.cmake b/deployments/se-proxy/se-proxy.cmake |
| 63 | index 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 |
| 88 | diff --git a/external/openamp/libmetal-init-cache.cmake.in b/external/openamp/libmetal-init-cache.cmake.in |
| 89 | new file mode 100644 |
| 90 | index 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@ |
| 114 | diff --git a/external/openamp/libmetal.cmake b/external/openamp/libmetal.cmake |
| 115 | new file mode 100644 |
| 116 | index 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") |
| 187 | diff --git a/external/openamp/openamp-init-cache.cmake.in b/external/openamp/openamp-init-cache.cmake.in |
| 188 | new file mode 100644 |
| 189 | index 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@ |
| 213 | diff --git a/external/openamp/openamp.cmake b/external/openamp/openamp.cmake |
| 214 | new file mode 100644 |
| 215 | index 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 | -- |
Patrick Williams | 7784c42 | 2022-11-17 07:29:11 -0600 | [diff] [blame^] | 286 | 2.38.1 |
Patrick Williams | 975a06f | 2022-10-21 14:42:47 -0500 | [diff] [blame] | 287 | |