All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrew F. Davis <afd@ti.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v2 02/10] arm: mach-keystone: Implements FIT post-processing call for keystone SoCs
Date: Fri, 7 Apr 2017 10:00:03 -0500	[thread overview]
Message-ID: <20170407150011.5459-3-afd@ti.com> (raw)
In-Reply-To: <20170407150011.5459-1-afd@ti.com>

From: Vitaly Andrianov <vitalya@ti.com>

This commit implements the board_fit_image_post_process() function for
the keystone architecture. This function calls into the secure boot
monitor for secure authentication/decryption of the image. All needed
work is handled by the boot monitor and, depending on the keystone
platform, the security functions may be offloaded to other secure
processing elements in the SoC.

The boot monitor acts as the gateway to these secure functions and the
boot monitor for secure devices is available as part of the SECDEV
package for KS2. For more details refer doc/README.ti-secure

Signed-off-by: Vitaly Andrianov <vitalya@ti.com>
Signed-off-by: Madan Srinivas <madans@ti.com>
Signed-off-by: Andrew F. Davis <afd@ti.com>
Reviewed-by: Tom Rini <trini@konsulko.com>
---
 arch/arm/mach-keystone/mon.c | 73 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 73 insertions(+)

diff --git a/arch/arm/mach-keystone/mon.c b/arch/arm/mach-keystone/mon.c
index 256f6300ed..81009848d0 100644
--- a/arch/arm/mach-keystone/mon.c
+++ b/arch/arm/mach-keystone/mon.c
@@ -10,6 +10,7 @@
 #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)
@@ -61,3 +62,75 @@ int mon_power_off(int core_id)
 		: "cc", "r0", "r1", "memory");
 	return  result;
 }
