aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Glass2021-12-16 20:59:37 -0700
committerTom Rini2021-12-23 11:19:39 -0500
commit24f073d4009e4a35091c676aff83c03dac5c1a6b (patch)
treedec6300e00b7c70663ed8f3993d9dcb8c895b316
parent239d22c79520e48e202ec67e27891d169d112678 (diff)
fdt: Makefile: Ensure that OF_BOARD is used when needed
Boards which define OF_HAS_PRIOR_STAGE must define OF_BOARD at present, since a custom function is the only way to obtain the devicetree at runtime. Add a build error when this requirement is not met, to avoid accepting any patches which break this requirement. Add an allowlist for boards which use it, currently none. This allowlist can be updated for local development, if needed. Signed-off-by: Simon Glass <sjg@chromium.org> [trini: change of_whitelist to of_allowlist] Signed-off-by: Tom Rini <trini@konsulko.com>
-rw-r--r--Makefile7
-rwxr-xr-xscripts/check-of.sh42
-rw-r--r--scripts/of_allowlist.txt1
3 files changed, 50 insertions, 0 deletions
diff --git a/Makefile b/Makefile
index 633e038ffab..a4f267c2db2 100644
--- a/Makefile
+++ b/Makefile
@@ -1053,6 +1053,10 @@ quiet_cmd_cfgcheck = CFGCHK $2
cmd_cfgcheck = $(srctree)/scripts/check-config.sh $2 \
$(srctree)/scripts/config_whitelist.txt $(srctree)
+quiet_cmd_ofcheck = OFCHK $2
+cmd_ofcheck = $(srctree)/scripts/check-of.sh $2 \
+ $(srctree)/scripts/of_allowlist.txt
+
# Concat the value of all the CONFIGs (result is 'y' or 'yy', etc. )
got = $(foreach cfg,$(1),$($(cfg)))
@@ -1127,6 +1131,9 @@ endif
@# know about unless they are in Kconfig. All the existing CONFIG
@# options are whitelisted, so new ones should not be added.
$(call cmd,cfgcheck,u-boot.cfg)
+ @# Check that this build does not override OF_HAS_PRIOR_STAGE by
+ @# disabling OF_BOARD.
+ $(call cmd,ofcheck,$(KCONFIG_CONFIG))
PHONY += dtbs
dtbs: dts/dt.dtb
diff --git a/scripts/check-of.sh b/scripts/check-of.sh
new file mode 100755
index 00000000000..0f0bf516647
--- /dev/null
+++ b/scripts/check-of.sh
@@ -0,0 +1,42 @@
+#!/bin/sh
+# Copyright 2021 Google LLC
+# Written by Simon Glass <sjg@chromium.org>
+#
+# Check that the .config file provided does not try to disable OF_BOARD for
+# boards that use CONFIG_OF_HAS_PRIOR_STAGE
+#
+# Usage
+# check-of.sh <path to .config> <path to allowlist file>
+#
+# For example:
+# scripts/check-of.sh b/chromebook_link/u-boot.cfg kconfig_allowlist.txt
+#
+# Exit code is 0 if OK, 3 if the .config is wrong, as above
+
+set -e
+set -u
+
+PROG_NAME="${0##*/}"
+
+usage() {
+ echo "$PROG_NAME <path to .config> <path to allowlist file>"
+ exit 1
+}
+
+[ $# -ge 2 ] || usage
+
+path="$1"
+allowlist="$2"
+
+sys_config="$(sed -n 's/CONFIG_SYS_CONFIG_NAME="\(.*\)"$/\1/p' "${path}")"
+
+if grep -q OF_HAS_PRIOR_STAGE=y "${path}"; then
+ if ! grep -lq CONFIG_OF_BOARD=y "${path}"; then
+ echo >&2 "This board uses a prior stage to provide the device tree."
+ echo >&2 "Please enable CONFIG_OF_BOARD to ensure that it works correctly."
+ if grep -q "${sys_config}" "${allowlist}"; then
+ exit 0
+ fi
+ exit 3
+ fi
+fi
diff --git a/scripts/of_allowlist.txt b/scripts/of_allowlist.txt
new file mode 100644
index 00000000000..e82cf557bb2
--- /dev/null
+++ b/scripts/of_allowlist.txt
@@ -0,0 +1 @@
+# List of boards which are permitted to use OF_HAS_PRIOR_STAGE without OF_BOARD