Re: [PATCH 07/12] rockchip: puma-rk3399: load environment from same medium as one used to load U-Boot proper

2022-09-20 Thread Quentin Schulz

Hi Kever,

On 9/20/22 14:28, Kever Yang wrote:

Hi Patrick, Quentin,


Here is the definition about the ENV_IS_NOWHERE:

config ENV_IS_NOWHERE
     bool "Environment is not stored"
help
   Define this if you don't want to or can't have an environment 
stored
   on a storage medium. In this case the environemnt will still 
exist

   while U-Boot is running, but once U-Boot exits it will not be
   stored. U-Boot will therefore always start up with a default
   environment.


Which means ENV_IS_NOWHERE is ALWAYS use default environment,

but not stored on a storage medium.

I think what you want is a new ENV_IS_ANYWHERE which not able to

decide when the firmware is build but must be some where when the boot

device is decided.



I do not share the same understanding. For me, ENV_IS_NOWHERE means the 
environment is stored in RAM, once you exit U-Boot or reset the board, 
it's gone. That's my understanding of the code, I can concede that the 
help message of the Kconfig option is confusing. It's just another 
"kind" of environment to me.


If the point was to ALWAYS use the default environment, one wouldn't be 
able to enable the option while other ENV_IS_IN_* are enabled. It is 
however possible.


ENV_IS_ANYWHERE is not a correct name for what I want, because I 
specifically do NOT want to load from anywhere. I want to load from a 
specific medium, and if not possible have a fallback to avoid U-Boot 
cryptically crashing.


Maybe we should rename ENV_IS_NOWHERE to ENV_IS_IN_RAM, maybe we could 
also stop crashing if there's no medium to load the environment from 
that is available, maybe we could rephrase the help text of the Kconfig 
option, but this is unrelated to this patch series.


Finally, STM32, some i.MX and a couple of Xilinx based boards actually 
have ENV_IS_NOWHERE enabled at the same time as other ENV_IS_IN_* 
options, so I'm clearly not the first one to use it this way. Also, see 
arch/arm/mach-imx/imx8m/soc.c for an implementation of 
arch_env_get_location that requires ENV_IS_NOWHERE to work and has 
almost the same logic as I'm trying to implement.


I'm trying to fix a non-booting board. This patch series is also only 
impacting the board I'm maintaining and nothing else. If merging the v2 
of this patch series is really asking you something unimaginable, just 
drop this patch from the series, merge the rest and we'll continue 
arguing on a resend.


Quentin


Re: [PATCH 07/12] rockchip: puma-rk3399: load environment from same medium as one used to load U-Boot proper

2022-09-20 Thread Kever Yang

Hi Patrick, Quentin,


Here is the definition about the ENV_IS_NOWHERE:

config ENV_IS_NOWHERE
    bool "Environment is not stored"
help
  Define this if you don't want to or can't have an environment 
stored
  on a storage medium. In this case the environemnt will still 
exist

  while U-Boot is running, but once U-Boot exits it will not be
  stored. U-Boot will therefore always start up with a default
  environment.


Which means ENV_IS_NOWHERE is ALWAYS use default environment,

but not stored on a storage medium.

I think what you want is a new ENV_IS_ANYWHERE which not able to

decide when the firmware is build but must be some where when the boot

device is decided.


Thanks,
- Kever
On 2022/9/14 17:17, patrick.delau...@foss.st.com wrote:

Hi,


ST Restricted


-Original Message-
From: U-Boot  On Behalf Of Quentin Schulz
Sent: mardi 6 septembre 2022 11:23
To: Kever Yang ; Quentin Schulz

Cc: s...@chromium.org; philipp.toms...@vrull.eu; klaus.goger@theobroma-
systems.com; knaerz...@gmail.com; u-boot@lists.denx.de
Subject: Re: [PATCH 07/12] rockchip: puma-rk3399: load environment from same
medium as one used to load U-Boot proper

Hi Kever,

On 9/4/22 13:49, Kever Yang wrote:

Hi Quentin,

The Kconfig from env/Kconfig

config ENV_IS_NOWHERE
  bool "Environment is not stored"
  default y if !ENV_IS_IN_EEPROM && !ENV_IS_IN_EXT4 && \
   !ENV_IS_IN_FAT && !ENV_IS_IN_FLASH && \
   !ENV_IS_IN_MMC && !ENV_IS_IN_NAND && \
   !ENV_IS_IN_NVRAM && !ENV_IS_IN_ONENAND && \
   !ENV_IS_IN_REMOTE && !ENV_IS_IN_SPI_FLASH && \
   !ENV_IS_IN_UBI

I think the logic is the env parameter is stored on some kind of
storage, or NOWHERE.


It's *default* to yes if none is defined. It's not a requirement.


And what you want to do is to load from the same medium as SPL boot
device(location of U-Boot proper),

this could not be NOWHERE.


This can be nowhere in case the proper config option is not selected.
E.g. we're booting from SPI-NOR but the ENV_IS_IN_SPI_FLASH is not set.
How does one handle this scenario? Since we don't want fallbacks, it needs to be
"nowhere". What you're suggesting is to let the user run a broken build and 
have it
cryptically crash with the following error:

