[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