Add hw TRNG from SEL0 SP

Intgrates the FVP TRNG into the crypto sp to provide a hw
entropy source.  Includes tests that check SP device
region configuration loading and MMIO access within the
region.

Signed-off-by: Julian Hall <julian.hall@arm.com>
Change-Id: Ia9af8b044596e1c7d194f039fdf64c2468bb3221
diff --git a/deployments/crypto/opteesp/CMakeLists.txt b/deployments/crypto/opteesp/CMakeLists.txt
index 356d0d3..9441ecf 100644
--- a/deployments/crypto/opteesp/CMakeLists.txt
+++ b/deployments/crypto/opteesp/CMakeLists.txt
@@ -36,6 +36,7 @@
 	COMPONENTS
 		"components/common/tlv"
 		"components/config/ramstore"
+		"components/config/loader/sp"
 		"components/messaging/ffa/libsp"
 		"components/rpc/ffarpc/endpoint"
 		"components/rpc/ffarpc/caller/sp"
diff --git a/deployments/crypto/opteesp/crypto_sp.c b/deployments/crypto/opteesp/crypto_sp.c
index 6b376b7..594fa89 100644
--- a/deployments/crypto/opteesp/crypto_sp.c
+++ b/deployments/crypto/opteesp/crypto_sp.c
@@ -3,7 +3,6 @@
  * Copyright (c) 2020-2021, Arm Limited and Contributors. All rights reserved.
  */
 
-#include <config/ramstore/config_ramstore.h>
 #include <rpc/ffarpc/caller/sp/ffarpc_caller.h>
 #include <rpc/ffarpc/endpoint/ffarpc_call_ep.h>
 #include <rpc/dummy/dummy_caller.h>
@@ -12,6 +11,8 @@
 #include <service/crypto/provider/serializer/protobuf/pb_crypto_provider_serializer.h>
 #include <service/crypto/provider/serializer/packed-c/packedc_crypto_provider_serializer.h>
 #include <protocols/rpc/common/packed-c/status.h>
+#include <config/ramstore/config_ramstore.h>
+#include <config/loader/sp/sp_config_loader.h>
 #include <ffa_api.h>
 #include <sp_api.h>
 #include <sp_rxtx.h>
@@ -44,9 +45,8 @@
 
 	if (sp_init(&own_id) != 0) goto fatal_error;
 
-	/* Read config data */
 	config_ramstore_init();
-	// ~ read here
+	sp_config_load(init_info);
 
 	/* Establish RPC session with secure storage SP */
 	storage_caller = ffarpc_caller_init(&ffarpc_caller);
diff --git a/deployments/env-test/env_test.cmake b/deployments/env-test/env_test.cmake
new file mode 100644
index 0000000..bf2b509
--- /dev/null
+++ b/deployments/env-test/env_test.cmake
@@ -0,0 +1,46 @@
+#-------------------------------------------------------------------------------
+# Copyright (c) 2021, Arm Limited and Contributors. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+#-------------------------------------------------------------------------------
+
+#-------------------------------------------------------------------------------
+#  The base build file shared between deployments of 'env-test' for
+#  different environments.  Used for running tests that validate hardwarw
+#  backed services available from within a secure execution environment.
+#-------------------------------------------------------------------------------
+
+#-------------------------------------------------------------------------------
+#  Components that are common accross all deployments
+#
+#-------------------------------------------------------------------------------
+add_components(
+	TARGET "env_test"
+	BASE_DIR ${TS_ROOT}
+	COMPONENTS
+	"components/common/tlv"
+	"components/config/ramstore"
+	"components/rpc/common/interface"
+	"components/rpc/common/caller"
+	"components/service/common"
+	"components/service/common/provider"
+	"components/service/test_runner/provider"
+	"components/service/test_runner/provider/serializer/packed-c"
+	"components/service/test_runner/provider/backend/null"
+	"components/service/test_runner/provider/backend/simple_c"
+	"components/service/crypto/provider/mbedcrypto"
+	"components/service/crypto/provider/mbedcrypto/trng_adapter/platform"
+	"components/service/crypto/provider/mbedcrypto/trng_adapter/test"
+	"components/service/secure_storage/client/psa"
+	"protocols/rpc/common/packed-c"
+)
+
+#-------------------------------------------------------------------------------
+#  Components used from external projects
+#
+#-------------------------------------------------------------------------------
+
+# Mbedcrypto
+include(${TS_ROOT}/external/mbed-crypto/mbedcrypto.cmake)
+target_link_libraries(env_test PRIVATE mbedcrypto)
diff --git a/deployments/env-test/opteesp/CMakeLists.txt b/deployments/env-test/opteesp/CMakeLists.txt
index bf735a6..3149ecd 100644
--- a/deployments/env-test/opteesp/CMakeLists.txt
+++ b/deployments/env-test/opteesp/CMakeLists.txt
@@ -15,7 +15,7 @@
 #  test cases.
 #-------------------------------------------------------------------------------
 include(${TS_ROOT}/environments/opteesp/env.cmake)
