[FOSS_TLK]kernel: dynamically decide to use cmdline/boot_args
[3rdparty/ote_partner/tlk.git] / platform / tegra / common / memory.c
index a0910b6..1a9c728 100644 (file)
 void platform_setup_keys(void)
 {
        boot_params *boot_params_ptr;
+       boot_params_t *boot_params_ptr_args;
        key_params *keys_ptr;
+       int cmdline_len;
        uint32_t reg, offset;
        extern uint32_t __bootarg_addr;
 
        /* keys immediately follow the boot params in DRAM */
        boot_params_ptr = (boot_params *) __bootarg_addr;
-       offset = ROUNDUP(boot_params_ptr->param_string_sz, sizeof(uint32_t));
+
+       cmdline_len = boot_params_ptr->param_string_sz;
+
+       /* Check whether parameters are passed as cmdline or structure */
+       if (cmdline_len == 0) {
+               boot_params_ptr_args = (boot_params_t *) __bootarg_addr;
+               offset = sizeof(boot_params_t);
+               keys_ptr = (key_params *)((uintptr_t)boot_params_ptr_args + offset);
+       } else {
+               offset = ROUNDUP(boot_params_ptr->param_string_sz, sizeof(uint32_t));
+               keys_ptr = (key_params *)((uintptr_t)boot_params_ptr->param_string + offset);
+       }
 
        /* ensure TZRAM clock is enabled */
        reg  = readl(TEGRA_CLK_RESET_BASE + CLK_OUT_ENB_V);
@@ -54,7 +67,6 @@ void platform_setup_keys(void)
        writel(reg, TEGRA_CLK_RESET_BASE + CLK_OUT_ENB_V);
 
        /* copy keys to TZRAM */
-       keys_ptr = (key_params *)((uintptr_t)boot_params_ptr->param_string + offset);
        memcpy((void *)TEGRA_TZRAM_BASE,
                keys_ptr->encrypted_keys, keys_ptr->encrypted_key_sz);
 }