Patchwork [U-Boot] common: env_mmc: Make mmc->part_num in sync after a partition switch

login
register
mail settings
Submitter Fabio Estevam
Date June 4, 2013, 6:23 p.m.
Message ID <1370370223-7087-1-git-send-email-fabio.estevam@freescale.com>
Download mbox | patch
Permalink /patch/248797/
State Superseded
Delegated to: Andy Fleming
Headers show

Comments

Fabio Estevam - June 4, 2013, 6:23 p.m.
When running the "save" command several times on a mx6qsabresd we see:

U-Boot > save
Saving Environment to MMC...
Writing to MMC(1)... done
U-Boot > save
Saving Environment to MMC...
MMC partition switch failed
U-Boot > save
Saving Environment to MMC...
Writing to MMC(1)... done
U-Boot > save
Saving Environment to MMC...
MMC partition switch failed
U-Boot > save
Saving Environment to MMC...
Writing to MMC(1)... done
U-Boot > save
Saving Environment to MMC...
MMC partition switch failed

Fix this by making mmc->part_num to be in sync with CONFIG_SYS_MMC_ENV_PART
after the partition has been changed in mmc_switch_part().

After this fix, we no longer see the error after the "save" command on a 
mx6qsabresd. Also tested on a mx53loco.

Reported-by: Jason Liu <r64343@freescale.com>
Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
---
 common/env_mmc.c | 1 +
 1 file changed, 1 insertion(+)
Stephen Warren - June 4, 2013, 6:28 p.m.
On 06/04/2013 12:23 PM, Fabio Estevam wrote:
> When running the "save" command several times on a mx6qsabresd we see:
> 
> U-Boot > save
> Saving Environment to MMC...
> Writing to MMC(1)... done
> U-Boot > save
> Saving Environment to MMC...
> MMC partition switch failed
...
> Fix this by making mmc->part_num to be in sync with CONFIG_SYS_MMC_ENV_PART
> after the partition has been changed in mmc_switch_part().

I deliberately didn't do this, because fini_mmc_for_env() passes the
value of mmc->part_num to call mmc_switch_part() in order to put things
back the way they were. This fix would break that. Can you investigate
why you're seeing the "MMC partition switch failed" message?

Patch

diff --git a/common/env_mmc.c b/common/env_mmc.c
index 9ca098f..8020fc5 100644
--- a/common/env_mmc.c
+++ b/common/env_mmc.c
@@ -89,6 +89,7 @@  static int init_mmc_for_env(struct mmc *mmc)
 			puts("MMC partition switch failed\n");
 			return -1;
 		}
+		mmc->part_num = CONFIG_SYS_MMC_ENV_PART;
 	}
 #endif