Part Number: TMDSEVM572X
Tool/software: Code Composer Studio
Hello!
I have a problem.
Some times ago I use code with no problems, but now this code is not working.
I use pcie_sample.c to tune pcie controller.
The problem appear when I try to tune DPLL.
I call pcieSerdesCfg(void) from pcie_sample.c which call PlatformPCIESS1PllConfig(void) from pcie_sample_board.c.
Function PlatformPCIESS1PllConfig(void) configure PLL.
Function sticks when it checks DPLL lock status.
It read bit #0 in CM_IDLEST_DPLL_PCIE_REF register (shift from base:0x0000 0104, address:0x4A00 8204).
If DPLL is locked this bit must be 0x1, but its value 0x0 (In bypass mode or in stop mode).
Bits 1:3 in this register is 0x0 (As I understand, this told me that DPLL is in transient state).
Bit 4 in this register is 0x1 (DPLL has been init).
Before I check DPLL lock state I exec this code:
uint32_t regVal;
/*OCP2SCP_SYSCONFIG[1] Soft Reset*/
regVal = HW_RD_REG32(SOC_OCP2SCP3_BASE + 0x10U) & 0xFFFFFFFDU;
regVal |= 0x02U;
HW_WR_REG32(SOC_OCP2SCP3_BASE + 0x10U, regVal);
/*OCP2SCP_SYSSTATUS[0] Reset Done*/
while ((HW_RD_REG32(SOC_OCP2SCP3_BASE + 0x14U) & 0x01U) != 0x01U)
{
;
}
/*OCP2SCP_TIMING[9:7] Division Ratio = 1*/
regVal = HW_RD_REG32(SOC_OCP2SCP3_BASE + 0x18U) & 0xFFFFFC7FU;
regVal |= (uint32_t) 0x8U << 4U;
HW_WR_REG32(SOC_OCP2SCP3_BASE + 0x18U, regVal);
/*OCP2SCP_TIMING[3:0] (SYNC2) = 0xF*/
regVal = HW_RD_REG32(SOC_OCP2SCP3_BASE + 0x18U) & 0xFFFFFFF0U;
regVal |= 0xFU;
HW_WR_REG32(SOC_OCP2SCP3_BASE + 0x18U, regVal);
/*PCIe DPLL - M&N programming; CLKSEL*/
regVal = HW_RD_REG32(SOC_CKGEN_CM_CORE_BASE + CM_CLKSEL_DPLL_PCIE_REF);
HW_SET_FIELD(regVal, CM_CLKSEL_DPLL_PCIE_REF_DPLL_DIV, 0x09U);
HW_SET_FIELD(regVal, CM_CLKSEL_DPLL_PCIE_REF_DPLL_MULT, 0x2EEU);
HW_WR_REG32(SOC_CKGEN_CM_CORE_BASE + CM_CLKSEL_DPLL_PCIE_REF, regVal);
/*SigmaDelta SD DIV programming */
HW_WR_FIELD32(SOC_CKGEN_CM_CORE_BASE + CM_CLKSEL_DPLL_PCIE_REF,
CM_CLKSEL_DPLL_PCIE_REF_DPLL_SD_DIV, 0x06U);
/*PCIe DPLL - M2 programming*/
HW_WR_FIELD32(SOC_CKGEN_CM_CORE_BASE + CM_DIV_M2_DPLL_PCIE_REF,
CM_DIV_M2_DPLL_PCIE_REF_DIVHS, 0x0FU);
/*DPLL Enable*/
HW_WR_FIELD32(SOC_CKGEN_CM_CORE_BASE + CM_CLKMODE_DPLL_PCIE_REF,
CM_CLKMODE_DPLL_PCIE_REF_DPLL_EN,
CM_CLKMODE_DPLL_PCIE_REF_DPLL_EN_DPLL_LOCK_MODE);
Give me advice, please. Why DPLL is not locked. What I must do to get locked DPLL.