diff mbox

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

Message ID d98b551f1486439220ac04860222b4f1cba5a0f0.1464617510.git.michal.simek@xilinx.com
State Accepted
Commit 340b0e3bb6e8808a7e683e030b3c5b5137715041
Delegated to: Michal Simek
Headers show

Commit Message

Michal Simek May 30, 2016, 2:11 p.m. UTC
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@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.

---
 common/env_common.c               | 1 +
 include/asm-generic/global_data.h | 1 +
 2 files changed, 2 insertions(+)

Comments

Alexander Graf May 30, 2016, 7:36 p.m. UTC | #1
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@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.

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?

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.


Alex

>
> ---
>   common/env_common.c               | 1 +
>   include/asm-generic/global_data.h | 1 +
>   2 files changed, 2 insertions(+)
>
> diff --git a/common/env_common.c b/common/env_common.c
> index af59c72e1fd7..13db7dc3f755 100644
> --- a/common/env_common.c
> +++ b/common/env_common.c
> @@ -123,6 +123,7 @@ void set_default_env(const char *s)
>   		error("Environment import failed: errno = %d\n", errno);
>   
>   	gd->flags |= GD_FLG_ENV_READY;
> +	gd->flags |= GD_FLG_ENV_DEFAULT;
>   }
>   
>   
> diff --git a/include/asm-generic/global_data.h b/include/asm-generic/global_data.h
> index f2810a1bd75f..0abcbe4c0b3a 100644
> --- a/include/asm-generic/global_data.h
> +++ b/include/asm-generic/global_data.h
> @@ -141,5 +141,6 @@ typedef struct global_data {
>   #define GD_FLG_SPL_INIT		0x00400	/* spl_init() has been called	   */
>   #define GD_FLG_SKIP_RELOC	0x00800	/* Don't relocate */
>   #define GD_FLG_RECORD		0x01000	/* Record console */
> +#define GD_FLG_ENV_DEFAULT	0x02000 /* Default variable flag */
>   
>   #endif /* __ASM_GENERIC_GBL_DATA_H */
Michal Simek May 31, 2016, 5:04 a.m. UTC | #2
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@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 }
Alexander Graf May 31, 2016, 6:39 a.m. UTC | #3
> Am 31.05.2016 um 07:04 schrieb Michal Simek <michal.simek@xilinx.com>:
> 
>> 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@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?

With again I meant "from C as well as from script".

>> 
>> 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.

Not if we declare the environment variable read as callback ;).

Alex
Michal Simek May 31, 2016, 7:40 a.m. UTC | #4
On 31.5.2016 08:39, Alexander Graf wrote:
> 
> 
>> Am 31.05.2016 um 07:04 schrieb Michal Simek <michal.simek@xilinx.com>:
>>
>>> 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@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?
> 
> With again I meant "from C as well as from script".
> 
>>>
>>> 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.
> 
> Not if we declare the environment variable read as callback ;).

What do you mean?

It is kind of interesting that this is not done already for others SoCs
when you want to use distro config. :-)

Cheers,
Michal
Alexander Graf June 1, 2016, 2:16 p.m. UTC | #5
On 31.05.16 09:40, Michal Simek wrote:
> On 31.5.2016 08:39, Alexander Graf wrote:
>>
>>
>>> Am 31.05.2016 um 07:04 schrieb Michal Simek <michal.simek@xilinx.com>:
>>>
>>>> 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@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?
>>
>> With again I meant "from C as well as from script".
>>
>>>>
>>>> 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.
>>
>> Not if we declare the environment variable read as callback ;).
> 
> What do you mean?

Meh, apparently I misremembered.

> It is kind of interesting that this is not done already for others SoCs
> when you want to use distro config. :-)

Well, there's always a first :).

Either way, I guess your patch is perfectly fine as a first step. It
would be nice to also introduce some way for scripts to evaluate whether
the environment is the default environment, but we can always add that
later.


