Part Number: TMS320C6678
Hi,
Thanks for your attention and here is my problem:
I have a custom board, with FPGA to communicate with DSP(C6678) by SRIO X 2 (5.0GHz), and during my system init, the FPGA will reset the DSP power supply(1.0v and 1.1v) to reset DSP.
Then DSP will load Firmware from EEPROM. In my DSP firmware, the SRIO Interface will be inited by following code which is the sample code of TI.
After SRIO Link up, my PC SW will verify DSP DDR3 by read/write through SRIO.
But I have around 1.5% possibility to get SRIO re-init after SRIO link up during DDR3 Test and get DDR3 Test fail.(And FInally detected status0x00020002) Since there is no function at FPGA to reset SRIO only, It's suspected that the DSP reset SRIO during my DDR3 test. May I know any condition/DSP function will trig the SRIO Link reset?
Besides, I also found a problem that, in the DSP firmware after the SRIO link(status change from 0x1 to 0x2), there are function to init SRIO Interrupt as you can see in the source code attaced.
And I also tried to wait for 50ms after detect SRIO Link then go to test DDR3 at High level, but the problem also can detect.
Appendix: SRIO Link init source code for DSP.
/***************************SRIO Link Init****************************/
// link up SRIO at last
serdes_cfg.commonSetup.inputRefClock_MHz = 250;
//clear configuration structrue to make sure unused field is 0
memset(&srio_cfg, 0, sizeof(srio_cfg));
srio_cfg.blockEn.bBLK1_LSU_EN = 1;
srio_cfg.blockEn.bBLK2_MAU_EN = 1;
srio_cfg.blockEn.bBLK3_TXU_EN = 0;
srio_cfg.blockEn.bBLK4_RXU_EN = 0;
srio_cfg.loopback_mode = SRIO_NO_LOOPBACK;
srio_cfg.device_ID_routing_config = dsp0_device_ID_routing_config;
srio_cfg.uiNumDeviceId = sizeof(dsp0_device_ID_routing_config)
/ sizeof(SRIO_Device_ID_Routing_Config);
serdes_cfg.commonSetup.loopBandwidth = SERDES_PLL_LOOP_BAND_MID;
srio_cfg.serdes_cfg = &serdes_cfg;
serdesLinkSetup.loopBack = SERDES_LOOPBACK_DISABLE;
serdesLinkSetup.txOutputSwing = 15; //0~15 represents between 100 and 850 mVdfpp
serdesLinkSetup.testPattern = SERDES_TEST_DISABLED;
serdesLinkSetup.rxAlign = SERDES_RX_COMMA_ALIGNMENT_ENABLE;
serdesLinkSetup.rxInvertPolarity = SERDES_RX_NORMAL_POLARITY;
serdesLinkSetup.rxTermination = SERDES_RX_TERM_COMMON_POINT_AC_COUPLE;
serdesLinkSetup.rxEqualizerConfig = SERDES_RX_EQ_ADAPTIVE;
serdesLinkSetup.rxCDR = SERDES_RX_CDR_1;
serdesLinkSetup.txInvertPolarity = SERDES_TX_NORMAL_POLARITY;
priority_permission.supervisorHostID_16b = DSP1_SRIO_BASE_ID;
priority_permission.supervisorHostID_8b = DSP1_SRIO_BASE_ID & 0xFF;
priority_permission.uiVbusPriority = 0;
srio_cfg.priority_permission = &priority_permission;
lsu_cfg.lsuGrp0ShadowRegsSetup = SRIO_LSU_SHADOW_REGS_SETUP_4_4_4_4;
lsu_cfg.lsuGrp1ShadowRegsSetup = SRIO_LSU_SHADOW_REGS_SETUP_4_4_4_4;
lsu_cfg.lsuIntSetup[0] = LSU_INT_DRIVE_BY_SRCID;
lsu_cfg.lsuIntSetup[1] = LSU_INT_DRIVE_BY_SRCID;
lsu_cfg.lsuIntSetup[2] = LSU_INT_DRIVE_BY_SRCID;
lsu_cfg.lsuIntSetup[3] = LSU_INT_DRIVE_BY_SRCID;
lsu_cfg.lsuIntSetup[4] = LSU_INT_DRIVE_BY_SRCID;
lsu_cfg.lsuIntSetup[5] = LSU_INT_DRIVE_BY_SRCID;
lsu_cfg.lsuIntSetup[6] = LSU_INT_DRIVE_BY_SRCID;
lsu_cfg.lsuIntSetup[7] = LSU_INT_DRIVE_BY_SRCID;
srio_cfg.lsu_cfg = &lsu_cfg;
NuCard2_SRIO_Init();
SRIO_Interrupts_Init();
/***************************SRIO Link Init end****************************/
Thanks.