Platform: Add NS NV counters

Add a configurable amount of NS NV counters (up to 3), and expose them
to the NS caller.

Change-Id: I8adda25c1fae49c4dae36ccb562360f45ecbfc0a
Signed-off-by: Raef Coles <raef.coles@arm.com>
diff --git a/interface/src/tfm_platform_func_api.c b/interface/src/tfm_platform_func_api.c
index 3ef0c86..df566ec 100644
--- a/interface/src/tfm_platform_func_api.c
+++ b/interface/src/tfm_platform_func_api.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018-2019, Arm Limited. All rights reserved.
+ * Copyright (c) 2018-2022, Arm Limited. All rights reserved.
  *
  * SPDX-License-Identifier: BSD-3-Clause
  *
@@ -50,3 +50,35 @@
                                 (uint32_t)output, (uint32_t)outlen);
 }
 
+enum tfm_platform_err_t
+tfm_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 (enum tfm_platform_err_t) tfm_ns_interface_dispatch(
+            (veneer_fn)tfm_platform_sp_nv_counter_increment_veneer,
+            (uint32_t)in_vec, 1,
+            (uint32_t)NULL, 0);
+}
+
+enum tfm_platform_err_t
+tfm_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 (enum tfm_platform_err_t) tfm_ns_interface_dispatch(
+            (veneer_fn)tfm_platform_sp_nv_counter_read_veneer,
+            (uint32_t)in_vec, 1,
+            (uint32_t)out_vec, 1);
+}