[SLOF] [PATCH 1/2] envvar: Set properties in /options during "(set-defaults)"

Thomas Huth thuth at redhat.com
Tue Oct 25 22:43:44 AEDT 2016

The properties in /options are currently only populated from
the NVRAM common partition or if the user explicitely sets and
environment variable with "setenv". This causes two problems:

1) The properties in /options are not reset when the user runs
the "set-defaults" Forth word, e.g. like this:

    setenv auto-boot? false
    dev /options
    printenv auto-boot?
    s" auto-boot?" get-node get-property drop type
    printenv auto-boot?
    s" auto-boot?" get-node get-property drop type

After the "set-defaults", the property in /options has the
wrong value and is not in sync with the environment variable

2) If the common NVRAM partition is not containing all the
required variables, SLOF currently also does not create
default values in /options for the missing entries. This
causes problems for example when we want to initialize the
NVRAM from QEMU instead (to support the "-prom-env" parameter
of QEMU). Boot loaders like grub2 depend on the availability
of certain properties in the /options node and thus refuse
to work if the NVRAM did not contain all the variables.

To fix both issues, let's always populate the /options
properties during "(set-default)" already.

Signed-off-by: Thomas Huth <thuth at redhat.com>
 slof/fs/envvar.fs | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/slof/fs/envvar.fs b/slof/fs/envvar.fs
index 3364313..4a4d237 100644
--- a/slof/fs/envvar.fs
+++ b/slof/fs/envvar.fs
@@ -186,12 +186,16 @@ DEFER old-emit
 \ set envvar(s) to default value
 : (set-default)  ( def-xt -- )
-   dup >name name>string $CREATE dup >body c@ >r execute r> CASE
-   1 OF env-int ENDOF
-   2 OF env-bytes ENDOF
-   3 OF env-string ENDOF
-   4 OF env-flag ENDOF
-   5 OF env-secmode ENDOF ENDCASE
+    dup >name name>string 2dup $CREATE
+    rot dup >body c@ >r
+    execute
+    r> CASE
+        1 OF dup env-int (.d) 2swap set-option ENDOF
+        2 OF 2dup env-bytes 2swap set-option ENDOF
+        3 OF 2dup env-string 2swap set-option ENDOF
+        4 OF dup env-flag IF s" true" ELSE s" false" THEN 2swap set-option ENDOF
+        5 OF dup env-secmode (.d) 2swap set-option ENDOF
 \ Environment variables might be board specific

More information about the SLOF mailing list