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.toms...@theobroma-systems.com>
Acked-by: Simon Glass <s...@chromium.org>
---

Changes in v4:
- change the test for OF_CONTROL to use CONFIG_IS_ENABLED to pick up
  the differece between SPL_OF_CONTROL and OF_CONTROL

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..45d95a1 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 CONFIG_IS_ENABLED(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;
-- 
1.9.1

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to