/* Clear loopback bit */
clrbits_le32(&devcfg_base->mctrl, DEVCFG_MCTRL_PCAP_LPBK);
- if (bstype != BIT_PARTIAL) {
+ if (bstype != BIT_PARTIAL && bstype != BIT_NONE) {
zynq_slcr_devcfg_disable();
/* Setting PCFG_PROG_B signal to high */
* Load the encrypted image from src addr and decrypt the image and
* place it back the decrypted image into dstaddr.
*/
-int zynq_decrypt_load(u32 srcaddr, u32 srclen, u32 dstaddr, u32 dstlen)
+int zynq_decrypt_load(u32 srcaddr, u32 srclen, u32 dstaddr, u32 dstlen,
+ u8 bstype)
{
- u32 isr_status, status;
-
if ((srcaddr < SZ_1M) || (dstaddr < SZ_1M)) {
printf("%s: src and dst addr should be > 1M\n",
__func__);
return FPGA_FAIL;
}
- isr_status = readl(&devcfg_base->int_sts);
-
- /* Clear it all, so if Boot ROM comes back, it can proceed */
- writel(0xFFFFFFFF, &devcfg_base->int_sts);
-
- if (isr_status & DEVCFG_ISR_FATAL_ERROR_MASK) {
- debug("%s: Fatal errors in PCAP 0x%X\n", __func__, isr_status);
-
- /* If RX FIFO overflow, need to flush RX FIFO first */
- if (isr_status & DEVCFG_ISR_RX_FIFO_OV) {
- writel(DEVCFG_MCTRL_RFIFO_FLUSH, &devcfg_base->mctrl);
- writel(0xFFFFFFFF, &devcfg_base->int_sts);
- }
+ if (zynq_dma_xfer_init(bstype)) {
+ printf("%s: zynq_dma_xfer_init FAIL\n", __func__);
return FPGA_FAIL;
}
- status = readl(&devcfg_base->status);
-
- debug("%s: Status = 0x%08X\n", __func__, status);
-
- if (status & DEVCFG_STATUS_DMA_CMD_Q_F) {
- printf("%s: Error: device busy\n", __func__);
- return FPGA_FAIL;
- }
-
- debug("%s: Device ready\n", __func__);
-
- if (!(status & DEVCFG_STATUS_DMA_CMD_Q_E)) {
- if (!(readl(&devcfg_base->int_sts) & DEVCFG_ISR_DMA_DONE)) {
- /* Error state, transfer cannot occur */
- printf("%s: ISR indicates error\n", __func__);
- return FPGA_FAIL;
- } else {
- /* Clear out the status */
- writel(DEVCFG_ISR_DMA_DONE, &devcfg_base->int_sts);
- }
- }
-
- if (status & DEVCFG_STATUS_DMA_DONE_CNT_MASK) {
- /* Clear the count of completed DMA transfers */
- writel(DEVCFG_STATUS_DMA_DONE_CNT_MASK, &devcfg_base->status);
- }
-
- clrbits_le32(&devcfg_base->mctrl, DEVCFG_MCTRL_PCAP_LPBK);
writel((readl(&devcfg_base->ctrl) | DEVCFG_CTRL_PCAP_RATE_EN_MASK),
&devcfg_base->ctrl);
u32 srclen;
u32 dstaddr;
u32 dstlen;
+ u8 imgtype = BIT_NONE;
int status;
if (argc < 5)
if (*argv[4] == 0 || *endp != 0)
return -1;
- status = zynq_decrypt_load(srcaddr, srclen, dstaddr, dstlen);
+ if (dstaddr == 0xFFFFFFFF)
+ imgtype = BIT_FULL;
+
+ status = zynq_decrypt_load(srcaddr, srclen, dstaddr, dstlen, imgtype);
if (status != 0)
return -1;