Alex
Michal Simek June 1, 2016, 2:21 p.m. UTC | #6
On 1.6.2016 16:16, Alexander Graf wrote:
> 
> 
> On 31.05.16 09:40, Michal Simek wrote:
>> On 31.5.2016 08:39, Alexander Graf wrote:
>>>
>>>
>>>> Am 31.05.2016 um 07:04 schrieb Michal Simek <michal.simek@xilinx.com>:
>>>>
>>>>> 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@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?
>>>
>>> With again I meant "from C as well as from script".
>>>
>>>>>
>>>>> 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.
>>>
>>> Not if we declare the environment variable read as callback ;).
>>
>> What do you mean?
> 
> Meh, apparently I misremembered.
> 
>> It is kind of interesting that this is not done already for others SoCs
>> when you want to use distro config. :-)
> 
> Well, there's always a first :).
> 
> Either way, I guess your patch is perfectly fine as a first step. It
> would be nice to also introduce some way for scripts to evaluate whether
> the environment is the default environment, but we can always add that
> later.

Does this mean your Acked-by line?

Cheers,
Michal
Alexander Graf June 1, 2016, 2:24 p.m. UTC | #7
On 01.06.16 16:21, Michal Simek wrote:
> On 1.6.2016 16:16, Alexander Graf wrote:
>>
>>
>> On 31.05.16 09:40, Michal Simek wrote:
>>> On 31.5.2016 08:39, Alexander Graf wrote:
>>>>
>>>>
>>>>> Am 31.05.2016 um 07:04 schrieb Michal Simek <michal.simek@xilinx.com>:
>>>>>
>>>>>> 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@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?
>>>>
>>>> With again I meant "from C as well as from script".
>>>>
>>>>>>
>>>>>> 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.
>>>>
>>>> Not if we declare the environment variable read as callback ;).
>>>
>>> What do you mean?
>>
>> Meh, apparently I misremembered.
>>
>>> It is kind of interesting that this is not done already for others SoCs
>>> when you want to use distro config. :-)
>>
>> Well, there's always a first :).
>>
>> Either way, I guess your patch is perfectly fine as a first step. It
>> would be nice to also introduce some way for scripts to evaluate whether
>> the environment is the default environment, but we can always add that
>> later.
> 
> Does this mean your Acked-by line?
> 

Reviewed-by: Alexander Graf <agraf@suse.de>

(IIRC Reviewed-by is stronger than Acked-by)


Alex
Tom Rini June 6, 2016, 9:28 p.m. UTC | #8
On Mon, May 30, 2016 at 04:11:53PM +0200, 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@xilinx.com>
> Reviewed-by: Alexander Graf <agraf@suse.de>

Applied to u-boot/master, thanks!
Tom Rini June 6, 2016, 9:34 p.m. UTC | #9
On Mon, Jun 06, 2016 at 05:28:33PM -0400, Tom Rini wrote:
> On Mon, May 30, 2016 at 04:11:53PM +0200, 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@xilinx.com>
> > Reviewed-by: Alexander Graf <agraf@suse.de>
> 
> Applied to u-boot/master, thanks!

... yes, this was already in via Michal's tree, it didn't get applied
twice, I just didn't delete it from my bundle.
diff mbox

Patch

diff --git a/common/env_common.c b/common/env_common.c
index af59c72e1fd7..13db7dc3f755 100644
--- a/common/env_common.c
+++ b/common/env_common.c
@@ -123,6 +123,7 @@  void set_default_env(const char *s)
 		error("Environment import failed: errno = %d\n", errno);
 
 	gd->flags |= GD_FLG_ENV_READY;
+	gd->flags |= GD_FLG_ENV_DEFAULT;
 }
 
 
diff --git a/include/asm-generic/global_data.h b/include/asm-generic/global_data.h
index f2810a1bd75f..0abcbe4c0b3a 100644
--- a/include/asm-generic/global_data.h
+++ b/include/asm-generic/global_data.h
@@ -141,5 +141,6 @@  typedef struct global_data {
 #define GD_FLG_SPL_INIT		0x00400	/* spl_init() has been called	   */
 #define GD_FLG_SKIP_RELOC	0x00800	/* Don't relocate */
 #define GD_FLG_RECORD		0x01000	/* Record console */
+#define GD_FLG_ENV_DEFAULT	0x02000 /* Default variable flag */
 
 #endif /* __ASM_GENERIC_GBL_DATA_H */