summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/Kconfig15
-rw-r--r--lib/optee/optee.c45
-rw-r--r--lib/string.c31
3 files changed, 52 insertions, 39 deletions
diff --git a/lib/Kconfig b/lib/Kconfig
index 80ff2443cb8..ab8c9ccd600 100644
--- a/lib/Kconfig
+++ b/lib/Kconfig
@@ -391,19 +391,18 @@ config SHA384
config SHA_HW_ACCEL
bool "Enable hashing using hardware"
help
- This option enables hardware acceleration
- for SHA1/SHA256 hashing.
- This affects the 'hash' command and also the
- hash_lookup_algo() function.
+ This option enables hardware acceleration for SHA hashing.
+ This affects the 'hash' command and also the hash_lookup_algo()
+ function.
config SHA_PROG_HW_ACCEL
bool "Enable Progressive hashing support using hardware"
depends on SHA_HW_ACCEL
help
- This option enables hardware-acceleration for
- SHA1/SHA256 progressive hashing.
- Data can be streamed in a block at a time and the hashing
- is performed in hardware.
+ This option enables hardware-acceleration for SHA progressive
+ hashing.
+ Data can be streamed in a block at a time and the hashing is
+ performed in hardware.
config MD5
bool "Support MD5 algorithm"
diff --git a/lib/optee/optee.c b/lib/optee/optee.c
index 4dcf6f93099..672690dc538 100644
--- a/lib/optee/optee.c
+++ b/lib/optee/optee.c
@@ -9,6 +9,8 @@
#include <image.h>
#include <log.h>
#include <malloc.h>
+#include <dm/ofnode.h>
+#include <linux/ioport.h>
#include <linux/libfdt.h>
#include <tee/optee.h>
@@ -70,17 +72,11 @@ error:
}
#if defined(CONFIG_OF_LIBFDT)
-static int optee_copy_firmware_node(const void *old_blob, void *fdt_blob)
+static int optee_copy_firmware_node(ofnode node, void *fdt_blob)
{
- int old_offs, offs, ret, len;
+ int offs, ret, len;
const void *prop;
- old_offs = fdt_path_offset(old_blob, "/firmware/optee");
- if (old_offs < 0) {
- debug("Original OP-TEE Device Tree node not found");
- return old_offs;
- }
-
offs = fdt_path_offset(fdt_blob, "/firmware");
if (offs < 0) {
offs = fdt_path_offset(fdt_blob, "/");
@@ -97,7 +93,7 @@ static int optee_copy_firmware_node(const void *old_blob, void *fdt_blob)
return offs;
/* copy the compatible property */
- prop = fdt_getprop(old_blob, old_offs, "compatible", &len);
+ prop = ofnode_get_property(node, "compatible", &len);
if (!prop) {
debug("missing OP-TEE compatible property");
return -EINVAL;
@@ -108,7 +104,7 @@ static int optee_copy_firmware_node(const void *old_blob, void *fdt_blob)
return ret;
/* copy the method property */
- prop = fdt_getprop(old_blob, old_offs, "method", &len);
+ prop = ofnode_get_property(node, "method", &len);
if (!prop) {
debug("missing OP-TEE method property");
return -EINVAL;
@@ -121,19 +117,18 @@ static int optee_copy_firmware_node(const void *old_blob, void *fdt_blob)
return 0;
}
-int optee_copy_fdt_nodes(const void *old_blob, void *new_blob)
+int optee_copy_fdt_nodes(void *new_blob)
{
- int nodeoffset, subnode, ret;
- struct fdt_resource res;
-
- if (fdt_check_header(old_blob))
- return -EINVAL;
+ ofnode node, subnode;
+ int ret;
+ struct resource res;
if (fdt_check_header(new_blob))
return -EINVAL;
/* only proceed if there is an /firmware/optee node */
- if (fdt_path_offset(old_blob, "/firmware/optee") < 0) {
+ node = ofnode_path("/firmware/optee");
+ if (!ofnode_valid(node)) {
debug("No OP-TEE firmware node in old fdt, nothing to do");
return 0;
}
@@ -148,20 +143,17 @@ int optee_copy_fdt_nodes(const void *old_blob, void *new_blob)
return 0;
}
- ret = optee_copy_firmware_node(old_blob, new_blob);
+ ret = optee_copy_firmware_node(node, new_blob);
if (ret < 0) {
printf("Failed to add OP-TEE firmware node\n");
return ret;
}
/* optee inserts its memory regions as reserved-memory nodes */
- nodeoffset = fdt_subnode_offset(old_blob, 0, "reserved-memory");
- if (nodeoffset >= 0) {
- for (subnode = fdt_first_subnode(old_blob, nodeoffset);
- subnode >= 0;
- subnode = fdt_next_subnode(old_blob, subnode)) {
- const char *name = fdt_get_name(old_blob,
- subnode, NULL);
+ node = ofnode_path("/reserved-memory");
+ if (ofnode_valid(node)) {
+ ofnode_for_each_subnode(subnode, node) {
+ const char *name = ofnode_get_name(subnode);
if (!name)
return -EINVAL;
@@ -170,8 +162,7 @@ int optee_copy_fdt_nodes(const void *old_blob, void *new_blob)
continue;
/* check if this subnode has a reg property */
- ret = fdt_get_resource(old_blob, subnode, "reg", 0,
- &res);
+ ret = ofnode_read_resource(subnode, 0, &res);
if (!ret) {
struct fdt_memory carveout = {
.start = res.start,
diff --git a/lib/string.c b/lib/string.c
index 73b984123dc..a0cff8fe88e 100644
--- a/lib/string.c
+++ b/lib/string.c
@@ -114,17 +114,21 @@ char * strncpy(char * dest,const char *src,size_t count)
* NUL-terminated string that fits in the buffer (unless,
* of course, the buffer size is zero). It does not pad
* out the result like strncpy() does.
+ *
+ * Return: the number of bytes copied
*/
size_t strlcpy(char *dest, const char *src, size_t size)
{
- size_t ret = strlen(src);
-
if (size) {
- size_t len = (ret >= size) ? size - 1 : ret;
+ size_t srclen = strlen(src);
+ size_t len = (srclen >= size) ? size - 1 : srclen;
+
memcpy(dest, src, len);
dest[len] = '\0';
+ return len + 1;
}
- return ret;
+
+ return 0;
}
#endif
@@ -176,6 +180,25 @@ char * strncat(char *dest, const char *src, size_t count)
}
#endif
+#ifndef __HAVE_ARCH_STRLCAT
+/**
+ * strlcat - Append a length-limited, %NUL-terminated string to another
+ * @dest: The string to be appended to
+ * @src: The string to append to it
+ * @size: The size of @dest
+ *
+ * Compatible with *BSD: the result is always a valid NUL-terminated string that
+ * fits in the buffer (unless, of course, the buffer size is zero). It does not
+ * write past @size like strncat() does.
+ */
+size_t strlcat(char *dest, const char *src, size_t size)
+{
+ size_t len = strnlen(dest, size);
+
+ return len + strlcpy(dest + len, src, size - len);
+}
+#endif
+
#ifndef __HAVE_ARCH_STRCMP
/**
* strcmp - Compare two strings