From 1f992af72f5cbb5a59ab5e7d43a2d0e54341dc53 Mon Sep 17 00:00:00 2001 From: Siva Durga Prasad Paladugu Date: Mon, 11 Jan 2016 18:28:20 +0530 Subject: [PATCH] common: zynq_rsa: Add support to load PL bitstream using zynqrsa Added support to load authenticated and encrypted PL bitstream using zynqrsa command if partition owner is specified as uboot while preparing boot image. Signed-off-by: Siva Durga Prasad Paladugu Signed-off-by: Michal Simek --- common/cmd_zynq_rsa.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/common/cmd_zynq_rsa.c b/common/cmd_zynq_rsa.c index b8e148e975b..280aa9b26de 100644 --- a/common/cmd_zynq_rsa.c +++ b/common/cmd_zynq_rsa.c @@ -410,6 +410,7 @@ static int do_zynq_verify_image(cmd_tbl_t *cmdtp, int flag, int argc, u32 part_img_len; u32 part_attr; u32 part_load_addr; + u32 part_dst_addr; u32 part_chksum_offset; u32 part_start_addr; u32 part_total_size; @@ -451,8 +452,7 @@ static int do_zynq_verify_image(cmd_tbl_t *cmdtp, int flag, int argc, (partitioncount > ZYNQ_MAX_PARTITION_NUMBER)) return -1; - /* Skip the first two partitions FSBL and u-boot */ - partition_num = 2; + partition_num = 0; while (partition_num < partitioncount) { if (((part_hdr[partition_num].partitionattr & @@ -474,11 +474,6 @@ static int do_zynq_verify_image(cmd_tbl_t *cmdtp, int flag, int argc, part_start_addr = hdr_ptr->partitionstart; part_total_size = hdr_ptr->partitionwordlen; - if (part_attr & ZYNQ_ATTRIBUTE_PL_IMAGE_MASK) { - printf("Bitstream\r\n"); - return -1; - } - if (part_data_len != part_img_len) { debug("Encrypted\r\n"); encrypt_part_flag = 1; @@ -516,7 +511,11 @@ static int do_zynq_verify_image(cmd_tbl_t *cmdtp, int flag, int argc, return -1; } - memcpy((u32 *)part_load_addr, (u32 *)srcaddr, size); + if (part_attr & ZYNQ_ATTRIBUTE_PL_IMAGE_MASK) + part_load_addr = srcaddr; + else + memcpy((u32 *)part_load_addr, (u32 *)srcaddr, + size); if (!signed_part_flag && !part_chksum_flag) { printf("Partition not signed & no chksum\n"); @@ -551,9 +550,15 @@ static int do_zynq_verify_image(cmd_tbl_t *cmdtp, int flag, int argc, if (encrypt_part_flag) { debug("DECRYPTION \r\n"); + + part_dst_addr = part_load_addr; + + if (part_attr & ZYNQ_ATTRIBUTE_PL_IMAGE_MASK) + part_dst_addr = 0xFFFFFFFF; + status = zynq_decrypt_load(part_load_addr, part_img_len, - part_load_addr, + part_dst_addr, part_data_len, BIT_NONE); if (status != 0) { -- 2.47.3