env: mmc: Apply GPT only on eMMC user HW partition
Apply the GPT U-Boot environment GUID type look up only on eMMC user
HW partition, do not apply the look up on eMMC boot HW partitions as
mmc_offset_try_partition() assumes either SD partitions or eMMC user
HW partition.
This fixes environment operation on systems where CONFIG_SYS_MMC_ENV_PART
is non-zero and CONFIG_SYS_REDUNDAND_ENVIRONMENT is set.
Fixes: 80105d8fd5
("env: mmc: select GPT env partition by type guid")
Signed-off-by: Marek Vasut <marex@denx.de>
Reviewed-by: Tom Rini <trini@konsulko.com>
This commit is contained in:
parent
c1d266a781
commit
5b4acb0ff7
1 changed files with 8 additions and 4 deletions
12
env/mmc.c
vendored
12
env/mmc.c
vendored
|
@ -94,7 +94,7 @@ static inline int mmc_offset_try_partition(const char *str, int copy, s64 *val)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline s64 mmc_offset(int copy)
|
static inline s64 mmc_offset(struct mmc *mmc, int copy)
|
||||||
{
|
{
|
||||||
const struct {
|
const struct {
|
||||||
const char *offset_redund;
|
const char *offset_redund;
|
||||||
|
@ -108,8 +108,12 @@ static inline s64 mmc_offset(int copy)
|
||||||
s64 val = 0, defvalue;
|
s64 val = 0, defvalue;
|
||||||
const char *propname;
|
const char *propname;
|
||||||
const char *str;
|
const char *str;
|
||||||
|
int hwpart = 0;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
|
if (IS_ENABLED(CONFIG_SYS_MMC_ENV_PART))
|
||||||
|
hwpart = mmc_get_env_part(mmc);
|
||||||
|
|
||||||
/* look for the partition in mmc CONFIG_SYS_MMC_ENV_DEV */
|
/* look for the partition in mmc CONFIG_SYS_MMC_ENV_DEV */
|
||||||
str = ofnode_conf_read_str(dt_prop.partition);
|
str = ofnode_conf_read_str(dt_prop.partition);
|
||||||
if (str) {
|
if (str) {
|
||||||
|
@ -121,7 +125,7 @@ static inline s64 mmc_offset(int copy)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* try the GPT partition with "U-Boot ENV" TYPE GUID */
|
/* try the GPT partition with "U-Boot ENV" TYPE GUID */
|
||||||
if (IS_ENABLED(CONFIG_PARTITION_TYPE_GUID)) {
|
if (IS_ENABLED(CONFIG_PARTITION_TYPE_GUID) && hwpart == 0) {
|
||||||
err = mmc_offset_try_partition(NULL, copy, &val);
|
err = mmc_offset_try_partition(NULL, copy, &val);
|
||||||
if (!err)
|
if (!err)
|
||||||
return val;
|
return val;
|
||||||
|
@ -138,7 +142,7 @@ static inline s64 mmc_offset(int copy)
|
||||||
return ofnode_conf_read_int(propname, defvalue);
|
return ofnode_conf_read_int(propname, defvalue);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
static inline s64 mmc_offset(int copy)
|
static inline s64 mmc_offset(struct mmc *mmc, int copy)
|
||||||
{
|
{
|
||||||
s64 offset = ENV_MMC_OFFSET;
|
s64 offset = ENV_MMC_OFFSET;
|
||||||
|
|
||||||
|
@ -151,7 +155,7 @@ static inline s64 mmc_offset(int copy)
|
||||||
|
|
||||||
__weak int mmc_get_env_addr(struct mmc *mmc, int copy, u32 *env_addr)
|
__weak int mmc_get_env_addr(struct mmc *mmc, int copy, u32 *env_addr)
|
||||||
{
|
{
|
||||||
s64 offset = mmc_offset(copy);
|
s64 offset = mmc_offset(mmc, copy);
|
||||||
|
|
||||||
if (offset == ENV_MMC_INVALID_OFFSET) {
|
if (offset == ENV_MMC_INVALID_OFFSET) {
|
||||||
printf("Invalid ENV offset in MMC, copy=%d\n", copy);
|
printf("Invalid ENV offset in MMC, copy=%d\n", copy);
|
||||||
|
|
Loading…
Reference in a new issue