initcall sequence 002866c0 failed at call 00256b34 (err=-19)

Instead, I suggest to more gracefully error out at runtime by letting the user 
know
that the option is not compiled in but U-Boot is still usable.

If you have another way to forbid fallbacks but not crash U-Boot in case the 
option
is not selected, let me know.


For information : It is exactly that I do to stm32mp15 platform

See board/st/stm32mp1/stm32mp1.c::env_get_location()

ENV_IS_NOWHERE = use the default environment, embedded in U-Boot and env

It is the fallback if environment not activated ENV_IS_IN_*  for the boot 
device, even it is not the case by default in stm32mp15_defconfig.

And it is why , I change Kconfig to allow activation of any ENV_IS_IN_* and 
ENV_IS_NOWHERE

Patrick
  

Cheers,
Quentin

Thanks,

- Kever

On 2022/9/1 21:13, Quentin Schulz wrote:

Hi Kever

On 9/1/22 15:03, Kever Yang wrote:

Hi Quentin,

On 2022/7/23 00:06, Quentin Schulz wrote:

From: Quentin Schulz 

Chances are when one boots U-Boot proper from a given storage
medium, they want the same medium to be used to load and store the

environment.

This basically allows to have completely separate U-Boot
(TPL/SPL/U-Boot
proper/environment) per storage medium which is convenient when
working with recovery from SD-Card as one would just need to insert
a properly configured SD-Card into the device to have access to
their whole debug setup.

No fallback mechanism is provided as to not dirty other storage
medium environment by mistake. However, since
arch_env_get_location() is called by env_init() which is part of
the pre-relocation process, a valid, non-ENVL_UNKNOWN, value shall
be returned otherwise the relocation fails with the following
message:
initcall sequence 002866c0 failed at call 00256b34
(err=-19)

This valid, non-ENVL_UNKNOWN, value is ENVL_NOWHERE which

requires

to always select CONFIG_ENV_IS_NOWHERE otherwise this work-around
does not work.

Cc: Quentin Schulz 
Signed-off-by: Quentin Schulz

---

Depends on
https://urldefense.proofpoint.com/v2/url?u=https-3A__lore.kernel.or
g_u-2Dboot_20220715151552.953654-2D1-2Dfoss-2Buboot-400leil.net_=


DwIDaQ=_sEr5x9kUWhuk4_nFwjJtA=LYjLexDn7rXIzVmkNPvw5ymA1XTSq
HGq8

yBP6m6qZZ4njZguQhZhkI_-

172IIy1t=TZndtGz1ePTd2Il6YcEjqzo9oXv73RCWH
IRVSiFVsnp2OzyCJEDzZ2KPz56AcWdn=wgEMbr3EjeCtvcWU_UoXqNOwQula
VN-0Q

b2yL2ysaOs=
https://urldefense.proofpoint.com/v2/url?u=https-3A__lore.kernel.or
g_u-2Dboot_20220715151552.953654-2D2-2Dfoss-2Buboot-400le

RE: [PATCH 07/12] rockchip: puma-rk3399: load environment from same medium as one used to load U-Boot proper

2022-09-14 Thread patrick.delaunay
Hi,


ST Restricted

> -Original Message-
> From: U-Boot  On Behalf Of Quentin Schulz
> Sent: mardi 6 septembre 2022 11:23
> To: Kever Yang ; Quentin Schulz
> 
> Cc: s...@chromium.org; philipp.toms...@vrull.eu; klaus.goger@theobroma-
> systems.com; knaerz...@gmail.com; u-boot@lists.denx.de
> Subject: Re: [PATCH 07/12] rockchip: puma-rk3399: load environment from same
> medium as one used to load U-Boot proper
> 
> Hi Kever,
> 
> On 9/4/22 13:49, Kever Yang wrote:
> > Hi Quentin,
> >
> > The Kconfig from env/Kconfig
> >
> > config ENV_IS_NOWHERE
> >  bool "Environment is not stored"
> >  default y if !ENV_IS_IN_EEPROM && !ENV_IS_IN_EXT4 && \
> >   !ENV_IS_IN_FAT && !ENV_IS_IN_FLASH && \
> >   !ENV_IS_IN_MMC && !ENV_IS_IN_NAND && \
> >   !ENV_IS_IN_NVRAM && !ENV_IS_IN_ONENAND && \
> >   !ENV_IS_IN_REMOTE && !ENV_IS_IN_SPI_FLASH && \
> >   !ENV_IS_IN_UBI
> >
> > I think the logic is the env parameter is stored on some kind of
> > storage, or NOWHERE.
> >
> 
> It's *default* to yes if none is defined. It's not a requirement.
> 
> > And what you want to do is to load from the same medium as SPL boot
> > device(location of U-Boot proper),
> >
> > this could not be NOWHERE.
> >
> 
> This can be nowhere in case the proper config option is not selected.
> E.g. we're booting from SPI-NOR but the ENV_IS_IN_SPI_FLASH is not set.
> How does one handle this scenario? Since we don't want fallbacks, it needs to 
> be
> "nowhere". What you're suggesting is to let the user run a broken build and 
> have it
> cryptically crash with the following error:
> 
> initcall sequence 002866c0 failed at call 00256b34 (err=-19)
> 
> Instead, I suggest to more gracefully error out at runtime by letting the 
> user know
> that the option is not compiled in but U-Boot is still usable.
> 
> If you have another way to forbid fallbacks but not crash U-Boot in case the 
> option
> is not selected, let me know.
>

