]> git.sur5r.net Git - u-boot/blobdiff - drivers/fpga/zynqpl.c
mtd: nand: mxs_nand: use structure for BCH geometry
[u-boot] / drivers / fpga / zynqpl.c
index 68fe0f3b03afb99085fada927806cbe7afca6407..fd37d18c7f474944348b4f9c8c484f7d386ba449 100644 (file)
@@ -1,13 +1,13 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
  * (C) Copyright 2012-2013, Xilinx, Michal Simek
  *
  * (C) Copyright 2012
  * Joe Hershberger <joe.hershberger@ni.com>
- *
- * SPDX-License-Identifier:    GPL-2.0+
  */
 
 #include <common.h>
+#include <console.h>
 #include <asm/io.h>
 #include <fs.h>
 #include <zynqpl.h>
@@ -16,6 +16,7 @@
 #include <asm/arch/sys_proto.h>
 
 #define DEVCFG_CTRL_PCFG_PROG_B                0x40000000
+#define DEVCFG_CTRL_PCFG_AES_EFUSE_MASK        0x00001000
 #define DEVCFG_ISR_FATAL_ERROR_MASK    0x00740040
 #define DEVCFG_ISR_ERROR_FLAGS_MASK    0x00340840
 #define DEVCFG_ISR_RX_FIFO_OV          0x00040000
 #define CONFIG_SYS_FPGA_PROG_TIME      (CONFIG_SYS_HZ * 4) /* 4 s */
 #endif
 
-static int zynq_info(xilinx_desc *desc)
-{
-       return FPGA_SUCCESS;
-}
-
 #define DUMMY_WORD     0xffffffff
 
 /* Xilinx binary format header */
@@ -209,9 +205,24 @@ static int zynq_dma_xfer_init(bitstream_type bstype)
                /* Setting PCFG_PROG_B signal to high */
                control = readl(&devcfg_base->ctrl);
                writel(control | DEVCFG_CTRL_PCFG_PROG_B, &devcfg_base->ctrl);
+
+               /*
+                * Delay is required if AES efuse is selected as
+                * key source.
+                */
+               if (control & DEVCFG_CTRL_PCFG_AES_EFUSE_MASK)
+                       mdelay(5);
+
                /* Setting PCFG_PROG_B signal to low */
                writel(control & ~DEVCFG_CTRL_PCFG_PROG_B, &devcfg_base->ctrl);
 
+               /*
+                * Delay is required if AES efuse is selected as
+                * key source.
+                */
+               if (control & DEVCFG_CTRL_PCFG_AES_EFUSE_MASK)
+                       mdelay(5);
+
                /* Polling the PCAP_INIT status for Reset */
                ts = get_timer(0);
                while (readl(&devcfg_base->status) & DEVCFG_STATUS_PCFG_INIT) {
@@ -406,8 +417,8 @@ static int zynq_loadfs(xilinx_desc *desc, const void *buf, size_t bsize,
        unsigned long ts; /* Timestamp */
        u32 isr_status, swap;
        u32 partialbit = 0;
-       u32 blocksize;
-       u32 pos = 0;
+       loff_t blocksize, actread;
+       loff_t pos = 0;
        int fstype;
        char *interface, *dev_part, *filename;
 
@@ -420,7 +431,7 @@ static int zynq_loadfs(xilinx_desc *desc, const void *buf, size_t bsize,
        if (fs_set_blk_dev(interface, dev_part, fstype))
                return FPGA_FAIL;
 
-       if (fs_read(filename, (u32) buf, pos, blocksize) < 0)
+       if (fs_read(filename, (u32) buf, pos, blocksize, &actread) < 0)
                return FPGA_FAIL;
 
        if (zynq_validate_bitstream(desc, buf, bsize, blocksize, &swap,
@@ -443,10 +454,10 @@ static int zynq_loadfs(xilinx_desc *desc, const void *buf, size_t bsize,
                        return FPGA_FAIL;
 
                if (bsize > blocksize) {
-                       if (fs_read(filename, (u32) buf, pos, blocksize) < 0)
+                       if (fs_read(filename, (u32) buf, pos, blocksize, &actread) < 0)
                                return FPGA_FAIL;
                } else {
-                       if (fs_read(filename, (u32) buf, pos, bsize) < 0)
+                       if (fs_read(filename, (u32) buf, pos, bsize, &actread) < 0)
                                return FPGA_FAIL;
                }
        } while (bsize > blocksize);
@@ -480,16 +491,9 @@ static int zynq_loadfs(xilinx_desc *desc, const void *buf, size_t bsize,
 }
 #endif
 
-static int zynq_dump(xilinx_desc *desc, const void *buf, size_t bsize)
-{
-       return FPGA_FAIL;
-}
-
 struct xilinx_fpga_op zynq_op = {
        .load = zynq_load,
 #if defined(CONFIG_CMD_FPGA_LOADFS)
        .loadfs = zynq_loadfs,
 #endif
-       .dump = zynq_dump,
-       .info = zynq_info,
 };