From cc87406098863144313840aba16f536c98e5d246 Mon Sep 17 00:00:00 2001 From: Cristian Marussi Date: Wed, 11 Dec 2024 10:13:19 +0000 Subject: [PATCH 01/19] Introduce and use safe read/write routine On a POSIX system read/write syscalls can return successfully even when not all the requested bytes were not read or written. Introduce 2 wrapper functions to make sure that the read completes only on EOF (0 bytes) and the write only when the full buffer has been written out, while still bailing on errors other than -EINTR. Make use of these new helpers in place of the bare read/write invocation. Signed-off-by: Cristian Marussi --- platform/linux/common/transport_raw.c | 46 ++++++++++++++++++++++++--- 1 file changed, 41 insertions(+), 5 deletions(-) diff --git a/platform/linux/common/transport_raw.c b/platform/linux/common/transport_raw.c index bc53344..4f9b2d1 100644 --- a/platform/linux/common/transport_raw.c +++ b/platform/linux/common/transport_raw.c @@ -60,6 +60,42 @@ struct linux_scmi_raw_config { static struct linux_scmi_raw_config *rawc; +static int safe_read(int fd, void *buf, size_t count) +{ + int ret, bytes = 0; + + do { + ret = read(fd, buf + bytes, count - bytes); + if (ret < 0) { + if (errno == -EINTR) + continue; + return ret; + } + bytes += ret; + } while (ret); + + return bytes; +} + +static int safe_write(int fd, const void *buf, size_t count) +{ + int bytes = 0; + + do { + int ret; + + ret = write(fd, buf + bytes, count - bytes); + if (ret < 0) { + if (errno == -EINTR) + continue; + return ret; + } + bytes += ret; + } while (count > bytes); + + return bytes; +} + static int linux_read_integer_from_file(int fd_base, char *filepath, unsigned long *val) { @@ -167,7 +203,7 @@ uint32_t linux_initialize_system(void *info) /* Flush any pending SCMI messages on start...just in case */ val_print(VAL_PRINT_INFO, "\n Resetting SCMI kernel Raw queues."); - write(conf->fd_reset, "Y\n", 3); + safe_write(conf->fd_reset, "Y\n", 3); rawc = conf; atexit(scmi_raw_mode_cleanup); @@ -216,7 +252,7 @@ static int32_t __linux_send_message(uint32_t message_header_send, size_t paramet if (fd_message < 0) return ERROR; - write(fd_message, buffer, + safe_write(fd_message, buffer, sizeof(uint32_t) + parameter_count * sizeof(uint32_t)); /* polling */ @@ -229,7 +265,7 @@ static int32_t __linux_send_message(uint32_t message_header_send, size_t paramet } /* read returned message into the buffer */ - count = read(fd_message, buffer, rawc->max_msg_size); + count = safe_read(fd_message, buffer, rawc->max_msg_size); if (count < 0) { close(fd_message); return ERROR; @@ -316,7 +352,7 @@ int linux_wait_for_response(uint32_t *message_header_rcv, } /* read returned message into the buffer */ - count = read(fd_message, buffer, rawc->max_msg_size); + count = safe_read(fd_message, buffer, rawc->max_msg_size); if (count < 0) { close(fd_message); return ERROR; @@ -375,7 +411,7 @@ int linux_wait_for_notification(uint32_t *message_header_rcv, } /* read returned message into the buffer */ - count = read(fd_message, buffer, rawc->max_msg_size); + count = safe_read(fd_message, buffer, rawc->max_msg_size); if (count < 0) { close(fd_message); return ERROR; -- GitLab From f117f65b45dcf18cfdbf2b54fff004e6d94e4080 Mon Sep 17 00:00:00 2001 From: Cristian Marussi Date: Wed, 11 Dec 2024 11:45:10 +0000 Subject: [PATCH 02/19] Add DUMMY Powercap support to JUNO Add minimal dummy Powercap expectations on JUNO to avoid break the build when compiling Powercap against JUNO. Signed-off-by: Cristian Marussi --- .../juno/include/pal_powercap_expected.h | 30 +++++++++++++ platform/linux/juno/pal_powercap.c | 43 +++++++++++++++++++ 2 files changed, 73 insertions(+) create mode 100644 platform/linux/juno/include/pal_powercap_expected.h create mode 100644 platform/linux/juno/pal_powercap.c diff --git a/platform/linux/juno/include/pal_powercap_expected.h b/platform/linux/juno/include/pal_powercap_expected.h new file mode 100644 index 0000000..a5b64f3 --- /dev/null +++ b/platform/linux/juno/include/pal_powercap_expected.h @@ -0,0 +1,30 @@ +/** @file + * Copyright (c) 2021, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#ifndef __PAL_POWERCAP_EXPECTED_H__ +#define __PAL_POWERCAP_EXPECTED_H__ + +#ifdef POWERCAP_PROTOCOL + +uint32_t num_powercap_domains = 0x01; + +static char *powercap_domain_name[] = { + "DUMMY", +}; +#endif + +#endif /* __PAL_POWERCAP_EXPECTED_H__ */ diff --git a/platform/linux/juno/pal_powercap.c b/platform/linux/juno/pal_powercap.c new file mode 100644 index 0000000..034ce09 --- /dev/null +++ b/platform/linux/juno/pal_powercap.c @@ -0,0 +1,43 @@ +/** @file + * Copyright (c) 2021, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#ifdef POWERCAP_PROTOCOL + +#include "pal_interface.h" +#include "pal_powercap_expected.h" + +/** + @brief This API is used for checking num of powercap domain + @param none + @return num of powercap domain +**/ +uint32_t pal_powercap_get_expected_num_domains(void) +{ + return num_powercap_domains; +} + +/** + @brief This API is used for checking powercap domain name + @param domain id + @return powercap domain name +**/ +uint8_t *pal_powercap_get_expected_name(uint32_t domain_id) +{ + return (uint8_t *)powercap_domain_name[domain_id]; +} + +#endif -- GitLab From 4d849d2053ce3b5b8cbb33329cabea10d76fc1ce Mon Sep 17 00:00:00 2001 From: Cristian Marussi Date: Tue, 10 Dec 2024 15:12:40 +0000 Subject: [PATCH 03/19] Update JUNO platform expectations to latest released fw Update JUNO expectation to latest v2.15.0 SCP fw. Signed-off-by: Cristian Marussi --- platform/linux/juno/include/pal_base_expected.h | 2 +- platform/linux/juno/include/pal_clock_expected.h | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/platform/linux/juno/include/pal_base_expected.h b/platform/linux/juno/include/pal_base_expected.h index a7ec82a..d2d84b6 100644 --- a/platform/linux/juno/include/pal_base_expected.h +++ b/platform/linux/juno/include/pal_base_expected.h @@ -38,6 +38,6 @@ static char *agents[] = { static char *vendor_name = "arm"; static char *subvendor_name = "arm"; -static uint32_t implementation_version = VERSION_ENCODE32(2, 10, 0); +static uint32_t implementation_version = VERSION_ENCODE32(2, 15, 0); #endif /* __PAL_BASE_EXPECTED_H__ */ diff --git a/platform/linux/juno/include/pal_clock_expected.h b/platform/linux/juno/include/pal_clock_expected.h index 23be62c..dfc7b20 100644 --- a/platform/linux/juno/include/pal_clock_expected.h +++ b/platform/linux/juno/include/pal_clock_expected.h @@ -28,8 +28,8 @@ static uint32_t num_of_clock_rates[] = { 0x5, /* BIG_CLK */ 0x5, /* LITTLE_CLK */ 0x5, /* GPU_CLK */ - 0x1, /* HDLCD_0 */ - 0x1, /* HDLCD_1 */ + 0x3, /* HDLCD_0 */ + 0x3, /* HDLCD_1 */ 0x7 /* I2SCLK */ }; -- GitLab From a20d387e7434bcf9560e7961f237d482476a95e5 Mon Sep 17 00:00:00 2001 From: Cristian Marussi Date: Thu, 12 Dec 2024 11:33:40 +0000 Subject: [PATCH 04/19] Fix segfault in test_c029/028 on linux A missing initializer on a local automatic variable causes the linux app to segfault when running these clock testcases. Signed-off-by: Cristian Marussi --- test_pool/clock/test_c028.c | 2 +- test_pool/clock/test_c029.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test_pool/clock/test_c028.c b/test_pool/clock/test_c028.c index 567c610..9d44083 100644 --- a/test_pool/clock/test_c028.c +++ b/test_pool/clock/test_c028.c @@ -32,7 +32,7 @@ uint32_t clock_parent_set_invalid_check(void) size_t return_value_count; uint32_t return_values[MAX_RETURNS_SIZE]; uint32_t parameters[MAX_PARAMETER_SIZE]; - uint32_t clock_id, num_clocks, attributes; + uint32_t clock_id = 0, num_clocks, attributes; uint32_t parent_supp, parent_id = 0, clock_state_control = 0; if (val_test_initialize(TEST_NUM, TEST_DESC) != VAL_STATUS_PASS) diff --git a/test_pool/clock/test_c029.c b/test_pool/clock/test_c029.c index e075bc2..7b5fa2d 100644 --- a/test_pool/clock/test_c029.c +++ b/test_pool/clock/test_c029.c @@ -32,7 +32,7 @@ uint32_t clock_parent_set_invalid_clock_id_check(void) size_t return_value_count; uint32_t return_values[MAX_RETURNS_SIZE]; uint32_t parameters[MAX_PARAMETER_SIZE]; - uint32_t clock_id, attributes; + uint32_t clock_id = 0, attributes; uint32_t parent_id = 0, clock_state_control = 0; if (val_test_initialize(TEST_NUM, TEST_DESC) != VAL_STATUS_PASS) -- GitLab From 30d3b5d848321aa9bda09c7914ebb075fcfe28b9 Mon Sep 17 00:00:00 2001 From: Cristian Marussi Date: Tue, 10 Dec 2024 17:58:04 +0000 Subject: [PATCH 05/19] Fix test_pc005_v2.c extended name suppport checks POWERCAP_DOMAIN_ATTRIBUTES returns, amongst other things, if a domain supports an extended name: in such a case the reply from will contain ONLY the first 15 chars of the extended name. When supported, instead, the extended domain name can be queried by issuing an additional dedicated POWERCAP_DOMAIN_NAME_GET command. The current check against ext_name_supp makes no sense from the specification point of view and it also causes a segfault when running against TARGET generic_scmi. Fix by removing the needless check. Signed-off-by: Cristian Marussi --- test_pool/powercap/test_pc005_v2.c | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/test_pool/powercap/test_pc005_v2.c b/test_pool/powercap/test_pc005_v2.c index ee30a4d..99464d0 100644 --- a/test_pool/powercap/test_pc005_v2.c +++ b/test_pool/powercap/test_pc005_v2.c @@ -34,7 +34,7 @@ uint32_t powercap_query_domain_attributes_v2(void) uint32_t power_monitor, powercap_config, power_unit; uint32_t domain_id, num_domains, attributes; uint32_t min_pai, max_pai, pai_step; - uint32_t min_power_cap, max_power_cap, power_cap_step, ext_name_supp; + uint32_t min_power_cap, max_power_cap, power_cap_step; uint32_t sustainable_power, accuracy, parent_id; char *name; @@ -110,19 +110,12 @@ uint32_t powercap_query_domain_attributes_v2(void) return VAL_STATUS_FAIL; } - ext_name_supp = val_get_powercap_attributes_flag(attributes, PC_EXTENDED_NAME); name = (char *)val_powercap_get_expected_name(domain_id); /* Domain name */ - if (ext_name_supp) { - if (val_compare_str("DOMAIN NAME", (char *)&return_values[NAME_OFFSET] - 16, - name + strnlen(name, SCMI_NAME_STR_SIZE) - 16, SCMI_NAME_STR_SIZE)) - return VAL_STATUS_FAIL; - } else { - if (val_compare_str("DOMAIN NAME", (char *)&return_values[NAME_OFFSET], - name, SCMI_NAME_STR_SIZE)) - return VAL_STATUS_FAIL; - } + if (val_compare_str("DOMAIN NAME", (char *)&return_values[NAME_OFFSET], + name, SCMI_NAME_STR_SIZE)) + return VAL_STATUS_FAIL; /* PAI values */ min_pai = return_values[MIN_PAI_OFFSET]; -- GitLab From 6fca54e5ab30b4cb7058020332574ee9a6693e20 Mon Sep 17 00:00:00 2001 From: Cristian Marussi Date: Tue, 10 Dec 2024 17:58:04 +0000 Subject: [PATCH 06/19] Fix test_v005_v2.c extended name suppport checks VOLTAGE_DOMAIN_ATTRIBUTES returns, amongst other things, if a domain supports an extended name: in such a case the reply from will contain ONLY the first 15 chars of the extended name. When supported, instead, the extended domain name can be queried by issuing an additional dedicated VOLTAGE_DOMAIN_NAME_GET command. The current check against ext_name_supp makes no sense from the specification point of view and it also causes a segfault when running against TARGET generic_scmi. Fix by removing the needless check. Signed-off-by: Cristian Marussi --- test_pool/voltage/test_v005_v2.c | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/test_pool/voltage/test_v005_v2.c b/test_pool/voltage/test_v005_v2.c index a6ad379..02d8990 100644 --- a/test_pool/voltage/test_v005_v2.c +++ b/test_pool/voltage/test_v005_v2.c @@ -31,7 +31,7 @@ uint32_t voltage_query_domain_attributes_v2(void) size_t param_count; size_t return_value_count; uint32_t return_values[MAX_RETURNS_SIZE]; - uint32_t domain_id, num_domains, attribute, ext_name_supp; + uint32_t domain_id, num_domains, attribute; char *name; if (val_test_initialize(TEST_NUM, TEST_DESC) != VAL_STATUS_PASS) @@ -75,19 +75,12 @@ uint32_t voltage_query_domain_attributes_v2(void) val_print(VAL_PRINT_DEBUG, "\n Extended name supp : %d", val_get_voltage_attributes_flag(attribute, EXTENDED_NAME_SUPP)); - ext_name_supp = val_get_voltage_attributes_flag(attribute, EXTENDED_NAME_SUPP); name = (char *)val_voltage_get_expected_name(domain_id); val_voltage_save_info(VOLTAGE_ATTRIBUTES, domain_id, attribute); - if (ext_name_supp) { - if (val_compare_str("DOMAIN NAME", (char *)&return_values[NAME_OFFSET] - 16, - name + strnlen(name, SCMI_NAME_STR_SIZE) - 16, SCMI_NAME_STR_SIZE)) - return VAL_STATUS_FAIL; - } else { - if (val_compare_str("DOMAIN NAME", (char *)&return_values[NAME_OFFSET], - name, SCMI_NAME_STR_SIZE)) - return VAL_STATUS_FAIL; - } + if (val_compare_str("DOMAIN NAME", (char *)&return_values[NAME_OFFSET], + name, SCMI_NAME_STR_SIZE)) + return VAL_STATUS_FAIL; } return VAL_STATUS_PASS; -- GitLab From e12e76f005e09a10a6d9e45c04d63c05f6056d82 Mon Sep 17 00:00:00 2001 From: Cristian Marussi Date: Tue, 15 Aug 2023 15:16:02 +0100 Subject: [PATCH 07/19] Fix Power test_p018 to use proper protocol. Test was mistakenly using POWERCAP protocol. Signed-off-by: Cristian Marussi --- test_pool/power_domain/test_p018.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test_pool/power_domain/test_p018.c b/test_pool/power_domain/test_p018.c index 3e851b6..226d281 100644 --- a/test_pool/power_domain/test_p018.c +++ b/test_pool/power_domain/test_p018.c @@ -38,11 +38,11 @@ uint32_t power_query_ext_domain_name_invalid_domain(void) /* Get Extended name for invalid domain */ domain_id = val_power_domain_get_info(0, NUM_POWER_DOMAIN) + 1; - val_print(VAL_PRINT_TEST, "\n [Check 1] Get extended name for unsupp. domain"); + val_print(VAL_PRINT_TEST, "\n [Check 1] Get extended name for non existent domain %d", domain_id); VAL_INIT_TEST_PARAM(param_count, rsp_msg_hdr, return_value_count, status); param_count++; - cmd_msg_hdr = val_msg_hdr_create(PROTOCOL_POWERCAP, POWER_DOMAIN_NAME_GET, COMMAND_MSG); + cmd_msg_hdr = val_msg_hdr_create(PROTOCOL_POWER_DOMAIN, POWER_DOMAIN_NAME_GET, COMMAND_MSG); val_send_message(cmd_msg_hdr, param_count, &domain_id, &rsp_msg_hdr, &status, &return_value_count, return_values); -- GitLab From 7ea81da9adcce69826189e65bf793476286696a4 Mon Sep 17 00:00:00 2001 From: Cristian Marussi Date: Tue, 15 Aug 2023 15:16:02 +0100 Subject: [PATCH 08/19] Fix Power test_p018 to check against proper return value Issuing a POWER_DOMAIN_NAME_GET against an existent domain which does not support extended names should return SCMI_NOT_SUPPORTED. Fix accordingly. Signed-off-by: Cristian Marussi --- test_pool/power_domain/test_p018.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test_pool/power_domain/test_p018.c b/test_pool/power_domain/test_p018.c index 226d281..93ab472 100644 --- a/test_pool/power_domain/test_p018.c +++ b/test_pool/power_domain/test_p018.c @@ -81,7 +81,7 @@ uint32_t power_query_ext_domain_name_invalid_domain(void) val_send_message(cmd_msg_hdr, param_count, &domain_id, &rsp_msg_hdr, &status, &return_value_count, return_values); - if (val_compare_status(status, SCMI_NOT_FOUND) != VAL_STATUS_PASS) + if (val_compare_status(status, SCMI_NOT_SUPPORTED) != VAL_STATUS_PASS) return VAL_STATUS_FAIL; if (val_compare_msg_hdr(cmd_msg_hdr, rsp_msg_hdr) != VAL_STATUS_PASS) -- GitLab From 617b09fd33b54bf7822fdc41c296b068ef28121f Mon Sep 17 00:00:00 2001 From: Cristian Marussi Date: Tue, 15 Aug 2023 15:17:16 +0100 Subject: [PATCH 09/19] Fix Power testcase selection logic based on version Some testcases vary depending on the version advertised by the platform; when running with relaxed version checking (-r), checking the current version with val_protocol_version_relaxed() returns true when the version advertised by the platform is equal or greater than the expected one. In this way you can run a test even against a newer SCMI server, which is possibly still not fully supported by the ACS test-suite: full backward compatibility cannot be assured, but you can run the testcases. In order for all of this to work, relaxed protocol versions should be checked starting from the latest/newest version supported. When running without using relaxed checks, val_protocol_version_relaxed() fallbacks to strict version-checking, so the ordering of th checks is unimportant. Signed-off-by: Cristian Marussi --- val/val_power_domain.c | 33 ++++++++++----------------------- 1 file changed, 10 insertions(+), 23 deletions(-) diff --git a/val/val_power_domain.c b/val/val_power_domain.c index 6a17611..a631100 100644 --- a/val/val_power_domain.c +++ b/val/val_power_domain.c @@ -47,24 +47,19 @@ uint32_t val_power_domain_execute_tests(void) RUN_TEST(power_domain_query_mandatory_command_support()); RUN_TEST(power_domain_invalid_messageid_call()); - if ((val_protocol_version_relaxed(PROTOCOL_POWER_DOMAIN, version, - POWER_PROTOCOL_VERSION_1)) || - (val_protocol_version_relaxed(PROTOCOL_POWER_DOMAIN, version, - POWER_PROTOCOL_VERSION_2))) { - RUN_TEST(power_domain_query_domain_attributes()); - } - if (val_protocol_version_relaxed(PROTOCOL_POWER_DOMAIN, version, - POWER_PROTOCOL_VERSION_2P1)) { - RUN_TEST(power_domain_query_domain_attributes_scmi_v3()); - } - - if ((val_protocol_version_relaxed(PROTOCOL_POWER_DOMAIN, version, - POWER_PROTOCOL_VERSION_3)) || - (val_protocol_version_relaxed(PROTOCOL_POWER_DOMAIN, version, + POWER_PROTOCOL_VERSION_3) || + (val_protocol_version_relaxed(PROTOCOL_POWER_DOMAIN, version, POWER_PROTOCOL_VERSION_3P1))) { RUN_TEST(power_domain_query_domain_attributes_scmi_v3_1()); - } + RUN_TEST(power_query_ext_domain_name()); + RUN_TEST(power_query_ext_domain_name_invalid_domain()); + } else if (val_protocol_version_relaxed(PROTOCOL_POWER_DOMAIN, version, + POWER_PROTOCOL_VERSION_2P1)) { + RUN_TEST(power_domain_query_domain_attributes_scmi_v3()); + } else { + RUN_TEST(power_domain_query_domain_attributes()); + } RUN_TEST(power_domain_query_domain_attributes_invalid_doamin()); RUN_TEST(power_domain_set_power_state_check()); @@ -88,14 +83,6 @@ uint32_t val_power_domain_execute_tests(void) RUN_TEST(power_domain_power_state_change_requested_notify_invalid_domain_check()); } - if ((val_protocol_version_relaxed(PROTOCOL_POWER_DOMAIN, version, - POWER_PROTOCOL_VERSION_3)) || - (val_protocol_version_relaxed(PROTOCOL_POWER_DOMAIN, version, - POWER_PROTOCOL_VERSION_3P1))) { - RUN_TEST(power_query_ext_domain_name()); - RUN_TEST(power_query_ext_domain_name_invalid_domain()); - } - if (val_protocol_version_relaxed(PROTOCOL_POWER_DOMAIN, version, POWER_PROTOCOL_VERSION_3P1)) { RUN_TEST(power_domain_query_negotiate_protocol_version(&version)); -- GitLab From 41723a5c7e8ca87881e623c638ecfeb516b543c2 Mon Sep 17 00:00:00 2001 From: Cristian Marussi Date: Tue, 15 Aug 2023 16:59:45 +0100 Subject: [PATCH 10/19] Add an helper to check if relaxed version checking is enabled Helper to check if the test suite has been invoked with relaxed version checking enabled. Signed-off-by: Cristian Marussi --- val/include/val_interface.h | 1 + val/val_interface.c | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/val/include/val_interface.h b/val/include/val_interface.h index fe4f2b2..859115f 100644 --- a/val/include/val_interface.h +++ b/val/include/val_interface.h @@ -158,6 +158,7 @@ uint32_t val_strcmp(uint8_t *dst_ptr, uint8_t *src_ptr, uint32_t len); uint32_t val_compare_msg_hdr(uint32_t sent_msg_hdr, uint32_t rsp_msg_hdr); bool val_protocol_version_strict(uint32_t version, uint32_t exp_version); bool val_protocol_version_relaxed(uint32_t protocol, uint32_t version, uint32_t exp_version); +bool val_protocol_version_checks_are_relaxed(void); uint32_t val_reserved_bits_check_is_zero(uint32_t reserved_bits); void val_print(uint32_t level, const char *string, ...); void val_memset(void *ptr, int value, size_t length); diff --git a/val/val_interface.c b/val/val_interface.c index cda2dc2..8162eb8 100644 --- a/val/val_interface.c +++ b/val/val_interface.c @@ -671,3 +671,12 @@ bool val_protocol_version_relaxed(uint32_t protocol, uint32_t version, return version >= exp_version; } + +/** + @brief This API returns a boolean to report if the version checks are configured as relaxed + @return true if version checks are relaxed +**/ +bool val_protocol_version_checks_are_relaxed(void) +{ + return relaxed_version_checks; +} -- GitLab From bc8122db6e79adbd3b2a5ee39d9100316f965e92 Mon Sep 17 00:00:00 2001 From: Cristian Marussi Date: Tue, 15 Aug 2023 17:01:13 +0100 Subject: [PATCH 11/19] Change the logic of test_b008.c around the choice of the invalid skip index Choose the invalid skip_index to use depending on how the test suite was invoked: when running with relaxed version checking use the total number of protocols advertised by the platform. This will allow this test to be run successfully also against platform implementing new, unknown protocols. Signed-off-by: Cristian Marussi --- test_pool/base/test_b008.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/test_pool/base/test_b008.c b/test_pool/base/test_b008.c index e89881a..a10ec29 100644 --- a/test_pool/base/test_b008.c +++ b/test_pool/base/test_b008.c @@ -89,11 +89,14 @@ uint32_t base_query_protocol_list(void) val_agent_set_supported_protocol_list(protocol_list); /* DISCOVER_LIST_PROTOCOLS with invalid skip value should return INVALID PARAMETERS status */ + if (!val_protocol_version_checks_are_relaxed()) + skip = (PROTOCOL_MAX - PROTOCOL_BASE) + 1; /* skip value is set > total num of protocols */ + else + skip = total_num_protocols + 1; val_print(VAL_PRINT_TEST, "\n [Check 2] Send invalid skip value : %d", skip); VAL_INIT_TEST_PARAM(param_count, rsp_msg_hdr, return_value_count, status); param_count++; - skip = (PROTOCOL_MAX - PROTOCOL_BASE) + 1; /* skip value is set > total num of protocols */ cmd_msg_hdr = val_msg_hdr_create(PROTOCOL_BASE, BASE_DISCOVER_LIST_PROTOCOLS, COMMAND_MSG); val_send_message(cmd_msg_hdr, param_count, &skip, &rsp_msg_hdr, &status, &return_value_count, return_values); -- GitLab From 53a77da6c3b2a5737c44dbbd8b9240f93cb6f9e6 Mon Sep 17 00:00:00 2001 From: Cristian Marussi Date: Wed, 22 May 2024 18:20:35 +0100 Subject: [PATCH 12/19] Fix Clock tests 9/10/11 DENY logic Receiving a DENY on a CLOCK_RATE_SET around a specific domain is an acceptable PASS: in such a case, keep looping on the remaining clock domains, carrying on more tests, instead of bailing out with PASS. Also check header consistency at first, like in other test cases. Signed-off-by: Cristian Marussi --- test_pool/clock/test_c009.c | 2 +- test_pool/clock/test_c010.c | 7 +++++-- test_pool/clock/test_c011.c | 2 +- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/test_pool/clock/test_c009.c b/test_pool/clock/test_c009.c index d6c1138..d7159f2 100644 --- a/test_pool/clock/test_c009.c +++ b/test_pool/clock/test_c009.c @@ -106,7 +106,7 @@ uint32_t clock_rate_set_sync_check(void) return VAL_STATUS_FAIL; if (val_compare_status(status, SCMI_DENIED) == VAL_STATUS_PASS) - return VAL_STATUS_PASS; + continue; if (val_compare_status(status, SCMI_SUCCESS) != VAL_STATUS_PASS) return VAL_STATUS_FAIL; diff --git a/test_pool/clock/test_c010.c b/test_pool/clock/test_c010.c index ef1f1f2..87a8441 100644 --- a/test_pool/clock/test_c010.c +++ b/test_pool/clock/test_c010.c @@ -113,10 +113,13 @@ uint32_t clock_rate_set_async_check(void) val_send_message_async(cmd_msg_hdr, param_count, parameters, &rsp_msg_hdr, &status, &return_value_count, return_values); - if (val_compare_status(status, SCMI_SUCCESS) != VAL_STATUS_PASS) + if (val_compare_msg_hdr(cmd_msg_hdr, rsp_msg_hdr) != VAL_STATUS_PASS) return VAL_STATUS_FAIL; - if (val_compare_msg_hdr(cmd_msg_hdr, rsp_msg_hdr) != VAL_STATUS_PASS) + if (val_compare_status(status, SCMI_DENIED) == VAL_STATUS_PASS) + continue; + + if (val_compare_status(status, SCMI_SUCCESS) != VAL_STATUS_PASS) return VAL_STATUS_FAIL; val_print_return_values(return_value_count, return_values); diff --git a/test_pool/clock/test_c011.c b/test_pool/clock/test_c011.c index df29150..d3a9c23 100644 --- a/test_pool/clock/test_c011.c +++ b/test_pool/clock/test_c011.c @@ -70,7 +70,7 @@ uint32_t clock_rate_set_invalid_param_check(void) return VAL_STATUS_FAIL; if (val_compare_status(status, SCMI_DENIED) == VAL_STATUS_PASS) - return VAL_STATUS_PASS; + continue; if (val_compare_status(status, SCMI_INVALID_PARAMETERS) != VAL_STATUS_PASS) return VAL_STATUS_FAIL; -- GitLab From f8e2a2d56459d870648c84fd60e4d492b776438a Mon Sep 17 00:00:00 2001 From: Cristian Marussi Date: Mon, 5 Aug 2024 14:15:36 +0100 Subject: [PATCH 13/19] Fix powercap test_pc005_v2 A powercap domain is invalid if BOTH cap_config and monitoring supports are false as specified in 4.10.3.5; pai_config, though, is allowed to be unsupported. Signed-off-by: Cristian Marussi --- test_pool/powercap/test_pc005_v2.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test_pool/powercap/test_pc005_v2.c b/test_pool/powercap/test_pc005_v2.c index 99464d0..f693d14 100644 --- a/test_pool/powercap/test_pc005_v2.c +++ b/test_pool/powercap/test_pc005_v2.c @@ -94,7 +94,7 @@ uint32_t powercap_query_domain_attributes_v2(void) val_get_powercap_attributes_flag(attributes, PC_FASTCHANNEL_SUPPORT)); power_monitor = val_get_powercap_attributes_flag(attributes, PC_POWER_MONITOR_SUPP); - powercap_config = val_get_powercap_attributes_flag(attributes, PC_PAI_CONFIG_SUPP); + powercap_config = val_get_powercap_attributes_flag(attributes, PC_CONFIG_SUPP); /* Powercap Monitor and Config both cannot be zero at the same time */ if (powercap_config == 0 && power_monitor == 0) { -- GitLab From 1838fb4d49d9f37c88c5039178c73622fdef0ad3 Mon Sep 17 00:00:00 2001 From: Cristian Marussi Date: Mon, 5 Aug 2024 17:00:47 +0100 Subject: [PATCH 14/19] Fix test_pc009.c Async mode Skip asynchronous CAP_SET test for powercap domains NOT supporting asynchronous cap setting and make sure that no delayed response is set when an asynchronus CAP_SET with the Ignore flag is requested. Al fix the test to check tagainst powercap protocol instead of clock. Signed-off-by: Cristian Marussi --- test_pool/powercap/test_pc009.c | 31 ++++++++++++++++++++++++++----- val/include/val_interface.h | 1 + 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/test_pool/powercap/test_pc009.c b/test_pool/powercap/test_pc009.c index 0407127..b4e8e0a 100644 --- a/test_pool/powercap/test_pc009.c +++ b/test_pool/powercap/test_pc009.c @@ -59,13 +59,18 @@ uint32_t powercap_set_power_cap_value(void) /* Set Powercap value for valid domain */ for (domain_id = 0; domain_id < num_domains; domain_id++) { + uint32_t attributes; + val_print(VAL_PRINT_TEST, "\n POWERCAP DOMAIN : %d", domain_id); + attributes = val_powercap_get_info(POWERCAP_ATTRIBUTES, domain_id); + /* Step 1 : Set Powercap synchronously and expect delayed response */ val_print(VAL_PRINT_TEST, "\n [Check 1] Set Powercap [Sync + Delay]"); VAL_INIT_TEST_PARAM(param_count, rsp_msg_hdr, return_value_count, status) parameters[param_count++] = domain_id; + /* PC_CAP_SET_EXPECT will be ignored by the platform on a non-async request */ parameters[param_count++] = val_get_cap_set_flag(PC_CAP_SET_SYNC, PC_CAP_SET_EXPECT); parameters[param_count++] = val_powercap_get_info(POWERCAP_POWERCAP, domain_id); @@ -85,6 +90,7 @@ uint32_t powercap_set_power_cap_value(void) val_print(VAL_PRINT_TEST, "\n [Check 2] Set Powercap [Sync + Ignore]"); VAL_INIT_TEST_PARAM(param_count, rsp_msg_hdr, return_value_count, status) parameters[param_count++] = domain_id; + /* PC_CAP_SET_EXPECT will be ignored by the platform on a non-async request */ parameters[param_count++] = val_get_cap_set_flag(PC_CAP_SET_SYNC, PC_CAP_SET_IGNORE); parameters[param_count++] = val_powercap_get_info(POWERCAP_POWERCAP, domain_id); @@ -100,6 +106,11 @@ uint32_t powercap_set_power_cap_value(void) val_print_return_values(return_value_count, return_values); + if (val_get_powercap_attributes_flag(attributes, PC_ASYNC_PC_SET_SUPP) == 0) { + val_print(VAL_PRINT_TEST, "\n Async PC set NOT supported...skip."); + continue; + } + /* Step 3 : Set Powercap asynchronously and ignore delayed response */ val_print(VAL_PRINT_TEST, "\n [Check 3] Set Powercap [Async + Ignore]"); VAL_INIT_TEST_PARAM(param_count, rsp_msg_hdr, return_value_count, status) @@ -119,6 +130,16 @@ uint32_t powercap_set_power_cap_value(void) val_print_return_values(return_value_count, return_values); + /* Expect an error since on PC_CAP_SET_IGNORE the platform should NOT have sent + * any delayed response, and that will result in a timeout. + */ + VAL_INIT_TEST_PARAM(param_count, rsp_msg_hdr, return_value_count, status); + val_receive_delayed_response(&rsp_msg_hdr, &status, &return_value_count, return_values); + if (val_compare_status(status, SCMI_GENERIC_ERROR) != VAL_STATUS_PASS) + return VAL_STATUS_FAIL; + + val_print(VAL_PRINT_TEST, "\n DELAYED MSG : NOT received (as expected)"); + /* Step 4 : Set Powercap asynchronously and expect delayed response */ val_print(VAL_PRINT_TEST, "\n [Check 4] Set Powercap [Async + Expect]"); VAL_INIT_TEST_PARAM(param_count, rsp_msg_hdr, return_value_count, status) @@ -127,8 +148,8 @@ uint32_t powercap_set_power_cap_value(void) parameters[param_count++] = val_powercap_get_info(POWERCAP_POWERCAP, domain_id); cmd_msg_hdr = val_msg_hdr_create(PROTOCOL_POWERCAP, POWERCAP_CAP_SET, COMMAND_MSG); - val_send_message(cmd_msg_hdr, param_count, parameters, &rsp_msg_hdr, &status, - &return_value_count, return_values); + val_send_message_async(cmd_msg_hdr, param_count, parameters, &rsp_msg_hdr, &status, + &return_value_count, return_values); if (val_compare_status(status, SCMI_SUCCESS) != VAL_STATUS_PASS) return VAL_STATUS_FAIL; @@ -144,15 +165,15 @@ uint32_t powercap_set_power_cap_value(void) VAL_INIT_TEST_PARAM(param_count, rsp_msg_hdr, return_value_count, status); val_receive_delayed_response(&rsp_msg_hdr, &status, &return_value_count, return_values); - val_print(VAL_PRINT_TEST, "\n NOTIFY MSG HDR : 0x%08x", rsp_msg_hdr); + val_print(VAL_PRINT_TEST, "\n DELAYED MSG HDR : 0x%08x", rsp_msg_hdr); if (val_compare("PROTOCOL ID", VAL_EXTRACT_BITS(rsp_msg_hdr, 10, 17), - PROTOCOL_CLOCK)) + PROTOCOL_POWERCAP)) return VAL_STATUS_FAIL; if (val_compare("MSG TYPE ", VAL_EXTRACT_BITS(rsp_msg_hdr, 8, 9), DELAYED_RESPONSE_MSG)) return VAL_STATUS_FAIL; if (val_compare("MSG ID ", VAL_EXTRACT_BITS(rsp_msg_hdr, 0, 7), - CLOCK_RATE_SET_COMPLETE)) + POWERCAP_CAP_SET_COMPLETE)) return VAL_STATUS_FAIL; val_print_return_values(return_value_count, return_values); diff --git a/val/include/val_interface.h b/val/include/val_interface.h index 859115f..a28556e 100644 --- a/val/include/val_interface.h +++ b/val/include/val_interface.h @@ -619,6 +619,7 @@ typedef enum { POWERCAP_DOMAIN_ATTRIBUTES, POWERCAP_CAP_GET, POWERCAP_CAP_SET, + POWERCAP_CAP_SET_COMPLETE = POWERCAP_CAP_SET, POWERCAP_PAI_GET, POWERCAP_PAI_SET, POWERCAP_DOMAIN_NAME_GET, -- GitLab From 3552814de0678434cd35c1039d65d7ac1b49b4ae Mon Sep 17 00:00:00 2001 From: Cristian Marussi Date: Mon, 5 Aug 2024 18:09:15 +0100 Subject: [PATCH 15/19] Customize test_pc011.c depending on protocol version When Powercap protocol implementation is greater than or equal to 0x20000, CAP_SET can accept a zero value to signify disable powercapping on that domain. Signed-off-by: Cristian Marussi --- test_pool/powercap/test_pc011.c | 31 ++++++++++++++++++------------- val/include/val_powercap.h | 2 +- val/val_powercap.c | 2 +- 3 files changed, 20 insertions(+), 15 deletions(-) diff --git a/test_pool/powercap/test_pc011.c b/test_pool/powercap/test_pc011.c index 43bffda..f6647a9 100644 --- a/test_pool/powercap/test_pc011.c +++ b/test_pool/powercap/test_pc011.c @@ -23,7 +23,7 @@ #define TEST_NUM (SCMI_POWERCAP_TEST_NUM_BASE + 11) #define TEST_DESC "Powercap set power cap invalid values " -uint32_t powercap_invalid_data_set_power_cap_value(void) +uint32_t powercap_invalid_data_set_power_cap_value(uint32_t version) { size_t param_count; uint32_t rsp_msg_hdr; @@ -45,23 +45,28 @@ uint32_t powercap_invalid_data_set_power_cap_value(void) domain_id = 0; val_print(VAL_PRINT_TEST, "\n [Check 1] Set ZERO power cap for valid domain"); - VAL_INIT_TEST_PARAM(param_count, rsp_msg_hdr, return_value_count, status); + if (version < POWERCAP_PROTOCOL_VERSION_2) { + VAL_INIT_TEST_PARAM(param_count, rsp_msg_hdr, return_value_count, status); - parameters[param_count++] = domain_id; - parameters[param_count++] = 0x0; - parameters[param_count++] = 0x0; + parameters[param_count++] = domain_id; + parameters[param_count++] = 0x0; + parameters[param_count++] = 0x0; - cmd_msg_hdr = val_msg_hdr_create(PROTOCOL_POWERCAP, POWERCAP_CAP_SET, COMMAND_MSG); - val_send_message(cmd_msg_hdr, param_count, parameters, &rsp_msg_hdr, &status, - &return_value_count, return_values); + cmd_msg_hdr = val_msg_hdr_create(PROTOCOL_POWERCAP, POWERCAP_CAP_SET, COMMAND_MSG); + val_send_message(cmd_msg_hdr, param_count, parameters, &rsp_msg_hdr, &status, + &return_value_count, return_values); - if (val_compare_status(status, SCMI_INVALID_PARAMETERS) != VAL_STATUS_PASS) - return VAL_STATUS_FAIL; + if (val_compare_status(status, SCMI_INVALID_PARAMETERS) != VAL_STATUS_PASS) + return VAL_STATUS_FAIL; - if (val_compare_msg_hdr(cmd_msg_hdr, rsp_msg_hdr) != VAL_STATUS_PASS) - return VAL_STATUS_FAIL; + if (val_compare_msg_hdr(cmd_msg_hdr, rsp_msg_hdr) != VAL_STATUS_PASS) + return VAL_STATUS_FAIL; - val_print_return_values(return_value_count, return_values); + val_print_return_values(return_value_count, return_values); + } else { + val_print(VAL_PRINT_TEST, "\n Powercap protocol version >= %d. Skip.\n", + POWERCAP_PROTOCOL_VERSION_2); + } /* Set invalid reserved flags */ domain_id = 0; diff --git a/val/include/val_powercap.h b/val/include/val_powercap.h index 3336d6a..6d5ae9a 100644 --- a/val/include/val_powercap.h +++ b/val/include/val_powercap.h @@ -105,7 +105,7 @@ uint32_t powercap_invalid_data_set_pai_value(void); uint32_t powercap_query_domain_name_invalid_domain(void); uint32_t powercap_cap_notification_invalid_query(void); uint32_t powercap_measurement_notification_invalid_query(void); -uint32_t powercap_invalid_data_set_power_cap_value(void); +uint32_t powercap_invalid_data_set_power_cap_value(uint32_t); /* Version 2 */ uint32_t powercap_query_domain_attributes_v2(void); diff --git a/val/val_powercap.c b/val/val_powercap.c index 2530111..72ec864 100644 --- a/val/val_powercap.c +++ b/val/val_powercap.c @@ -54,7 +54,7 @@ uint32_t val_powercap_execute_tests(void) RUN_TEST(powercap_query_invalid_domain_id()); RUN_TEST(powercap_set_power_cap_value()); RUN_TEST(powercap_invalid_domain_set_power_cap_value()); - RUN_TEST(powercap_invalid_data_set_power_cap_value()); + RUN_TEST(powercap_invalid_data_set_power_cap_value(version)); RUN_TEST(powercap_query_get_pai_value()); RUN_TEST(powercap_query_pai_invalid_domain_id()); RUN_TEST(powercap_set_pai_value()); -- GitLab From 1b71567673fe804f72a4805045f81425da1a6dd9 Mon Sep 17 00:00:00 2001 From: Cristian Marussi Date: Wed, 11 Dec 2024 16:22:43 +0000 Subject: [PATCH 16/19] Simplify test_c005 testcases with configurable versioning Squash 3 different test cases, previously only slightly differing between versions, into one single testcase that takes version as a parameter. Signed-off-by: Cristian Marussi --- test_pool/clock/test_c005.c | 50 +++++++++++++++--- test_pool/clock/test_c005_v2.c | 88 -------------------------------- test_pool/clock/test_c005_v3.c | 93 ---------------------------------- val/include/val_clock.h | 4 +- val/val_clock.c | 7 +-- 5 files changed, 45 insertions(+), 197 deletions(-) delete mode 100644 test_pool/clock/test_c005_v2.c delete mode 100644 test_pool/clock/test_c005_v3.c diff --git a/test_pool/clock/test_c005.c b/test_pool/clock/test_c005.c index 7dbc353..4aee563 100644 --- a/test_pool/clock/test_c005.c +++ b/test_pool/clock/test_c005.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2024, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -21,9 +21,9 @@ #define TEST_NUM (SCMI_CLOCK_TEST_NUM_BASE + 5) #define TEST_DESC "Clock attributes check " -uint32_t clock_attributes_check(void) +uint32_t clock_attributes_check(uint32_t version) { - int32_t status; + int32_t status, r_begin, r_end; uint32_t rsp_msg_hdr; uint32_t cmd_msg_hdr; size_t param_count; @@ -37,11 +37,27 @@ uint32_t clock_attributes_check(void) /* Discover clock attributes for all clocks */ num_clocks = val_clock_get_info(NUM_CLOCKS, 0); if (num_clocks == 0) { - val_print(VAL_PRINT_ERR, "\n No Clock found "); + val_print(VAL_PRINT_ERR, "\n No Clock found "); return VAL_STATUS_SKIP; } val_print(VAL_PRINT_DEBUG, "\n NUM CLOCKS : %d", num_clocks); + switch (version) { + case CLOCK_PROTOCOL_VERSION_1: + r_begin = 1; + r_end = 31; + break; + case CLOCK_PROTOCOL_VERSION_2: + r_begin = 1; + r_end = 28; + break; + case CLOCK_PROTOCOL_VERSION_3: + default: + r_begin = 2; + r_end = 26; + break; + } + for (clock_id = 0; clock_id < num_clocks; clock_id++) { val_print(VAL_PRINT_TEST, "\n CLOCK ID: %d", clock_id); @@ -63,14 +79,34 @@ uint32_t clock_attributes_check(void) val_print_return_values(return_value_count, return_values); attributes = return_values[ATTRIBUTE_OFFSET]; - if (val_reserved_bits_check_is_zero(VAL_EXTRACT_BITS(attributes, 1, 31) != + if (val_reserved_bits_check_is_zero(VAL_EXTRACT_BITS(attributes, r_begin, r_end) != VAL_STATUS_PASS)) return VAL_STATUS_FAIL; val_clock_save_info(CLOCK_ATTRIBUTE, clock_id, attributes); - val_print(VAL_PRINT_INFO, "\n CLOCK_ENABLED: %d", VAL_EXTRACT_BITS(attributes, 0, 0)); - val_print(VAL_PRINT_INFO, "\n CLOCK_NAME: %s ", + + val_print(VAL_PRINT_INFO, "\n CLOCK_ENABLED: %d", + val_get_clock_attributes_flag(attributes, CLOCK_ENABLE)); + + if (version >= CLOCK_PROTOCOL_VERSION_2) { + val_print(VAL_PRINT_INFO, "\n Extended Name Support: %d", + val_get_clock_attributes_flag(attributes, CLOCK_EXTENDED_NAME_SUPPORT)); + val_print(VAL_PRINT_INFO, "\n Rate Change req notify Support: %d", + val_get_clock_attributes_flag(attributes, CLOCK_RATE_CHNG_REQ_NOTI_SUPP)); + val_print(VAL_PRINT_INFO, "\n Rate Change notification Support: %d", + val_get_clock_attributes_flag(attributes, CLOCK_RATE_CHNG_NOTI_SUPP)); + } + + if (version >= CLOCK_PROTOCOL_VERSION_3) { + val_print(VAL_PRINT_INFO, "\n Parent Clock Identifier Support: %d", + val_get_clock_attributes_flag(attributes, CLOCK_PARENT_IDENTIFIER_SUPPORT)); + } + + val_print(VAL_PRINT_INFO, "\n CLOCK_NAME: %s ", (uint8_t *) &return_values[NAME_OFFSET]); + if (version >= CLOCK_PROTOCOL_VERSION_2) + val_print(VAL_PRINT_INFO, "\n CLOCK Enable Delay: %d ", + return_values[ENABLE_DELAY_OFFSET]); } return VAL_STATUS_PASS; diff --git a/test_pool/clock/test_c005_v2.c b/test_pool/clock/test_c005_v2.c deleted file mode 100644 index bc0fc8a..0000000 --- a/test_pool/clock/test_c005_v2.c +++ /dev/null @@ -1,88 +0,0 @@ -/** @file - * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - -#include "val_interface.h" -#include "val_clock.h" - -#define TEST_NUM (SCMI_CLOCK_TEST_NUM_BASE + 5) -#define TEST_DESC "Clock attributes check " - -uint32_t clock_attributes_check_v2(void) -{ - int32_t status; - uint32_t rsp_msg_hdr; - uint32_t cmd_msg_hdr; - size_t param_count; - size_t return_value_count; - uint32_t return_values[MAX_RETURNS_SIZE]; - uint32_t clock_id, num_clocks, attributes; - - if (val_test_initialize(TEST_NUM, TEST_DESC) != VAL_STATUS_PASS) - return VAL_STATUS_SKIP; - - /* Discover clock attributes for all clocks */ - num_clocks = val_clock_get_info(NUM_CLOCKS, 0); - if (num_clocks == 0) { - val_print(VAL_PRINT_ERR, "\n No Clock found "); - return VAL_STATUS_SKIP; - } - val_print(VAL_PRINT_DEBUG, "\n NUM CLOCKS : %d", num_clocks); - - for (clock_id = 0; clock_id < num_clocks; clock_id++) - { - val_print(VAL_PRINT_TEST, "\n CLOCK ID: %d", clock_id); - val_print(VAL_PRINT_TEST, "\n [Check 1] Query clock attribute"); - - VAL_INIT_TEST_PARAM(param_count, rsp_msg_hdr, return_value_count, status); - param_count++; - cmd_msg_hdr = val_msg_hdr_create(PROTOCOL_CLOCK, CLOCK_ATTRIBUTES, - COMMAND_MSG); - val_send_message(cmd_msg_hdr, param_count, &clock_id, &rsp_msg_hdr, &status, - &return_value_count, return_values); - - if (val_compare_status(status, SCMI_SUCCESS) != VAL_STATUS_PASS) - return VAL_STATUS_FAIL; - - if (val_compare_msg_hdr(cmd_msg_hdr, rsp_msg_hdr) != VAL_STATUS_PASS) - return VAL_STATUS_FAIL; - - val_print_return_values(return_value_count, return_values); - - attributes = return_values[ATTRIBUTE_OFFSET]; - if (val_reserved_bits_check_is_zero(VAL_EXTRACT_BITS(attributes, 1, 28) != - VAL_STATUS_PASS)) - return VAL_STATUS_FAIL; - - val_clock_save_info(CLOCK_ATTRIBUTE, clock_id, attributes); - - val_print(VAL_PRINT_INFO, "\n CLOCK_ENABLED: %d", - val_get_clock_attributes_flag(attributes, CLOCK_ENABLE)); - val_print(VAL_PRINT_INFO, "\n Extended Name Support: %d", - val_get_clock_attributes_flag(attributes, CLOCK_EXTENDED_NAME_SUPPORT)); - val_print(VAL_PRINT_INFO, "\n Rate Change req notify Support: %d", - val_get_clock_attributes_flag(attributes, CLOCK_RATE_CHNG_REQ_NOTI_SUPP)); - val_print(VAL_PRINT_INFO, "\n Rate Change notification Support: %d", - val_get_clock_attributes_flag(attributes, CLOCK_RATE_CHNG_NOTI_SUPP)); - - val_print(VAL_PRINT_INFO, "\n CLOCK_NAME: %s ", - (uint8_t *) &return_values[NAME_OFFSET]); - val_print(VAL_PRINT_INFO, "\n CLOCK Enable Delay: %d ", - return_values[ENABLE_DELAY_OFFSET]); - } - - return VAL_STATUS_PASS; -} diff --git a/test_pool/clock/test_c005_v3.c b/test_pool/clock/test_c005_v3.c deleted file mode 100644 index 810de70..0000000 --- a/test_pool/clock/test_c005_v3.c +++ /dev/null @@ -1,93 +0,0 @@ -/** @file - * Copyright (c) 2024, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - -#include "val_interface.h" -#include "val_clock.h" - -#define TEST_NUM (SCMI_CLOCK_TEST_NUM_BASE + 5) -#define TEST_DESC "Clock attributes check " - -uint32_t clock_attributes_check_v3(void) -{ - int32_t status; - uint32_t rsp_msg_hdr; - uint32_t cmd_msg_hdr; - size_t param_count; - size_t return_value_count; - uint32_t return_values[MAX_RETURNS_SIZE]; - uint32_t clock_id, num_clocks, attributes; - - if (val_test_initialize(TEST_NUM, TEST_DESC) != VAL_STATUS_PASS) - return VAL_STATUS_SKIP; - - /* Discover clock attributes for all clocks */ - num_clocks = val_clock_get_info(NUM_CLOCKS, 0); - if (num_clocks == 0) { - val_print(VAL_PRINT_ERR, "\n No Clock found "); - return VAL_STATUS_SKIP; - } - val_print(VAL_PRINT_DEBUG, "\n NUM CLOCKS : %d", num_clocks); - - for (clock_id = 0; clock_id < num_clocks; clock_id++) - { - val_print(VAL_PRINT_TEST, "\n CLOCK ID: %d", clock_id); - val_print(VAL_PRINT_TEST, "\n [Check 1] Query clock attribute"); - - VAL_INIT_TEST_PARAM(param_count, rsp_msg_hdr, return_value_count, status); - param_count++; - cmd_msg_hdr = val_msg_hdr_create(PROTOCOL_CLOCK, CLOCK_ATTRIBUTES, - COMMAND_MSG); - val_send_message(cmd_msg_hdr, param_count, &clock_id, &rsp_msg_hdr, &status, - &return_value_count, return_values); - - if (val_compare_status(status, SCMI_SUCCESS) != VAL_STATUS_PASS) - return VAL_STATUS_FAIL; - - if (val_compare_msg_hdr(cmd_msg_hdr, rsp_msg_hdr) != VAL_STATUS_PASS) - return VAL_STATUS_FAIL; - - val_print_return_values(return_value_count, return_values); - - attributes = return_values[ATTRIBUTE_OFFSET]; - if (val_reserved_bits_check_is_zero(VAL_EXTRACT_BITS(attributes, 2, 26) != - VAL_STATUS_PASS)) - return VAL_STATUS_FAIL; - - val_clock_save_info(CLOCK_ATTRIBUTE, clock_id, attributes); - - val_print(VAL_PRINT_INFO, "\n CLOCK_ENABLED: %d", - val_get_clock_attributes_flag(attributes, CLOCK_ENABLE)); - val_print(VAL_PRINT_INFO, "\n Extended Name Support: %d", - val_get_clock_attributes_flag(attributes, CLOCK_EXTENDED_NAME_SUPPORT)); - val_print(VAL_PRINT_INFO, "\n Rate Change req notify Support: %d", - val_get_clock_attributes_flag(attributes, CLOCK_RATE_CHNG_REQ_NOTI_SUPP)); - val_print(VAL_PRINT_INFO, "\n Rate Change notification Support: %d", - val_get_clock_attributes_flag(attributes, CLOCK_RATE_CHNG_NOTI_SUPP)); - val_print(VAL_PRINT_INFO, "\n Parent Clock Identifier Support: %d", - val_get_clock_attributes_flag(attributes, CLOCK_PARENT_IDENTIFIER_SUPPORT)); - val_print(VAL_PRINT_INFO, "\n Extended Configuration Support: %d", - val_get_clock_attributes_flag(attributes, CLOCK_EXTENDED_CONFIGURATION_SUPPORT)); - val_print(VAL_PRINT_INFO, "\n Restricted Clock: %d", - val_get_clock_attributes_flag(attributes, CLOCK_RESTRICTED)); - val_print(VAL_PRINT_INFO, "\n CLOCK_NAME: %s", - (uint8_t *) &return_values[NAME_OFFSET]); - val_print(VAL_PRINT_INFO, "\n CLOCK Enable Delay: %d", - return_values[ENABLE_DELAY_OFFSET]); - } - - return VAL_STATUS_PASS; -} diff --git a/val/include/val_clock.h b/val/include/val_clock.h index 44dc0e7..3311966 100644 --- a/val/include/val_clock.h +++ b/val/include/val_clock.h @@ -77,7 +77,7 @@ uint32_t clock_query_protocol_version(uint32_t *version); uint32_t clock_query_protocol_attributes(void); uint32_t clock_query_mandatory_command_support(void); uint32_t clock_invalid_messageid_call(void); -uint32_t clock_attributes_check(void); +uint32_t clock_attributes_check(uint32_t version); uint32_t clock_attributes_check_invalid_clock_id(void); uint32_t clock_query_describe_rates(void); uint32_t clock_query_describe_rates_invalid_clock_id(void); @@ -94,7 +94,6 @@ uint32_t clock_config_set_check(void); /* V2 Test cases */ uint32_t clock_query_ext_domain_name(void); uint32_t clock_query_domain_ext_name_invalid_domain(void); -uint32_t clock_attributes_check_v2(void); uint32_t clock_rate_notification_query(void); uint32_t clock_rate_notification_invalid_query(void); uint32_t clock_rate_req_notification_query(void); @@ -108,7 +107,6 @@ uint32_t clock_parent_name_support_get_check(void); uint32_t clock_parent_name_support_set_check(void); uint32_t clock_parent_set_invalid_check(void); uint32_t clock_parent_set_invalid_clock_id_check(void); -uint32_t clock_attributes_check_v3(void); uint32_t clock_config_get_check(void); uint32_t clock_config_get_invalid_clock_id_check(void); uint32_t clock_possible_parents_get_check(void); diff --git a/val/val_clock.c b/val/val_clock.c index e886cd2..37613a1 100644 --- a/val/val_clock.c +++ b/val/val_clock.c @@ -51,12 +51,7 @@ uint32_t val_clock_execute_tests(void) RUN_TEST(clock_invalid_messageid_call()); - if (version == CLOCK_PROTOCOL_VERSION_1) - RUN_TEST(clock_attributes_check()); - else if (version == CLOCK_PROTOCOL_VERSION_2) - RUN_TEST(clock_attributes_check_v2()); - else - RUN_TEST(clock_attributes_check_v3()); + RUN_TEST(clock_attributes_check(version)); RUN_TEST(clock_attributes_check_invalid_clock_id()); RUN_TEST(clock_query_describe_rates()); -- GitLab From fc5acf1f764f613762b07b473c01a5e917b8f84c Mon Sep 17 00:00:00 2001 From: Cristian Marussi Date: Wed, 11 Dec 2024 16:22:43 +0000 Subject: [PATCH 17/19] Simplify test_c017 testcases with configurable versioning Squash 2 different test cases, previously only slightly differing between versions, into one single testcase that takes version as a parameter. Signed-off-by: Cristian Marussi --- test_pool/clock/test_c017.c | 30 +++++-- test_pool/clock/test_c017_v3.c | 159 --------------------------------- val/include/val_clock.h | 3 +- val/val_clock.c | 5 +- 4 files changed, 26 insertions(+), 171 deletions(-) delete mode 100644 test_pool/clock/test_c017_v3.c diff --git a/test_pool/clock/test_c017.c b/test_pool/clock/test_c017.c index 440d54d..bfb87dc 100644 --- a/test_pool/clock/test_c017.c +++ b/test_pool/clock/test_c017.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2020-2023, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2020-2024, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -21,7 +21,7 @@ #define TEST_NUM (SCMI_CLOCK_TEST_NUM_BASE + 17) #define TEST_DESC "Clock config set check " -#define MAX_PARAMETER_SIZE 2 +#define MAX_PARAMETER_SIZE 3 /********* TEST ALGO ******************** * Find a new attribute from previously saved value @@ -30,9 +30,9 @@ * Restore the default attribute *****************************************/ -uint32_t clock_config_set_check(void) +uint32_t clock_config_set_check(uint32_t version) { - int32_t status; + int32_t status, r_begin, r_end; uint32_t rsp_msg_hdr; uint32_t cmd_msg_hdr; size_t param_count; @@ -51,6 +51,22 @@ uint32_t clock_config_set_check(void) } val_print(VAL_PRINT_DEBUG, "\n NUM CLOCKS : %d", num_clocks); + switch (version) { + case CLOCK_PROTOCOL_VERSION_1: + r_begin = 1; + r_end = 31; + break; + case CLOCK_PROTOCOL_VERSION_2: + r_begin = 1; + r_end = 28; + break; + case CLOCK_PROTOCOL_VERSION_3: + default: + r_begin = 2; + r_end = 26; + break; + } + for (clock_id = 0; clock_id < num_clocks; clock_id++) { bool could_be_denied = false; @@ -63,7 +79,7 @@ uint32_t clock_config_set_check(void) run_flag = 1; /* Find new attribute from previously stored value */ attributes = val_clock_get_info(CLOCK_ATTRIBUTE, clock_id); - if (attributes == CONFIG_SET_DISABLE) + if ((attributes & 0x1) == CONFIG_SET_DISABLE) attributes = CONFIG_SET_ENABLE; else attributes = CONFIG_SET_DISABLE; @@ -74,6 +90,8 @@ uint32_t clock_config_set_check(void) VAL_INIT_TEST_PARAM(param_count, rsp_msg_hdr, return_value_count, status); parameters[param_count++] = clock_id; parameters[param_count++] = attributes; + if (version >= CLOCK_PROTOCOL_VERSION_3) + parameters[param_count++] = 0; cmd_msg_hdr = val_msg_hdr_create(PROTOCOL_CLOCK, CLOCK_CONFIG_SET, COMMAND_MSG); val_send_message(cmd_msg_hdr, param_count, parameters, &rsp_msg_hdr, &status, &return_value_count, return_values); @@ -109,7 +127,7 @@ uint32_t clock_config_set_check(void) return VAL_STATUS_FAIL; if (val_reserved_bits_check_is_zero( - VAL_EXTRACT_BITS(return_values[ATTRIBUTE_OFFSET], 1, 31) != VAL_STATUS_PASS)) + VAL_EXTRACT_BITS(return_values[ATTRIBUTE_OFFSET], r_begin, r_end) != VAL_STATUS_PASS)) return VAL_STATUS_FAIL; val_print_return_values(return_value_count, return_values); diff --git a/test_pool/clock/test_c017_v3.c b/test_pool/clock/test_c017_v3.c deleted file mode 100644 index 9e9c088..0000000 --- a/test_pool/clock/test_c017_v3.c +++ /dev/null @@ -1,159 +0,0 @@ -/** @file - * Copyright (c) 2023-2024, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - -#include "val_interface.h" -#include "val_clock.h" - -#define TEST_NUM (SCMI_CLOCK_TEST_NUM_BASE + 17) -#define TEST_DESC "Clock config set check " - -#define MAX_PARAMETER_SIZE 3 - -/********* TEST ALGO ******************** - * Check if clock has any restrictions before changing clock state - * Find a new attribute from previously saved value - * Set new attribute - * Get the attribute again and compare with newly set attribute - * Restore the default attribute -*****************************************/ - -uint32_t clock_config_set_check_v3(void) -{ - int32_t status; - uint32_t rsp_msg_hdr; - uint32_t cmd_msg_hdr; - size_t param_count; - size_t return_value_count; - uint32_t return_values[MAX_RETURNS_SIZE], attributes; - uint32_t clock_id, num_clocks, parameters[MAX_PARAMETER_SIZE]; - uint32_t run_flag = 0, clock_state_control = 0; - - if (val_test_initialize(TEST_NUM, TEST_DESC) != VAL_STATUS_PASS) - return VAL_STATUS_SKIP; - - num_clocks = val_clock_get_info(NUM_CLOCKS, 0); - if (num_clocks == 0) { - val_print(VAL_PRINT_ERR, "\n No Clock found "); - return VAL_STATUS_SKIP; - } - val_print(VAL_PRINT_DEBUG, "\n NUM CLOCKS : %d", num_clocks); - - for (clock_id = 0; clock_id < num_clocks; clock_id++) - { - val_print(VAL_PRINT_TEST, "\n CLOCK ID: %d", clock_id); - - /* Check if current clock id has any restrictions to change clock config */ - attributes = val_clock_get_info(CLOCK_ATTRIBUTE, clock_id); - if (val_get_clock_attributes_flag(attributes, CLOCK_RESTRICTED)) { - VAL_INIT_TEST_PARAM(param_count, rsp_msg_hdr, return_value_count, status); - param_count++; - cmd_msg_hdr = val_msg_hdr_create(PROTOCOL_CLOCK, CLOCK_GET_PERMISSIONS, COMMAND_MSG); - val_send_message(cmd_msg_hdr, param_count, &clock_id, &rsp_msg_hdr, &status, - &return_value_count, return_values); - - if (val_compare_status(status, SCMI_SUCCESS) != VAL_STATUS_PASS) - return VAL_STATUS_FAIL; - - if (val_compare_msg_hdr(cmd_msg_hdr, rsp_msg_hdr) != VAL_STATUS_PASS) - return VAL_STATUS_FAIL; - clock_state_control = VAL_EXTRACT_BITS(return_values[CLOCK_PERMISSIONS_OFFSET], 31, 31); - } - - run_flag = 1; - /* Find new attribute from previously stored value */ - attributes = val_clock_get_info(CLOCK_ATTRIBUTE, clock_id) & 0x1; - if (attributes == CONFIG_SET_DISABLE) - attributes = CONFIG_SET_ENABLE; - else - attributes = CONFIG_SET_DISABLE; - - /* CLOCK_CONFIG_SET with new attribute */ - val_print(VAL_PRINT_TEST, "\n [Check 1] Set config with attributes :%d", attributes); - - VAL_INIT_TEST_PARAM(param_count, rsp_msg_hdr, return_value_count, status); - parameters[param_count++] = clock_id; - parameters[param_count++] = attributes; - parameters[param_count++] = 0; - cmd_msg_hdr = val_msg_hdr_create(PROTOCOL_CLOCK, CLOCK_CONFIG_SET, COMMAND_MSG); - val_send_message(cmd_msg_hdr, param_count, parameters, &rsp_msg_hdr, &status, - &return_value_count, return_values); - - if (val_compare_msg_hdr(cmd_msg_hdr, rsp_msg_hdr) != VAL_STATUS_PASS) - return VAL_STATUS_FAIL; - - if ((!clock_state_control) && - val_compare_status(status, SCMI_DENIED) == VAL_STATUS_PASS) - return VAL_STATUS_PASS; - - if (val_compare_status(status, SCMI_NOT_SUPPORTED) == VAL_STATUS_PASS) - continue; - - if (val_compare_status(status, SCMI_SUCCESS) != VAL_STATUS_PASS) - return VAL_STATUS_FAIL; - - val_print_return_values(return_value_count, return_values); - - /* Get attribute and compare with new value */ - val_print(VAL_PRINT_TEST, "\n [Check 2] Verify the changed attribute"); - - VAL_INIT_TEST_PARAM(param_count, rsp_msg_hdr, return_value_count, status); - param_count++; - cmd_msg_hdr = val_msg_hdr_create(PROTOCOL_CLOCK, CLOCK_ATTRIBUTES, COMMAND_MSG); - val_send_message(cmd_msg_hdr, param_count, &clock_id, &rsp_msg_hdr, &status, - &return_value_count, return_values); - - if (val_compare_status(status, SCMI_SUCCESS) != VAL_STATUS_PASS) - return VAL_STATUS_FAIL; - - if (val_compare_msg_hdr(cmd_msg_hdr, rsp_msg_hdr) != VAL_STATUS_PASS) - return VAL_STATUS_FAIL; - - if (val_reserved_bits_check_is_zero( - VAL_EXTRACT_BITS(return_values[ATTRIBUTE_OFFSET], 1, 27) != VAL_STATUS_PASS)) - return VAL_STATUS_FAIL; - - val_print_return_values(return_value_count, return_values); - - if (val_compare("CLOCK STATUS ", - VAL_EXTRACT_BITS(return_values[ATTRIBUTE_OFFSET], 0, 0), attributes)) - return VAL_STATUS_FAIL; - - /* Restore the default attribute value*/ - val_print(VAL_PRINT_TEST, "\n [Check 3] Restore the original attributes :%d", - val_clock_get_info(CLOCK_ATTRIBUTE, clock_id)); - - VAL_INIT_TEST_PARAM(param_count, rsp_msg_hdr, return_value_count, status); - parameters[param_count++] = clock_id; - parameters[param_count++] = val_clock_get_info(CLOCK_ATTRIBUTE, clock_id); - parameters[param_count++] = 0; - cmd_msg_hdr = val_msg_hdr_create(PROTOCOL_CLOCK, CLOCK_CONFIG_SET, COMMAND_MSG); - val_send_message(cmd_msg_hdr, param_count, parameters, &rsp_msg_hdr, &status, - &return_value_count, return_values); - - if (val_compare_msg_hdr(cmd_msg_hdr, rsp_msg_hdr) != VAL_STATUS_PASS) - return VAL_STATUS_FAIL; - - if (val_compare_status(status, SCMI_SUCCESS) != VAL_STATUS_PASS) - return VAL_STATUS_FAIL; - - val_print_return_values(return_value_count, return_values); - } - if (run_flag == 0) - return VAL_STATUS_SKIP; - - return VAL_STATUS_PASS; -} diff --git a/val/include/val_clock.h b/val/include/val_clock.h index 3311966..4576399 100644 --- a/val/include/val_clock.h +++ b/val/include/val_clock.h @@ -89,7 +89,7 @@ uint32_t clock_rate_get_check(void); uint32_t clock_rate_get_invalid_clock_id_check(void); uint32_t clock_config_set_invalid_attr_check(void); uint32_t clock_config_set_invalid_clock_id_check(void); -uint32_t clock_config_set_check(void); +uint32_t clock_config_set_check(uint32_t version); /* V2 Test cases */ uint32_t clock_query_ext_domain_name(void); @@ -102,7 +102,6 @@ uint32_t clock_parent_get_invalid_clock_id_check(void); /* V3 Test cases */ uint32_t clock_query_mandatory_command_support_v3(void); -uint32_t clock_config_set_check_v3(void); uint32_t clock_parent_name_support_get_check(void); uint32_t clock_parent_name_support_set_check(void); uint32_t clock_parent_set_invalid_check(void); diff --git a/val/val_clock.c b/val/val_clock.c index 37613a1..16cfbf9 100644 --- a/val/val_clock.c +++ b/val/val_clock.c @@ -72,10 +72,7 @@ uint32_t val_clock_execute_tests(void) RUN_TEST(clock_config_set_invalid_attr_check()); RUN_TEST(clock_config_set_invalid_clock_id_check()); - if (version >= CLOCK_PROTOCOL_VERSION_3) - RUN_TEST(clock_config_set_check_v3()); - else - RUN_TEST(clock_config_set_check()); + RUN_TEST(clock_config_set_check(version)); if (version >= CLOCK_PROTOCOL_VERSION_2) { RUN_TEST(clock_query_ext_domain_name()); -- GitLab From 747877e73f1c56baf096a5cb076748ccbdecdd76 Mon Sep 17 00:00:00 2001 From: Cristian Marussi Date: Thu, 12 Dec 2024 15:11:58 +0000 Subject: [PATCH 18/19] Use versioning to configure some power tests behaviour Use version to configure the expected number or zeroed reserved bits in power test_p007, test_p008, test_p0012, test_p0013. Signed-off-by: Cristian Marussi --- test_pool/power_domain/test_p007.c | 27 +++++++++++++++++++++++---- test_pool/power_domain/test_p008.c | 27 +++++++++++++++++++++++---- test_pool/power_domain/test_p012.c | 27 +++++++++++++++++++++++---- test_pool/power_domain/test_p013.c | 27 +++++++++++++++++++++++---- val/include/val_power_domain.h | 8 ++++---- val/val_power_domain.c | 8 ++++---- 6 files changed, 100 insertions(+), 24 deletions(-) diff --git a/test_pool/power_domain/test_p007.c b/test_pool/power_domain/test_p007.c index 0349c12..7a04e02 100644 --- a/test_pool/power_domain/test_p007.c +++ b/test_pool/power_domain/test_p007.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2024, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -23,9 +23,9 @@ #define PARAMETER_SIZE 3 -uint32_t power_domain_set_power_state_check(void) +uint32_t power_domain_set_power_state_check(uint32_t version) { - int32_t status; + int32_t status, r_begin, r_end; uint32_t rsp_msg_hdr; uint32_t cmd_msg_hdr; size_t param_count; @@ -45,6 +45,24 @@ uint32_t power_domain_set_power_state_check(void) } val_print(VAL_PRINT_DEBUG, "\n NUM DOMAINS : %d", num_domains); + switch (version) { + case POWER_PROTOCOL_VERSION_1: + case POWER_PROTOCOL_VERSION_2: + r_begin = 0; + r_end = 28; + break; + case POWER_PROTOCOL_VERSION_2P1: + r_begin = 0; + r_end = 27; + break; + case POWER_PROTOCOL_VERSION_3: + case POWER_PROTOCOL_VERSION_3P1: + default: + r_begin = 0; + r_end = 26; + break; + } + for (domain_id = 0; domain_id < num_domains; domain_id++) { val_print(VAL_PRINT_TEST, "\n POWER DOMAIN ID: %d", domain_id); @@ -66,7 +84,8 @@ uint32_t power_domain_set_power_state_check(void) val_print_return_values(return_value_count, return_values); attribute = return_values[ATTRIBUTE_OFFSET]; - if (val_reserved_bits_check_is_zero(VAL_EXTRACT_BITS(attribute, 0, 28)) != VAL_STATUS_PASS) + if (val_reserved_bits_check_is_zero(VAL_EXTRACT_BITS(attribute, r_begin, r_end)) != + VAL_STATUS_PASS) return VAL_STATUS_FAIL; set_state_async = VAL_EXTRACT_BITS(attribute, 30, 30); diff --git a/test_pool/power_domain/test_p008.c b/test_pool/power_domain/test_p008.c index 4385b4f..7e0f734 100644 --- a/test_pool/power_domain/test_p008.c +++ b/test_pool/power_domain/test_p008.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2024, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -23,9 +23,9 @@ #define PARAMETER_SIZE 3 -uint32_t power_domain_set_power_state_unsupported_domain_check(void) +uint32_t power_domain_set_power_state_unsupported_domain_check(uint32_t version) { - int32_t status; + int32_t status, r_begin, r_end; uint32_t rsp_msg_hdr; uint32_t cmd_msg_hdr; size_t param_count; @@ -45,6 +45,24 @@ uint32_t power_domain_set_power_state_unsupported_domain_check(void) } val_print(VAL_PRINT_DEBUG, "\n NUM DOMAINS : %d", num_domains); + switch (version) { + case POWER_PROTOCOL_VERSION_1: + case POWER_PROTOCOL_VERSION_2: + r_begin = 0; + r_end = 28; + break; + case POWER_PROTOCOL_VERSION_2P1: + r_begin = 0; + r_end = 27; + break; + case POWER_PROTOCOL_VERSION_3: + case POWER_PROTOCOL_VERSION_3P1: + default: + r_begin = 0; + r_end = 26; + break; + } + for (domain_id = 0; domain_id < num_domains; domain_id++) { val_print(VAL_PRINT_TEST, "\n POWER DOMAIN ID: %d", domain_id); @@ -66,7 +84,8 @@ uint32_t power_domain_set_power_state_unsupported_domain_check(void) val_print_return_values(return_value_count, return_values); attribute = return_values[ATTRIBUTE_OFFSET]; - if (val_reserved_bits_check_is_zero(VAL_EXTRACT_BITS(attribute, 0, 28)) != VAL_STATUS_PASS) + if (val_reserved_bits_check_is_zero(VAL_EXTRACT_BITS(attribute, r_begin, r_end)) != + VAL_STATUS_PASS) return VAL_STATUS_FAIL; set_state_async = VAL_EXTRACT_BITS(attribute, 30, 30); diff --git a/test_pool/power_domain/test_p012.c b/test_pool/power_domain/test_p012.c index a767ea6..58338a2 100644 --- a/test_pool/power_domain/test_p012.c +++ b/test_pool/power_domain/test_p012.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2020, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2020-2024, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -23,9 +23,9 @@ #define PARAMETER_SIZE 2 -uint32_t power_domain_power_state_notify_check(void) +uint32_t power_domain_power_state_notify_check(uint32_t version) { - int32_t status; + int32_t status, r_begin, r_end; uint32_t rsp_msg_hdr; uint32_t cmd_msg_hdr; size_t param_count; @@ -60,6 +60,24 @@ uint32_t power_domain_power_state_notify_check(void) } val_print(VAL_PRINT_DEBUG, "\n NUM DOMAINS : %d", num_domains); + switch (version) { + case POWER_PROTOCOL_VERSION_1: + case POWER_PROTOCOL_VERSION_2: + r_begin = 0; + r_end = 28; + break; + case POWER_PROTOCOL_VERSION_2P1: + r_begin = 0; + r_end = 27; + break; + case POWER_PROTOCOL_VERSION_3: + case POWER_PROTOCOL_VERSION_3P1: + default: + r_begin = 0; + r_end = 26; + break; + } + for (domain_id = 0; domain_id < num_domains; domain_id++) { val_print(VAL_PRINT_TEST, "\n POWER DOMAIN ID: %d", domain_id); @@ -81,7 +99,8 @@ uint32_t power_domain_power_state_notify_check(void) val_print_return_values(return_value_count, return_values); attribute = return_values[ATTRIBUTE_OFFSET]; - if (val_reserved_bits_check_is_zero(VAL_EXTRACT_BITS(attribute, 0, 28)) != VAL_STATUS_PASS) + if (val_reserved_bits_check_is_zero(VAL_EXTRACT_BITS(attribute, r_begin, r_end)) != + VAL_STATUS_PASS) return VAL_STATUS_FAIL; state_change_notify = VAL_EXTRACT_BITS(attribute, 31, 31); diff --git a/test_pool/power_domain/test_p013.c b/test_pool/power_domain/test_p013.c index 54a6281..00cf5fa 100644 --- a/test_pool/power_domain/test_p013.c +++ b/test_pool/power_domain/test_p013.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2020, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2020-2024, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -23,9 +23,9 @@ #define PARAMETER_SIZE 2 -uint32_t power_domain_power_state_notify_unspported_domain_check(void) +uint32_t power_domain_power_state_notify_unspported_domain_check(uint32_t version) { - int32_t status; + int32_t status, r_begin, r_end; uint32_t rsp_msg_hdr; uint32_t cmd_msg_hdr; size_t param_count; @@ -60,6 +60,24 @@ uint32_t power_domain_power_state_notify_unspported_domain_check(void) } val_print(VAL_PRINT_DEBUG, "\n NUM DOMAINS : %d", num_domains); + switch (version) { + case POWER_PROTOCOL_VERSION_1: + case POWER_PROTOCOL_VERSION_2: + r_begin = 0; + r_end = 28; + break; + case POWER_PROTOCOL_VERSION_2P1: + r_begin = 0; + r_end = 27; + break; + case POWER_PROTOCOL_VERSION_3: + case POWER_PROTOCOL_VERSION_3P1: + default: + r_begin = 0; + r_end = 26; + break; + } + for (domain_id = 0; domain_id < num_domains; domain_id++) { val_print(VAL_PRINT_TEST, "\n POWER DOMAIN ID: %d", domain_id); @@ -81,7 +99,8 @@ uint32_t power_domain_power_state_notify_unspported_domain_check(void) val_print_return_values(return_value_count, return_values); attribute = return_values[ATTRIBUTE_OFFSET]; - if (val_reserved_bits_check_is_zero(VAL_EXTRACT_BITS(attribute, 0, 28)) != VAL_STATUS_PASS) + if (val_reserved_bits_check_is_zero(VAL_EXTRACT_BITS(attribute, r_begin, r_end)) != + VAL_STATUS_PASS) return VAL_STATUS_FAIL; state_change_notify = VAL_EXTRACT_BITS(attribute, 31, 31); diff --git a/val/include/val_power_domain.h b/val/include/val_power_domain.h index dc5f18f..05389b6 100644 --- a/val/include/val_power_domain.h +++ b/val/include/val_power_domain.h @@ -56,13 +56,13 @@ uint32_t power_domain_query_mandatory_command_support(void); uint32_t power_domain_invalid_messageid_call(void); uint32_t power_domain_query_domain_attributes(void); uint32_t power_domain_query_domain_attributes_invalid_doamin(void); -uint32_t power_domain_set_power_state_check(void); -uint32_t power_domain_set_power_state_unsupported_domain_check(void); +uint32_t power_domain_set_power_state_check(uint32_t version); +uint32_t power_domain_set_power_state_unsupported_domain_check(uint32_t version); uint32_t power_domain_set_power_state_check_invalid_domain(void); uint32_t power_domain_get_power_state_check(void); uint32_t power_domain_get_power_state_check_invalid_domain(void); -uint32_t power_domain_power_state_notify_check(void); -uint32_t power_domain_power_state_notify_unspported_domain_check(void); +uint32_t power_domain_power_state_notify_check(uint32_t version); +uint32_t power_domain_power_state_notify_unspported_domain_check(uint32_t version); uint32_t power_domain_power_state_notify_invalid_domain_check(void); /* scmi v2 Tests */ diff --git a/val/val_power_domain.c b/val/val_power_domain.c index a631100..8420877 100644 --- a/val/val_power_domain.c +++ b/val/val_power_domain.c @@ -62,13 +62,13 @@ uint32_t val_power_domain_execute_tests(void) } RUN_TEST(power_domain_query_domain_attributes_invalid_doamin()); - RUN_TEST(power_domain_set_power_state_check()); - RUN_TEST(power_domain_set_power_state_unsupported_domain_check()); + RUN_TEST(power_domain_set_power_state_check(version)); + RUN_TEST(power_domain_set_power_state_unsupported_domain_check(version)); RUN_TEST(power_domain_set_power_state_check_invalid_domain()); RUN_TEST(power_domain_get_power_state_check()); RUN_TEST(power_domain_get_power_state_check_invalid_domain()); - RUN_TEST(power_domain_power_state_notify_check()); - RUN_TEST(power_domain_power_state_notify_unspported_domain_check()); + RUN_TEST(power_domain_power_state_notify_check(version)); + RUN_TEST(power_domain_power_state_notify_unspported_domain_check(version)); RUN_TEST(power_domain_power_state_notify_invalid_domain_check()); if ((val_protocol_version_relaxed(PROTOCOL_POWER_DOMAIN, version, -- GitLab From 7b9feb8f5417ae0ebe592d65c2829382451b0432 Mon Sep 17 00:00:00 2001 From: Cristian Marussi Date: Fri, 10 May 2024 10:38:53 +0100 Subject: [PATCH 19/19] Miscellaneous fixes for PINCTRL testcases FUNCTION_SELECT does NOT exist anymore in v3.2 while SETTINGS_GET and SETTINGS_CONFIGURE have a new syntax to accomodate also FUNCTION_SELECT. Signed-off-by: Cristian Marussi --- test_pool/pin_control/test_pi003.c | 21 --------------------- test_pool/pin_control/test_pi005.c | 1 + test_pool/pin_control/test_pi011.c | 1 - test_pool/pin_control/test_pi012.c | 5 +++-- test_pool/pin_control/test_pi014.c | 24 +++++++++++++++++------- test_pool/pin_control/test_pi015.c | 22 +++++++++++++--------- test_pool/pin_control/test_pi022.c | 16 +++++++++++++++- test_pool/pin_control/test_pi023.c | 16 +++++++++++++++- val/include/val_interface.h | 1 - val/include/val_pin_control.h | 10 +++++++--- 10 files changed, 71 insertions(+), 46 deletions(-) diff --git a/test_pool/pin_control/test_pi003.c b/test_pool/pin_control/test_pi003.c index f565806..4db98f7 100644 --- a/test_pool/pin_control/test_pi003.c +++ b/test_pool/pin_control/test_pi003.c @@ -94,27 +94,6 @@ uint32_t pin_control_query_mandatory_command_support(void) val_print_return_values(return_value_count, return_values); - if (val_reserved_bits_check_is_zero(return_values[ATTRIBUTE_OFFSET]) != VAL_STATUS_PASS) - return VAL_STATUS_FAIL; - - val_print(VAL_PRINT_TEST, "\n [Check 4] PIN CONTROL FUNCTION SELECT support"); - - VAL_INIT_TEST_PARAM(param_count, rsp_msg_hdr, return_value_count, status); - message_id = PIN_CONTROL_FUNCTION_SELECT; - param_count++; - cmd_msg_hdr = val_msg_hdr_create(PROTOCOL_PIN_CONTROL, PIN_CONTROL_PROTOCOL_MESSAGE_ATTRIBUTES, - COMMAND_MSG); - val_send_message(cmd_msg_hdr, param_count, &message_id, &rsp_msg_hdr, &status, - &return_value_count, return_values); - - if (val_compare_status(status, SCMI_SUCCESS) != VAL_STATUS_PASS) - return VAL_STATUS_FAIL; - - if (val_compare_msg_hdr(cmd_msg_hdr, rsp_msg_hdr) != VAL_STATUS_PASS) - return VAL_STATUS_FAIL; - - val_print_return_values(return_value_count, return_values); - if (val_reserved_bits_check_is_zero(return_values[ATTRIBUTE_OFFSET]) != VAL_STATUS_PASS) return VAL_STATUS_FAIL; diff --git a/test_pool/pin_control/test_pi005.c b/test_pool/pin_control/test_pi005.c index 12898d8..e49388b 100644 --- a/test_pool/pin_control/test_pi005.c +++ b/test_pool/pin_control/test_pi005.c @@ -71,6 +71,7 @@ uint32_t pin_control_attributes_check(void) if (val_reserved_bits_check_is_zero(VAL_EXTRACT_BITS(attributes, 18, 30) != VAL_STATUS_PASS)) return VAL_STATUS_FAIL; + /* If flag parameter is set to PIN, then this value should be 1 */ if (VAL_EXTRACT_BITS(attributes, 0, 15) != 1) return VAL_STATUS_FAIL; diff --git a/test_pool/pin_control/test_pi011.c b/test_pool/pin_control/test_pi011.c index 924cdd8..dd4b6d8 100644 --- a/test_pool/pin_control/test_pi011.c +++ b/test_pool/pin_control/test_pi011.c @@ -168,7 +168,6 @@ uint32_t pin_control_query_settings_configure_check(void) entry_1 = pin_configs_array[1]; if (val_compare("New Config Value ", entry_1, new_config_value)) return VAL_STATUS_FAIL; - /* STEP 5 : Set default config value back */ val_print(VAL_PRINT_TEST, "\n [Step 5] Set default config value"); diff --git a/test_pool/pin_control/test_pi012.c b/test_pool/pin_control/test_pi012.c index 5e8caf9..f978152 100644 --- a/test_pool/pin_control/test_pi012.c +++ b/test_pool/pin_control/test_pi012.c @@ -25,6 +25,7 @@ #define CONFIG_NUM_SET 1 #define CONFIG_ENABLE 1 +#define DEFAULT_CONFIG_TYPE 0 uint32_t pin_control_settings_configure_invalid_param_check(void) { @@ -54,7 +55,7 @@ uint32_t pin_control_settings_configure_invalid_param_check(void) for (pc_id = 0; pc_id < num_pins; pc_id++) { val_print(VAL_PRINT_TEST, "\n PIN CONTROL PIN ID: %d", pc_id); - val_print(VAL_PRINT_TEST, "\n [Check 1] Query with invalid Config Type "); + val_print(VAL_PRINT_TEST, "\n [Check 1] Set with invalid Config Type "); config_type = RESERVED_CONFIG_TYPE; config_value = CONFIG_ENABLE; @@ -86,7 +87,7 @@ uint32_t pin_control_settings_configure_invalid_param_check(void) parameters[param_count++] = pc_id; parameters[param_count++] = function_selected; parameters[param_count++] = PINCTRL_SET_INVALID_ATTIBUTE; - parameters[param_count++] = config_type; + parameters[param_count++] = DEFAULT_CONFIG_TYPE; parameters[param_count++] = config_value; cmd_msg_hdr = val_msg_hdr_create(PROTOCOL_PIN_CONTROL, PIN_CONTROL_SETTINGS_CONFIGURE, COMMAND_MSG); diff --git a/test_pool/pin_control/test_pi014.c b/test_pool/pin_control/test_pi014.c index 1896fa1..5f6d96c 100644 --- a/test_pool/pin_control/test_pi014.c +++ b/test_pool/pin_control/test_pi014.c @@ -32,7 +32,7 @@ uint32_t pin_control_query_function_select_check(void) uint32_t return_values[MAX_RETURNS_SIZE]; uint32_t parameters[PARAMETER_SIZE]; uint32_t num_groups = 0, num_pins = 0, num_functions = 0; - uint32_t pc_id = 0, function_id = 0; + uint32_t pc_id = 0, function_id = 0, attributes = 0; if (val_test_initialize(TEST_NUM, TEST_DESC) != VAL_STATUS_PASS) return VAL_STATUS_SKIP; @@ -63,11 +63,12 @@ uint32_t pin_control_query_function_select_check(void) VAL_INIT_TEST_PARAM(param_count, rsp_msg_hdr, return_value_count, status); parameters[param_count++] = pc_id; - parameters[param_count++] = function_id; - parameters[param_count++] = PIN_SELECTOR; + attributes = (GET_NO_CONFIGS << GET_ALL_CONFIGS_LOW) + + (PIN_SELECTOR << SELECTOR_LOW); + parameters[param_count++] = attributes; cmd_msg_hdr = val_msg_hdr_create(PROTOCOL_PIN_CONTROL, - PIN_CONTROL_FUNCTION_SELECT, COMMAND_MSG); + PIN_CONTROL_SETTINGS_GET, COMMAND_MSG); val_send_message(cmd_msg_hdr, param_count, parameters, &rsp_msg_hdr, &status, &return_value_count, return_values); @@ -80,6 +81,9 @@ uint32_t pin_control_query_function_select_check(void) return VAL_STATUS_FAIL; val_print_return_values(return_value_count, return_values); + + val_print(VAL_PRINT_DEBUG, "\n SELECTED PIN FUNCTION: %d", + return_values[RET_FUNCTION_SELECTED_OFFSET]); } } } @@ -103,11 +107,12 @@ uint32_t pin_control_query_function_select_check(void) val_print(VAL_PRINT_TEST, "\n [Check 2] Query function select for group ids"); VAL_INIT_TEST_PARAM(param_count, rsp_msg_hdr, return_value_count, status); parameters[param_count++] = pc_id; - parameters[param_count++] = function_id; - parameters[param_count++] = GROUP_SELECTOR; + attributes = (GET_NO_CONFIGS << GET_ALL_CONFIGS_LOW) + + (GROUP_SELECTOR << SELECTOR_LOW); + parameters[param_count++] = attributes; cmd_msg_hdr = val_msg_hdr_create(PROTOCOL_PIN_CONTROL, - PIN_CONTROL_FUNCTION_SELECT, COMMAND_MSG); + PIN_CONTROL_SETTINGS_GET, COMMAND_MSG); val_send_message(cmd_msg_hdr, param_count, parameters, &rsp_msg_hdr, &status, &return_value_count, return_values); @@ -118,6 +123,11 @@ uint32_t pin_control_query_function_select_check(void) if (val_compare_msg_hdr(cmd_msg_hdr, rsp_msg_hdr) != VAL_STATUS_PASS) return VAL_STATUS_FAIL; + + val_print_return_values(return_value_count, return_values); + + val_print(VAL_PRINT_DEBUG, "\n SELECTED GROUP FUNCTION: %d", + return_values[RET_FUNCTION_SELECTED_OFFSET]); } } } diff --git a/test_pool/pin_control/test_pi015.c b/test_pool/pin_control/test_pi015.c index b469df1..d26a690 100644 --- a/test_pool/pin_control/test_pi015.c +++ b/test_pool/pin_control/test_pi015.c @@ -31,7 +31,7 @@ uint32_t pin_control_query_function_select_invalid_case_check(void) size_t param_count; uint32_t return_values[MAX_RETURNS_SIZE]; uint32_t parameters[PARAMETER_SIZE]; - uint32_t num_pins = 0, num_functions = 0; + uint32_t num_pins = 0, num_functions = 0, attributes = 0; if (val_test_initialize(TEST_NUM, TEST_DESC) != VAL_STATUS_PASS) return VAL_STATUS_SKIP; @@ -53,11 +53,12 @@ uint32_t pin_control_query_function_select_invalid_case_check(void) VAL_INIT_TEST_PARAM(param_count, rsp_msg_hdr, return_value_count, status); /* pins 0 to num_pins - 1 are valid, using num_pins as invalid pin */ parameters[param_count++] = num_pins; - parameters[param_count++] = num_functions - 1; - parameters[param_count++] = PIN_SELECTOR; + attributes = (GET_NO_CONFIGS << GET_ALL_CONFIGS_LOW) + + (PIN_SELECTOR << SELECTOR_LOW); + parameters[param_count++] = attributes; cmd_msg_hdr = val_msg_hdr_create(PROTOCOL_PIN_CONTROL, - PIN_CONTROL_FUNCTION_SELECT, COMMAND_MSG); + PIN_CONTROL_SETTINGS_GET, COMMAND_MSG); val_send_message(cmd_msg_hdr, param_count, parameters, &rsp_msg_hdr, &status, &return_value_count, return_values); @@ -68,16 +69,17 @@ uint32_t pin_control_query_function_select_invalid_case_check(void) return VAL_STATUS_FAIL; val_print(VAL_PRINT_TEST, - "\n [Check 2] Query function select for invalid function id"); + "\n [Check 2] Set function select for invalid function id"); VAL_INIT_TEST_PARAM(param_count, rsp_msg_hdr, return_value_count, status); parameters[param_count++] = num_pins - 1; /* functions 0 to num_functions - 1 are valid, using num_functions as invalid pin */ parameters[param_count++] = num_functions; - parameters[param_count++] = PIN_SELECTOR; + attributes = (SET_FUNCTION << FUNCTION_ID_VALID) + PIN_SELECTOR; + parameters[param_count++] = attributes; cmd_msg_hdr = val_msg_hdr_create(PROTOCOL_PIN_CONTROL, - PIN_CONTROL_FUNCTION_SELECT, COMMAND_MSG); + PIN_CONTROL_SETTINGS_CONFIGURE, COMMAND_MSG); val_send_message(cmd_msg_hdr, param_count, parameters, &rsp_msg_hdr, &status, &return_value_count, return_values); @@ -94,10 +96,12 @@ uint32_t pin_control_query_function_select_invalid_case_check(void) parameters[param_count++] = num_pins - 1; parameters[param_count++] = num_functions - 1; /* Making reserved bit as 1 to make invalid flag */ - parameters[param_count++] = PIN_SELECTOR + (1 << FUNCTION_SELECT_FLAGS_RESERVED_LOW); + attributes = (1 << (FUNCTION_ID_VALID + 1)) + + (SET_FUNCTION << FUNCTION_ID_VALID) + PIN_SELECTOR; + parameters[param_count++] = attributes; cmd_msg_hdr = val_msg_hdr_create(PROTOCOL_PIN_CONTROL, - PIN_CONTROL_FUNCTION_SELECT, COMMAND_MSG); + PIN_CONTROL_SETTINGS_CONFIGURE, COMMAND_MSG); val_send_message(cmd_msg_hdr, param_count, parameters, &rsp_msg_hdr, &status, &return_value_count, return_values); diff --git a/test_pool/pin_control/test_pi022.c b/test_pool/pin_control/test_pi022.c index 24bf06d..42ad65f 100644 --- a/test_pool/pin_control/test_pi022.c +++ b/test_pool/pin_control/test_pi022.c @@ -33,7 +33,7 @@ uint32_t pin_control_set_permission_invalid_param_check(void) size_t return_value_count; uint32_t return_values[MAX_RETURNS_SIZE]; uint32_t parameters[PARAMETER_SIZE]; - uint32_t pc_id = 0; + uint32_t pc_id = 0, message_id; if (val_test_initialize(TEST_NUM, TEST_DESC) != VAL_STATUS_PASS) return VAL_STATUS_SKIP; @@ -42,6 +42,20 @@ uint32_t pin_control_set_permission_invalid_param_check(void) if (pc_id == 0) { val_print(VAL_PRINT_ERR, "\n No pin control pin identifiers found"); } else { + /* If PINCTRL_SET_PERMISSIONS not supported, skip the test */ + VAL_INIT_TEST_PARAM(param_count, rsp_msg_hdr, return_value_count, status); + message_id = PIN_CONTROL_SET_PERMISSIONS; + param_count = 1; + cmd_msg_hdr = val_msg_hdr_create(PROTOCOL_PIN_CONTROL, + PIN_CONTROL_PROTOCOL_MESSAGE_ATTRIBUTES, + COMMAND_MSG); + val_send_message(cmd_msg_hdr, param_count, &message_id, &rsp_msg_hdr, &status, + &return_value_count, return_values); + + if (status != SCMI_SUCCESS) { + val_print(VAL_PRINT_ERR, "\n PINCTRL SET PERMISSIONS not supported "); + return VAL_STATUS_SKIP; + } val_print(VAL_PRINT_TEST, "\n [Check 1] Query with invalid selector "); diff --git a/test_pool/pin_control/test_pi023.c b/test_pool/pin_control/test_pi023.c index 708434d..56bc67f 100644 --- a/test_pool/pin_control/test_pi023.c +++ b/test_pool/pin_control/test_pi023.c @@ -33,7 +33,7 @@ uint32_t pin_control_set_permission_invalid_id_check(void) size_t return_value_count; uint32_t return_values[MAX_RETURNS_SIZE]; uint32_t parameters[PARAMETER_SIZE]; - uint32_t pc_id = 0; + uint32_t pc_id = 0, message_id; if (val_test_initialize(TEST_NUM, TEST_DESC) != VAL_STATUS_PASS) return VAL_STATUS_SKIP; @@ -42,6 +42,20 @@ uint32_t pin_control_set_permission_invalid_id_check(void) if (pc_id == 0) { val_print(VAL_PRINT_ERR, "\n No pin control pin identifiers found"); } else { + /* If PINCTRL_SET_PERMISSIONS not supported, skip the test */ + VAL_INIT_TEST_PARAM(param_count, rsp_msg_hdr, return_value_count, status); + message_id = PIN_CONTROL_SET_PERMISSIONS; + param_count = 1; + cmd_msg_hdr = val_msg_hdr_create(PROTOCOL_PIN_CONTROL, + PIN_CONTROL_PROTOCOL_MESSAGE_ATTRIBUTES, + COMMAND_MSG); + val_send_message(cmd_msg_hdr, param_count, &message_id, &rsp_msg_hdr, &status, + &return_value_count, return_values); + + if (status != SCMI_SUCCESS) { + val_print(VAL_PRINT_ERR, "\n PINCTRL SET PERMISSIONS not supported "); + return VAL_STATUS_SKIP; + } val_print(VAL_PRINT_TEST, "\n [Check 1] Query with invalid pin id "); diff --git a/val/include/val_interface.h b/val/include/val_interface.h index a28556e..cd8df82 100644 --- a/val/include/val_interface.h +++ b/val/include/val_interface.h @@ -700,7 +700,6 @@ typedef enum { PIN_CONTROL_LIST_ASSOCIATIONS, PIN_CONTROL_SETTINGS_GET, PIN_CONTROL_SETTINGS_CONFIGURE, - PIN_CONTROL_FUNCTION_SELECT, PIN_CONTROL_REQUEST, PIN_CONTROL_RELEASE, PIN_CONTROL_NAME_GET, diff --git a/val/include/val_pin_control.h b/val/include/val_pin_control.h index 5d5c55b..b7a6019 100644 --- a/val/include/val_pin_control.h +++ b/val/include/val_pin_control.h @@ -18,12 +18,13 @@ #ifndef __VAL_PIN_CONTROL_H__ #define __VAL_PIN_CONTROL_H__ -#define MAX_PIN_IDENTIFIERS 5 -#define MAX_GROUP_IDENTIFIERS 10 -#define MAX_FUNCTIONS_IDENTIFIERS 10 +#define MAX_PIN_IDENTIFIERS 128 +#define MAX_GROUP_IDENTIFIERS 128 +#define MAX_FUNCTIONS_IDENTIFIERS 128 #define PIN_SELECTOR 0 #define GROUP_SELECTOR 1 #define FUNCTION_SELECTOR 2 +#define GET_NO_CONFIGS 2 #define GET_ALL_CONFIGS 1 #define NO_FUNCTION_ENABLED 0xFFFFFFFF @@ -46,6 +47,9 @@ #define SELECTOR_LOW 16 #define SKIP_CONFIGS_LOW 8 #define SET_CONFIGS_LOW 2 +#define SET_FUNCTION 1 +#define FUNCTION_ID_VALID 10 +#define FUNCTION_IGNORED 0 #define PINCTRL_ACCESS_DENY 0 #define PINCTRL_ACCESS_ALLOW 1 #define PINCTRL_ACCESS_OFFSET 2 -- GitLab