Commit 0a2ab6e6 authored by Alexei Fedorov's avatar Alexei Fedorov
Browse files

FDT wrappers: add functions for read/write bytes



This patch adds 'fdtw_read_bytes' and 'fdtw_write_inplace_bytes'
functions for read/write array of bytes from/to a given property.
It also adds 'fdt_setprop_inplace_namelen_partial' to jmptbl.i
files for builds with USE_ROMLIB=1 option.

Change-Id: Ied7b5c8b38a0e21d508aa7bcf5893e656028b14d
Signed-off-by: default avatarAlexei Fedorov <Alexei.Fedorov@arm.com>
parent 91ff490d
/* /*
* Copyright (c) 2018, ARM Limited and Contributors. All rights reserved. * Copyright (c) 2018-2020, ARM Limited and Contributors. All rights reserved.
* *
* SPDX-License-Identifier: BSD-3-Clause * SPDX-License-Identifier: BSD-3-Clause
*/ */
...@@ -102,6 +102,41 @@ int fdtw_read_array(const void *dtb, int node, const char *prop, ...@@ -102,6 +102,41 @@ int fdtw_read_array(const void *dtb, int node, const char *prop,
return 0; return 0;
} }
/*
* Read bytes from a given property of the given node. Any number of
* bytes of the property can be read. The fdt pointer is updated.
* Returns 0 on success, and -1 on error.
*/
int fdtw_read_bytes(const void *dtb, int node, const char *prop,
unsigned int length, void *value)
{
const void *ptr;
int value_len;
assert(dtb != NULL);
assert(prop != NULL);
assert(value != NULL);
assert(node >= 0);
/* Access property and obtain its length (in bytes) */
ptr = fdt_getprop_namelen(dtb, node, prop, (int)strlen(prop),
&value_len);
if (ptr == NULL) {
WARN("Couldn't find property %s in dtb\n", prop);
return -1;
}
/* Verify that property length is not less than number of bytes */
if ((unsigned int)value_len < length) {
WARN("Property length mismatch\n");
return -1;
}
(void)memcpy(value, ptr, length);
return 0;
}
/* /*
* Read string from a given property of the given node. Up to 'size - 1' * Read string from a given property of the given node. Up to 'size - 1'
* characters are read, and a NUL terminator is added. Returns 0 on success, * characters are read, and a NUL terminator is added. Returns 0 on success,
...@@ -167,3 +202,45 @@ int fdtw_write_inplace_cells(void *dtb, int node, const char *prop, ...@@ -167,3 +202,45 @@ int fdtw_write_inplace_cells(void *dtb, int node, const char *prop,
return 0; return 0;
} }
/*
* Write bytes in place to a given property of the given node.
* Any number of bytes of the property can be written.
* Returns 0 on success, and < 0 on error.
*/
int fdtw_write_inplace_bytes(void *dtb, int node, const char *prop,
unsigned int length, const void *data)
{
const void *ptr;
int namelen, value_len, err;
assert(dtb != NULL);
assert(prop != NULL);
assert(data != NULL);
assert(node >= 0);
namelen = (int)strlen(prop);
/* Access property and obtain its length in bytes */
ptr = fdt_getprop_namelen(dtb, node, prop, namelen, &value_len);
if (ptr == NULL) {
WARN("Couldn't find property %s in dtb\n", prop);
return -1;
}
/* Verify that property length is not less than number of bytes */
if ((unsigned int)value_len < length) {
WARN("Property length mismatch\n");
return -1;
}
/* Set property value in place */
err = fdt_setprop_inplace_namelen_partial(dtb, node, prop,
namelen, 0,
data, (int)length);
if (err != 0) {
WARN("Set property %s failed with error %d\n", prop, err);
}
return err;
}
/* /*
* Copyright (c) 2018, ARM Limited and Contributors. All rights reserved. * Copyright (c) 2018-2020, ARM Limited and Contributors. All rights reserved.
* *
* SPDX-License-Identifier: BSD-3-Clause * SPDX-License-Identifier: BSD-3-Clause
*/ */
...@@ -20,5 +20,9 @@ int fdtw_read_string(const void *dtb, int node, const char *prop, ...@@ -20,5 +20,9 @@ int fdtw_read_string(const void *dtb, int node, const char *prop,
char *str, size_t size); char *str, size_t size);
int fdtw_write_inplace_cells(void *dtb, int node, const char *prop, int fdtw_write_inplace_cells(void *dtb, int node, const char *prop,
unsigned int cells, void *value); unsigned int cells, void *value);
int fdtw_read_bytes(const void *dtb, int node, const char *prop,
unsigned int length, void *value);
int fdtw_write_inplace_bytes(void *dtb, int node, const char *prop,
unsigned int length, const void *data);
#endif /* FDT_WRAPPERS_H */ #endif /* FDT_WRAPPERS_H */
# #
# Copyright (c) 2018, ARM Limited and Contributors. All rights reserved. # Copyright (c) 2018-2020, ARM Limited and Contributors. All rights reserved.
# #
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# #
...@@ -17,6 +17,7 @@ fdt fdt_getprop_namelen ...@@ -17,6 +17,7 @@ fdt fdt_getprop_namelen
fdt fdt_setprop_inplace fdt fdt_setprop_inplace
fdt fdt_check_header fdt fdt_check_header
fdt fdt_node_offset_by_compatible fdt fdt_node_offset_by_compatible
fdt fdt_setprop_inplace_namelen_partial
mbedtls mbedtls_asn1_get_alg mbedtls mbedtls_asn1_get_alg
mbedtls mbedtls_asn1_get_alg_null mbedtls mbedtls_asn1_get_alg_null
mbedtls mbedtls_asn1_get_bitstring_null mbedtls mbedtls_asn1_get_bitstring_null
......
# #
# Copyright (c) 2018-2019, ARM Limited and Contributors. All rights reserved. # Copyright (c) 2018-2020, ARM Limited and Contributors. All rights reserved.
# #
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# #
...@@ -19,6 +19,7 @@ fdt fdt_getprop_namelen ...@@ -19,6 +19,7 @@ fdt fdt_getprop_namelen
fdt fdt_setprop_inplace fdt fdt_setprop_inplace
fdt fdt_check_header fdt fdt_check_header
fdt fdt_node_offset_by_compatible fdt fdt_node_offset_by_compatible
fdt fdt_setprop_inplace_namelen_partial
mbedtls mbedtls_asn1_get_alg mbedtls mbedtls_asn1_get_alg
mbedtls mbedtls_asn1_get_alg_null mbedtls mbedtls_asn1_get_alg_null
mbedtls mbedtls_asn1_get_bitstring_null mbedtls mbedtls_asn1_get_bitstring_null
......
# #
# Copyright (c) 2018-2019, ARM Limited and Contributors. All rights reserved. # Copyright (c) 2018-2020, ARM Limited and Contributors. All rights reserved.
# #
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# #
...@@ -19,6 +19,7 @@ fdt fdt_getprop_namelen ...@@ -19,6 +19,7 @@ fdt fdt_getprop_namelen
fdt fdt_setprop_inplace fdt fdt_setprop_inplace
fdt fdt_check_header fdt fdt_check_header
fdt fdt_node_offset_by_compatible fdt fdt_node_offset_by_compatible
fdt fdt_setprop_inplace_namelen_partial
mbedtls mbedtls_asn1_get_alg mbedtls mbedtls_asn1_get_alg
mbedtls mbedtls_asn1_get_alg_null mbedtls mbedtls_asn1_get_alg_null
mbedtls mbedtls_asn1_get_bitstring_null mbedtls mbedtls_asn1_get_bitstring_null
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment