From 1dd49f577b75d9d6d1716b133024a31d20748382 Mon Sep 17 00:00:00 2001 From: Patrick Delaunay Date: Wed, 23 Oct 2019 15:44:36 +0200 Subject: pinctrol: dm: remove the function pinctrl_decode_pin_config Remove the pinctrl_decode_pin_config() API, because this function is unused and not compatible with livetree (it uses fdtdec_get_bool instead of ofnode API). Signed-off-by: Patrick Delaunay Reviewed-by: Simon Glass --- include/dm/pinctrl.h | 13 ------------- 1 file changed, 13 deletions(-) (limited to 'include') diff --git a/include/dm/pinctrl.h b/include/dm/pinctrl.h index 3eca34fbf7..692e5fc8cb 100644 --- a/include/dm/pinctrl.h +++ b/include/dm/pinctrl.h @@ -369,19 +369,6 @@ int pinctrl_request_noflags(struct udevice *dev, int func); */ int pinctrl_get_periph_id(struct udevice *dev, struct udevice *periph); -/** - * pinctrl_decode_pin_config() - decode pin configuration flags - * - * This decodes some of the PIN_CONFIG values into flags, with each value - * being (1 << pin_cfg). This does not support things with values like the - * slew rate. - * - * @blob: Device tree blob - * @node: Node containing the PIN_CONFIG values - * @return decoded flag value, or -ve on error - */ -int pinctrl_decode_pin_config(const void *blob, int node); - /** * pinctrl_get_gpio_mux() - get the mux value for a particular GPIO * -- cgit From 086336a22508affb7567bf6d383642554eda5a56 Mon Sep 17 00:00:00 2001 From: Heiko Stuebner Date: Wed, 23 Oct 2019 16:46:38 +0200 Subject: fdtdec: protect against another NULL phandlep in fdtdec_add_reserved_memory() The change adding fdtdec_add_reserved_memory() already protected the added phandle against the phandlep being NULL - making the phandlep var optional. But in the early code checking for an already existing carveout this check was not done and thus the phandle assignment could run into trouble, so add a check there as well, which makes the function still return successfully if a matching region is found, even though no-one wants to work with the phandle. Fixes: c9222a08b3f7 ("fdtdec: Implement fdtdec_add_reserved_memory()") Signed-off-by: Heiko Stuebner Reviewed-by: Simon Glass --- include/fdtdec.h | 1 + 1 file changed, 1 insertion(+) (limited to 'include') diff --git a/include/fdtdec.h b/include/fdtdec.h index f1e58f9732..e150975b27 100644 --- a/include/fdtdec.h +++ b/include/fdtdec.h @@ -1061,6 +1061,7 @@ static inline int fdtdec_set_phandle(void *blob, int node, uint32_t phandle) * @param basename base name of the node to create * @param carveout information about the carveout region * @param phandlep return location for the phandle of the carveout region + * can be NULL * @return 0 on success or a negative error code on failure */ int fdtdec_add_reserved_memory(void *blob, const char *basename, -- cgit From 357d2ceba0354e29462ac25924f5e42623c22b5b Mon Sep 17 00:00:00 2001 From: Heiko Stuebner Date: Wed, 23 Oct 2019 16:46:39 +0200 Subject: fdtdec: only create phandle if caller wants it in fdtdec_add_reserved_memory() The phandlep pointer returning the phandle to the caller is optional and if it is not set when calling fdtdec_add_reserved_memory() it is highly likely that the caller is not interested in a phandle to the created reserved-memory area and really just wants that area added. So just don't create a phandle in that case. Signed-off-by: Heiko Stuebner Reviewed-by: Simon Glass --- include/fdtdec.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'include') diff --git a/include/fdtdec.h b/include/fdtdec.h index e150975b27..696e0fd024 100644 --- a/include/fdtdec.h +++ b/include/fdtdec.h @@ -1061,7 +1061,7 @@ static inline int fdtdec_set_phandle(void *blob, int node, uint32_t phandle) * @param basename base name of the node to create * @param carveout information about the carveout region * @param phandlep return location for the phandle of the carveout region - * can be NULL + * can be NULL if no phandle should be added * @return 0 on success or a negative error code on failure */ int fdtdec_add_reserved_memory(void *blob, const char *basename, -- cgit From 6ccb05eae01b660b0585accf338302af1069f419 Mon Sep 17 00:00:00 2001 From: Heiko Stuebner Date: Wed, 23 Oct 2019 16:46:40 +0200 Subject: image: fdt: copy possible optee nodes to a loaded devicetree The loading convention for optee or any other tee on arm64 is as bl32 parameter to the trusted-firmware. So TF-A gets invoked with the TEE as bl32 and main u-boot as bl33. Once it has done its startup TF-A jumps into the bl32 for the TEE startup, returns to TF-A and then jumps to bl33. All of them get passed a devicetree as parameter and all components often get loaded from a FIT image. OP-TEE will create additional nodes in that devicetree namely a firmware node and possibly multiple reserved-memory nodes. While this devicetree is used in main u-boot, in most cases it won't be the one passed to the actual kernel. Instead most boot commands will load a new devicetree from somewhere like mass storage of the network, so if that happens u-boot should transfer the optee nodes to that new devicetree. To make that happen introduce optee_copy_fdt_nodes() called from the dt setup function in image-fdt which after checking for the optee presence in the u-boot dt will make sure a optee node is present in the kernel dt and transfer any reserved-memory regions it can find. Signed-off-by: Heiko Stuebner Reviewed-by: Jens Wiklander --- include/tee/optee.h | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'include') diff --git a/include/tee/optee.h b/include/tee/optee.h index 9446928fd4..121b30a303 100644 --- a/include/tee/optee.h +++ b/include/tee/optee.h @@ -67,4 +67,13 @@ static inline int optee_verify_bootm_image(unsigned long image_addr, } #endif +#if defined(CONFIG_OPTEE) && defined(CONFIG_OF_LIBFDT) +int optee_copy_fdt_nodes(const void *old_blob, void *new_blob); +#else +static inline int optee_copy_fdt_nodes(const void *old_blob, void *new_blob) +{ + return 0; +} +#endif + #endif /* _OPTEE_H */ -- cgit From 96383bdfe421f01de9c339570de40e9bfd9ef455 Mon Sep 17 00:00:00 2001 From: Heiko Stuebner Date: Wed, 23 Oct 2019 16:46:41 +0200 Subject: tests: add OP-TEE test suite OP-TEE can get supplied with a devicetree and will then insert its firmware node and reserved-memory sections into it. As this devicetree often is not the one supplied to a later loaded kernel, a previous commit added functionality to transfer these nodes onto that new devicetree. To make sure this functionality stays intact, also add a test for the transfer functionality. Signed-off-by: Heiko Stuebner Reviewed-by: Simon Glass --- include/test/optee.h | 14 ++++++++++++++ include/test/suites.h | 1 + 2 files changed, 15 insertions(+) create mode 100644 include/test/optee.h (limited to 'include') diff --git a/include/test/optee.h b/include/test/optee.h new file mode 100644 index 0000000000..a8c6e6395f --- /dev/null +++ b/include/test/optee.h @@ -0,0 +1,14 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* + * Copyright (C) 2019, Theobroma Systems Design und Consulting GmbH + */ + +#ifndef __TEST_OPTEE_H__ +#define __TEST_OPTEE_H__ + +#include + +/* Declare a new environment test */ +#define OPTEE_TEST(_name, _flags) UNIT_TEST(_name, _flags, optee_test) + +#endif /* __TEST_OPTEE_H__ */ diff --git a/include/test/suites.h b/include/test/suites.h index 01bee09346..20970f08d6 100644 --- a/include/test/suites.h +++ b/include/test/suites.h @@ -28,6 +28,7 @@ int do_ut_compression(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]); int do_ut_dm(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]); int do_ut_env(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]); int do_ut_lib(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]); +int do_ut_optee(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]); int do_ut_overlay(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]); int do_ut_time(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]); int do_ut_unicode(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]); -- cgit