ARM: tegra: Import cbootargs value from cboot DTB

Read the boot arguments passed by cboot via the /chosen/bootargs
property and store it in the cbootargs environment variable.

Signed-off-by: Thierry Reding <treding@nvidia.com>
Signed-off-by: Tom Warren <twarren@nvidia.com>
This commit is contained in:
Thierry Reding 2019-04-15 11:32:31 +02:00 committed by Tom Warren
parent 34e12e03c7
commit b571766453

View file

@ -8,7 +8,9 @@
#include <fdt_support.h>
#include <fdtdec.h>
#include <stdlib.h>
#include <string.h>
#include <linux/ctype.h>
#include <linux/sizes.h>
#include <asm/arch/tegra.h>
@ -546,10 +548,49 @@ out:
return err;
}
static char *strip(const char *ptr)
{
const char *end;
while (*ptr && isblank(*ptr))
ptr++;
/* empty string */
if (*ptr == '\0')
return strdup(ptr);
end = ptr;
while (end[1])
end++;
while (isblank(*end))
end--;
return strndup(ptr, end - ptr + 1);
}
static char *cboot_get_bootargs(const void *fdt)
{
const char *args;
int offset, len;
offset = fdt_path_offset(fdt, "/chosen");
if (offset < 0)
return NULL;
args = fdt_getprop(fdt, offset, "bootargs", &len);
if (!args)
return NULL;
return strip(args);
}
int cboot_late_init(void)
{
const void *fdt = (const void *)cboot_boot_x0;
uint8_t mac[ETH_ALEN];
char *bootargs;
int err;
set_calculated_env_vars();
@ -569,5 +610,11 @@ int cboot_late_init(void)
printf("failed to set MAC address %pM: %d\n", mac, err);
}
bootargs = cboot_get_bootargs(fdt);
if (bootargs) {
env_set("cbootargs", bootargs);
free(bootargs);
}
return 0;
}