[PATCH] armv8: fsl-layerscape: Fix automatic setting of bootmcd with TF-A

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view

[PATCH] armv8: fsl-layerscape: Fix automatic setting of bootmcd with TF-A

Alban Bedel-2
When booting from TF-A there is a logic that attempt to detect if the
default environment is used, if this is the case it then set the
`bootcmd` and `mcinitcmd` depending of the device we booted from.
This detection logic is dubious as it access internals of the env
implementation and it doesn't always work correctly.

First of all it detect any valid environment as not being the
default, so after running `env default -a && saveenv` the board
doesn't boot anymore as `bootcmd` is then empty.
But it also fails in some other ways, for example it always detect a
default environment when redundant env is enabled on MMC, so in that
case `bootcmd` is overwritten on every boot.

Instead of increasing the complexity of the detection just check if
`bootcmd` and `mcinitcmd` are set in the environment and set them if
they are not.

Signed-off-by: Alban Bedel <[hidden email]>
 arch/arm/cpu/armv8/fsl-layerscape/soc.c | 27 ++++---------------------
 1 file changed, 4 insertions(+), 23 deletions(-)

diff --git a/arch/arm/cpu/armv8/fsl-layerscape/soc.c b/arch/arm/cpu/armv8/fsl-layerscape/soc.c
index 96b2775f3f..af9399278f 100644
--- a/arch/arm/cpu/armv8/fsl-layerscape/soc.c
+++ b/arch/arm/cpu/armv8/fsl-layerscape/soc.c
@@ -33,13 +33,10 @@
 #include <fsl_validate.h>
 #include <fsl_immap.h>
-#include <env_internal.h>
 #include <dm.h>
 #include <dm/device_compat.h>
 #include <linux/err.h>
-#if defined(CONFIG_TFABOOT) || defined(CONFIG_GIC_V3_ITS)
@@ -954,28 +951,12 @@ int board_late_init(void)
- * check if gd->env_addr is default_environment; then setenv bootcmd
- * and mcinitcmd.
- */
- if (gd->env_addr == (ulong)&default_environment[0]) {
- if (gd->env_addr + gd->reloc_off == (ulong)&default_environment[0]) {
- fsl_setenv_bootcmd();
- fsl_setenv_mcinitcmd();
- }
- /*
- * If the boot mode is secure, default environment is not present then
- * setenv command needs to be run by default
+ * Set bootcmd and mcinitcmd if they don't exist in the environment.
- if ((fsl_check_boot_mode_secure() == 1)) {
+ if (!env_get("bootcmd"))
+ if (!env_get("mcinitcmd"))
- }