For information : It is exactly that I do to stm32mp15 platform

See board/st/stm32mp1/stm32mp1.c::env_get_location()

ENV_IS_NOWHERE = use the default environment, embedded in U-Boot and env

It is the fallback if environment not activated ENV_IS_IN_*  for the boot 
device, even it is not the case by default in stm32mp15_defconfig.

And it is why , I change Kconfig to allow activation of any ENV_IS_IN_* and 
ENV_IS_NOWHERE

Patrick
 
> Cheers,
> Quentin
> >
> > Thanks,
> >
> > - Kever
> >
> > On 2022/9/1 21:13, Quentin Schulz wrote:
> >> Hi Kever
> >>
> >> On 9/1/22 15:03, Kever Yang wrote:
> >>> Hi Quentin,
> >>>
> >>> On 2022/7/23 00:06, Quentin Schulz wrote:
> >>>> From: Quentin Schulz 
> >>>>
> >>>> Chances are when one boots U-Boot proper from a given storage
> >>>> medium, they want the same medium to be used to load and store the
> environment.
> >>>>
> >>>> This basically allows to have completely separate U-Boot
> >>>> (TPL/SPL/U-Boot
> >>>> proper/environment) per storage medium which is convenient when
> >>>> working with recovery from SD-Card as one would just need to insert
> >>>> a properly configured SD-Card into the device to have access to
> >>>> their whole debug setup.
> >>>>
> >>>> No fallback mechanism is provided as to not dirty other storage
> >>>> medium environment by mistake. However, since
> >>>> arch_env_get_location() is called by env_init() which is part of
> >>>> the pre-relocation process, a valid, non-ENVL_UNKNOWN, value shall
> >>>> be returned otherwise the relocation fails with the following
> >>>> message:
> >>>> initcall sequence 002866c0 failed at call 00256b34
> >>>> (err=-19)
> >>>>
> >>>> This valid, non-ENVL_UNKNOWN, value is ENVL_NOWHERE which
> requires
> >>>> to always select CONFIG_ENV_IS_NOWHERE otherwise this work-around
> >>>> does not work.
> >>>>
> >>>> Cc: Quentin Schulz 
> >>>> Signed-off-by: Quentin Schulz
> >>>> 
> >>>> ---
> >>>>
> >>>> Depends on
> >>>> https://urldefense.proofpoint.com/v2/url?u=https-3A__

Re: [PATCH 07/12] rockchip: puma-rk3399: load environment from same medium as one used to load U-Boot proper

2022-09-06 Thread Quentin Schulz

Hi Kever,

On 9/4/22 13:49, Kever Yang wrote:

Hi Quentin,

The Kconfig from env/Kconfig

config ENV_IS_NOWHERE
     bool "Environment is not stored"
     default y if !ENV_IS_IN_EEPROM && !ENV_IS_IN_EXT4 && \
  !ENV_IS_IN_FAT && !ENV_IS_IN_FLASH && \
  !ENV_IS_IN_MMC && !ENV_IS_IN_NAND && \
  !ENV_IS_IN_NVRAM && !ENV_IS_IN_ONENAND && \
  !ENV_IS_IN_REMOTE && !ENV_IS_IN_SPI_FLASH && \
  !ENV_IS_IN_UBI

I think the logic is the env parameter is stored on some kind of 
storage, or NOWHERE.




It's *default* to yes if none is defined. It's not a requirement.

And what you want to do is to load from the same medium as SPL boot 
device(location of U-Boot proper),


this could not be NOWHERE.



This can be nowhere in case the proper config option is not selected. 
E.g. we're booting from SPI-NOR but the ENV_IS_IN_SPI_FLASH is not set. 
How does one handle this scenario? Since we don't want fallbacks, it 
needs to be "nowhere". What you're suggesting is to let the user run a 
broken build and have it cryptically crash with the following error:


initcall sequence 002866c0 failed at call 00256b34 (err=-19)

Instead, I suggest to more gracefully error out at runtime by letting 
the user know that the option is not compiled in but U-Boot is still usable.


If you have another way to forbid fallbacks but not crash U-Boot in case 
the option is not selected, let me know.


Cheers,
Quentin


Thanks,

- Kever

On 2022/9/1 21:13, Quentin Schulz wrote:

Hi Kever

On 9/1/22 15:03, Kever Yang wrote:

Hi Quentin,

On 2022/7/23 00:06, Quentin Schulz wrote:

From: Quentin Schulz 

Chances are when one boots U-Boot proper from a given storage medium,
they want the same medium to be used to load and store the environment.

This basically allows to have completely separate U-Boot 
(TPL/SPL/U-Boot

proper/environment) per storage medium which is convenient when working
with recovery from SD-Card as one would just need to insert a properly
configured SD-Card into the device to have access to their whole debug
setup.

No fallback mechanism is provided as to not dirty other storage medium
environment by mistake. However, since arch_env_get_location() is 
called

