On 02/17/17 19:28, Philipp Tomsich wrote:
> This introduces the ability to override the environment offets from the
> device tree by setting the following nodes in '/config':
>       'u-boot,mmc-env-offset' - overrides CONFIG_ENV_OFFSET
>       'u-boot,mmc-env-offset-redundant'
>                               - overrides CONFIG_ENV_OFFSET_REDUND
> 
> To keep with the previous logic, the CONFIG_* defines still need to
> be available and the statically defined values become the defaults,
> when the corresponding properties are not set in the device-tree.

That sounds too odd...
DT's purpose is to describe the h/w... and that does not look so...
We also, have a dt file name in the environment, so this creates will create
a chicken and an egg problem...
I really don't think we should go that direction. DT is not meant to provide
a solution to all your problems...

> 
> Signed-off-by: Philipp Tomsich <philipp.toms...@theobroma-systems.com>
> ---
>  common/env_mmc.c | 31 +++++++++++++++++++++++++++----
>  1 file changed, 27 insertions(+), 4 deletions(-)
> 
> diff --git a/common/env_mmc.c b/common/env_mmc.c
> index 16f6a17..ef3dbd1 100644
> --- a/common/env_mmc.c
> +++ b/common/env_mmc.c
> @@ -1,24 +1,25 @@
>  /*
>   * (C) Copyright 2008-2011 Freescale Semiconductor, Inc.
>   *
>   * SPDX-License-Identifier:  GPL-2.0+
>   */
>  
>  /* #define DEBUG */
>  
>  #include <common.h>
>  
>  #include <command.h>
>  #include <environment.h>
> +#include <fdtdec.h>
>  #include <linux/stddef.h>
>  #include <malloc.h>
>  #include <memalign.h>
>  #include <mmc.h>
>  #include <search.h>
>  #include <errno.h>
>  
>  #if defined(CONFIG_ENV_SIZE_REDUND) &&  \
>       (CONFIG_ENV_SIZE_REDUND != CONFIG_ENV_SIZE)
>  #error CONFIG_ENV_SIZE_REDUND should be the same as CONFIG_ENV_SIZE
>  #endif
>  
> @@ -36,21 +37,43 @@ DECLARE_GLOBAL_DATA_PTR;
>  #define CONFIG_ENV_OFFSET 0
>  #endif
>  
> -__weak int mmc_get_env_addr(struct mmc *mmc, int copy, u32 *env_addr)
> +#ifdef CONFIG_OF_LIBFDT
> +static inline s64 mmc_offset(int copy)
>  {
> -     s64 offset;
> +     const char *propname = "u-boot,mmc-env-offset";
> +     s64 defvalue = CONFIG_ENV_OFFSET;
>  
> -     offset = CONFIG_ENV_OFFSET;
> -#ifdef CONFIG_ENV_OFFSET_REDUND
> +#if defined(CONFIG_ENV_OFFSET_REDUND)
> +     if (copy) {
> +             propname = "u-boot,mmc-env-offset-redundant";
> +             defvalue = CONFIG_ENV_OFFSET_REDUND;
> +     }
> +#endif
> +
> +     return fdtdec_get_config_int(gd->fdt_blob, propname, defvalue);
> +}
> +#else
> +static inline s64 mmc_offset(int copy)
> +{
> +     s64 offset = CONFIG_ENV_OFFSET;
> +
> +#if defined(CONFIG_ENV_OFFSET_REDUND)
>       if (copy)
>               offset = CONFIG_ENV_OFFSET_REDUND;
>  #endif
> +     return offset;
> +}
> +#endif
> +
> +__weak int mmc_get_env_addr(struct mmc *mmc, int copy, u32 *env_addr)
> +{
> +     s64 offset = mmc_offset(copy);
>  
>       if (offset < 0)
>               offset += mmc->capacity;
>  
>       *env_addr = offset;
>  
>       return 0;
>  }
>  
> 

-- 
Regards,
Igor.
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to