[FOSS_TLK]kernel: dynamically decide to use cmdline/boot_args
[3rdparty/ote_partner/tlk.git] / kernel / boot.c
index 7b7423a..88dcfec 100644 (file)
@@ -24,6 +24,8 @@
 #include <string.h>
 #include <stdlib.h>
 #include <assert.h>
+#include <debug.h>
+#include <err.h>
 #include <kernel/boot_params.h>
 #include <platform/platform_p.h>
 #include <common/ote_nv_uuid.h>
@@ -60,7 +62,7 @@ static int getoffsetof(char *source, char c)
        return offset;
 }
 
-void parse_cmdline(void)
+static int parse_cmdline(void)
 {
        boot_params *boot_params_ptr = (boot_params*)__bootarg_addr;
        char *str;
@@ -79,9 +81,12 @@ void parse_cmdline(void)
 
        if (!boot_params_ptr ||
            !boot_params_ptr->param_string[0])
-               return;
+               return ERR_INVALID_ARGS;
 
+       /* Check whether parameters are passed as cmdline or structure */
        cmdline_len = boot_params_ptr->param_string_sz;
+       if (cmdline_len == 0)
+               return ERR_NOT_SUPPORTED;
 
        str = boot_params_ptr->param_string;
        for (i = 0; i < cmdline_len; i++) {
@@ -143,6 +148,53 @@ done:
                cmdline_len -= strlen(str);
                str += strlen(str) + 1;
        }
+       return NO_ERROR;
+}
+
+static int parse_bootargs(void)
+{
+       boot_params_t *boot_params_ptr = (boot_params*)__bootarg_addr;
+       uint64_t base, size;
+
+       if (!boot_params_ptr || boot_params_ptr->version != 0)
+               return ERR_INVALID_ARGS;
+
+       device_uid[0] = boot_params_ptr->chip_uid[0];
+       device_uid[1] = boot_params_ptr->chip_uid[1];
+       device_uid[2] = boot_params_ptr->chip_uid[2];
+       device_uid[3] = boot_params_ptr->chip_uid[3];
+
+       debug_uart_id = boot_params_ptr->uart_id;
+
+       /* Get DRAM range from the structure passed */
+       base = boot_params_ptr->pmem;
+       size = boot_params_ptr->pmem_size;
+       tz_add_dram_range(base << 20, size << 20);
+
+       if (boot_params_ptr->emem_size != 0) {
+               base = boot_params_ptr->emem;
+               size = boot_params_ptr->emem_size;
+               tz_add_dram_range(base << 20, size << 20);
+       }
+
+       dtb_addr = boot_params_ptr->dtb_load_addr;
+
+       /* Get TSEC range from the structure passed */
+       tsec_carveout_base = boot_params_ptr->tsec_carveout;
+       tsec_carveout_size = boot_params_ptr->tsec_size;
+       tsec_carveout_size <<= 20;
+       tsec_carveout_base <<= 20;
+
+       return NO_ERROR;
+}
+
+void get_boot_params(void)
+{
+       int32_t err = NO_ERROR;
+
+       err = parse_cmdline();
+       if (err)
+               err = parse_bootargs();
 }
 
 int get_boot_args(task_t *task, uint32_t *argv)