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>
This commit is contained in:
Simon Glass 2021-12-16 20:59:37 -07:00 committed by Tom Rini
parent 239d22c795
commit 24f073d400
3 changed files with 50 additions and 0 deletions

View file

@ -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

42
scripts/check-of.sh Executable file
View file

@ -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

1
scripts/of_allowlist.txt Normal file
View file

@ -0,0 +1 @@
# List of boards which are permitted to use OF_HAS_PRIOR_STAGE without OF_BOARD