From: Abdellatif El Khlifi <abdellatif.elkhl...@arm.com> Add positive and negative test cases
Signed-off-by: Abdellatif El Khlifi <abdellatif.elkhl...@arm.com> --- test/dm/ffa.c | 46 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/test/dm/ffa.c b/test/dm/ffa.c index 593b7177fce..4fd21ac3d72 100644 --- a/test/dm/ffa.c +++ b/test/dm/ffa.c @@ -2,7 +2,7 @@ /* * Functional tests for UCLASS_FFA class * - * Copyright 2022-2023 Arm Limited and/or its affiliates <open-source-off...@arm.com> + * Copyright 2022-2024 Arm Limited and/or its affiliates <open-source-off...@arm.com> * * Authors: * Abdellatif El Khlifi <abdellatif.elkhl...@arm.com> @@ -13,6 +13,7 @@ #include <asm/sandbox_arm_ffa.h> #include <asm/sandbox_arm_ffa_priv.h> #include <dm/test.h> +#include <linux/sizes.h> #include <test/test.h> #include <test/ut.h> @@ -141,6 +142,43 @@ static int test_partitions_and_comms(const char *service_uuid, return 0; } +static int test_ffa_memory_share(bool test_ack, struct unit_test_state *uts) +{ + struct ffa_mem_ops_args args = {0}; + struct ffa_mem_region_attributes attrs = {0}; + static u8 buf[SZ_4K]; + int ret; + struct udevice *dev; + + ut_assertok(uclass_first_device_err(UCLASS_FFA, &dev)); + + args.attrs = &attrs; + args.nattrs = 1; + args.address = buf; + args.pg_cnt = 1; + + if (test_ack) { + args.use_txbuf = true; + + ut_assertok(ffa_memory_share(dev, &args)); + ut_asserteq(HANDLE_LOW(args.g_handle), SANDBOX_MEM_HANDLE); + ut_asserteq(HANDLE_HIGH(args.g_handle), SANDBOX_MEM_HANDLE); + } else { + /* Do not use the TX buffer as a transaction buffer */ + args.use_txbuf = false; + ret = ffa_memory_share(dev, &args); + ut_asserteq(-EPROTONOSUPPORT, ret); + + /* No memory region address given */ + args.use_txbuf = true; + args.address = NULL; + ret = ffa_memory_share(dev, &args); + ut_asserteq(-EINVAL, ret); + } + + return 0; +} + static int dm_test_ffa_ack(struct unit_test_state *uts) { struct ffa_priv *uc_priv; @@ -195,6 +233,9 @@ static int dm_test_ffa_ack(struct unit_test_state *uts) ut_assertok(sandbox_query_ffa_emul_state(FFA_RX_RELEASE, &func_data)); check_rxbuf_release_flag(rxbuf_flag, uts); + /* Test FFA_MEM_SHARE */ + test_ffa_memory_share(true, uts); + return 0; } DM_TEST(dm_test_ffa_ack, UTF_SCAN_FDT | UTF_CONSOLE); @@ -253,6 +294,9 @@ static int dm_test_ffa_nack(struct unit_test_state *uts) part_id = uc_priv->partitions.descs[0].info.id; ut_assertok(ffa_sync_send_receive(dev, part_id, &msg, 1)); + /* Test FFA_MEM_SHARE */ + test_ffa_memory_share(false, uts); + return 0; } DM_TEST(dm_test_ffa_nack, UTF_SCAN_FDT | UTF_CONSOLE); -- 2.25.1