diff options
author | Olivier Deprez <olivier.deprez@arm.com> | 2022-11-30 13:41:37 +0100 |
---|---|---|
committer | TrustedFirmware Code Review <review@review.trustedfirmware.org> | 2022-11-30 13:41:37 +0100 |
commit | 4ca852f826e4b1e43739493c4d0916a426a8722a (patch) | |
tree | a36639a7089b3c898021af58c5208eb109d8a66c | |
parent | 93eb010ed1008d0f4e4291104484b7d3ba09e18a (diff) | |
parent | 7774d6e975aabe01903b7ca9d7557386f4502bf6 (diff) | |
download | tf-a-tests-4ca852f826e4b1e43739493c4d0916a426a8722a.tar.gz |
Merge "test(ff-a): check execution state property of partitions"
-rw-r--r-- | include/runtime_services/ffa_helpers.h | 25 | ||||
-rw-r--r-- | spm/common/sp_tests/sp_test_ffa.c | 12 | ||||
-rw-r--r-- | tftf/tests/runtime_services/secure_service/test_ffa_setup_and_discovery.c | 20 |
3 files changed, 38 insertions, 19 deletions
diff --git a/include/runtime_services/ffa_helpers.h b/include/runtime_services/ffa_helpers.h index 1635bf827..3da5c18b0 100644 --- a/include/runtime_services/ffa_helpers.h +++ b/include/runtime_services/ffa_helpers.h @@ -133,21 +133,21 @@ struct ffa_boot_info_header { #define FFA_FEATURE_MEI 0x3U /** Partition property: partition supports receipt of direct requests. */ -#define FFA_PARTITION_DIRECT_REQ_RECV 0x1 +#define FFA_PARTITION_DIRECT_REQ_RECV (UINT32_C(1) << 0) /** Partition property: partition can send direct requests. */ -#define FFA_PARTITION_DIRECT_REQ_SEND 0x2 +#define FFA_PARTITION_DIRECT_REQ_SEND (UINT32_C(1) << 1) /** Partition property: partition can send and receive indirect messages. */ -#define FFA_PARTITION_INDIRECT_MSG 0x4 +#define FFA_PARTITION_INDIRECT_MSG (UINT32_C(1) << 2) /** Partition property: partition can receive notifications. */ -#define FFA_PARTITION_NOTIFICATION 0x8 +#define FFA_PARTITION_NOTIFICATION (UINT32_C(1) << 3) -/** - * Partition info descriptor as defined in Table 13.34 of the v1.1 BETA0 - * FF-A Specification - */ +/** Partition property: partition runs in the AArch64 execution state. */ +#define FFA_PARTITION_AARCH64_EXEC (UINT32_C(1) << 8) + +/** Partition info descriptor as defined in FF-A v1.1 EAC0 Table 13.37 */ struct ffa_partition_info { /** The ID of the VM the information is about */ ffa_id_t id; @@ -160,8 +160,15 @@ struct ffa_partition_info { }; /** + * Bits[31:3] of partition properties must be zero for FF-A v1.0. + * This corresponds to table 8.25 "Partition information descriptor" + * in DEN0077A FF-A 1.0 REL specification. + */ +#define FFA_PARTITION_v1_0_RES_MASK (~(UINT32_C(0x7))) + +/** * Partition info descriptor as defined in Table 8.25 of the v1.0 - * FF-A Specification + * FF-A Specification (DEN0077A). */ struct ffa_partition_info_v1_0 { /** The ID of the VM the information is about */ diff --git a/spm/common/sp_tests/sp_test_ffa.c b/spm/common/sp_tests/sp_test_ffa.c index dd984592e..80211a8d1 100644 --- a/spm/common/sp_tests/sp_test_ffa.c +++ b/spm/common/sp_tests/sp_test_ffa.c @@ -30,7 +30,8 @@ static const struct ffa_partition_info ffa_expected_partition_info[] = { { .id = SP_ID(1), .exec_context = PRIMARY_EXEC_CTX_COUNT, - .properties = (FFA_PARTITION_DIRECT_REQ_RECV | + .properties = (FFA_PARTITION_AARCH64_EXEC | + FFA_PARTITION_DIRECT_REQ_RECV | FFA_PARTITION_DIRECT_REQ_SEND | FFA_PARTITION_NOTIFICATION), .uuid = sp_uuids[0] @@ -39,7 +40,8 @@ static const struct ffa_partition_info ffa_expected_partition_info[] = { { .id = SP_ID(2), .exec_context = SECONDARY_EXEC_CTX_COUNT, - .properties = (FFA_PARTITION_DIRECT_REQ_RECV | + .properties = (FFA_PARTITION_AARCH64_EXEC | + FFA_PARTITION_DIRECT_REQ_RECV | FFA_PARTITION_DIRECT_REQ_SEND | FFA_PARTITION_NOTIFICATION), .uuid = sp_uuids[1] @@ -48,7 +50,8 @@ static const struct ffa_partition_info ffa_expected_partition_info[] = { { .id = SP_ID(3), .exec_context = TERTIARY_EXEC_CTX_COUNT, - .properties = (FFA_PARTITION_DIRECT_REQ_RECV | + .properties = (FFA_PARTITION_AARCH64_EXEC | + FFA_PARTITION_DIRECT_REQ_RECV | FFA_PARTITION_DIRECT_REQ_SEND | FFA_PARTITION_NOTIFICATION), .uuid = sp_uuids[2] @@ -57,7 +60,8 @@ static const struct ffa_partition_info ffa_expected_partition_info[] = { { .id = SP_ID(4), .exec_context = IVY_EXEC_CTX_COUNT, - .properties = (FFA_PARTITION_DIRECT_REQ_RECV | + .properties = (FFA_PARTITION_AARCH64_EXEC | + FFA_PARTITION_DIRECT_REQ_RECV | FFA_PARTITION_DIRECT_REQ_SEND), .uuid = sp_uuids[3] } diff --git a/tftf/tests/runtime_services/secure_service/test_ffa_setup_and_discovery.c b/tftf/tests/runtime_services/secure_service/test_ffa_setup_and_discovery.c index b80f9c4ff..1300f7030 100644 --- a/tftf/tests/runtime_services/secure_service/test_ffa_setup_and_discovery.c +++ b/tftf/tests/runtime_services/secure_service/test_ffa_setup_and_discovery.c @@ -27,7 +27,8 @@ static const struct ffa_partition_info ffa_expected_partition_info[] = { { .id = SP_ID(1), .exec_context = PRIMARY_EXEC_CTX_COUNT, - .properties = FFA_PARTITION_DIRECT_REQ_RECV | + .properties = FFA_PARTITION_AARCH64_EXEC | + FFA_PARTITION_DIRECT_REQ_RECV | FFA_PARTITION_NOTIFICATION, .uuid = sp_uuids[0] }, @@ -35,7 +36,8 @@ static const struct ffa_partition_info ffa_expected_partition_info[] = { { .id = SP_ID(2), .exec_context = SECONDARY_EXEC_CTX_COUNT, - .properties = FFA_PARTITION_DIRECT_REQ_RECV | + .properties = FFA_PARTITION_AARCH64_EXEC | + FFA_PARTITION_DIRECT_REQ_RECV | FFA_PARTITION_NOTIFICATION, .uuid = sp_uuids[1] }, @@ -43,7 +45,8 @@ static const struct ffa_partition_info ffa_expected_partition_info[] = { { .id = SP_ID(3), .exec_context = TERTIARY_EXEC_CTX_COUNT, - .properties = FFA_PARTITION_DIRECT_REQ_RECV | + .properties = FFA_PARTITION_AARCH64_EXEC | + FFA_PARTITION_DIRECT_REQ_RECV | FFA_PARTITION_NOTIFICATION, .uuid = sp_uuids[2] }, @@ -51,7 +54,8 @@ static const struct ffa_partition_info ffa_expected_partition_info[] = { { .id = SP_ID(4), .exec_context = IVY_EXEC_CTX_COUNT, - .properties = FFA_PARTITION_DIRECT_REQ_RECV, + .properties = FFA_PARTITION_AARCH64_EXEC | + FFA_PARTITION_DIRECT_REQ_RECV, .uuid = sp_uuids[3] } }; @@ -399,6 +403,10 @@ test_result_t test_ffa_partition_info_v1_0(void) (const struct ffa_partition_info_v1_0 *)(mb.recv); for (unsigned int i = 0U; i < expected_size; i++) { + uint32_t expected_properties_v1_0 = + ffa_expected_partition_info[i].properties & + ~FFA_PARTITION_v1_0_RES_MASK; + if (info[i].id != ffa_expected_partition_info[i].id) { ERROR("Wrong ID. Expected %x, got %x\n", ffa_expected_partition_info[i].id, @@ -413,9 +421,9 @@ test_result_t test_ffa_partition_info_v1_0(void) result = TEST_RESULT_FAIL; } if (info[i].properties != - ffa_expected_partition_info[i].properties) { + expected_properties_v1_0) { ERROR("Wrong properties. Expected %d, got %d\n", - ffa_expected_partition_info[i].properties, + expected_properties_v1_0, info[i].properties); result = TEST_RESULT_FAIL; } |