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;
(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 &
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;
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");
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) {