Hi,
According to the TRM, the ACSPCIE module can be used in TX mode. The ljcb_clk pins are then used as PCIe reference clock output (section 26.4.4.4.3). the ACSPCIe TX mode can be selected in the register CTRL_CORE_SMA_SW_6 => PCIE_TX_RX_CONTROL. But the ljcb_clk pins is still no signal .
I followed these thread as below:
But there is no the end.
Then I check the Pcie configuration, and the bare metal test code for pcie configuarion as below(following the TI RTOS):
typedef unsigned int uint32_t; #define HW_WR_REG32(addr, data) *(unsigned int*)(addr) =(unsigned int)(data) #define HW_RD_REG32(x) (*((volatile uint32_t *)(x))) #define SOC_OCP2SCP3_BASE (0x4a090000U) #define SOC_CKGEN_CM_CORE_BASE (0x4a008100U) #define CM_CLKSEL_DPLL_PCIE_REF (0x4A00820CU) #define CM_CLKSEL_DPLL_PCIE_REF_DPLL_DIV (0xFF) #define CM_CLKSEL_DPLL_PCIE_REF_DPLL_MULT (0xFFF<<8) #define CM_CLKSEL_DPLL_PCIE_REF_DPLL_SD_DIV (0xFF<<24) #define CM_DIV_M2_DPLL_PCIE_REF (0x4A008210) #define CM_DIV_M2_DPLL_PCIE_REF_DIVHS (0x7F) #define CM_CLKMODE_DPLL_PCIE_REF (0x4A008200) #define CM_CLKMODE_DPLL_PCIE_REF_DPLL_EN_DPLL_LOCK_MODE (0x00000007U) #define CM_IDLEST_DPLL_PCIE_REF (0x4A008204) #define CM_IDLEST_DPLL_PCIE_REF_ST_DPLL_CLK_MASK (0x00000001U) #define CM_IDLEST_DPLL_PCIE_REF_ST_DPLL_CLK_SHIFT (0U) #define CM_IDLEST_DPLL_PCIE_REF_ST_DPLL_CLK_DPLL_LOCKED (0x00000001U) #define CTRL_CORE_SMA_SW_6 (0x4A003C14) #define CM_CLKMODE_APLL_PCIE (0x4A00821C) #define CM_IDLEST_APLL_PCIE (0x4A008220) #define CM_IDLEST_APLL_PCIE_ST_APLL_CLK_MASK (0x00000001U) #define CM_IDLEST_APLL_PCIE_ST_APLL_CLK_SHIFT (0U) #define CM_IDLEST_APLL_PCIE_ST_APLL_CLK_APLL_LOCKED (0x00000001U) void PlatformPCIESS1PllConfig(void) { 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(CM_CLKSEL_DPLL_PCIE_REF); //DPLL_DIV regVal &= ~CM_CLKSEL_DPLL_PCIE_REF_DPLL_DIV; regVal |= 0x09U; //DPLL_MULT regVal &= ~CM_CLKSEL_DPLL_PCIE_REF_DPLL_MULT; regVal |= (0x2EEU<<8); HW_WR_REG32(CM_CLKSEL_DPLL_PCIE_REF, regVal); /*SigmaDelta SD DIV programming */ regVal = HW_RD_REG32(CM_CLKSEL_DPLL_PCIE_REF); //SD_DIV regVal &= ~CM_CLKSEL_DPLL_PCIE_REF_DPLL_SD_DIV; regVal |= 0x06U; HW_WR_REG32(CM_CLKSEL_DPLL_PCIE_REF, regVal); /*PCIe DPLL - M2 programming*/ regVal = HW_RD_REG32(CM_DIV_M2_DPLL_PCIE_REF); regVal &= ~CM_DIV_M2_DPLL_PCIE_REF_DIVHS; regVal |= 0x0FU; HW_WR_REG32(CM_DIV_M2_DPLL_PCIE_REF, regVal); /*DPLL Enable*/ regVal = HW_RD_REG32(CM_CLKMODE_DPLL_PCIE_REF); regVal &= ~3; regVal |= CM_CLKMODE_DPLL_PCIE_REF_DPLL_EN_DPLL_LOCK_MODE; HW_WR_REG32(CM_CLKMODE_DPLL_PCIE_REF, regVal); /* Check for DPLL lock status */ while (((HW_RD_REG32(CM_IDLEST_DPLL_PCIE_REF) & CM_IDLEST_DPLL_PCIE_REF_ST_DPLL_CLK_MASK) << CM_IDLEST_DPLL_PCIE_REF_ST_DPLL_CLK_SHIFT) != CM_IDLEST_DPLL_PCIE_REF_ST_DPLL_CLK_DPLL_LOCKED) { ; } /*PCIe Tx and Rx Control of ACSPCIe*/ regVal = HW_RD_REG32(CTRL_CORE_SMA_SW_6); regVal &= ~(3<<16); regVal |= (0x01<<16); // TX mode. HW_WR_REG32(CTRL_CORE_SMA_SW_6, regVal); /*Locking APLL to 2.5GHz with 100MHz input*/ regVal = HW_RD_REG32(CM_CLKMODE_APLL_PCIE); regVal &= ~(1<<8); regVal |= (1<<8); regVal &= ~(1<<8); HW_WR_REG32(CM_CLKMODE_APLL_PCIE, regVal); regVal = HW_RD_REG32(CM_CLKMODE_APLL_PCIE); regVal &= ~3; regVal |= 1; HW_WR_REG32(CM_CLKMODE_APLL_PCIE, regVal); /*Wait for APLL lock*/ while (((HW_RD_REG32(CM_IDLEST_APLL_PCIE) & CM_IDLEST_APLL_PCIE_ST_APLL_CLK_MASK) << CM_IDLEST_APLL_PCIE_ST_APLL_CLK_SHIFT) != CM_IDLEST_APLL_PCIE_ST_APLL_CLK_APLL_LOCKED) { ; } } #define CM_L3INIT_OCP2SCP1_CLKCTRL (0x4A0093E0) #define CM_L3INIT_OCP2SCP1_CLKCTRL_MODULEMODE_AUTO (0x00000001U) #define CM_L3INIT_OCP2SCP3_CLKCTRL (0x4A0093E8) #define CM_L3INIT_OCP2SCP3_CLKCTRL_MODULEMODE_AUTO (0x00000001U) #define CM_PCIE_CLKSTCTRL (0x4A0093A0) #define CM_PCIE_CLKSTCTRL_CLKTRCTRL_SW_WKUP (0x00000002U) #define CM_PCIE_PCIESS1_CLKCTRL (0x4A0093B0) #define CM_PCIE_PCIESS1_CLKCTRL_MODULEMODE_ENABLED (0x00000002U) #define CM_PCIE_PCIESS1_CLKCTRL_IDLEST_MASK (0x00030000U) #define CM_PCIE_PCIESS1_CLKCTRL_IDLEST_FUNC (0x00000000U) #define OPTFCLKEN_PCIEPHY_CLK_DIV_EN (1<<10) #define OPTFCLKEN_PCIEPHY_CLK_EN (1<<9) #define OPTFCLKEN_32KHZ_EN (1<<8) void PlatformPCIESS1ClockEnable(void) { uint32_t regVal; /*OCP2SCP1 enables accessing the PCIe PHY serial configuration*/ regVal = HW_RD_REG32(CM_L3INIT_OCP2SCP1_CLKCTRL); regVal |= CM_L3INIT_OCP2SCP1_CLKCTRL_MODULEMODE_AUTO; HW_WR_REG32(CM_L3INIT_OCP2SCP1_CLKCTRL, regVal); /*OCP2SCP3 enables accessing the PCIe PHY serial configuration*/ regVal = HW_RD_REG32(CM_L3INIT_OCP2SCP3_CLKCTRL); regVal |= CM_L3INIT_OCP2SCP3_CLKCTRL_MODULEMODE_AUTO; HW_WR_REG32(CM_L3INIT_OCP2SCP3_CLKCTRL, regVal); /* PCIeSS CLKSTCTRL SW WakeUp */ regVal = HW_RD_REG32(CM_PCIE_CLKSTCTRL); regVal |= CM_PCIE_CLKSTCTRL_CLKTRCTRL_SW_WKUP; HW_WR_REG32(CM_PCIE_CLKSTCTRL, regVal); /*L3 Init PCIeSS1 CLKCTRL SW Enable*/ regVal = HW_RD_REG32(CM_PCIE_PCIESS1_CLKCTRL); regVal |= CM_PCIE_PCIESS1_CLKCTRL_MODULEMODE_ENABLED; HW_WR_REG32(CM_PCIE_PCIESS1_CLKCTRL, regVal); while ((HW_RD_REG32(CM_PCIE_PCIESS1_CLKCTRL) & CM_PCIE_PCIESS1_CLKCTRL_IDLEST_MASK) != CM_PCIE_PCIESS1_CLKCTRL_IDLEST_FUNC) { ; } /*Enable PCIe PHY optional clk*/ regVal = HW_RD_REG32(CM_PCIE_PCIESS1_CLKCTRL); regVal |= OPTFCLKEN_PCIEPHY_CLK_DIV_EN; regVal |= OPTFCLKEN_PCIEPHY_CLK_EN; regVal |= OPTFCLKEN_32KHZ_EN; HW_WR_REG32(CM_PCIE_PCIESS1_CLKCTRL, regVal); }
and it's no output signal. Who can tell me where I am wrong?
Thank you very much!
Best Regards
Qing