common: Drop image.h from common header
[platform/kernel/u-boot.git] / arch / arm / mach-keystone / mon.c
index ebfb483..58995d7 100644 (file)
@@ -1,19 +1,20 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
- * K2HK: secure kernel command file
+ * K2x: Secure commands file
  *
- * (C) Copyright 2012-2014
- *     Texas Instruments Incorporated, <www.ti.com>
- *
- * SPDX-License-Identifier:     GPL-2.0+
+ * Copyright (C) 2012-2019 Texas Instruments Incorporated - http://www.ti.com/
  */
 
+#include <hang.h>
+#include <image.h>
+#include <asm/unaligned.h>
 #include <common.h>
 #include <command.h>
 #include <mach/mon.h>
 #include <spl.h>
 asm(".arch_extension sec\n\t");
 
-int mon_install(u32 addr, u32 dpsc, u32 freq)
+int mon_install(u32 addr, u32 dpsc, u32 freq, u32 bm_addr)
 {
        int result;
 
@@ -22,11 +23,13 @@ int mon_install(u32 addr, u32 dpsc, u32 freq)
                "mov r0, %1\n"
                "mov r1, %2\n"
                "mov r2, %3\n"
+               "mov r3, %4\n"
                "blx r0\n"
+               "mov %0, r0\n"
                "ldmfd r13!, {lr}\n"
                : "=&r" (result)
-               : "r" (addr), "r" (dpsc), "r" (freq)
-               : "cc", "r0", "r1", "r2", "memory");
+               : "r" (addr), "r" (dpsc), "r" (freq), "r" (bm_addr)
+               : "cc", "r0", "r1", "r2", "r3", "memory");
        return result;
 }
 
@@ -40,6 +43,7 @@ int mon_power_on(int core_id, void *ep)
                "mov r2, %2\n"
                "mov r0, #0\n"
                "smc    #0\n"
+               "mov %0, r0\n"
                "ldmfd  r13!, {lr}\n"
                : "=&r" (result)
                : "r" (core_id), "r" (ep)
@@ -56,6 +60,7 @@ int mon_power_off(int core_id)
                "mov r1, %1\n"
                "mov r0, #1\n"
                "smc    #1\n"
+               "mov %0, r0\n"
                "ldmfd  r13!, {lr}\n"
                : "=&r" (result)
                : "r" (core_id)
@@ -89,6 +94,7 @@ static int k2_hs_bm_auth(int cmd, void *arg1)
                "mov r0, %1\n"
                "mov r1, %2\n"
                "smc #2\n"
+               "mov %0, r0\n"
                "ldmfd r13!, {r4-r12, lr}\n"
                : "=&r" (result)
                : "r" (cmd), "r" (arg1)
@@ -116,9 +122,9 @@ void board_fit_image_post_process(void **p_image, size_t *p_size)
        /*
         * Overwrite the image headers after authentication
         * and decryption. Update size to reflect removal
-        * of header.
+        * of header and restore original file size.
         */
-       *p_size -= KS2_HS_SEC_HEADER_LEN;
+       *p_size = get_unaligned_le32(image + (*p_size - 4));
        memcpy(image, image + KS2_HS_SEC_HEADER_LEN, *p_size);
 
        /*