by env_init() which is part of the pre-relocation process, a valid,
non-ENVL_UNKNOWN, value shall be returned otherwise the relocation 
fails

with the following message:
initcall sequence 002866c0 failed at call 00256b34 
(err=-19)


This valid, non-ENVL_UNKNOWN, value is ENVL_NOWHERE which requires to
always select CONFIG_ENV_IS_NOWHERE otherwise this work-around does not
work.

Cc: Quentin Schulz 
Signed-off-by: Quentin Schulz 
---

Depends on
https://urldefense.proofpoint.com/v2/url?u=https-3A__lore.kernel.org_u-2Dboot_20220715151552.953654-2D1-2Dfoss-2Buboot-400leil.net_=DwIDaQ=_sEr5x9kUWhuk4_nFwjJtA=LYjLexDn7rXIzVmkNPvw5ymA1XTSqHGq8yBP6m6qZZ4njZguQhZhkI_-172IIy1t=TZndtGz1ePTd2Il6YcEjqzo9oXv73RCWHIRVSiFVsnp2OzyCJEDzZ2KPz56AcWdn=wgEMbr3EjeCtvcWU_UoXqNOwQulaVN-0Qb2yL2ysaOs=
 
https://urldefense.proofpoint.com/v2/url?u=https-3A__lore.kernel.org_u-2Dboot_20220715151552.953654-2D2-2Dfoss-2Buboot-400leil.net_=DwIDaQ=_sEr5x9kUWhuk4_nFwjJtA=LYjLexDn7rXIzVmkNPvw5ymA1XTSqHGq8yBP6m6qZZ4njZguQhZhkI_-172IIy1t=TZndtGz1ePTd2Il6YcEjqzo9oXv73RCWHIRVSiFVsnp2OzyCJEDzZ2KPz56AcWdn=PKwYBMB7r8ekIPV1ZG7xkj7vF60YNFlYXQRrvaVgJR8=
  .../puma_rk3399/puma-rk3399.c | 37 
+++

  configs/puma-rk3399_defconfig |  1 +
  2 files changed, 38 insertions(+)

diff --git a/board/theobroma-systems/puma_rk3399/puma-rk3399.c 
b/board/theobroma-systems/puma_rk3399/puma-rk3399.c

index 5e5e58c88e..7ef4bac24b 100644
--- a/board/theobroma-systems/puma_rk3399/puma-rk3399.c
+++ b/board/theobroma-systems/puma_rk3399/puma-rk3399.c
@@ -6,6 +6,7 @@
  #include 
  #include 
  #include 
+#include 
  #include 
  #include 
  #include 
@@ -135,6 +136,42 @@ int mmc_get_env_dev(void)
  return CONFIG_SYS_MMC_ENV_DEV;
  }
+#if !IS_ENABLED(CONFIG_ENV_IS_NOWHERE)
+#error Please enable CONFIG_ENV_IS_NOWHERE
+#endif
+
+enum env_location arch_env_get_location(enum env_operation op, int 
prio)

