From: Heiko Stuebner <heiko@sntech.de>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v4 01/20] dm: allow limiting pre-reloc markings to spl or tpl
Date: Sat, 18 Feb 2017 19:46:21 +0100 [thread overview]
Message-ID: <20170218184640.30635-2-heiko@sntech.de> (raw)
In-Reply-To: <20170218184640.30635-1-heiko@sntech.de>
Right now the u-boot,dm-pre-reloc flag will make each marked node
always appear in both spl and tpl. But systems needing an additional
tpl might have special constraints for each, like the spl needing to
be very tiny.
So introduce two additional flags to mark nodes for only spl or tpl
environments and introduce a function dm_fdt_pre_reloc to automate
the necessary checks in code instances checking for pre-relocation
flags.
The behaviour of the original flag stays untouched and still marks
a node for both spl and tpl.
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
Reviewed-by: Simon Glass <sjg@chromium.org>
Tested-by: Kever Yang <kever.yang@rock-chips.com>
---
doc/driver-model/README.txt | 4 ++++
drivers/clk/at91/pmc.c | 3 ++-
drivers/core/root.c | 2 +-
drivers/core/util.c | 25 +++++++++++++++++++++++++
drivers/pinctrl/pinctrl-uclass.c | 3 ++-
include/dm/util.h | 26 ++++++++++++++++++++++++++
scripts/Makefile.spl | 7 ++++++-
tools/dtoc/dtoc.py | 2 ++
8 files changed, 68 insertions(+), 4 deletions(-)
diff --git a/doc/driver-model/README.txt b/doc/driver-model/README.txt
index 1b5ccec4b2..af28b43c7b 100644
--- a/doc/driver-model/README.txt
+++ b/doc/driver-model/README.txt
@@ -825,6 +825,10 @@ drivers marked with DM_FLAG_PRE_RELOC or the device tree
'u-boot,dm-pre-reloc' flag are initialised prior to relocation. This helps
to reduce the driver model overhead.
+It is possible to limit this to specific relocation steps, by using
+the more specialized 'u-boot,dm-spl' and 'u-boot,dm-tpl' flags
+in the devicetree.
+
Then post relocation we throw that away and re-init driver model again.
For drivers which require some sort of continuity between pre- and
post-relocation devices, we can provide access to the pre-relocation
diff --git a/drivers/clk/at91/pmc.c b/drivers/clk/at91/pmc.c
index 76ba91af81..c098efc9f7 100644
--- a/drivers/clk/at91/pmc.c
+++ b/drivers/clk/at91/pmc.c
@@ -10,6 +10,7 @@
#include <dm/device.h>
#include <dm/lists.h>
#include <dm/root.h>
+#include <dm/util.h>
#include "pmc.h"
DECLARE_GLOBAL_DATA_PTR;
@@ -56,7 +57,7 @@ int at91_clk_sub_device_bind(struct udevice *dev, const char *drv_name)
offset > 0;
offset = fdt_next_subnode(fdt, offset)) {
if (pre_reloc_only &&
- !fdt_getprop(fdt, offset, "u-boot,dm-pre-reloc", NULL))
+ !dm_fdt_pre_reloc(fdt, offset))
continue;
/*
* If this node has "compatible" property, this is not
diff --git a/drivers/core/root.c b/drivers/core/root.c
index 9edfc1efb6..45f990ba9e 100644
--- a/drivers/core/root.c
+++ b/drivers/core/root.c
@@ -205,7 +205,7 @@ int dm_scan_fdt_node(struct udevice *parent, const void *blob, int offset,
offset > 0;
offset = fdt_next_subnode(blob, offset)) {
if (pre_reloc_only &&
- !fdt_getprop(blob, offset, "u-boot,dm-pre-reloc", NULL))
+ !dm_fdt_pre_reloc(blob, offset))
continue;
if (!fdtdec_get_is_enabled(blob, offset)) {
dm_dbg(" - ignoring disabled device\n");
diff --git a/drivers/core/util.c b/drivers/core/util.c
index e01dd06d28..bd4de7acd6 100644
--- a/drivers/core/util.c
+++ b/drivers/core/util.c
@@ -5,6 +5,7 @@
*/
#include <common.h>
+#include <libfdt.h>
#include <vsprintf.h>
void dm_warn(const char *fmt, ...)
@@ -35,3 +36,27 @@ int list_count_items(struct list_head *head)
return count;
}
+
+int dm_fdt_pre_reloc(const void *blob, int offset)
+{
+ if (fdt_getprop(blob, offset, "u-boot,dm-pre-reloc", NULL))
+ return 1;
+
+#ifdef CONFIG_TPL_BUILD
+ if (fdt_getprop(blob, offset, "u-boot,dm-tpl", NULL))
+ return 1;
+#elif defined(CONFIG_SPL_BUILD)
+ if (fdt_getprop(blob, offset, "u-boot,dm-spl", NULL))
+ return 1;
+#else
+ /*
+ * In regular builds individual spl and tpl handling both
+ * count as handled pre-relocation for later second init.
+ */
+ if (fdt_getprop(blob, offset, "u-boot,dm-spl", NULL) ||
+ fdt_getprop(blob, offset, "u-boot,dm-tpl", NULL))
+ return 1;
+#endif
+
+ return 0;
+}
diff --git a/drivers/pinctrl/pinctrl-uclass.c b/drivers/pinctrl/pinctrl-uclass.c
index 02ab9b4afd..9e0122906c 100644
--- a/drivers/pinctrl/pinctrl-uclass.c
+++ b/drivers/pinctrl/pinctrl-uclass.c
@@ -12,6 +12,7 @@
#include <dm/lists.h>
#include <dm/pinctrl.h>
#include <dm/uclass.h>
+#include <dm/util.h>
DECLARE_GLOBAL_DATA_PTR;
@@ -131,7 +132,7 @@ static int pinconfig_post_bind(struct udevice *dev)
offset > 0;
offset = fdt_next_subnode(fdt, offset)) {
if (pre_reloc_only &&
- !fdt_getprop(fdt, offset, "u-boot,dm-pre-reloc", NULL))
+ !dm_fdt_pre_reloc(fdt, offset))
continue;
/*
* If this node has "compatible" property, this is not
diff --git a/include/dm/util.h b/include/dm/util.h
index 15daa3d19f..32060ab30e 100644
--- a/include/dm/util.h
+++ b/include/dm/util.h
@@ -48,4 +48,30 @@ static inline void dm_dump_devres(void)
}
#endif
+/**
+ * Check if a dt node should be or was bound before relocation.
+ *
+ * Devicetree nodes can be marked as needed to be bound
+ * in the loader stages via special devicetree properties.
+ *
+ * Before relocation this function can be used to check if nodes
+ * are required in either SPL or TPL stages.
+ *
+ * After relocation and jumping into the real U-Boot binary
+ * it is possible to determine if a node was bound in one of
+ * SPL/TPL stages.
+ *
+ * There are 3 settings currently in use
+ * -
+ * - u-boot,dm-pre-reloc: legacy and indicates any of TPL or SPL
+ * Existing platforms only use it to indicate nodes needee in
+ * SPL. Should probably be replaced by u-boot,dm-spl for
+ * existing platforms.
+ * @blob: devicetree
+ * @offset: node offset
+ *
+ * Returns true if node is needed in SPL/TL, false otherwise.
+ */
+int dm_fdt_pre_reloc(const void *blob, int offset);
+
#endif
diff --git a/scripts/Makefile.spl b/scripts/Makefile.spl
index c962bbca2c..60bd844e48 100644
--- a/scripts/Makefile.spl
+++ b/scripts/Makefile.spl
@@ -206,8 +206,13 @@ $(obj)/$(SPL_BIN)-pad.bin: $(obj)/$(SPL_BIN)
# 'u-boot,dm-pre-reloc' property and thus are not needed by SPL. The second
# pass removes various unused properties from the remaining nodes.
# The output is typically a much smaller device tree file.
+ifeq ($(CONFIG_TPL_BUILD),y)
+fdtgrep_props := -b u-boot,dm-pre-reloc -b u-boot,dm-tpl
+else
+fdtgrep_props := -b u-boot,dm-pre-reloc -b u-boot,dm-spl
+endif
quiet_cmd_fdtgrep = FDTGREP $@
- cmd_fdtgrep = $(objtree)/tools/fdtgrep -b u-boot,dm-pre-reloc -RT $< \
+ cmd_fdtgrep = $(objtree)/tools/fdtgrep $(fdtgrep_props) -RT $< \
-n /chosen -O dtb | \
$(objtree)/tools/fdtgrep -r -O dtb - -o $@ \
$(addprefix -P ,$(subst $\",,$(CONFIG_OF_SPL_REMOVE_PROPS)))
diff --git a/tools/dtoc/dtoc.py b/tools/dtoc/dtoc.py
index 11050b66f7..232f8ff739 100755
--- a/tools/dtoc/dtoc.py
+++ b/tools/dtoc/dtoc.py
@@ -30,6 +30,8 @@ PROP_IGNORE_LIST = [
"status",
'phandle',
'u-boot,dm-pre-reloc',
+ 'u-boot,dm-tpl',
+ 'u-boot,dm-spl',
]
# C type declarations for the tyues we support
--
2.11.0
next prev parent reply other threads:[~2017-02-18 18:46 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-02-18 18:46 [U-Boot] [PATCH v4 00/20] rk3188 uboot support Heiko Stuebner
2017-02-18 18:46 ` Heiko Stuebner [this message]
2017-02-21 20:34 ` [U-Boot] [PATCH v4 01/20] dm: allow limiting pre-reloc markings to spl or tpl Simon Glass
2017-02-18 18:46 ` [U-Boot] [PATCH v4 02/20] clk: rk3288: limit gpll and cpll init to SPL build Heiko Stuebner
2017-02-21 18:08 ` Simon Glass
2017-02-21 20:34 ` Simon Glass
2017-02-18 18:46 ` [U-Boot] [PATCH v4 03/20] rockchip: rk3288: sdram: use constants in ddrconf table Heiko Stuebner
2017-02-21 18:08 ` Simon Glass
2017-02-21 20:34 ` Simon Glass
2017-02-18 18:46 ` [U-Boot] [PATCH v4 04/20] rockchip: rk3288: sdram: style fixes from rk3188 sdram review Heiko Stuebner
2017-02-21 18:08 ` Simon Glass
2017-02-21 20:34 ` Simon Glass
2017-02-18 18:46 ` [U-Boot] [PATCH v4 05/20] rockchip: Move bootrom helper compilation to a hidden option Heiko Stuebner
2017-02-21 20:34 ` Simon Glass
2017-02-18 18:46 ` [U-Boot] [PATCH v4 06/20] rockchip: Move bootrom-related declarations to a header Heiko Stuebner
2017-02-21 20:34 ` Simon Glass
2017-02-18 18:46 ` [U-Boot] [PATCH v4 07/20] rockchip: mkimage: Allow encoding of loader code in spl images Heiko Stuebner
2017-02-21 20:34 ` Simon Glass
2017-02-18 18:46 ` [U-Boot] [PATCH v4 08/20] rockchip: mkimage: Add support rk3188 serial Heiko Stuebner
2017-02-21 20:34 ` Simon Glass
2017-02-18 18:46 ` [U-Boot] [PATCH v4 09/20] rockchip: serial: Adapt rockchip of-platdata driver for rk3188 Heiko Stuebner
2017-02-21 20:34 ` Simon Glass
2017-02-18 18:46 ` [U-Boot] [PATCH v4 10/20] rockchip: rk3188: Add header files for PMU and GRF Heiko Stuebner
2017-02-21 20:35 ` Simon Glass
2017-02-18 18:46 ` [U-Boot] [PATCH v4 11/20] rockchip: rk3188: Add pinctrl driver Heiko Stuebner
2017-02-21 20:35 ` Simon Glass
2017-02-18 18:46 ` [U-Boot] [PATCH v4 12/20] rockchip: rk3188: Add sysreset driver Heiko Stuebner
2017-02-21 20:35 ` Simon Glass
2017-02-18 18:46 ` [U-Boot] [PATCH v4 13/20] rockchip: rk3188: Add rk3066/rk3188 clock bindings Heiko Stuebner
2017-02-21 20:35 ` Simon Glass
2017-02-18 18:46 ` [U-Boot] [PATCH v4 14/20] rockchip: rk3188: Add clock driver Heiko Stuebner
2017-02-18 18:46 ` [U-Boot] [PATCH v4 15/20] rockchip: rk3188: Add core devicetree files Heiko Stuebner
2017-02-21 20:35 ` Simon Glass
2017-02-18 18:46 ` [U-Boot] [PATCH v4 16/20] rockchip: rk3188: Add core support Heiko Stuebner
2017-02-21 20:35 ` Simon Glass
2017-02-18 18:46 ` [U-Boot] [PATCH v4 17/20] rockchip: rk3188: Add sdram driver Heiko Stuebner
2017-02-21 20:35 ` Simon Glass
2017-02-18 18:46 ` [U-Boot] [PATCH v4 18/20] rockchip: rk3188: Add main, spl and tpl boards Heiko Stuebner
2017-02-21 20:35 ` Simon Glass
2017-02-18 18:46 ` [U-Boot] [PATCH v4 19/20] rockchip: rk3188: Add Radxa Rock board Heiko Stuebner
2017-02-21 20:35 ` Simon Glass
2017-03-23 16:18 ` Simon Glass
2017-03-23 16:34 ` Heiko Stübner
2017-02-18 18:46 ` [U-Boot] [PATCH v4 20/20] rockchip: rk3188: add README.rockchip paragraph describing sd boot Heiko Stuebner
2017-02-21 18:08 ` Simon Glass
2017-02-21 20:35 ` Simon Glass
2017-02-23 3:26 ` [U-Boot] [PATCH v4 00/20] rk3188 uboot support Simon Glass
2017-02-23 3:59 ` Heiko Stuebner
2017-02-23 16:19 ` Simon Glass
2017-02-23 16:29 ` Heiko Stuebner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170218184640.30635-2-heiko@sntech.de \
--to=heiko@sntech.de \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox