From: Siva Durga Prasad Paladugu Date: Fri, 17 Feb 2017 10:46:02 +0000 (+0530) Subject: xilinx: zynqmp: Add support for loading encrypted images X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=924a20ee86faa44dc55a770d2de048beca6fad72;p=thirdparty%2Fu-boot.git xilinx: zynqmp: Add support for loading encrypted images This patch adds support for loading encrypted images by decrypting and load back to memory. Signed-off-by: Siva Durga Prasad Paladugu Signed-off-by: Michal Simek --- diff --git a/board/xilinx/zynqmp/zynqmp.c b/board/xilinx/zynqmp/zynqmp.c index 3da02c933cd..d22950e0d14 100644 --- a/board/xilinx/zynqmp/zynqmp.c +++ b/board/xilinx/zynqmp/zynqmp.c @@ -6,6 +6,7 @@ */ #include +#include #include #include #include @@ -310,6 +311,42 @@ int board_late_init(void) return 0; } +#if defined(CONFIG_AES) + +#define KEY_LEN 64 +#define IV_LEN 24 +#define ZYNQMP_SIP_SVC_PM_SECURE_LOAD 0xC2000019 +#define ZYNQMP_PM_SECURE_AES 0x1 + +int aes_decrypt_hw(u8 *key_ptr, u8 *src_ptr, u8 *dst_ptr, u32 len) +{ + int ret; + u32 src_lo, src_hi, wlen; + u32 ret_payload[PAYLOAD_ARG_CNT]; + + if ((ulong)src_ptr != ALIGN((ulong)src_ptr, + CONFIG_SYS_CACHELINE_SIZE)) { + debug("FAIL: Source address not aligned:%p\n", src_ptr); + return -EINVAL; + } + + src_lo = (u32)(ulong)src_ptr; + src_hi = upper_32_bits((ulong)src_ptr); + wlen = DIV_ROUND_UP(len, 4); + + memcpy(src_ptr + len, key_ptr, KEY_LEN + IV_LEN); + len = ROUND(len + KEY_LEN + IV_LEN, CONFIG_SYS_CACHELINE_SIZE); + flush_dcache_range((ulong)src_ptr, (ulong)(src_ptr + len)); + + ret = invoke_smc(ZYNQMP_SIP_SVC_PM_SECURE_LOAD, src_lo, src_hi, wlen, + ZYNQMP_PM_SECURE_AES, ret_payload); + if (ret) + debug("aes_decrypt_hw fail\n"); + + return ret; +} +#endif + int checkboard(void) { puts("Board: Xilinx ZynqMP\n");