fastboot: add support for 'getvar platform'
authorEugeniu Rosca <erosca@de.adit-jv.com>
Tue, 9 Apr 2019 19:11:40 +0000 (21:11 +0200)
committerMarek Vasut <marex@denx.de>
Sun, 21 Apr 2019 08:26:52 +0000 (10:26 +0200)
Our R-Car3 Android userspace relies on the output of 'fastboot
getvar platform' and U-Boot currently is not able to handle it:

host $> fastboot getvar platform
getvar:platform FAILED (remote: Variable not implemented)
finished. total time: 0.001s

We either have the option of adding 'fastboot.platform' variable
to the default/saved environment as a workaround or add proper
'fastboot getvar platform' support in U-Boot via this patch.
In the latter case, other platforms can benefit from it too.

Note that R-Car3 already exports 'platform' environment variable via
v2019.01 commit 00e4b57e9e71c3 ("ARM: rmobile: Set environment variable
containing CPU type").

Signed-off-by: Eugeniu Rosca <erosca@de.adit-jv.com>
drivers/fastboot/fb_getvar.c

index 91a774a345b61c3f665a1d274a2e07592c6fd0e3..4268628f5ef0210507c5d23f2e4209b2afc07029 100644 (file)
@@ -17,6 +17,7 @@ static void getvar_downloadsize(char *var_parameter, char *response);
 static void getvar_serialno(char *var_parameter, char *response);
 static void getvar_version_baseband(char *var_parameter, char *response);
 static void getvar_product(char *var_parameter, char *response);
+static void getvar_platform(char *var_parameter, char *response);
 static void getvar_current_slot(char *var_parameter, char *response);
 static void getvar_slot_suffixes(char *var_parameter, char *response);
 static void getvar_has_slot(char *var_parameter, char *response);
@@ -55,6 +56,9 @@ static const struct {
        }, {
                .variable = "product",
                .dispatch = getvar_product
+       }, {
+               .variable = "platform",
+               .dispatch = getvar_platform
        }, {
                .variable = "current-slot",
                .dispatch = getvar_current_slot
@@ -117,6 +121,16 @@ static void getvar_product(char *var_parameter, char *response)
                fastboot_fail("Board not set", response);
 }
 
+static void getvar_platform(char *var_parameter, char *response)
+{
+       const char *p = env_get("platform");
+
+       if (p)
+               fastboot_okay(p, response);
+       else
+               fastboot_fail("platform not set", response);
+}
+
 static void getvar_current_slot(char *var_parameter, char *response)
 {
        /* A/B not implemented, for now always return _a */