/** * * Run a self-test on the Device Configuration Interface. This test does a * control register write and reads back the same value. * * @param InstancePtr is a pointer to the XDcfg instance. * * @return * - XST_SUCCESS if self-test was successful. * - XST_FAILURE if fails. * * @note None. * ******************************************************************************/ int XDcfg_SelfTest(XDcfg *InstancePtr) { u32 OldCfgReg; u32 CfgReg; int Status = XST_SUCCESS; /* * Assert to ensure the inputs are valid and the instance has been * initialized. */ Xil_AssertNonvoid(InstancePtr != NULL); Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); OldCfgReg = XDcfg_GetControlRegister(InstancePtr); XDcfg_SetControlRegister(InstancePtr, XDCFG_CTRL_NIDEN_MASK); CfgReg = XDcfg_GetControlRegister(InstancePtr); if ((CfgReg & XDCFG_CTRL_NIDEN_MASK) != XDCFG_CTRL_NIDEN_MASK) { Status = XST_FAILURE; } /* * Restore the original values of the register */ XDcfg_SetControlRegister(InstancePtr, OldCfgReg); return Status; }
/** * * This function programs the Fabric for use. * * @param None * * @return None * - XST_SUCCESS if the Fabric initialization is successful * - XST_FAILURE if the Fabric initialization fails * @note None * ****************************************************************************/ void FabricInit(void) { u32 PcapReg; u32 PcapCtrlRegVal; u32 StatusReg; /* * Set Level Shifters DT618760 - PS to PL enabling */ Xil_Out32(PS_LVL_SHFTR_EN, LVL_PS_PL); fsbl_printf(DEBUG_INFO,"Level Shifter Value = 0x%x \r\n", Xil_In32(PS_LVL_SHFTR_EN)); /* * Get DEVCFG controller settings */ PcapReg = XDcfg_ReadReg(DcfgInstPtr->Config.BaseAddr, XDCFG_CTRL_OFFSET); /* * Setting PCFG_PROG_B signal to high */ XDcfg_WriteReg(DcfgInstPtr->Config.BaseAddr, XDCFG_CTRL_OFFSET, (PcapReg | XDCFG_CTRL_PCFG_PROG_B_MASK)); /* * Check for AES source key */ PcapCtrlRegVal = XDcfg_GetControlRegister(DcfgInstPtr); if (PcapCtrlRegVal & XDCFG_CTRL_PCFG_AES_FUSE_MASK) { /* * 5msec delay */ usleep(5000); } /* * Setting PCFG_PROG_B signal to low */ XDcfg_WriteReg(DcfgInstPtr->Config.BaseAddr, XDCFG_CTRL_OFFSET, (PcapReg & ~XDCFG_CTRL_PCFG_PROG_B_MASK)); /* * Check for AES source key */ if (PcapCtrlRegVal & XDCFG_CTRL_PCFG_AES_FUSE_MASK) { /* * 5msec delay */ usleep(5000); } /* * Polling the PCAP_INIT status for Reset */ while(XDcfg_GetStatusRegister(DcfgInstPtr) & XDCFG_STATUS_PCFG_INIT_MASK); /* * Setting PCFG_PROG_B signal to high */ XDcfg_WriteReg(DcfgInstPtr->Config.BaseAddr, XDCFG_CTRL_OFFSET, (PcapReg | XDCFG_CTRL_PCFG_PROG_B_MASK)); /* * Polling the PCAP_INIT status for Set */ while(!(XDcfg_GetStatusRegister(DcfgInstPtr) & XDCFG_STATUS_PCFG_INIT_MASK)); /* * Get Device configuration status */ StatusReg = XDcfg_GetStatusRegister(DcfgInstPtr); fsbl_printf(DEBUG_INFO,"Devcfg Status register = 0x%x \r\n",StatusReg); fsbl_printf(DEBUG_INFO,"PCAP:Fabric is Initialized done\r\n"); }