This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

AM5728 Pcie clock output to ljcb_clkp and ljcb_clkn

Expert 1385 points

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