[PATCH 0/5] Board specific runtime determined default env

Simon Glass sjg at chromium.org
Fri Oct 29 05:17:35 CEST 2021


Hi Marek,

On Wed, 27 Oct 2021 at 21:28, Marek Behún <kabel at kernel.org> wrote:
>
> From: Marek Behún <marek.behun at nic.cz>
>
> Hello Simon, Stefan, Pali,
>
> this series adds support for board specific runtime determined

grammarian here

board-specific, runtime-determined

> default environment variables.
>
> IMPORTANT: This series depends on the series
>   http://patchwork.ozlabs.org/project/uboot/list/?series=268452
>
> Currently the
>   env default [-a]
> command uses the default_environment[] buffer to get the default
> env variables.
>
> Sometimes it makes sense to have runtime determined default env
> settings.
>
> For example the ESPRESSObin board has 4 variants
> ([ddr3 vs ddr4] x [emmc vs sd]), and each uses different device tree.
> Thus the `fdtfile` env variable has different values for these 4
> variants. (We can't set this variable via env_set() in some board init
> function, because then the user would be unable to overwrite it.)
> In order for the command
>   env default fdtfile
> to work as the user would expect, we need to support overwriting default
> environment in runtime.
>
> Pali solved this for ESPRESSObin by declaring the default_environment[]
> buffer read-write, instead of read-only, and adding ad-hoc code into
> board_late_init() that writes into the default_environment[] buffer.
>
> This ad-hoc code works, but it would be better to have a generic API
> for this, since there are other boards which could benefit.
>
> The first 3 patches in this series fix and simplify code in
> env/common.c.
>
> The 4th patch adds support for board specific runtime determined
> default environment in such a way that if a board code defines function
>
>   const char *board_special_default_env(unsigned i, const char **name);
>
> The default weak implementation of this function is trivial and just
> returns NULL.
> This function is to be defined in board code, and when defined, it must
> return the value of the i-th runtime determined default env variable,
> while storing its name into *name.
>
> For example:
>   const char *board_special_default_env(unsigned i, const char **name)
>   {
>     switch (i) {
>     case 0:
>       *name = "board";
>       return is_ddr4() ? "my_board_ddr4" : "my_board";
>     case 1:
>       *name = "fdtfile";
>       return is_ddr4() ? "my-board-ddr4.dtb" : "my-board.dtb";
>     default:
>       return NULL;
>   }
>
> The last patch (NOT TESTED) converts the ESPRESSObin ad-hoc code to
> use this API.
>
> Marek
>
> Marek Behún (5):
>   env: Don't set ready flag if import failed in env_set_default()
>   env: Fix env_get() when returning empty string using env_get_f()
>   env: Simplify env_get_default()
>   env: Add support for board specific special default environment
>   arm: mvebu: Espressobin: Use new API for setting default env at
>     runtime
>
>  board/Marvell/mvebu_armada-37xx/board.c     | 120 ++++++++++------
>  configs/mvebu_espressobin-88f3720_defconfig |   1 -
>  env/common.c                                | 150 ++++++++++++++++----
>  include/configs/mvebu_armada-37xx.h         |  17 +--
>  include/env_default.h                       |   2 -
>  include/env_internal.h                      |   4 -
>  6 files changed, 199 insertions(+), 95 deletions(-)
>
> --
> 2.32.0
>

Regards,
Simon


More information about the U-Boot mailing list