-project(trusted-services LANGUAGES C CXX ASM)
+project(trusted-services LANGUAGES C ASM)
 add_executable(env_test)
 target_include_directories(env_test PRIVATE "${TOP_LEVEL_INCLUDE_DIRS}")
 set(SP_UUID "33c75baf-ac6a-4fe4-8ac7-e9909bee2d17")
@@ -35,23 +35,26 @@
 add_components(TARGET "env_test"
 	BASE_DIR ${TS_ROOT}
 	COMPONENTS
-		"components/common/tlv"
-		"components/config/ramstore"
+		"components/config/loader/sp"
 		"components/messaging/ffa/libsp"
 		"components/rpc/ffarpc/endpoint"
-		"components/rpc/common/interface"
-		"components/service/common"
-		"components/service/common/provider"
-		"components/service/test_runner/provider"
-		"components/service/test_runner/provider/serializer/packed-c"
-		"components/service/test_runner/provider/backend/null"
-		"protocols/rpc/common/packed-c"
+		"components/config/test/sp"
 		"environments/opteesp"
 )
 
+#-------------------------------------------------------------------------------
+#  Extend with components that are common across all deployments of
+#  env_test
+#
+#-------------------------------------------------------------------------------
+include(../env_test.cmake REQUIRED)
+
+#-------------------------------------------------------------------------------
+#  Deployment specific source files
+#-------------------------------------------------------------------------------
 target_sources(env_test PRIVATE
 	env_test.c
-	env_test_config.c
+	env_test_tests.c
 )
 
 #-------------------------------------------------------------------------------
@@ -63,11 +66,6 @@
 
 add_platform(TARGET "env_test")
 
-#-------------------------------------------------------------------------------
-#  Components used from external projects
-#
-#-------------------------------------------------------------------------------
-
 if(CMAKE_CROSSCOMPILING)
 	target_link_libraries(env_test PRIVATE stdc++ gcc m)
 endif()
diff --git a/deployments/env-test/opteesp/env_test.c b/deployments/env-test/opteesp/env_test.c
index 0bb523f..3df4c1a 100644
--- a/deployments/env-test/opteesp/env_test.c
+++ b/deployments/env-test/opteesp/env_test.c
@@ -8,11 +8,13 @@
 #include <service/test_runner/provider/test_runner_provider.h>
 #include <service/test_runner/provider/serializer/packed-c/packedc_test_runner_provider_serializer.h>
 #include <protocols/rpc/common/packed-c/status.h>
+#include <config/ramstore/config_ramstore.h>
+#include <config/loader/sp/sp_config_loader.h>
 #include <ffa_api.h>
 #include <sp_api.h>
 #include <sp_rxtx.h>
 #include <trace.h>
