
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 a whitelist for boards which use it, currently none. This whitelist can be updated for local development, if needed.
Signed-off-by: Simon Glass sjg@chromium.org ---
Changes in v8: - Add new patch to ensure that OF_BOARD is used when needed
Makefile | 7 +++++++ scripts/check-of.sh | 42 ++++++++++++++++++++++++++++++++++++++++ scripts/of_whitelist.txt | 1 + 3 files changed, 50 insertions(+) create mode 100755 scripts/check-of.sh create mode 100644 scripts/of_whitelist.txt
diff --git a/Makefile b/Makefile index 6671c5d9e2f..98ef2642f68 100644 --- a/Makefile +++ b/Makefile @@ -1061,6 +1061,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_whitelist.txt + # Concat the value of all the CONFIGs (result is 'y' or 'yy', etc. ) got = $(foreach cfg,$(1),$($(cfg)))
@@ -1139,6 +1143,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..3ce7105cad4 --- /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 whitelist file> +# +# For example: +# scripts/check-of.sh b/chromebook_link/u-boot.cfg kconfig_whitelist.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 whitelist file>" + exit 1 +} + +[ $# -ge 2 ] || usage + +path="$1" +whitelist="$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}" "${whitelist}"; then + exit 0 + fi + exit 3 + fi +fi diff --git a/scripts/of_whitelist.txt b/scripts/of_whitelist.txt new file mode 100644 index 00000000000..e82cf557bb2 --- /dev/null +++ b/scripts/of_whitelist.txt @@ -0,0 +1 @@ +# List of boards which are permitted to use OF_HAS_PRIOR_STAGE without OF_BOARD