
In message 3efb10970805060705l112c623at96bf0521eed8a211@mail.gmail.com you wrote:
Commit c0559be371b2a64b1a817088c3308688e2182f93 introduces a bug in the environment setting storage in U-boot-1.3.3-rc3. Settings are retrieved from dataflash when only settings in RAM are valid, resulting in corrupt environment settings, failing printenv command, and duplicate variables.
This patch fixes this by always using the RAM area when it is created and initialized. (Matches more the behavior as it was prior to this particular commit.)
Sorry, but this patch makes littles sense to me.
See attached (Sorry, my mailer does not handle inline-patches properly)
Chose another one? Or rather use "git-send-email" directly?
- /* if relocated to RAM */ - if (gd->flags & GD_FLG_RELOC) + /* if relocated to RAM, OR if the environment in Malloc-ed RAM is valid */ + if ((gd->flags & GD_FLG_RELOC) || (gd->env_valid))
Let's keep in mind that the normal logic of the U-Boot startup sequence is like this:
* U-Boot boots and initializes the RAM * U-Boot relocates itself into RAM, sets GD_FLG_RELOC and continues running from RAM * U-Boot continues with the initialization, for xample by setting up the malloc arena, loading the working copy of the environment into RAM (after which it set's gd->env_valid), etc.
So the relocation to RAM always preceeds any use of malloc() and the setting of gd->env_valid. Or, put the other way round, we always set GD_FLG_RELOC long before gd->env_valid get's set.
Thus your change above is just redundant.
Now, if your board does not perform proper relocation for some reason, it should still set GD_FLG_RELOC at the appropriate place, i. e. as soon as U-Boot is ready for and starts running out of RAM.
Best regards,
Wolfgang Denk