[U-Boot] [PATCH v3 1/2] env_mmc: configure environment offsets via device tree

Dr. Philipp Tomsich philipp.tomsich at theobroma-systems.com
Mon May 15 22:21:14 UTC 2017


Hi Jaehoon,

I haven’t been able to reproduce this on any our configs, but I believe to have caught
the issue: testing the OF_CONTROL using defined(CONFIG_OF_CONTROL) gives
a false positive in the SPL build, as the SPL infrastructure does not undefine it … yet,
lib/Makefile uses CONFIG_$(SPL_)OF_CONTROL to control the inclusion of fdtdec.o.

Please let me know if the resubmitted (v4) series fixes the issue on the configurations
that you see the error on.  If not, I’d appreciate a pointer to one of the broken configurations
so I can reproduce locally.

Best regards,
Philipp.

> On 15 May 2017, at 23:33, Jaehoon Chung <jh80.chung at samsung.com> wrote:
> 
> Hi Philipp,
> 
> On 05/10/2017 09:44 PM, 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.
>> 
>> Signed-off-by: Philipp Tomsich <philipp.tomsich at theobroma-systems.com>
>> Acked-by: Simon Glass <sjg at chromium.org>
> 
> your patch has the compile error about building spl.
> 
> +common/built-in.o: In function `mmc_offset':
> +common/env_mmc.c:53: undefined reference to `fdtdec_get_config_int'
> +make[2]: *** [spl/u-boot-spl] Error 1
> +make[1]: *** [spl/u-boot-spl] Error 2
> +make: *** [sub-make] Error 2
> 
> Plz, fix this.
> 
> 
> Best Regards,
> Jaehoon Chung
> 
>> ---
>> 
>> Changes in v3:
>> - changes the config-check to depend on CONFIG_OF_CONTROL to detect
>>  if 'fdtdec_get_config_int' is available
>> 
>> Changes in v2: None
>> 
>> 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 a5d14d4..c10eec5 100644
>> --- a/common/env_mmc.c
>> +++ b/common/env_mmc.c
>> @@ -10,6 +10,7 @@
>> 
>> #include <command.h>
>> #include <environment.h>
>> +#include <fdtdec.h>
>> #include <linux/stddef.h>
>> #include <malloc.h>
>> #include <memalign.h>
>> @@ -36,15 +37,37 @@ DECLARE_GLOBAL_DATA_PTR;
>> #define CONFIG_ENV_OFFSET 0
>> #endif
>> 
>> -__weak int mmc_get_env_addr(struct mmc *mmc, int copy, u32 *env_addr)
>> +#if defined(CONFIG_OF_CONTROL)
>> +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;
>> 
> 



More information about the U-Boot mailing list