[U-Boot] [PATCH] env: Setup GD_FLG_ENV_DEFAULT flag when default environment are used

Michal Simek michal.simek at xilinx.com
Tue May 31 07:04:57 CEST 2016


On 30.5.2016 21:36, Alexander Graf wrote:
> 
> 
> On 05/30/2016 04:11 PM, Michal Simek wrote:
>> Setup flag when default environment are used to be able to
>> rewrite default distro boot variables based on SoC boot mode.
>>
>> Signed-off-by: Michal Simek <michal.simek at xilinx.com>
>> ---
>>
>> I didn't find any way how to detect that default or saved variables are
>> used. I want to have a flag to be able to rewrite boot_targets variable
>> based on boot mode. Especially when SD boot mode is setup than SD should
>> be primary boot devices, etc.
>> When variables are saved boot_targets will be restored and SoC boot mode
>> will be ignored.
>> If you know better way how to do it, please let me know.
> 
> You may want to be able to do the same from inside a script, so I guess
> we should better have this as an environment variable itself again.

Was there any environment in past?
> 
> There was a way to have environment variable reads return a value
> directly from code rather than go via environment storage. I guess we
> could expose the flag through that?

If you expose environment variable and then run saveenv this variable
will be saved and restored again and your script behaves the same.

> 
> Or add an environment variable that we set in set_default_env() and
> ignore that variable on saveenv. I'm not sure I like that option better
> than your current one though.

Yes this should work but sounds pretty hacky.

Just and example of usage which I have tested on ZynqMP.
Based on bootmode different boot_targets are setup and this setting is
blocked for saved environment detected via this flag.

Thanks,
Michal

 224 int board_late_init(void)
 225 {
 226         u32 reg = 0;
 227         u8 bootmode;
 228
 229         if (!(gd->flags & GD_FLG_ENV_DEFAULT)) {
 230                 debug("Saved variables - Skipping\n");
 231                 return 0;
 232         }
 233
 234         reg = readl(&crlapb_base->boot_mode);
 235         bootmode = reg & BOOT_MODES_MASK;
 236
 237         puts("Bootmode: ");
 238         switch (bootmode) {
 239         case JTAG_MODE:
 240                 puts("JTAG_MODE\n");
 241                 setenv("boot_targets", "pxe dhcp");
 242                 break;
 243         case QSPI_MODE_24BIT:
 244         case QSPI_MODE_32BIT:
 245                 setenv("boot_targets", "qspi0");
 246                 puts("QSPI_MODE\n");
 247                 break;
 248         case EMMC_MODE:
 249                 puts("EMMC_MODE\n");
 250                 setenv("boot_targets", "mmc0 mmc1");
 251                 break;
 252         case SD_MODE:
 253                 puts("SD_MODE\n");
 254                 setenv("boot_targets", "mmc0 mmc1");
 255                 break;
 256         case SD_MODE1:
 257                 puts("SD_MODE1\n");
 258                 setenv("boot_targets", "mmc0 mmc1");
 259                 break;
 260         case NAND_MODE:
 261                 puts("NAND_MODE\n");
 262                 setenv("boot_targets", "nand0");
 263                 break;
 264         default:
 265                 printf("Invalid Boot Mode:0x%x\n", bootmode);
 266                 break;
 267         }
 268
 269         return 0;
 270 }



More information about the U-Boot mailing list