summaryrefslogtreecommitdiff
path: root/lib/fconf
diff options
context:
space:
mode:
authorLouis Mayencourt <louis.mayencourt@arm.com>2019-09-30 10:57:24 +0100
committerLouis Mayencourt <louis.mayencourt@arm.com>2020-02-07 13:51:32 +0000
commitce8528411a95d4e988844d5d16b5af2828f9f407 (patch)
tree7aab62118896b4a158dcec5d75ab739939e597a0 /lib/fconf
parent25ac87940cd3db8036f967d01653c0db64e4c136 (diff)
downloadarm-trusted-firmware-ce8528411a95d4e988844d5d16b5af2828f9f407.tar.gz
fconf: Add TBBR disable_authentication property
Use fconf to retrieve the `disable_authentication` property. Move this access from arm dynamic configuration to bl common. Change-Id: Ibf184a5c6245d04839222f5457cf5e651f252b86 Signed-off-by: Louis Mayencourt <louis.mayencourt@arm.com>
Diffstat (limited to 'lib/fconf')
-rw-r--r--lib/fconf/fconf_tbbr_getter.c56
1 files changed, 56 insertions, 0 deletions
diff --git a/lib/fconf/fconf_tbbr_getter.c b/lib/fconf/fconf_tbbr_getter.c
new file mode 100644
index 000000000..29f67caec
--- /dev/null
+++ b/lib/fconf/fconf_tbbr_getter.c
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2019-2020, ARM Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+#include <assert.h>
+
+#include <common/bl_common.h>
+#include <common/debug.h>
+#include <common/fdt_wrappers.h>
+#include <lib/fconf/fconf_tbbr_getter.h>
+#include <libfdt.h>
+
+struct tbbr_dyn_config_t tbbr_dyn_config;
+
+int fconf_populate_tbbr_dyn_config(uintptr_t config)
+{
+ int err;
+ int node;
+
+ /* As libfdt use void *, we can't avoid this cast */
+ const void *dtb = (void *)config;
+
+ /* Assert the node offset point to "arm,tb_fw" compatible property */
+ const char *compatible_str = "arm,tb_fw";
+ node = fdt_node_offset_by_compatible(dtb, -1, compatible_str);
+ if (node < 0) {
+ ERROR("FCONF: Can't find %s compatible in dtb\n", compatible_str);
+ return node;
+ }
+
+ /* Locate the disable_auth cell and read the value */
+ err = fdtw_read_cells(dtb, node, "disable_auth", 1, &tbbr_dyn_config.disable_auth);
+ if (err < 0) {
+ WARN("FCONF: Read cell failed for `disable_auth`\n");
+ return err;
+ }
+
+ /* Check if the value is boolean */
+ if ((tbbr_dyn_config.disable_auth != 0U) && (tbbr_dyn_config.disable_auth != 1U)) {
+ WARN("Invalid value for `disable_auth` cell %d\n", tbbr_dyn_config.disable_auth);
+ return -1;
+ }
+
+#if defined(DYN_DISABLE_AUTH)
+ if (tbbr_dyn_config.disable_auth == 1)
+ dyn_disable_auth();
+#endif
+
+ VERBOSE("FCONF:tbbr.disable_auth cell found with value = %d\n",
+ tbbr_dyn_config.disable_auth);
+
+ return 0;
+}
+
+FCONF_REGISTER_POPULATOR(tbbr, fconf_populate_tbbr_dyn_config);