diff options
| author | laurenw-arm <lauren.wehrmeister@arm.com> | 2022-08-11 15:29:56 -0500 |
|---|---|---|
| committer | Sandrine Bailleux <sandrine.bailleux@arm.com> | 2023-02-08 10:33:48 +0200 |
| commit | 8374508b00909cdffbe6233cf8fddcb49924faed (patch) | |
| tree | 803b28699b6fea9f7e603061acfbf5739ebbdf3c /lib | |
| parent | 5a53c6c6679e189eda7233232570958263332883 (diff) | |
| download | arm-trusted-firmware-8374508b00909cdffbe6233cf8fddcb49924faed.tar.gz | |
feat(psa): interface with RSS for NV counters
Adding AP/RSS interface for retrieving and incrementing non-volatile
counters.
The read interface implements the psa_call:
psa_call(RSS_PLATFORM_SERVICE_HANDLE,
RSS_PLATFORM_API_ID_NV_READ,
in_vec, 1, out_vec, 1);
where the in_vec indicates which of the 3 counters we want, and the
out_vec stores the counter value we get back from RSS.
The increment interface implements the psa_call:
psa_call(RSS_PLATFORM_SERVICE_HANDLE,
RSS_PLATFORM_API_ID_NV_INCREMENT,
in_vec, 1, (psa_outvec *)NULL, 0);
where, again, in_vec indicates the counter to increment, and we don't
get any output parameter from RSS.
Through this service, we will be able to get/increment any of the 3 NV
counters used on a CCA platform:
- NV counter for CCA firmware (BL2, BL31, RMM).
- NV counter for secure firmware.
- NV counter for non-secure firmware.
Signed-off-by: Lauren Wehrmeister <lauren.wehrmeister@arm.com>
Signed-off-by: Raef Coles <raef.coles@arm.com>
Change-Id: I4c1c7f4837ebff30de16bb0ce7ecd416b70b1f62
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/psa/rss_platform.c | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/lib/psa/rss_platform.c b/lib/psa/rss_platform.c new file mode 100644 index 000000000..359f89499 --- /dev/null +++ b/lib/psa/rss_platform.c @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2023, Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + */ + +#include <stdint.h> + +#include <psa/client.h> +#include <psa_manifest/sid.h> +#include <rss_platform_api.h> + +psa_status_t +rss_platform_nv_counter_increment(uint32_t counter_id) +{ + struct psa_invec in_vec[1]; + + in_vec[0].base = &counter_id; + in_vec[0].len = sizeof(counter_id); + + return psa_call(RSS_PLATFORM_SERVICE_HANDLE, + RSS_PLATFORM_API_ID_NV_INCREMENT, + in_vec, 1, NULL, 0); +} + +psa_status_t +rss_platform_nv_counter_read(uint32_t counter_id, + uint32_t size, uint8_t *val) +{ + struct psa_invec in_vec[1]; + struct psa_outvec out_vec[1]; + + in_vec[0].base = &counter_id; + in_vec[0].len = sizeof(counter_id); + + out_vec[0].base = val; + out_vec[0].len = size; + + return psa_call(RSS_PLATFORM_SERVICE_HANDLE, + RSS_PLATFORM_API_ID_NV_READ, + in_vec, 1, out_vec, 1); +} |
