diff options
-rw-r--r-- | README | 11 | ||||
-rw-r--r-- | common/env_mmc.c | 12 |
2 files changed, 21 insertions, 2 deletions
@@ -3666,6 +3666,14 @@ but it can not erase, write this NOR flash by SRIO or PCIE interface. These two #defines specify the offset and size of the environment area within the specified MMC device. + If offset is positive (the usual case), it is treated as relative to + the start of the MMC partition. If offset is negative, it is treated + as relative to the end of the MMC partition. This can be useful if + your board may be fitted with different MMC devices, which have + different sizes for the MMC partitions, and you always want the + environment placed at the very end of the partition, to leave the + maximum possible space before it, to store other data. + These two values are in units of bytes, but must be aligned to an MMC sector boundary. @@ -3676,6 +3684,9 @@ but it can not erase, write this NOR flash by SRIO or PCIE interface. valid backup copy in case the other copy is corrupted, e.g. due to a power failure during a "saveenv" operation. + This value may also be positive or negative; this is handled in the + same way as CONFIG_ENV_OFFSET. + This value is also in units of bytes, but must also be aligned to an MMC sector boundary. diff --git a/common/env_mmc.c b/common/env_mmc.c index 9ca098fa67..5d3a769db0 100644 --- a/common/env_mmc.c +++ b/common/env_mmc.c @@ -53,11 +53,19 @@ DECLARE_GLOBAL_DATA_PTR; __weak int mmc_get_env_addr(struct mmc *mmc, int copy, u32 *env_addr) { - *env_addr = CONFIG_ENV_OFFSET; + s64 offset; + + offset = CONFIG_ENV_OFFSET; #ifdef CONFIG_ENV_OFFSET_REDUND if (copy) - *env_addr = CONFIG_ENV_OFFSET_REDUND; + offset = CONFIG_ENV_OFFSET_REDUND; #endif + + if (offset < 0) + offset += mmc->capacity; + + *env_addr = offset; + return 0; } |