+
+#ifdef CONFIG_TI_SECURE_DEVICE
+#define KS2_HS_SEC_HEADER_LEN	0x60
+#define KS2_HS_SEC_TAG_OFFSET	0x34
+#define KS2_AUTH_CMD		130
+
+/**
+ * k2_hs_bm_auth() - Invokes security functions using a
+ * proprietary TI interface. This binary and source for
+ * this is available in the secure development package or
+ * SECDEV. For details on how to access this please refer
+ * doc/README.ti-secure
+ *
+ * @cmd: Secure monitor command
+ * @arg1: Argument for command
+ *
+ * returns non-zero value on success, zero on error
+ */
+static int k2_hs_bm_auth(int cmd, void *arg1)
+{
+	int result;
+
+	asm volatile (
+		"stmfd  r13!, {r4-r12, lr}\n"
+		"mov r0, %1\n"
+		"mov r1, %2\n"
+		"smc #2\n"
+		"ldmfd r13!, {r4-r12, lr}\n"
+		: "=&r" (result)
+		: "r" (cmd), "r" (arg1)
+		: "cc", "r0", "r1", "memory");
+
+	return  result;
+}
+
+void board_fit_image_post_process(void **p_image, size_t *p_size)
+{
+	int result = 0;
+	void *image = *p_image;
+
+	if (strncmp(image + KS2_HS_SEC_TAG_OFFSET, "KEYS", 4)) {
+		printf("No signature found in image!\n");
+		hang();
+	}
+
+	result = k2_hs_bm_auth(KS2_AUTH_CMD, image);
+	if (result == 0) {
+		printf("Authentication failed!\n");
+		hang();
+	}
+
+	/*
+	* Overwrite the image headers after authentication
+	* and decryption. Update size to reflect removal
+	* of header.
+	*/
+	memcpy(image, image + KS2_HS_SEC_HEADER_LEN, *p_size);
+	*p_size -= KS2_HS_SEC_HEADER_LEN;
+
+	/*
+	 * Output notification of successful authentication to re-assure the
+	 * user that the secure code is being processed as expected. However
+	 * suppress any such log output in case of building for SPL and booting
+	 * via YMODEM. This is done to avoid disturbing the YMODEM serial
+	 * protocol transactions.
+	 */
+	if (!(IS_ENABLED(CONFIG_SPL_BUILD) &&
+	      IS_ENABLED(CONFIG_SPL_YMODEM_SUPPORT) &&
+	      spl_boot_device() == BOOT_DEVICE_UART))
+		printf("Authentication passed\n");
+}
+#endif
-- 
2.11.0

  parent reply	other threads:[~2017-04-07 15:00 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-04-07 15:00 [U-Boot] [PATCH v2 00/10] Add support for secure boot on Keystone2 SoCs Andrew F. Davis
2017-04-07 15:00 ` [U-Boot] [PATCH v2 01/10] image: Fixes build warning with CONFIG_FIT_IMAGE_POST_PROCESS Andrew F. Davis
2017-04-08  3:55   ` Lokesh Vutla
2017-04-09 19:28   ` Simon Glass
2017-04-10 18:25   ` [U-Boot] [U-Boot, v2, " Tom Rini
2017-04-07 15:00 ` Andrew F. Davis [this message]
2017-04-08  3:55   ` [U-Boot] [PATCH v2 02/10] arm: mach-keystone: Implements FIT post-processing call for keystone SoCs Lokesh Vutla
2017-04-10 18:25   ` [U-Boot] [U-Boot, v2, " Tom Rini
2017-04-07 15:00 ` [U-Boot] [PATCH v2 03/10] arm: mach-omap2: Enable Kconfig support for K2 HS devices Andrew F. Davis
2017-04-08  3:55   ` Lokesh Vutla
2017-04-10 18:25   ` [U-Boot] [U-Boot, v2, " Tom Rini
2017-04-07 15:00 ` [U-Boot] [PATCH v2 04/10] arm: mach-omap2: Add secure image name common to OMAP and keystone Andrew F. Davis
2017-04-08  3:56   ` Lokesh Vutla
2017-04-10 18:25   ` [U-Boot] [U-Boot, v2, " Tom Rini
2017-04-07 15:00 ` [U-Boot] [PATCH v2 05/10] ARM: Keystone2: Build secure images for K2 Andrew F. Davis
2017-04-08  3:58   ` Lokesh Vutla
2017-04-10 18:25   ` [U-Boot] [U-Boot, v2, " Tom Rini
2017-04-07 15:00 ` [U-Boot] [PATCH v2 06/10] doc: Updates info on using Keystone2 secure devices Andrew F. Davis
2017-04-08  3:58   ` Lokesh Vutla
2017-04-10 18:25   ` [U-Boot] [U-Boot, v2, " Tom Rini
2017-04-07 15:00 ` [U-Boot] [PATCH v2 07/10] Kconfig: Adds SYS_TEXT_BASE config option for Keystone2 Andrew F. Davis
2017-04-08  3:58   ` Lokesh Vutla
2017-04-10 18:25   ` [U-Boot] [U-Boot, v2, " Tom Rini
2017-04-07 15:00 ` [U-Boot] [PATCH v2 08/10] defconfig: k2e_hs_evm: Add k2e_hs_evm_defconfig Andrew F. Davis
2017-04-08  3:59   ` Lokesh Vutla
2017-04-10 18:25   ` [U-Boot] [U-Boot, v2, " Tom Rini
2017-04-07 15:00 ` [U-Boot] [PATCH v2 09/10] defconfig: k2hk_hs_evm: Add k2hk_hs_evm_defconfig Andrew F. Davis
2017-04-10 18:25   ` [U-Boot] [U-Boot, v2, " Tom Rini
2017-04-07 15:00 ` [U-Boot] [PATCH v2 10/10] defconfig: k2g_hs_evm: Add k2g_hs_evm_defconfig Andrew F. Davis
2017-04-10 18:25   ` [U-Boot] [U-Boot, v2, " Tom Rini

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170407150011.5459-3-afd@ti.com \
    --to=afd@ti.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.