]> git.baikalelectronics.ru Git - uboot.git/commit
fdt: Fix TPL SEPARATE_BSS check when locating DTB
authorAndrew Abbott <andrew@mirx.dev>
Sat, 16 Apr 2022 00:12:31 +0000 (10:12 +1000)
committerTom Rini <trini@konsulko.com>
Fri, 22 Apr 2022 19:44:10 +0000 (15:44 -0400)
commita2a3e1f6168ab7edc5ac2195133ae643859c3012
tree48ef9b71588cb09dced6bd717e1cfaf41da9a0bf
parent69d1edc05830882dd96900417853253f3079c415
fdt: Fix TPL SEPARATE_BSS check when locating DTB

Commit 5064a35a96cd52352f182e3eba0b746c1fb7cbb1 changed this condition
from an explicit

IS_ENABLED(CONFIG_SPL_SEPARATE_BSS)

to

CONFIG_IS_ENABLED(SEPARATE_BSS)

The documentation for CONFIG_IS_ENABLED() in include/linux/kconfig.h
implies that we will get the correct behaviour, but the actual behaviour
differs such that this condition is now always false.

This stopped TPL being able to load the device tree blob at least on the
ROCKPro64 board (RK3399 SoC), since the wrong device tree location was
chosen.

The issues causing this behaviour with CONFIG_IS_ENABLED() are:

1. The documentation implies that CONFIG_SPL_BUILD =>
   CONFIG_SPL_<option> is considered before the TPL equivalent.

   Actually, the TPL options have higher priority - see definition of
   _CONFIG_PREFIX.

2. The documentation implies a fallthrough, eg. if CONFIG_SPL_BUILD is
   defined but the CONFIG_SPL_<option> is not, then it will proceed to
   check if CONFIG_TPL_BUILD

   Actually, if CONFIG_TPL_BUILD is defined, then it stops there
   and CONFIG_SPL_BUILD is not considered - see definition of
   _CONFIG_PREFIX.

   During TPL build, at least for the ROCKPro64, both CONFIG_TPL_BUILD
   and CONFIG_SPL_BUILD are defined, but because of the above, only TPL
   options are considered. Since there is no CONFIG_TPL_SEPARATE_BSS,
   this fails.

Fixes: 5064a35a96 ("fdt: Correct condition for SEPARATE_BSS")
Signed-off-by: Andrew Abbott <andrew@mirx.dev>
lib/fdtdec.c