cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
ktmin40
Visitor
Visitor
161 Views
Registered: ‎05-28-2018

Zynq MPSOC Fpgautil download speed

- Development Environment

ZynqMpsoc Part num : XCZU3CG-L1SBVA484I

Petalinux 2020.2

- Q

I use fpgautil to download fpga bit file to PL.

However, the download speed is significantly slow

It takes about 200ms in zcu104 board , but 4400ms as below in out custom board.

-------------------------------------------
root@elsa-es-bsp:/userdata# fpgautil -b elsa_es_201120_last_line_repeat_issue.bit
[ 1337.451422] fpga_manager fpga0: writing elsa_es_201120_last_line_repeat_issue.bit to Xilinx ZynqMP FPGA Manager
Time taken to load BIN is 4447.000000 Milli Seconds
BIN FILE loaded through FPGA manager successfully

-------------------------------------------

In Linux, when PM_FPGA_LOAD Command is sent as IPI message , it is known that PM Core used CSU_DMA to transmit to PCAP

Debugging in the PM firmware as shown below , it used CSU DMA, but the DMA transter rate to PCAP is to slow.

static void PmFpgaLoad(const PmMaster *const master,
			const u32 AddrHigh, const u32 AddrLow,
			const u32 KeyAddr, const u32 Flags)
{
	u32 Status;
	XFpga XFpgaInstance = {0U};
	UINTPTR BitStreamAddr = ((u64)AddrHigh << 32)|AddrLow;

#if defined (ENABLE_WDT) &&	\
	(XPFW_CFG_PMU_FPGA_WDT_TIMEOUT > XPFW_CFG_PMU_DEFAULT_WDT_TIMEOUT)
	PmNotifyR5AndModifyWdtTimeout(XPFW_CFG_PMU_FPGA_WDT_TIMEOUT,
			PM_NOTIFY_STL_NO_OP_ENTER);
#endif

	Status = XFpga_Initialize(&XFpgaInstance);
	if (XST_SUCCESS != (s32)Status) {
		goto done;
	}
	XPfw_Printf(DEBUG_PRINT_ALWAYS,"%s: Start[KeyAddr %d, Flags %d ]\r\n",__func__,KeyAddr,Flags); 

    Status = XFpga_PL_BitStream_Load(&XFpgaInstance, BitStreamAddr,
				     KeyAddr, Flags);

    XPfw_Printf(DEBUG_PRINT_ALWAYS,"%s: End\r\n",__func__);

    if ((XST_SUCCESS == (s32)Status) && ((Flags & XFPGA_AUTHENTICATION_OCM_EN) ==
		XFPGA_AUTHENTICATION_OCM_EN)) {
	FSBL_Store_Restore_Info.IsOCM_Used = TRUE;
    }
#if defined (ENABLE_WDT) &&	\
	(XPFW_CFG_PMU_FPGA_WDT_TIMEOUT > XPFW_CFG_PMU_DEFAULT_WDT_TIMEOUT)
	PmNotifyR5AndModifyWdtTimeout(XPFW_CFG_PMU_DEFAULT_WDT_TIMEOUT,
				PM_NOTIFY_STL_NO_OP_EXIT);
#endif
  done:
       IPI_RESPONSE1(master->ipiMask, (u32)Status);
}
//console output..
PmFpgaLoad: Start[KeyAddr 5568779, Flags 0 ]
// about it takes 4400ms PmFpgaLoad: End

- I'm curious about hot to speed up the transmission speed.

 

 

 

 

 

 

 

0 Kudos
Reply
0 Replies