[FOSS_TLK]kernel: dynamically decide to use cmdline/boot_args
[3rdparty/ote_partner/tlk.git] / platform / tegra / common / memory.c
index 5ac8616..1a9c728 100644 (file)
 #define CLK_OUT_ENB_TZRAM_SHIFT                30
 #define CLK_OUT_ENB_TZRAM_ENABLE       1
 
-#define SZ_1MB 0x00100000
-
-#define MC_VIDEO_PROTECT_BOM           0x648
-#define MC_VIDEO_PROTECT_SIZE_MB       0x64c
-
-status_t platform_program_vpr(uint32_t vpr_base, uint32_t vpr_size)
-{
-       static uint32_t save_vpr_base=0, save_vpr_size=0;
-       uint32_t save_vpr_end, vpr_end;
-
-       if (!save_vpr_base && !save_vpr_size) {
-               save_vpr_base = *REG32(TEGRA_MC_BASE + MC_VIDEO_PROTECT_BOM);
-               save_vpr_size = *REG32(TEGRA_MC_BASE + MC_VIDEO_PROTECT_SIZE_MB);
-
-               /* apply nvtboot WAR as initial carveout may include HIVEC_BASE */
-               if ((uint64_t)save_vpr_base + (save_vpr_size * SZ_1MB) > NV_ARM_CORE_HIVEC_BASE) {
-                       save_vpr_end = ROUNDDOWN(NV_ARM_CORE_HIVEC_BASE, SZ_1MB);
-                       save_vpr_size = (save_vpr_end - save_vpr_base) / SZ_1MB;
-               }
-       }
-
-       /* check if vpr_size and vpr_base are MB align */
-       if ((vpr_size & (SZ_1MB-1)) || (vpr_base & (SZ_1MB-1))  ) {
-               dprintf(CRITICAL, "%s: vpr base/size not MB align\n", __func__);
-               return ERR_GENERIC;
-       }
-
-       vpr_end = vpr_base + vpr_size;
-       vpr_size = vpr_size / SZ_1MB;
-       save_vpr_end = save_vpr_base + (save_vpr_size * SZ_1MB);
-
-       if (vpr_base > save_vpr_end || save_vpr_base > vpr_end) {
-               memset((void*)save_vpr_base, 0, (save_vpr_size * SZ_1MB)); //non-overlap
-       } else {
-               if (save_vpr_base < vpr_base) {
-                       memset((void*)save_vpr_base, 0, vpr_base-save_vpr_base); //shrink/shift at base
-               }
-               if (save_vpr_end > vpr_end) {
-                       memset((void*)vpr_end, 0, save_vpr_end-vpr_end); //shrink at end
-               }
-       }
-
-       *REG32(TEGRA_MC_BASE + MC_VIDEO_PROTECT_BOM) = vpr_base;
-       *REG32(TEGRA_MC_BASE + MC_VIDEO_PROTECT_SIZE_MB) = vpr_size;
-       save_vpr_base = vpr_base;
-       save_vpr_size = vpr_size;
-
-       return NO_ERROR;
-}
-
 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);
@@ -104,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);
 }