diff options
author | Jeenu Viswambharan <jeenu.viswambharan@arm.com> | 2018-03-15 10:48:13 +0000 |
---|---|---|
committer | Jeenu Viswambharan <jeenu.viswambharan@arm.com> | 2018-03-15 11:10:39 +0000 |
commit | dd0355e3b82c71f1bfb0dc36367fd11455b3b85d (patch) | |
tree | a3dc6a29e0fac2298ecb13b2884a1fe9ad33cf25 | |
parent | 0a6b80dc264906f213460c6d52eec82f6c825c9c (diff) |
Add a test for Unknown SMC
The Unkonwn SMC path may get tested implicitly by other tests, but it's
good to have a directed one. This patch adds a test case that makes
an SMC calls with function identifier known to fall in the reserved
range, so the return value of 'unknown SMC' is expected.
Change-Id: I3e82d48b69ca7e6fea4367ae2d6b1d30e80a079e
Signed-off-by: Jeenu Viswambharan <jeenu.viswambharan@arm.com>
-rw-r--r-- | tests/runtime_services/standard_service/unknown_smc.c | 57 | ||||
-rw-r--r-- | tests/tests-psci.xml | 1 | ||||
-rw-r--r-- | tests/tests.mk | 1 |
3 files changed, 59 insertions, 0 deletions
diff --git a/tests/runtime_services/standard_service/unknown_smc.c b/tests/runtime_services/standard_service/unknown_smc.c new file mode 100644 index 0000000..6865af0 --- /dev/null +++ b/tests/runtime_services/standard_service/unknown_smc.c @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2018, ARM Limited and Contributors. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * Neither the name of ARM nor the names of its contributors may be used + * to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include <smc.h> +#include <std_svc.h> +#include <tftf_lib.h> +#include <uuid_utils.h> + +/* Invalid SMC FID: chose an identifier that falls in the reserved space */ +#define INVALID_FID (0x00ff0000 | (1u << 31)) + +/** + * @Test_Aim@ Force an SMC_UNKNOWN return + */ +test_result_t test_unknown_smc(void) +{ + smc_args unk_smc; + smc_ret_values ret; + + unk_smc.arg0 = INVALID_FID; + ret = tftf_smc(&unk_smc); + + if (ret.ret0 != SMC_UNKNOWN) { + tftf_testcase_printf("Expected SMC_UNKNOWN, got %ld\n", + (long int) ret.ret0); + return TEST_RESULT_FAIL; + } + + return TEST_RESULT_SUCCESS; +} diff --git a/tests/tests-psci.xml b/tests/tests-psci.xml index 913f8b4..f2fd6b1 100644 --- a/tests/tests-psci.xml +++ b/tests/tests-psci.xml @@ -19,6 +19,7 @@ nonetheless to avoid having it alone in a separate XML file. --> <testsuite name="Query runtime services" description="Generic queries as defined by the SMCCC"> + <testcase name="Unknown SMC" function="test_unknown_smc" /> <testcase name="Query Standard Service" function="test_query_std_svc" /> </testsuite> diff --git a/tests/tests.mk b/tests/tests.mk index ec64b84..ede5add 100644 --- a/tests/tests.mk +++ b/tests/tests.mk @@ -36,6 +36,7 @@ TESTS_SOURCES := tests/extensions/amu/test_amu.c \ tests/runtime_services/standard_service/psci/api_tests/mem_protect_check/mem_protect_check.c \ tests/runtime_services/standard_service/psci/api_tests/reset2/reset2.c \ tests/runtime_services/standard_service/query_std_svc.c \ + tests/runtime_services/standard_service/unknown_smc.c \ tests/runtime_services/standard_service/sdei/system_tests/sdei_entrypoint.S \ tests/runtime_services/standard_service/sdei/system_tests/test_sdei.c \ tests/runtime_services/standard_service/sdei/system_tests/test_sdei_state.c \ |