aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Leach <mike.leach@linaro.org>2024-01-24 13:37:11 +0000
committerMike Leach <mike.leach@linaro.org>2024-02-02 17:41:50 +0000
commit52c8502b0bbd5165071ccb3566464303a06036e7 (patch)
tree2bb08866e37677c91cfd1834c69090513f8cba1a
parenteb4f361e2b92b3b745ebd93f7f78ef10a2ceb9b3 (diff)
build: juno: scp_romfw_bypass: Update build to support DT build flow
Update juno scp_romfw_bypass firmware variant to support using DT build flow. Adjust CMakeLists and Firmware.cmake to select device tree base source file and DT supported modules for the variant. Add in Juno scp_romfw_bypass DT specific config overrides where required. Signed-off-by: Mike Leach <mike.leach@linaro.org>
-rw-r--r--product/juno/scp_romfw_bypass/CMakeLists.txt73
-rw-r--r--product/juno/scp_romfw_bypass/Firmware.cmake12
-rw-r--r--product/juno/scp_romfw_bypass/juno-scp_romfw_bypass.dts23
3 files changed, 101 insertions, 7 deletions
diff --git a/product/juno/scp_romfw_bypass/CMakeLists.txt b/product/juno/scp_romfw_bypass/CMakeLists.txt
index 585edc2a95b9..267223b94c51 100644
--- a/product/juno/scp_romfw_bypass/CMakeLists.txt
+++ b/product/juno/scp_romfw_bypass/CMakeLists.txt
@@ -28,17 +28,68 @@ target_include_directories(
target_sources(
juno-bl1-bypass
- PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/config_juno_ppu.c"
- "${CMAKE_CURRENT_SOURCE_DIR}/config_juno_rom.c"
- "${CMAKE_CURRENT_SOURCE_DIR}/config_juno_soc_clock.c"
- "${CMAKE_CURRENT_SOURCE_DIR}/config_clock.c"
- "${CMAKE_CURRENT_SOURCE_DIR}/config_timer.c"
- "${CMAKE_CURRENT_SOURCE_DIR}/config_sds.c"
- "${CMAKE_CURRENT_SOURCE_DIR}/config_bootloader.c"
+ PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/config_juno_soc_clock.c"
"${CMAKE_CURRENT_SOURCE_DIR}/juno_pll_workaround.c"
"${CMAKE_CURRENT_SOURCE_DIR}/../src/juno_utils.c"
"${CMAKE_CURRENT_SOURCE_DIR}/../src/juno_id.c")
+# compile DT sources if DT build is enabled, otherwise build the old way
+if (SCP_FIRMWARE_DTS_SOURCE)
+
+ # specific Juno DT config files, other DT config files are built automatically
+ # as part of the modules
+ target_sources(
+ juno-bl1-bypass
+ PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/../scp_romfw/config_dt_juno_sds.c")
+
+else()
+
+ # files that are replaced by DT versions either in Juno or common
+ # framework modules.
+ #
+ # for now we allow option to build the firmware with the deprecated module
+ # config methods.
+ target_sources(
+ juno-bl1-bypass
+ PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/config_bootloader.c"
+ "${CMAKE_CURRENT_SOURCE_DIR}/config_clock.c"
+ "${CMAKE_CURRENT_SOURCE_DIR}/config_juno_rom.c"
+ "${CMAKE_CURRENT_SOURCE_DIR}/config_timer.c"
+ "${CMAKE_CURRENT_SOURCE_DIR}/config_sds.c"
+ "${CMAKE_CURRENT_SOURCE_DIR}/config_juno_ppu.c")
+endif()
+
+
+# add in juno specific headers for device tree bindings processing,
+# that are not include by other juno module builds
+list(APPEND SCP_DT_BIND_H_GEN_FROM_INCL
+ "${CMAKE_CURRENT_SOURCE_DIR}/../include/juno_ppu_idx.h"
+ "${CMAKE_CURRENT_SOURCE_DIR}/../include/juno_sds.h"
+ "${CMAKE_CURRENT_SOURCE_DIR}/../include/software_mmap.h"
+ "${CMAKE_CURRENT_SOURCE_DIR}/../include/scp_mmap.h"
+ "${CMAKE_CURRENT_SOURCE_DIR}/../include/system_clock.h"
+ "${CMAKE_CURRENT_SOURCE_DIR}/../include/system_mmap.h"
+ )
+
+# select device tree configured modules
+# These use the .dts configured variants
+# Order is not important for this list
+list(APPEND SCP_DT_CONFIG_MODULES_STD "juno-ppu")
+list(APPEND SCP_DT_CONFIG_MODULES_STD "juno-rom")
+list(APPEND SCP_DT_CONFIG_MODULES_STD "clock")
+list(APPEND SCP_DT_CONFIG_MODULES_STD "gtimer")
+list(APPEND SCP_DT_CONFIG_MODULES_DYN "sds")
+list(APPEND SCP_DT_CONFIG_MODULES_STD "bootloader")
+
+# create a list of optional .dtsi includes that will be added to the final dt compile
+# These are dependent on compile time defines which are generated later,
+# so add to define list and file list for later processing
+list(APPEND SCP_MODULE_DT_OPTIONS_DEFINE_REQ "BUILD_MODE_DEBUG")
+list(APPEND SCP_MODULE_DT_OPTIONS_FILE_REQ "juno-scp-romfw-debug-opts.dtsi")
+
+# additional -D define option when pre-compiling headers for dt
+list(APPEND SCP_DT_BIND_H_GEN_DEFS "SCP_ROM_BYPASS=1")
+
#
# We explicitly add the CMSIS include directories to our interfaceinclude
# directories. Each module target adds these include directories totheir own,
@@ -52,3 +103,11 @@ if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
target_link_options(juno-bl1-bypass
PUBLIC "LINKER:--wrap=arch_exception_reset")
endif()
+
+# ensure include lists pushed to parent scope
+set(SCP_DT_CONFIG_MODULES_DYN ${SCP_DT_CONFIG_MODULES_DYN} PARENT_SCOPE)
+set(SCP_DT_CONFIG_MODULES_STD ${SCP_DT_CONFIG_MODULES_STD} PARENT_SCOPE)
+set(SCP_DT_BIND_H_GEN_FROM_INCL ${SCP_DT_BIND_H_GEN_FROM_INCL} PARENT_SCOPE)
+set(SCP_DT_BIND_H_GEN_DEFS ${SCP_DT_BIND_H_GEN_DEFS} PARENT_SCOPE)
+set(SCP_MODULE_DT_OPTIONS_DEFINE_REQ ${SCP_MODULE_DT_OPTIONS_DEFINE_REQ} PARENT_SCOPE)
+set(SCP_MODULE_DT_OPTIONS_FILE_REQ ${SCP_MODULE_DT_OPTIONS_FILE_REQ} PARENT_SCOPE)
diff --git a/product/juno/scp_romfw_bypass/Firmware.cmake b/product/juno/scp_romfw_bypass/Firmware.cmake
index 742648b72b56..bbe3497822cc 100644
--- a/product/juno/scp_romfw_bypass/Firmware.cmake
+++ b/product/juno/scp_romfw_bypass/Firmware.cmake
@@ -31,6 +31,18 @@ set(SCP_PLATFORM_VARIANT_INIT "BOARD")
set(SCP_PLATFORM_VARIANT ${SCP_PLATFORM_VARIANT_INIT} CACHE STRING
"Platform variant for the build")
+# setup Device Tree sources
+
+# the root devicetree source file for this firmware variant
+# setting this source file triggers further DT build processes
+set(SCP_FIRMWARE_DTS_SOURCE "${CMAKE_CURRENT_LIST_DIR}/juno-scp_romfw_bypass.dts")
+
+# the includes needed:
+# the current include dir where generated headers appear
+list(PREPEND SCP_FIRMWARE_DTS_INCLUDE "${CMAKE_CURRENT_LIST_DIR}/../include")
+# the dts/include/juno specific .dtsi files for this product
+list(PREPEND SCP_FIRMWARE_DTS_INCLUDE "${CMAKE_SOURCE_DIR}/dts/include/juno")
+
list(PREPEND SCP_MODULE_PATHS "${CMAKE_CURRENT_LIST_DIR}/../module/juno_rom")
list(PREPEND SCP_MODULE_PATHS "${CMAKE_CURRENT_LIST_DIR}/../module/juno_ppu")
list(PREPEND SCP_MODULE_PATHS
diff --git a/product/juno/scp_romfw_bypass/juno-scp_romfw_bypass.dts b/product/juno/scp_romfw_bypass/juno-scp_romfw_bypass.dts
new file mode 100644
index 000000000000..fa2048cc0ea2
--- /dev/null
+++ b/product/juno/scp_romfw_bypass/juno-scp_romfw_bypass.dts
@@ -0,0 +1,23 @@
+/*
+ * Arm SCP/MCP Software
+ * Copyright (c) 2021, Arm Limited and Contributors. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+/* base SCP framework - must be first include */
+#include "scp-fwk.dtsi"
+
+/* device tree file for Juno ROM bypass SCP firmware variant - use same as ROM variant */
+#include "juno-scp-base.dtsi"
+#include "juno-scp-romfw.dtsi"
+
+/* include the generated options file */
+#include "fwk-dt-options.dtsi"
+
+/ {
+ model = "Juno Development Platform (r0-r2)";
+ compatible = "arm,juno";
+
+
+}; \ No newline at end of file