-#include "env_test_config.h"
+#include "env_test_tests.h"
 
 
 uint16_t own_id = 0; /* !!Needs refactoring as parameter to ffarpc_caller_init */
@@ -33,7 +35,8 @@
 
 	if (sp_init(&own_id) != 0) goto fatal_error;
 
-	load_sp_config(init_info);
+	config_ramstore_init();
+	sp_config_load(init_info);
 
 	/* Initialize the test_runner service */
 	test_runner_iface = test_runner_provider_init(&test_runner_provider);
@@ -41,6 +44,8 @@
 	test_runner_provider_register_serializer(&test_runner_provider,
             TS_RPC_ENCODING_PACKED_C, packedc_test_runner_provider_serializer_instance());
 
+	env_test_register_tests(&test_runner_provider);
+
 	ffa_call_ep_init(&ffarpc_call_ep, test_runner_iface);
 
  	/* End of boot phase */
diff --git a/deployments/env-test/opteesp/env_test_config.c b/deployments/env-test/opteesp/env_test_config.c
deleted file mode 100644
index 14a1e53..0000000
--- a/deployments/env-test/opteesp/env_test_config.c
+++ /dev/null
@@ -1,16 +0,0 @@
-// SPDX-License-Identifier: BSD-3-Clause
-/*
- * Copyright (c) 2021, Arm Limited and Contributors. All rights reserved.
- */
-
-#include <config/ramstore/config_ramstore.h>
-#include "env_test_config.h"
-
-
-void load_sp_config(struct ffa_init_info *init_info)
-{
-	config_ramstore_init();
-
-	/* Load deployment specific configuration */
-	(void)init_info;
-}
\ No newline at end of file
diff --git a/deployments/env-test/opteesp/env_test_config.h b/deployments/env-test/opteesp/env_test_config.h
deleted file mode 100644
index 8ed4a7e..0000000
--- a/deployments/env-test/opteesp/env_test_config.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * Copyright (c) 2021, Arm Limited and Contributors. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-#ifndef ENV_TEST_CONFIG_H
-#define ENV_TEST_CONFIG_H
-
-#include <ffa_api.h>
-
-/**
- * Loads the SP specific configuration passed as SP initialization parameters.
- */
-void load_sp_config(struct ffa_init_info *init_info);
-
-
-#endif /* ENV_TEST_CONFIG_H */
diff --git a/deployments/env-test/opteesp/env_test_tests.c b/deployments/env-test/opteesp/env_test_tests.c
new file mode 100644
index 0000000..beb9cbf
--- /dev/null
+++ b/deployments/env-test/opteesp/env_test_tests.c
@@ -0,0 +1,16 @@
+// SPDX-License-Identifier: BSD-3-Clause
+/*
+ * Copyright (c) 2021, Arm Limited and Contributors. All rights reserved.
+ */
+
+#include <service/test_runner/provider/backend/simple_c/simple_c_test_runner.h>
+#include <config/test/sp/sp_config_tests.h>
+#include <service/crypto/provider/mbedcrypto/trng_adapter/test/trng_env_tests.h>
+
+void env_test_register_tests(struct test_runner_provider *context)
+{
+	simple_c_test_runner_init(context);
+
+	sp_config_tests_register();
+	trng_env_tests_register();
+}
\ No newline at end of file
diff --git a/deployments/env-test/opteesp/env_test_tests.h b/deployments/env-test/opteesp/env_test_tests.h
new file mode 100644
index 0000000..305fc45
--- /dev/null
+++ b/deployments/env-test/opteesp/env_test_tests.h
@@ -0,0 +1,18 @@
+/*
+ * Copyright (c) 2021, Arm Limited and Contributors. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#ifndef ENV_TEST_TESTS_H
+#define ENV_TEST_TESTS_H
+
+struct test_runner_provider;
+
+/**
+ * Registers test cases for this deployment
+ */
+void env_test_register_tests(struct test_runner_provider *context);
+
+
+#endif /* ENV_TEST_TESTS_H */