Hi, I just wanted to send a note to (re-)introduce my ideas[1] for the next iteration of xPL.
A recent series introduced 'xPL' as the name for the various pre-U-Boot phases, so now CONFIG_XPL_BUILD means that this is any xPL phase and CONFIG_SPL means this really is the SPL phase, not TPL. We still use filenames and function naming which uses 'spl', but could potentially adjust that. The major remaining problem IMO is that it is quite tricky and expensive (in terms of time) to add a new phase. We also have some medium-sized problems: a. The $(PHASE_), $(SPL_) rules in the Makefile are visually ugly and can be confusing, particularly when combined with ifdef and ifneq b. We have both CONFIG_IS_ENABLED() and IS_ENABLED() and they mean different things. For any given option, some code uses one and some the other, depending on what problems people have met along the way. c. An option like CONFIG_FOO is ambiguous, in that it could mean that the option is enabled in one or more xPL phases, or just in U-Boot proper. The only way to know is to look for $(PHASE_) etc. in the Makefiles and CONFIG_IS_ENABLED() in the code. This is very confusing and has not scaled well. d. We need to retain an important feature: options from different phases can depend on each other. As an example, we might want to enable MMC in SPL by default, if MMC is enabled in U-Boot proper. We may also want to share values between phases, such as TEXT_BASE. We can do this easily today, just by adding Kconfig rules. Proposal 1. Adjust kconf to generate separate autoconf.h files for each phase. These contain the values for each Kconfig option for that phase. For example CONFIG_TEXT_BASE in autoconf_spl.h is SPL's text base. 2. Add a file to resolve the ambiguity in (c) above, listing the Kconfig options which should not be enabled/valid in any xPL build. There are around 200 of these. 3. Introduce CONFIG_PPL as a new prefix, meaning U-Boot proper (only), useful in rare cases. This indicates that the option applies only to U-Boot proper and is not defined in any xPL build. It is analogous to CONFIG_TPL_xxx meaning 'enabled in TPL'. Only a dozen of these are needed at present, basically to allow access to the value for another phase, e.g. SPL wanting to find CONFIG_PPL_TEXT_BASE so that it knows the address to which U-Boot should be loaded. 4. There is no change to the existing defconfig files, or 'make menuconfig', which works just as today, including dependencies between options across all phases. 5. (next) Expand the Kconfig language[2] to support declaring phases (SPL, TPL, etc.) and remove the need for duplicating options (DM_MMC, SPL_DM_MMC, TPL_DM_MMC, VPL_DM_MMC), so allowing an option to be declared once for any/all phases. We can then drop the file in 2 above. With this, maintaining Kconfig options, Makefiles and adding a new phase should be considerably easier. Regards, Simon [1] https://lore.kernel.org/u-boot/20230131152702.249197-1-...@chromium.org/ [2] https://lore.kernel.org/u-boot/cak7lnarq-pgxich+gm2efpfxmnbkdtp18otk3shtqnsk6by...@mail.gmail.com/