+{
+    const char *boot_device =
+    ofnode_read_chosen_string("u-boot,spl-boot-device");
+
+    if (prio > 0)
+    return ENVL_UNKNOWN;
+
+    if (!boot_device) {
+    debug("%s: /chosen/u-boot,spl-boot-device not set\n",
+  __func__);
+    return ENVL_NOWHERE;
+    }
+
+    debug("%s: booted from %s\n", __func__, boot_device);
+
+    if (IS_ENABLED(CONFIG_ENV_IS_IN_SPI_FLASH) &&
+    !strcmp(boot_device, "/spi@ff1d/flash@0"))
+    return ENVL_SPI_FLASH;
+
+    if (IS_ENABLED(CONFIG_ENV_IS_IN_MMC) &&
+    (!strcmp(boot_device, "/mmc@fe32") ||
+ !strcmp(boot_device, "/mmc@fe33")))
+    return ENVL_MMC;
+
+    printf("%s: No environment available: booted from %s but U-Boot "
+   

Re: [PATCH 07/12] rockchip: puma-rk3399: load environment from same medium as one used to load U-Boot proper

2022-09-04 Thread Kever Yang

Hi Quentin,

The Kconfig from env/Kconfig

config ENV_IS_NOWHERE
    bool "Environment is not stored"
    default y if !ENV_IS_IN_EEPROM && !ENV_IS_IN_EXT4 && \
 !ENV_IS_IN_FAT && !ENV_IS_IN_FLASH && \
 !ENV_IS_IN_MMC && !ENV_IS_IN_NAND && \
 !ENV_IS_IN_NVRAM && !ENV_IS_IN_ONENAND && \
 !ENV_IS_IN_REMOTE && !ENV_IS_IN_SPI_FLASH && \
 !ENV_IS_IN_UBI

I think the logic is the env parameter is stored on some kind of 
storage, or NOWHERE.


And what you want to do is to load from the same medium as SPL boot 
device(location of U-Boot proper),


this could not be NOWHERE.


Thanks,

- Kever

On 2022/9/1 21:13, Quentin Schulz wrote:

Hi Kever

On 9/1/22 15:03, Kever Yang wrote:

Hi Quentin,

On 2022/7/23 00:06, Quentin Schulz wrote:

From: Quentin Schulz 

Chances are when one boots U-Boot proper from a given storage medium,
they want the same medium to be used to load and store the environment.

This basically allows to have completely separate U-Boot 
(TPL/SPL/U-Boot

proper/environment) per storage medium which is convenient when working
with recovery from SD-Card as one would just need to insert a properly
configured SD-Card into the device to have access to their whole debug
setup.

No fallback mechanism is provided as to not dirty other storage medium
environment by mistake. However, since arch_env_get_location() is 
called

by env_init() which is part of the pre-relocation process, a valid,
non-ENVL_UNKNOWN, value shall be returned otherwise the relocation 
fails

with the following message:
initcall sequence 002866c0 failed at call 00256b34 
(err=-19)


This valid, non-ENVL_UNKNOWN, value is ENVL_NOWHERE which requires to
always select CONFIG_ENV_IS_NOWHERE otherwise this work-around does not
work.

Cc: Quentin Schulz 
Signed-off-by: Quentin Schulz 
---

Depends on
https://urldefense.proofpoint.com/v2/url?u=https-3A__lore.kernel.org_u-2Dboot_20220715151552.953654-2D1-2Dfoss-2Buboot-400leil.net_=DwIDaQ=_sEr5x9kUWhuk4_nFwjJtA=LYjLexDn7rXIzVmkNPvw5ymA1XTSqHGq8yBP6m6qZZ4njZguQhZhkI_-172IIy1t=TZndtGz1ePTd2Il6YcEjqzo9oXv73RCWHIRVSiFVsnp2OzyCJEDzZ2KPz56AcWdn=wgEMbr3EjeCtvcWU_UoXqNOwQulaVN-0Qb2yL2ysaOs= 
https://urldefense.proofpoint.com/v2/url?u=https-3A__lore.kernel.org_u-2Dboot_20220715151552.953654-2D2-2Dfoss-2Buboot-400leil.net_=DwIDaQ=_sEr5x9kUWhuk4_nFwjJtA=LYjLexDn7rXIzVmkNPvw5ymA1XTSqHGq8yBP6m6qZZ4njZguQhZhkI_-172IIy1t=TZndtGz1ePTd2Il6YcEjqzo9oXv73RCWHIRVSiFVsnp2OzyCJEDzZ2KPz56AcWdn=PKwYBMB7r8ekIPV1ZG7xkj7vF60YNFlYXQRrvaVgJR8= 

  .../puma_rk3399/puma-rk3399.c | 37 
+++

  configs/puma-rk3399_defconfig |  1 +
  2 files changed, 38 insertions(+)

diff --git a/board/theobroma-systems/puma_rk3399/puma-rk3399.c 
b/board/theobroma-systems/puma_rk3399/puma-rk3399.c

index 5e5e58c88e..7ef4bac24b 100644
--- a/board/theobroma-systems/puma_rk3399/puma-rk3399.c
+++ b/board/theobroma-systems/puma_rk3399/puma-rk3399.c
@@ -6,6 +6,7 @@
  #include 
  #include 
  #include 
+#include 
  #include 
  #include 
  #include 
@@ -135,6 +136,42 @@ int mmc_get_env_dev(void)
  return CONFIG_SYS_MMC_ENV_DEV;
  }
+#if !IS_ENABLED(CONFIG_ENV_IS_NOWHERE)
+#error Please enable CONFIG_ENV_IS_NOWHERE
+#endif
+
+enum env_location arch_env_get_location(enum env_operation op, int 
prio)

+{
+    const char *boot_device =
+    ofnode_read_chosen_string("u-boot,spl-boot-device");
+
+    if (prio > 0)
+    return ENVL_UNKNOWN;
+
+    if (!boot_device) {
+    debug("%s: /chosen/u-boot,spl-boot-device not set\n",
+  __func__);
+    return ENVL_NOWHERE;
+    }
+
+    debug("%s: booted from %s\n", __func__, boot_device);
+
+    if (IS_ENABLED(CONFIG_ENV_IS_IN_SPI_FLASH) &&
+    !strcmp(boot_device, "/spi@ff1d/flash@0"))
+    return ENVL_SPI_FLASH;
+
+    if (IS_ENABLED(CONFIG_ENV_IS_IN_MMC) &&
+    (!strcmp(boot_device, "/mmc@fe32") ||
+ !strcmp(boot_device, "/mmc@fe33")))
+    return ENVL_MMC;
+
+    printf("%s: No environment available: booted from %s but U-Boot "
+   "config does not allow loading environment from it.",
+   __func__, boot_device);
+
+    return ENVL_NOWHERE;
+}
+
  int misc_init_r(void)
  {
  const u32 cpuid_offset = 0x7;
diff --git a/configs/puma-rk3399_defconfig 
b/configs/puma-rk3399_defconfig

index 87d7e4f57c..e218532d70 100644
--- a/configs/puma-rk3399_defconfig
+++ b/configs/puma-rk3399_defconfig
@@ -44,6 +44,7 @@ CONFIG_SPL_OF_CONTROL=y
  CONFIG_OF_LIVE=y
  CONFIG_OF_SPL_REMOVE_PROPS="interrupt-parent assigned-clocks 
assigned-clock-rates assigned-clock-parents"

  CONFIG_ENV_OVERWRITE=y
+CONFIG_ENV_IS_NOWHERE=y


This option is conflict with CONFIG_ENV_IS_IN_MMC,  please check 
again where should be this board get the env.




I created the defconfig with make savedefconfig, so if you're talking 
about KConfig conflict, that is incorrect, there is no conflict.



Re: [PATCH 07/12] rockchip: puma-rk3399: load environment from same medium as one used to load U-Boot proper

2022-09-01 Thread Quentin Schulz

Hi Kever

On 9/1/22 15:03, Kever Yang wrote:

Hi Quentin,

On 2022/7/23 00:06, Quentin Schulz wrote:

From: Quentin Schulz 

Chances are when one boots U-Boot proper from a given storage medium,
they want the same medium to be used to load and store the environment.

This basically allows to have completely separate U-Boot (TPL/SPL/U-Boot
proper/environment) per storage medium which is convenient when working
with recovery from SD-Card as one would just need to insert a properly
configured SD-Card into the device to have access to their whole debug
setup.

No fallback mechanism is provided as to not dirty other storage medium
environment by mistake. However, since arch_env_get_location() is called
by env_init() which is part of the pre-relocation process, a valid,
non-ENVL_UNKNOWN, value shall be returned otherwise the relocation fails
with the following message:
initcall sequence 002866c0 failed at call 00256b34 
(err=-19)


This valid, non-ENVL_UNKNOWN, value is ENVL_NOWHERE which requires to
always select CONFIG_ENV_IS_NOWHERE otherwise this work-around does not
work.

Cc: Quentin Schulz 
Signed-off-by: Quentin Schulz 
---

Depends on
https://urldefense.proofpoint.com/v2/url?u=https-3A__lore.kernel.org_u-2Dboot_20220715151552.953654-2D1-2Dfoss-2Buboot-400leil.net_=DwIDaQ=_sEr5x9kUWhuk4_nFwjJtA=LYjLexDn7rXIzVmkNPvw5ymA1XTSqHGq8yBP6m6qZZ4njZguQhZhkI_-172IIy1t=TZndtGz1ePTd2Il6YcEjqzo9oXv73RCWHIRVSiFVsnp2OzyCJEDzZ2KPz56AcWdn=wgEMbr3EjeCtvcWU_UoXqNOwQulaVN-0Qb2yL2ysaOs=
 
https://urldefense.proofpoint.com/v2/url?u=https-3A__lore.kernel.org_u-2Dboot_20220715151552.953654-2D2-2Dfoss-2Buboot-400leil.net_=DwIDaQ=_sEr5x9kUWhuk4_nFwjJtA=LYjLexDn7rXIzVmkNPvw5ymA1XTSqHGq8yBP6m6qZZ4njZguQhZhkI_-172IIy1t=TZndtGz1ePTd2Il6YcEjqzo9oXv73RCWHIRVSiFVsnp2OzyCJEDzZ2KPz56AcWdn=PKwYBMB7r8ekIPV1ZG7xkj7vF60YNFlYXQRrvaVgJR8=
  .../puma_rk3399/puma-rk3399.c | 37 +++
  configs/puma-rk3399_defconfig |  1 +
  2 files changed, 38 insertions(+)

diff --git a/board/theobroma-systems/puma_rk3399/puma-rk3399.c 
b/board/theobroma-systems/puma_rk3399/puma-rk3399.c

index 5e5e58c88e..7ef4bac24b 100644
--- a/board/theobroma-systems/puma_rk3399/puma-rk3399.c
+++ b/board/theobroma-systems/puma_rk3399/puma-rk3399.c
@@ -6,6 +6,7 @@
  #include 
  #include 
  #include 
+#include 
  #include 
  #include 
  #include 
@@ -135,6 +136,42 @@ int mmc_get_env_dev(void)
  return CONFIG_SYS_MMC_ENV_DEV;
  }
+#if !IS_ENABLED(CONFIG_ENV_IS_NOWHERE)
+#error Please enable CONFIG_ENV_IS_NOWHERE
+#endif
+
+enum env_location arch_env_get_location(enum env_operation op, int prio)
+{
+    const char *boot_device =
+    ofnode_read_chosen_string("u-boot,spl-boot-device");
+
+    if (prio > 0)
+    return ENVL_UNKNOWN;
+
+    if (!boot_device) {
+    debug("%s: /chosen/u-boot,spl-boot-device not set\n",
+  __func__);
+    return ENVL_NOWHERE;
+    }
+
+    debug("%s: booted from %s\n", __func__, boot_device);
+
+    if (IS_ENABLED(CONFIG_ENV_IS_IN_SPI_FLASH) &&
+    !strcmp(boot_device, "/spi@ff1d/flash@0"))
+    return ENVL_SPI_FLASH;
+
+    if (IS_ENABLED(CONFIG_ENV_IS_IN_MMC) &&
+    (!strcmp(boot_device, "/mmc@fe32") ||
+ !strcmp(boot_device, "/mmc@fe33")))
+    return ENVL_MMC;
+
+    printf("%s: No environment available: booted from %s but U-Boot "
+   "config does not allow loading environment from it.",
+   __func__, boot_device);
+
+    return ENVL_NOWHERE;
+}
+
  int misc_init_r(void)
  {
  const u32 cpuid_offset = 0x7;
diff --git a/configs/puma-rk3399_defconfig 
b/configs/puma-rk3399_defconfig

index 87d7e4f57c..e218532d70 100644
--- a/configs/puma-rk3399_defconfig
+++ b/configs/puma-rk3399_defconfig
@@ -44,6 +44,7 @@ CONFIG_SPL_OF_CONTROL=y
  CONFIG_OF_LIVE=y
  CONFIG_OF_SPL_REMOVE_PROPS="interrupt-parent assigned-clocks 
assigned-clock-rates assigned-clock-parents"

  CONFIG_ENV_OVERWRITE=y
+CONFIG_ENV_IS_NOWHERE=y


This option is conflict with CONFIG_ENV_IS_IN_MMC,  please check again 
where should be this board get the env.




I created the defconfig with make savedefconfig, so if you're talking 
about KConfig conflict, that is incorrect, there is no conflict.


If you're talking about something else, please clarify because I don't 
see the issue right now.


Cheers,
Quentin


Re: [PATCH 07/12] rockchip: puma-rk3399: load environment from same medium as one used to load U-Boot proper

2022-09-01 Thread Kever Yang

Hi Quentin,

On 2022/7/23 00:06, Quentin Schulz wrote:

From: Quentin Schulz 

Chances are when one boots U-Boot proper from a given storage medium,
they want the same medium to be used to load and store the environment.

This basically allows to have completely separate U-Boot (TPL/SPL/U-Boot
proper/environment) per storage medium which is convenient when working
with recovery from SD-Card as one would just need to insert a properly
configured SD-Card into the device to have access to their whole debug
setup.

No fallback mechanism is provided as to not dirty other storage medium
environment by mistake. However, since arch_env_get_location() is called
by env_init() which is part of the pre-relocation process, a valid,
non-ENVL_UNKNOWN, value shall be returned otherwise the relocation fails
with the following message:
initcall sequence 002866c0 failed at call 00256b34 (err=-19)

This valid, non-ENVL_UNKNOWN, value is ENVL_NOWHERE which requires to
always select CONFIG_ENV_IS_NOWHERE otherwise this work-around does not
work.

Cc: Quentin Schulz 
Signed-off-by: Quentin Schulz 
---

Depends on
https://lore.kernel.org/u-boot/20220715151552.953654-1-foss+ub...@0leil.net/
https://lore.kernel.org/u-boot/20220715151552.953654-2-foss+ub...@0leil.net/

  .../puma_rk3399/puma-rk3399.c | 37 +++
  configs/puma-rk3399_defconfig |  1 +
  2 files changed, 38 insertions(+)

diff --git a/board/theobroma-systems/puma_rk3399/puma-rk3399.c 
b/board/theobroma-systems/puma_rk3399/puma-rk3399.c
index 5e5e58c88e..7ef4bac24b 100644
--- a/board/theobroma-systems/puma_rk3399/puma-rk3399.c
+++ b/board/theobroma-systems/puma_rk3399/puma-rk3399.c
@@ -6,6 +6,7 @@
  #include 
  #include 
  #include 
+#include 
  #include 
  #include 
  #include 
@@ -135,6 +136,42 @@ int mmc_get_env_dev(void)
return CONFIG_SYS_MMC_ENV_DEV;
  }
  
+#if !IS_ENABLED(CONFIG_ENV_IS_NOWHERE)

+#error Please enable CONFIG_ENV_IS_NOWHERE
+#endif
+
+enum env_location arch_env_get_location(enum env_operation op, int prio)
+{
+   const char *boot_device =
+   ofnode_read_chosen_string("u-boot,spl-boot-device");
+
+   if (prio > 0)
+   return ENVL_UNKNOWN;
+
+   if (!boot_device) {
+   debug("%s: /chosen/u-boot,spl-boot-device not set\n",
+ __func__);
+   return ENVL_NOWHERE;
+   }
+
+   debug("%s: booted from %s\n", __func__, boot_device);
+
+   if (IS_ENABLED(CONFIG_ENV_IS_IN_SPI_FLASH) &&
+   !strcmp(boot_device, "/spi@ff1d/flash@0"))
+   return ENVL_SPI_FLASH;
+
+   if (IS_ENABLED(CONFIG_ENV_IS_IN_MMC) &&
+   (!strcmp(boot_device, "/mmc@fe32") ||
+!strcmp(boot_device, "/mmc@fe33")))
+   return ENVL_MMC;
+
+   printf("%s: No environment available: booted from %s but U-Boot "
+  "config does not allow loading environment from it.",
+  __func__, boot_device);
+
+   return ENVL_NOWHERE;
+}
+
  int misc_init_r(void)
  {
const u32 cpuid_offset = 0x7;
diff --git a/configs/puma-rk3399_defconfig b/configs/puma-rk3399_defconfig
index 87d7e4f57c..e218532d70 100644
--- a/configs/puma-rk3399_defconfig
+++ b/configs/puma-rk3399_defconfig
@@ -44,6 +44,7 @@ CONFIG_SPL_OF_CONTROL=y
  CONFIG_OF_LIVE=y
  CONFIG_OF_SPL_REMOVE_PROPS="interrupt-parent assigned-clocks assigned-clock-rates 
assigned-clock-parents"
  CONFIG_ENV_OVERWRITE=y
+CONFIG_ENV_IS_NOWHERE=y


This option is conflict with CONFIG_ENV_IS_IN_MMC,  please check again 
where should be this board get the env.



Thanks,

- Kever


  CONFIG_ENV_IS_IN_MMC=y
  CONFIG_ENV_IS_IN_SPI_FLASH=y
  CONFIG_ENV_SPI_MAX_HZ=5000


[PATCH 07/12] rockchip: puma-rk3399: load environment from same medium as one used to load U-Boot proper

2022-07-22 Thread Quentin Schulz
From: Quentin Schulz 

Chances are when one boots U-Boot proper from a given storage medium,
they want the same medium to be used to load and store the environment.

This basically allows to have completely separate U-Boot (TPL/SPL/U-Boot
proper/environment) per storage medium which is convenient when working
with recovery from SD-Card as one would just need to insert a properly
configured SD-Card into the device to have access to their whole debug
setup.

No fallback mechanism is provided as to not dirty other storage medium
environment by mistake. However, since arch_env_get_location() is called
by env_init() which is part of the pre-relocation process, a valid,
non-ENVL_UNKNOWN, value shall be returned otherwise the relocation fails
with the following message:
initcall sequence 002866c0 failed at call 00256b34 (err=-19)

This valid, non-ENVL_UNKNOWN, value is ENVL_NOWHERE which requires to
always select CONFIG_ENV_IS_NOWHERE otherwise this work-around does not
work.

Cc: Quentin Schulz 
Signed-off-by: Quentin Schulz 
---

Depends on
https://lore.kernel.org/u-boot/20220715151552.953654-1-foss+ub...@0leil.net/
https://lore.kernel.org/u-boot/20220715151552.953654-2-foss+ub...@0leil.net/

 .../puma_rk3399/puma-rk3399.c | 37 +++
 configs/puma-rk3399_defconfig |  1 +
 2 files changed, 38 insertions(+)

diff --git a/board/theobroma-systems/puma_rk3399/puma-rk3399.c 
b/board/theobroma-systems/puma_rk3399/puma-rk3399.c
index 5e5e58c88e..7ef4bac24b 100644
--- a/board/theobroma-systems/puma_rk3399/puma-rk3399.c
+++ b/board/theobroma-systems/puma_rk3399/puma-rk3399.c
@@ -6,6 +6,7 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -135,6 +136,42 @@ int mmc_get_env_dev(void)
return CONFIG_SYS_MMC_ENV_DEV;
 }
 
+#if !IS_ENABLED(CONFIG_ENV_IS_NOWHERE)
+#error Please enable CONFIG_ENV_IS_NOWHERE
+#endif
+
+enum env_location arch_env_get_location(enum env_operation op, int prio)
+{
+   const char *boot_device =
+   ofnode_read_chosen_string("u-boot,spl-boot-device");
+
+   if (prio > 0)
+   return ENVL_UNKNOWN;
+
+   if (!boot_device) {
+   debug("%s: /chosen/u-boot,spl-boot-device not set\n",
+ __func__);
+   return ENVL_NOWHERE;
+   }
+
+   debug("%s: booted from %s\n", __func__, boot_device);
+
+   if (IS_ENABLED(CONFIG_ENV_IS_IN_SPI_FLASH) &&
+   !strcmp(boot_device, "/spi@ff1d/flash@0"))
+   return ENVL_SPI_FLASH;
+
+   if (IS_ENABLED(CONFIG_ENV_IS_IN_MMC) &&
+   (!strcmp(boot_device, "/mmc@fe32") ||
+!strcmp(boot_device, "/mmc@fe33")))
+   return ENVL_MMC;
+
+   printf("%s: No environment available: booted from %s but U-Boot "
+  "config does not allow loading environment from it.",
+  __func__, boot_device);
+
+   return ENVL_NOWHERE;
+}
+
 int misc_init_r(void)
 {
const u32 cpuid_offset = 0x7;
diff --git a/configs/puma-rk3399_defconfig b/configs/puma-rk3399_defconfig
index 87d7e4f57c..e218532d70 100644
--- a/configs/puma-rk3399_defconfig
+++ b/configs/puma-rk3399_defconfig
@@ -44,6 +44,7 @@ CONFIG_SPL_OF_CONTROL=y
 CONFIG_OF_LIVE=y
 CONFIG_OF_SPL_REMOVE_PROPS="interrupt-parent assigned-clocks 
assigned-clock-rates assigned-clock-parents"
 CONFIG_ENV_OVERWRITE=y
+CONFIG_ENV_IS_NOWHERE=y
 CONFIG_ENV_IS_IN_MMC=y
 CONFIG_ENV_IS_IN_SPI_FLASH=y
 CONFIG_ENV_SPI_MAX_HZ=5000
-- 
2.37.1