diff options
Diffstat (limited to 'meta-arm/meta-arm-bsp/recipes-bsp')
6 files changed, 185 insertions, 419 deletions
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/scp-firmware/files/tc/0002-tc0-fix-mpmm-config.patch b/meta-arm/meta-arm-bsp/recipes-bsp/scp-firmware/files/tc/0002-tc0-fix-mpmm-config.patch deleted file mode 100644 index f2044a9539..0000000000 --- a/meta-arm/meta-arm-bsp/recipes-bsp/scp-firmware/files/tc/0002-tc0-fix-mpmm-config.patch +++ /dev/null @@ -1,92 +0,0 @@ -From 736bd8aeceefd474c15a97e4a4ec99f07ef9a82c Mon Sep 17 00:00:00 2001 -From: Arunachalam Ganapathy <arunachalam.ganapathy@arm.com> -Date: Fri, 11 Feb 2022 18:28:43 +0000 -Subject: [PATCH 2/4] tc0: fix mpmm config - -Do not enable MPMM in standard features set. - -Signed-off-by: Arunachalam Ganapathy <arunachalam.ganapathy@arm.com> -Change-Id: I7b273a2055452e2e8cd78a0d932514a6f2947ec5 -Upstream-Status: Pending [Not submitted to upstream yet] ---- - product/tc0/scp_ramfw/config_mpmm.c | 15 --------------- - 1 file changed, 15 deletions(-) - -diff --git a/product/tc0/scp_ramfw/config_mpmm.c b/product/tc0/scp_ramfw/config_mpmm.c -index 3bfe99d3..13d866a5 100644 ---- a/product/tc0/scp_ramfw/config_mpmm.c -+++ b/product/tc0/scp_ramfw/config_mpmm.c -@@ -27,7 +27,6 @@ enum core_pd_idx { - CORE7_IDX - }; - --#if defined(PLATFORM_VARIANT) && (PLATFORM_VARIANT == TC0_VARIANT_STD) - static struct mod_mpmm_pct_table k_pct[] = { - { .cores_online = 4, - .default_perf_limit = 1153 * 1000000UL, -@@ -115,7 +114,6 @@ static struct mod_mpmm_pct_table m_pct[] = { - }, - } }, - }; --#endif - - static struct mod_mpmm_pct_table m_elp_pct[] = { - { .cores_online = 1, -@@ -132,7 +130,6 @@ static struct mod_mpmm_pct_table m_elp_pct[] = { - } }, - }; - --#if defined(PLATFORM_VARIANT) && (PLATFORM_VARIANT == TC0_VARIANT_STD) - static const struct mod_mpmm_core_config k_core_config[] = { - [0] = { - .pd_id = FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_POWER_DOMAIN, CORE0_IDX), -@@ -180,7 +177,6 @@ static const struct mod_mpmm_core_config m_core_config[] = { - .core_starts_online = false, - }, - }; --#endif - - static const struct mod_mpmm_core_config m_elp_core_config[] = { - [0] = { -@@ -191,7 +187,6 @@ static const struct mod_mpmm_core_config m_elp_core_config[] = { - }, - }; - --#if defined(PLATFORM_VARIANT) && (PLATFORM_VARIANT == TC0_VARIANT_STD) - static const struct mod_mpmm_domain_config k_domain_conf[] = { - [0] = { - .perf_id = FWK_ID_ELEMENT_INIT( -@@ -219,7 +214,6 @@ static const struct mod_mpmm_domain_config m_domain_conf[] = { - }, - [1] = {0}, - }; --#endif - - static const struct mod_mpmm_domain_config m_elp_domain_conf[] = { - [0] = { -@@ -236,14 +230,6 @@ static const struct mod_mpmm_domain_config m_elp_domain_conf[] = { - }; - - static const struct fwk_element element_table[] = { --#if defined(PLATFORM_VARIANT) && (PLATFORM_VARIANT == TC0_VAR_EXPERIMENT_POWER) -- [0] = { -- .name = "MPMM_MATTERHORN_ELP_ARM_ELEM", -- .sub_element_count = 1, -- .data = m_elp_domain_conf, -- }, -- [1] = { 0 }, --#else - [0] = { - .name = "MPMM_KLEIN_ELEM", - .sub_element_count = 4, -@@ -260,7 +246,6 @@ static const struct fwk_element element_table[] = { - .data = m_elp_domain_conf, - }, - [3] = { 0 }, --#endif - }; - - static const struct fwk_element *mpmm_get_element_table(fwk_id_t module_id) --- -2.30.2 - diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/scp-firmware/files/tc/0003-tc0-rename-platform-variant-to-platform-feature-set.patch b/meta-arm/meta-arm-bsp/recipes-bsp/scp-firmware/files/tc/0003-tc0-rename-platform-variant-to-platform-feature-set.patch deleted file mode 100644 index 87dfbfacf1..0000000000 --- a/meta-arm/meta-arm-bsp/recipes-bsp/scp-firmware/files/tc/0003-tc0-rename-platform-variant-to-platform-feature-set.patch +++ /dev/null @@ -1,203 +0,0 @@ -From 50e63f11762348bcd95d809af248f620f03d9ce4 Mon Sep 17 00:00:00 2001 -From: Arunachalam Ganapathy <arunachalam.ganapathy@arm.com> -Date: Fri, 11 Feb 2022 18:16:54 +0000 -Subject: [PATCH 3/4] tc0: rename platform variant to platform feature set - -THe PLATFORM_VARIANT flag was added to differentiate the software -features enabled in SCP firmware. But this flag misleads to a new -variant of same platform. This commits renames PLATFORM_VARIANT to -PLATFORM_FEATURE_SET - -Signed-off-by: Arunachalam Ganapathy <arunachalam.ganapathy@arm.com> -Change-Id: I93c0bc3e11fe18192bb8246df851345bdc473974 -Upstream-Status: Pending [Not submitted to upstream yet] -Signed-off-by: Rupinderjit Singh <rupinderjit.singh@arm.com> ---- - product/tc0/doc/{variants.md => features.md} | 28 +++++++++----------- - product/tc0/scp_ramfw/CMakeLists.txt | 26 +++--------------- - product/tc0/scp_ramfw/Firmware.cmake | 2 +- - product/tc0/scp_ramfw/config_scmi_perf.c | 8 +++--- - product/tc0/scp_romfw/CMakeLists.txt | 6 ++--- - product/tc0/scp_romfw/Firmware.cmake | 2 +- - 6 files changed, 25 insertions(+), 47 deletions(-) - rename product/tc0/doc/{variants.md => features.md} (77%) - -diff --git a/product/tc0/doc/variants.md b/product/tc0/doc/features.md -similarity index 77% -rename from product/tc0/doc/variants.md -rename to product/tc0/doc/features.md -index fbf616db..3ef520e2 100644 ---- a/product/tc0/doc/variants.md -+++ b/product/tc0/doc/features.md -@@ -1,4 +1,4 @@ --# TC0 Platform Variants -+# TC0 Platform Features - - Copyright (c) 2022, Arm Limited. All rights reserved. - -@@ -7,30 +7,27 @@ Copyright (c) 2022, Arm Limited. All rights reserved. - - Documentation for TC0 platform can be found at [1]. - -+### Standard -+ -+The standard build provides all the features described in [1]. -+For this default features, it's not required to provide any extra parameters in -+the build commands. -+ -+### MPMM/Power/Performance (Experimental) -+ - For the purpose of experimenting some of the software features that have been --introduced in SCP-firmware a new variant of TC0 has been created. --The variant(s) can be chosen at build time by adding: -+introduced in SCP-firmware of TC0. This can be enabled at build time, by adding: - - ```sh - - make -f Makefile.cmake \ - PRODUCT=tc0 \ - MODE=<debug,release> \ -- PLATFORM_VARIANT=<0,1> -+ EXTRA_CONFIG_ARGS+=-DSCP_PLATFORM_FEATURE_SET=1 - - ``` - -- --### Variant 0 (Standard build) -- --The standard build provides all the features described in [1]. --For this default variant, it's not required to provide any extra parameters in --the build commands. -- -- --### Variant 1 (Power/Performance testing) -- --This variant adds support for the following software features: -+This adds support for the following software features: - - Traffic Cop - - MPMM (Maximum Power Mitigation Mechanism) - - Thermal Management -@@ -63,7 +60,6 @@ Once built, the features above will act as: - - ## Limitations - --- The "variant" option is available only with the CMake build. - - The Thermal functionality is limited at this time cause the constant - temperature being sampled. - -diff --git a/product/tc0/scp_ramfw/CMakeLists.txt b/product/tc0/scp_ramfw/CMakeLists.txt -index 96310320..ce3178ee 100644 ---- a/product/tc0/scp_ramfw/CMakeLists.txt -+++ b/product/tc0/scp_ramfw/CMakeLists.txt -@@ -11,25 +11,13 @@ - - add_executable(tc0-bl2) - -+set(SCP_PLATFORM_FEATURE_SET ${SCP_PLATFORM_FEATURE_SET_INIT} CACHE STRING "1") - --# SCP_PLATFORM_VARIANT options: --# - 'TC0_VARIANT_STD' for TC0 standard build --# - 'TC0_VAR_EXPERIMENT_POWER' for TC0 with power/performance plugins used for --# evaluation purposes -- -- --target_compile_definitions(tc0-bl2 PUBLIC -DTC0_VARIANT_STD=0) --target_compile_definitions(tc0-bl2 PUBLIC -DTC0_VAR_EXPERIMENT_POWER=1) -- -- --set(SCP_PLATFORM_VARIANT ${SCP_PLATFORM_VARIANT_INIT} CACHE STRING "1") -- -- --if (SCP_PLATFORM_VARIANT STREQUAL "1") -- message(NOTICE "SCP_PLATFORM_VARIANT set to EXPERIMENT_POWER (tc0-bl2)\n") -+if (SCP_PLATFORM_FEATURE_SET STREQUAL "1") -+ message(NOTICE "TC0 platform features MPMM/POWER/PERFORMANCE is experimental (tc0-bl2)\n") - - target_compile_definitions(tc0-bl2 -- PUBLIC -DPLATFORM_VARIANT=TC0_VAR_EXPERIMENT_POWER) -+ PUBLIC -DTC0_FEATURES_MPMM_POWER_PERF) - - set(SCP_ENABLE_PLUGIN_HANDLER TRUE PARENT_SCOPE) - set(SCP_ENABLE_FAST_CHANNELS TRUE PARENT_SCOPE) -@@ -56,12 +44,6 @@ if (SCP_PLATFORM_VARIANT STREQUAL "1") - list(PREPEND SCP_MODULE_PATHS - "${CMAKE_CURRENT_LIST_DIR}/../module/tc0_power_model") - target_sources(tc0-bl2 PRIVATE "config_tc0_power_model.c") -- --else() -- message(NOTICE "SCP_PLATFORM_VARIANT set to STANDARD (tc0-bl2)\n") -- -- target_compile_definitions(tc0-bl2 -- PUBLIC -DPLATFORM_VARIANT=TC0_VARIANT_STD) - endif() - - -diff --git a/product/tc0/scp_ramfw/Firmware.cmake b/product/tc0/scp_ramfw/Firmware.cmake -index 11d8eaab..4a555296 100644 ---- a/product/tc0/scp_ramfw/Firmware.cmake -+++ b/product/tc0/scp_ramfw/Firmware.cmake -@@ -27,7 +27,7 @@ set(SCP_ENABLE_FAST_CHANNELS_INIT FALSE) - - set(SCP_ENABLE_PLUGIN_HANDLER_INIT FALSE) - --set(SCP_PLATFORM_VARIANT_INIT 0) -+set(SCP_PLATFORM_FEATURE_SET_INIT 0) - - set(SCP_ARCHITECTURE "armv7-m") - -diff --git a/product/tc0/scp_ramfw/config_scmi_perf.c b/product/tc0/scp_ramfw/config_scmi_perf.c -index a4a47b3a..3e91939a 100644 ---- a/product/tc0/scp_ramfw/config_scmi_perf.c -+++ b/product/tc0/scp_ramfw/config_scmi_perf.c -@@ -129,7 +129,7 @@ static const struct mod_scmi_perf_domain_config domains[] = { - }, - }; - --#if defined(PLATFORM_VARIANT) && (PLATFORM_VARIANT == TC0_VAR_EXPERIMENT_POWER) -+#ifdef TC0_FEATURES_MPMM_POWER_PERF - static const struct mod_scmi_plugin_config plugins_table[] = { - [0] = { - .id = FWK_ID_MODULE_INIT(FWK_MODULE_IDX_TRAFFIC_COP), -@@ -156,9 +156,9 @@ const struct fwk_module_config config_scmi_perf = { - #else - .fast_channels_alarm_id = FWK_ID_NONE_INIT, - #endif --#if defined(PLATFORM_VARIANT) && (PLATFORM_VARIANT == TC0_VAR_EXPERIMENT_POWER) -- .plugins = plugins_table, -- .plugins_count = FWK_ARRAY_SIZE(plugins_table), -+#ifdef TC0_FEATURES_MPMM_POWER_PERF -+ .plugins = plugins_table, -+ .plugins_count = FWK_ARRAY_SIZE(plugins_table), - #endif - }) - }; -diff --git a/product/tc0/scp_romfw/CMakeLists.txt b/product/tc0/scp_romfw/CMakeLists.txt -index f9f40ad3..09cd2f5d 100644 ---- a/product/tc0/scp_romfw/CMakeLists.txt -+++ b/product/tc0/scp_romfw/CMakeLists.txt -@@ -48,6 +48,6 @@ target_include_directories(tc0-bl1 - PUBLIC $<TARGET_PROPERTY:cmsis::core-m,INTERFACE_INCLUDE_DIRECTORIES>) - - cmake_dependent_option( -- SCP_PLATFORM_VARIANT "Choose platform software variant?" -- "${SCP_PLATFORM_VARIANT_INIT}" "DEFINED SCP_PLATFORM_VARIANT_INIT" -- "${SCP_PLATFORM_VARIANT}") -+ SCP_PLATFORM_FEATURE_SET "Choose platform software features?" -+ "${SCP_PLATFORM_FEATURE_SET_INIT}" "DEFINED SCP_PLATFORM_FEATURE_SET_INIT" -+ "${SCP_PLATFORM_FEATURE_SET}") -diff --git a/product/tc0/scp_romfw/Firmware.cmake b/product/tc0/scp_romfw/Firmware.cmake -index ab4468be..e1360159 100644 ---- a/product/tc0/scp_romfw/Firmware.cmake -+++ b/product/tc0/scp_romfw/Firmware.cmake -@@ -21,7 +21,7 @@ set(SCP_ENABLE_NOTIFICATIONS_INIT TRUE) - - set(SCP_ENABLE_IPO_INIT FALSE) - --set(SCP_PLATFORM_VARIANT_INIT 0) -+set(SCP_PLATFORM_FEATURE_SET_INIT 0) - - set(SCP_ARCHITECTURE "armv7-m") - --- -2.30.2 - diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/scp-firmware/files/tc/0004-tc0-support-platform-feature-set-options-in-firmware.patch b/meta-arm/meta-arm-bsp/recipes-bsp/scp-firmware/files/tc/0004-tc0-support-platform-feature-set-options-in-firmware.patch deleted file mode 100644 index aa83332bd6..0000000000 --- a/meta-arm/meta-arm-bsp/recipes-bsp/scp-firmware/files/tc/0004-tc0-support-platform-feature-set-options-in-firmware.patch +++ /dev/null @@ -1,114 +0,0 @@ -From 3e737dd47b228bdeffb06e39bffec7a4a436b244 Mon Sep 17 00:00:00 2001 -From: Arunachalam Ganapathy <arunachalam.ganapathy@arm.com> -Date: Wed, 9 Feb 2022 16:02:10 +0000 -Subject: [PATCH 4/4] tc0: support platform feature set options in firmware.mk - -Support existing platform feature set options that is in cmake to -firmware.mk. Two feature set for TC0 are -0. Standard -1. MPMM/Power/Performance (Experimental) - -Build option to select the feature set is using: -make PRODUCT=tc0 MODE=<debug,release> SCP_PLATFORM_FEATURE_SET=<0,1> - -The default value is set to 0 (Standard). -Refer product/tc0/doc/features.md for more details. - -Signed-off-by: Arunachalam Ganapathy <arunachalam.ganapathy@arm.com> -Change-Id: I4028686a8f8461e0e2c29e15d5e52eb1d37ca60a -Upstream-Status: Pending [Not submitted to upstream yet] ---- - product/tc0/scp_ramfw/firmware.mk | 41 +++++++++++++++++++++++++++++-- - product/tc0/scp_romfw/firmware.mk | 12 +++++++++ - 2 files changed, 51 insertions(+), 2 deletions(-) - -diff --git a/product/tc0/scp_ramfw/firmware.mk b/product/tc0/scp_ramfw/firmware.mk -index ec6e6679..d7515f5b 100644 ---- a/product/tc0/scp_ramfw/firmware.mk -+++ b/product/tc0/scp_ramfw/firmware.mk -@@ -9,8 +9,24 @@ BS_FIRMWARE_CPU := cortex-m3 - BS_FIRMWARE_HAS_NOTIFICATION := yes - BS_FIRMWARE_HAS_RESOURCE_PERMISSIONS := yes - BS_FIRMWARE_USE_NEWLIB_NANO_SPECS := yes --BS_FIRMWARE_HAS_FAST_CHANNELS := no --BS_FIRMWARE_HAS_PERF_PLUGIN_HANDLER := no -+ -+DEFAULT_SCP_PLATFORM_FEATURE_SET := 0 -+ -+export SCP_PLATFORM_FEATURE_SET ?= $(DEFAULT_SCP_PLATFORM_FEATURE_SET) -+ifneq ($(filter-out 0 1, $(SCP_PLATFORM_FEATURE_SET)),) -+ $(error "Invalid for SCP_PLATFORM_FEATURE_SET parameter. Valid options are \ -+ 0 or 1. Aborting...") -+endif -+ -+ifeq ($(SCP_PLATFORM_FEATURE_SET),0) -+ BS_FIRMWARE_HAS_PERF_PLUGIN_HANDLER := no -+ BS_FIRMWARE_HAS_FAST_CHANNELS := no -+else -+ DEFINES += TC0_FEATURES_MPMM_POWER_PERF -+ BS_FIRMWARE_HAS_PERF_PLUGIN_HANDLER := yes -+ BS_FIRMWARE_HAS_FAST_CHANNELS := yes -+ $(info "TC0 platform features POWER/PERFORMANCE is experimental") -+endif - - BS_FIRMWARE_MODULES := \ - armv7m_mpu \ -@@ -44,6 +60,16 @@ ifeq ($(BS_FIRMWARE_HAS_RESOURCE_PERMISSIONS),yes) - BS_FIRMWARE_MODULES += resource_perms - endif - -+ifeq ($(SCP_PLATFORM_FEATURE_SET),1) -+BS_FIRMWARE_MODULES += \ -+ traffic_cop \ -+ mpmm \ -+ sensor \ -+ reg_sensor \ -+ thermal_mgmt \ -+ tc0_power_model -+endif -+ - BS_FIRMWARE_SOURCES := \ - config_system_power.c \ - config_armv7m_mpu.c \ -@@ -75,4 +101,15 @@ ifeq ($(BS_FIRMWARE_HAS_RESOURCE_PERMISSIONS),yes) - BS_FIRMWARE_SOURCES += config_resource_perms.c - endif - -+ifeq ($(SCP_PLATFORM_FEATURE_SET),1) -+ BS_FIRMWARE_SOURCES += \ -+ config_traffic_cop.c \ -+ config_mpmm.c \ -+ config_sensor.c \ -+ config_reg_sensor.c \ -+ config_thermal_mgmt.c \ -+ config_tc0_power_model.c -+endif -+ -+ - include $(BS_DIR)/firmware.mk -diff --git a/product/tc0/scp_romfw/firmware.mk b/product/tc0/scp_romfw/firmware.mk -index 9977712f..0012b9fa 100644 ---- a/product/tc0/scp_romfw/firmware.mk -+++ b/product/tc0/scp_romfw/firmware.mk -@@ -9,6 +9,18 @@ BS_FIRMWARE_CPU := cortex-m3 - BS_FIRMWARE_HAS_NOTIFICATION := yes - BS_FIRMWARE_USE_NEWLIB_NANO_SPECS := yes - -+DEFAULT_SCP_PLATFORM_FEATURE_SET := 0 -+ -+export SCP_PLATFORM_FEATURE_SET ?= $(DEFAULT_SCP_PLATFORM_FEATURE_SET) -+ifneq ($(filter-out 0 1, $(SCP_PLATFORM_FEATURE_SET)),) -+ $(error "Invalid for SCP_PLATFORM_FEATURE_SET parameter. Valid options are \ -+ 0 or 1. Aborting...") -+endif -+ -+ifeq ($(SCP_PLATFORM_FEATURE_SET),1) -+ $(info "TC0 platform features POWER/PERFORMANCE is experimental") -+endif -+ - BS_FIRMWARE_MODULE_HEADERS_ONLY := \ - power_domain \ - timer --- -2.30.2 - diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/scp-firmware/scp-firmware-tc.inc b/meta-arm/meta-arm-bsp/recipes-bsp/scp-firmware/scp-firmware-tc.inc index a6a005c1a7..3cbadad88d 100644 --- a/meta-arm/meta-arm-bsp/recipes-bsp/scp-firmware/scp-firmware-tc.inc +++ b/meta-arm/meta-arm-bsp/recipes-bsp/scp-firmware/scp-firmware-tc.inc @@ -1,14 +1,6 @@ # TC specific SCP configuration -FILESEXTRAPATHS:prepend := "${THISDIR}/files/tc:" -SRC_URI:append:tc = " \ - file://0002-tc0-fix-mpmm-config.patch \ - file://0003-tc0-rename-platform-variant-to-platform-feature-set.patch \ - file://0004-tc0-support-platform-feature-set-options-in-firmware.patch \ - " +COMPATIBLE_MACHINE = "(tc1)" -COMPATIBLE_MACHINE = "(tc?)" - -SCP_PLATFORM:tc0 = "tc0" SCP_PLATFORM:tc1 = "tc1" FW_TARGETS = "scp" diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0031-ffa-add-support-for-32-bit-direct-messaging.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0031-ffa-add-support-for-32-bit-direct-messaging.patch new file mode 100644 index 0000000000..ac0638e02a --- /dev/null +++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0031-ffa-add-support-for-32-bit-direct-messaging.patch @@ -0,0 +1,182 @@ +From 6cb8e5f83d53357fbc6e58c2c5c5a3450654f9e6 Mon Sep 17 00:00:00 2001 +From: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com> +Date: Wed, 19 Oct 2022 17:51:10 +0100 +Subject: [PATCH] arm_ffa: add support for 32-bit direct messaging + +add 32-bit mode for FFA_MSG_SEND_DIRECT_REQ and FFA_MSG_SEND_DIRECT_RESP + +Tested-by: Mohamed Omar Asaker <mohamed.omarasaker@arm.com> +Signed-off-by: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com> +Upstream-Status: Pending [Not submitted to upstream yet] +--- + cmd/armffa.c | 2 +- + drivers/firmware/arm-ffa/core.c | 17 ++++++++++++++--- + drivers/firmware/arm-ffa/sandbox.c | 2 +- + include/arm_ffa.h | 2 +- + lib/efi_loader/efi_capsule.c | 2 +- + lib/efi_loader/efi_setup.c | 2 +- + lib/efi_loader/efi_variable_tee.c | 2 +- + test/dm/ffa.c | 6 +++--- + 8 files changed, 23 insertions(+), 12 deletions(-) + +diff --git a/cmd/armffa.c b/cmd/armffa.c +index 9b56e8a830..9842b99181 100644 +--- a/cmd/armffa.c ++++ b/cmd/armffa.c +@@ -129,7 +129,7 @@ int do_ffa_msg_send_direct_req(struct cmd_tbl *cmdtp, int flag, int argc, + return -EINVAL; + } + +- ret = ffa_bus_ops_get()->sync_send_receive(part_id, &msg); ++ ret = ffa_bus_ops_get()->sync_send_receive(part_id, &msg, 1); + if (ret == 0) { + u8 cnt; + +diff --git a/drivers/firmware/arm-ffa/core.c b/drivers/firmware/arm-ffa/core.c +index caba10caae..ba1ba59937 100644 +--- a/drivers/firmware/arm-ffa/core.c ++++ b/drivers/firmware/arm-ffa/core.c +@@ -1032,6 +1032,7 @@ static int ffa_cache_partitions_info(void) + * ffa_msg_send_direct_req - FFA_MSG_SEND_DIRECT_{REQ,RESP} handler function + * @dst_part_id: destination partition ID + * @msg: pointer to the message data preallocated by the client (in/out) ++ * @is_smc64: select 64-bit or 32-bit FF-A ABI + * + * This is the runtime function that implements FFA_MSG_SEND_DIRECT_{REQ,RESP} + * FF-A functions. +@@ -1048,10 +1049,12 @@ static int ffa_cache_partitions_info(void) + * + * 0 on success. Otherwise, failure + */ +-static int __ffa_runtime ffa_msg_send_direct_req(u16 dst_part_id, struct ffa_send_direct_data *msg) ++static int __ffa_runtime ffa_msg_send_direct_req(u16 dst_part_id, struct ffa_send_direct_data *msg, ++ u8 is_smc64) + { + ffa_value_t res = {0}; + int ffa_errno; ++ u64 req_mode, resp_mode; + + if (!ffa_priv_data || !ffa_priv_data->invoke_ffa_fn) + return -EINVAL; +@@ -1060,8 +1063,16 @@ static int __ffa_runtime ffa_msg_send_direct_req(u16 dst_part_id, struct ffa_sen + if (!ffa_priv_data->partitions.count || !ffa_priv_data->partitions.descs) + return -ENODEV; + ++ if(is_smc64) { ++ req_mode = FFA_SMC_64(FFA_MSG_SEND_DIRECT_REQ); ++ resp_mode = FFA_SMC_64(FFA_MSG_SEND_DIRECT_RESP); ++ } else { ++ req_mode = FFA_SMC_32(FFA_MSG_SEND_DIRECT_REQ); ++ resp_mode = FFA_SMC_32(FFA_MSG_SEND_DIRECT_RESP); ++ } ++ + ffa_priv_data->invoke_ffa_fn((ffa_value_t){ +- .a0 = FFA_SMC_64(FFA_MSG_SEND_DIRECT_REQ), ++ .a0 = req_mode, + .a1 = PREP_SELF_ENDPOINT_ID(ffa_priv_data->id) | + PREP_PART_ENDPOINT_ID(dst_part_id), + .a2 = 0, +@@ -1083,7 +1094,7 @@ static int __ffa_runtime ffa_msg_send_direct_req(u16 dst_part_id, struct ffa_sen + return 0; + } + +- if (res.a0 == FFA_SMC_64(FFA_MSG_SEND_DIRECT_RESP)) { ++ if (res.a0 == resp_mode){ + /* + * Message sent with response + * extract the return data +diff --git a/drivers/firmware/arm-ffa/sandbox.c b/drivers/firmware/arm-ffa/sandbox.c +index 16e1fdc809..8e8549441d 100644 +--- a/drivers/firmware/arm-ffa/sandbox.c ++++ b/drivers/firmware/arm-ffa/sandbox.c +@@ -430,7 +430,7 @@ static int sandbox_ffa_sp_valid(u16 part_id) + * @{a0-a7} , res: The SMC call arguments and return structure. + * + * This is the function that emulates FFA_MSG_SEND_DIRECT_{REQ,RESP} +- * FF-A functions. ++ * FF-A functions. Only SMC 64-bit is supported in Sandbox. + * + * Emulating interrupts is not supported. So, FFA_RUN and FFA_INTERRUPT are not supported. + * In case of success FFA_MSG_SEND_DIRECT_RESP is returned with default pattern data (0xff). +diff --git a/include/arm_ffa.h b/include/arm_ffa.h +index 665413a0c5..4a7c59ff28 100644 +--- a/include/arm_ffa.h ++++ b/include/arm_ffa.h +@@ -97,7 +97,7 @@ struct __packed ffa_send_direct_data { + struct ffa_bus_ops { + int (*partition_info_get)(const char *uuid_str, + u32 *parts_size, struct ffa_partition_info *buffer); +- int (*sync_send_receive)(u16 dst_part_id, struct ffa_send_direct_data *msg); ++ int (*sync_send_receive)(u16 dst_part_id, struct ffa_send_direct_data *msg, u8 is_smc64); + int (*rxtx_unmap)(void); + }; + +diff --git a/lib/efi_loader/efi_capsule.c b/lib/efi_loader/efi_capsule.c +index 65e2fc8296..c479c53d04 100644 +--- a/lib/efi_loader/efi_capsule.c ++++ b/lib/efi_loader/efi_capsule.c +@@ -591,7 +591,7 @@ static int __efi_runtime efi_corstone1000_buffer_ready_event(u32 capsule_image_s + msg.data1 = PREP_SEPROXY_SVC_ID(CORSTONE1000_SEPROXY_UPDATE_SVC_ID) | + PREP_SEPROXY_EVT(CORSTONE1000_BUFFER_READY_EVT); /* w4 */ + +- return ffa_bus_ops_get()->sync_send_receive(CORSTONE1000_SEPROXY_PART_ID, &msg); ++ return ffa_bus_ops_get()->sync_send_receive(CORSTONE1000_SEPROXY_PART_ID, &msg, 0); + } + #endif + +diff --git a/lib/efi_loader/efi_setup.c b/lib/efi_loader/efi_setup.c +index 6ccda175ff..416af8d663 100644 +--- a/lib/efi_loader/efi_setup.c ++++ b/lib/efi_loader/efi_setup.c +@@ -153,7 +153,7 @@ static int efi_corstone1000_uboot_efi_started_event(void) + msg.data1 = PREP_SEPROXY_SVC_ID(CORSTONE1000_SEPROXY_UPDATE_SVC_ID) | + PREP_SEPROXY_EVT(CORSTONE1000_UBOOT_EFI_STARTED_EVT); /* w4 */ + +- return ffa_bus_ops_get()->sync_send_receive(CORSTONE1000_SEPROXY_PART_ID, &msg); ++ return ffa_bus_ops_get()->sync_send_receive(CORSTONE1000_SEPROXY_PART_ID, &msg, 0); + } + #endif + +diff --git a/lib/efi_loader/efi_variable_tee.c b/lib/efi_loader/efi_variable_tee.c +index 7d9d577281..05f3c02911 100644 +--- a/lib/efi_loader/efi_variable_tee.c ++++ b/lib/efi_loader/efi_variable_tee.c +@@ -201,7 +201,7 @@ static int __efi_runtime ffa_notify_mm_sp(void) + + msg.data0 = FFA_SHARED_MM_BUFFER_OFFSET; /* x3 */ + +- ret = ffa_bus_ops_get()->sync_send_receive(mm_sp_id, &msg); ++ ret = ffa_bus_ops_get()->sync_send_receive(mm_sp_id, &msg, 1); + if (ret != 0) + return ret; + +diff --git a/test/dm/ffa.c b/test/dm/ffa.c +index 052d5fc3f4..14b19cf71e 100644 +--- a/test/dm/ffa.c ++++ b/test/dm/ffa.c +@@ -170,7 +170,7 @@ static int test_ffa_msg_send_direct_req(u16 part_id, struct unit_test_state *ut + struct ffa_send_direct_data msg = {0}; + u8 cnt; + +- ut_assertok(ffa_bus_ops_get()->sync_send_receive(part_id, &msg)); ++ ut_assertok(ffa_bus_ops_get()->sync_send_receive(part_id, &msg, 1)); + + for (cnt = 0; cnt < sizeof(struct ffa_send_direct_data) / sizeof(u64); cnt++) + ut_assertok(((u64 *)&msg)[cnt] != 0xffffffffffffffff); +@@ -380,12 +380,12 @@ static int dm_test_ffa_nack(struct unit_test_state *uts) + ut_assertok(count != SANDBOX_SP_COUNT_PER_VALID_SERVICE); + + /* send data to an invalid partition */ +- ret = ffa_bus_ops_get()->sync_send_receive(part_id, &msg); ++ ret = ffa_bus_ops_get()->sync_send_receive(part_id, &msg, 1); + ut_assertok(ret != -EINVAL); + + /* send data to a valid partition */ + part_id = prvdata->partitions.descs[0].info.id; +- ret = ffa_bus_ops_get()->sync_send_receive(part_id, &msg); ++ ret = ffa_bus_ops_get()->sync_send_receive(part_id, &msg, 1); + ut_assertok(ret != 0); + + return CMD_RET_SUCCESS; +-- +2.17.1 diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot_%.bbappend b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot_%.bbappend index 465f034933..6144e97ac6 100644 --- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot_%.bbappend +++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot_%.bbappend @@ -48,7 +48,8 @@ SRC_URI:append:corstone1000 = " \ file://0028-Introduce-external-sys-driver-to-device-tree.patch \ file://0029-Add-mhu-and-rpmsg-client-to-u-boot-device-tree.patch \ file://0030-arm-corstone1000-esrt-support.patch \ - " + file://0031-ffa-add-support-for-32-bit-direct-messaging.patch \ + " # # FVP BASE |