]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
common: zynq_rsa: Add support to load PL bitstream using zynqrsa
authorSiva Durga Prasad Paladugu <siva.durga.paladugu@xilinx.com>
Mon, 11 Jan 2016 12:58:20 +0000 (18:28 +0530)
committerMichal Simek <michal.simek@xilinx.com>
Wed, 27 Jan 2016 10:50:37 +0000 (11:50 +0100)
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 <sivadur@xilinx.com>
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
common/cmd_zynq_rsa.c

index b8e148e975b3bf507f17343f3b4de4b721748cb4..280aa9b26de1976ef6a63baf43d48698b2bedebf 100644 (file)
@@ -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) {