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.

C6657 PCIe Setup.

4101.sample.gel

Now I boot from NoBoot, because debug PCIe.


Boot and Debug is success. But data read/write can't understand.

I modify C:\ti\mcsdk_2_01_02_06\tools\boot_loader\ibl\src\device\c665x\c665xinit.c .

I want to read/write PCIe base address 0x21800000.

Is my setup sequence not correctry ?

What's sample code is need to read ?

Please help.

void main (void)
{
uint32 i;
uint32 reg;

memset (&iblStatus, 0, sizeof(iblStatus_t));
iblStatus.iblMagic = ibl_MAGIC_VALUE;
iblStatus.iblVersion = ibl_VERSION;
iblStatus.activeDevice = ibl_ACTIVE_DEVICE_I2C;

ibl.iblMagic = 0xCEC11EBC;
ibl.pllConfig[ibl_MAIN_PLL].doEnable = TRUE;
ibl.pllConfig[ibl_MAIN_PLL].prediv = 1;
ibl.pllConfig[ibl_MAIN_PLL].mult = 20;
ibl.pllConfig[ibl_MAIN_PLL].postdiv = 2;
ibl.pllConfig[ibl_MAIN_PLL].pllOutFreqMhz = 1000;
// ibl.pllConfig[ibl_DDR_PLL].doEnable = TRUE;
// ibl.pllConfig[ibl_DDR_PLL].prediv = 3;
// ibl.pllConfig[ibl_DDR_PLL].mult = 40;
// ibl.pllConfig[ibl_DDR_PLL].postdiv = 2;
// ibl.pllConfig[ibl_DDR_PLL].pllOutFreqMhz = 1333;

/* Pll configuration is device specific */
devicePllConfig ();

#define L1PEDCMD 0x01846408
#define L2EDCEN 0x01846030
#define L2EDCMD 0x01846008
#define SMEDCC 0x0BC00010

/* Enable L1P EDC */
*(volatile unsigned int *)(L1PEDCMD) = 0x1; //Set EN(bit0)=1

/* Enable EDC L2EDCEN, set DL2CEN(bit0),PL2CEN(bit1),DL2SEN(bit2),PL2SEN(bit3),SDMAEN(bit4)=1 */
*(volatile unsigned int *)(L2EDCEN) |= 0x1F;

/* Enalble L2 EDC */
*(volatile unsigned int *)(L2EDCMD) = 0x1;

/* Enalbe MSMC EDC */
*(volatile unsigned int *)(SMEDCC) &= 0x7FFFFFFF; //Clear SEN(bit31)=0
*(volatile unsigned int *)(SMEDCC) |= 0x40000000; //Set ECM(bit30)=1

/* undocumented register in data manual
* Bit 0 of this register is supposed to give the status of PCIe PLL lock*/
#define PCIE_STS_REG 0x262015C

/* Workaround for PCIe boot mode support for C6678/C6670 */
/* This is a temporary workaround should be removed once fixed in RBL */

/* PCIe Config register base on C6678/C6670 */
#define PCIE_BASE_ADDR 0x21800000

/* PCIe Application registers */
#define PCIE_APP_CMD_STATUS 0x4
#define PCIE_APP_OB_SIZE 0x30
#define PCIE_APP_MSI0_IRQ_ENABLE_SET 0x0108
#define PCIE_APP_LEGACY_A_IRQ_ENABLE_SET 0x0188
#define PCIE_APP_LEGACY_B_IRQ_ENABLE_SET 0x0198
#define PCIE_APP_LEGACY_C_IRQ_ENABLE_SET 0x01a8
#define PCIE_APP_LEGACY_D_IRQ_ENABLE_SET 0x01b8
#define OB_OFFSET_INDEX0 0x200
#define OB_OFFSET_HI0 0x204
#define OB_OFFSET_INDEX1 0x208
#define OB_OFFSET_HI1 0x20C
#define PCIE_APP_IB_BAR0 0x300
#define PCIE_APP_IB_START0_LO 0x304
#define PCIE_APP_IB_START0_HI 0x308
#define PCIE_APP_IB_OFFSET0 0x30C
#define PCIE_APP_IB_BAR1 0x310
#define PCIE_APP_IB_START1_LO 0x314
#define PCIE_APP_IB_START1_HI 0x318
#define PCIE_APP_IB_OFFSET1 0x31C
#define PCIE_APP_IB_BAR2 0x320
#define PCIE_APP_IB_START2_LO 0x324
#define PCIE_APP_IB_START2_HI 0x328
#define PCIE_APP_IB_OFFSET2 0x32C
#define PCIE_APP_IB_BAR3 0x330
#define PCIE_APP_IB_START3_LO 0x334
#define PCIE_APP_IB_START3_HI 0x338
#define PCIE_APP_IB_OFFSET3 0x33C
#define PCIE_APP_SERDES_CFG0 0x390
#define PCIE_APP_SERDES_CFG1 0x394

/* PCIe Local Configuration registers */
#define PCIE_VENDER_DEVICE_ID 0x1000
#define PCIE_STATUS_CMD 0x1004
#define PCIE_CLASSCODE_REVID 0x1008
#define PCIE_BAR0 0x1010
#define PCIE_BAR1 0x1014
#define PCIE_BAR2 0x1018
#define PCIE_BAR3 0x101c
#define PCIE_BAR4 0x1020
#define PCIE_BAR5 0x1024
#define PCIE_DEVICE_CAP 0x1074
#define PCIE_DEV_STAT_CTRL 0x1078
#define PCIE_LINK_STAT_CTRL 0x1080
#define PCIE_ACCR 0x1118
#define PCIE_DEBUG0 0x1728
#define PCIE_PL_GEN2 0x180C

/* SERDES Configuration registers */
#define PCIE_SERDES_CFG_PLL 0x2620358

#define PCIE_REG_APP_VAL_CMD_STATUS_DBI_CS2 (1 << 5)
#define PCIE_REG_APP_VAL_CMD_STATUS_APP_RETRY_EN (1 << 4)
#define PCIE_REG_APP_VAL_CMD_STATUS_INBOUND_ADDR_XLATE (1 << 2)
#define PCIE_REG_APP_VAL_CMD_STATUS_OUTBOUND_ADDR_XLATE (1 << 1)
#define PCIE_REG_APP_VAL_CMD_STATUS_LINK_TRAIN_ENABLE (1 << 0)
#define PCIE_REG_APP_VAL_CMD_STATUS_ENABLE PCIE_REG_APP_VAL_CMD_STATUS_INBOUND_ADDR_XLATE | \
PCIE_REG_APP_VAL_CMD_STATUS_LINK_TRAIN_ENABLE

/* Power up PCIe */
devicePowerPeriph (TARGET_PWR_PCIE);
for(i=0; i<1000; i++) asm (" NOP");

DEVICE_REG32_W ((PCIE_BASE_ADDR + PCIE_APP_SERDES_CFG0), 0x00062320); /* ss clock */
DEVICE_REG32_W ((PCIE_BASE_ADDR + PCIE_APP_SERDES_CFG1), 0x00022320); /* ss clock */

/* Wait for PCIe PLL lock */
while(!(DEVICE_REG32_R(PCIE_STS_REG) & 1));

DEVICE_REG32_W ((PCIE_BASE_ADDR + PCIE_CLASSCODE_REVID), 0x04800001); /* class 0x04, sub-class 0x80, Prog I/F 0x00, Other multimedia device */
DEVICE_REG32_W ((PCIE_BASE_ADDR + PCIE_LINK_STAT_CTRL), 0x10110080); /* extended sync, slot_clk_cfg = 1 */

DEVICE_REG32_W ((PCIE_BASE_ADDR + PCIE_VENDER_DEVICE_ID), 0xb005104c); /* Vendor and Device ID */
DEVICE_REG32_W ((PCIE_BASE_ADDR + PCIE_DEVICE_CAP), 0x288701); /* L0 = 4, L1 = 3 */

DEVICE_REG32_W ((PCIE_BASE_ADDR + PCIE_APP_OB_SIZE), 0x00000003); /* OB_SIZE = 8M */
DEVICE_REG32_W ((PCIE_BASE_ADDR + PCIE_PL_GEN2), 0x0000000F); /* num_fts = 0xF*/

DEVICE_REG32_W ((PCIE_BASE_ADDR + PCIE_APP_CMD_STATUS), 0x0020); /* Set dbi_cs2 to allow access to the BAR registers */

DEVICE_REG32_W ((PCIE_BASE_ADDR + PCIE_BAR0), 0x00000FFF); /* 4K */

DEVICE_REG32_W ((PCIE_BASE_ADDR + PCIE_APP_CMD_STATUS), 0x0); /* dbi_cs2=0 */

DEVICE_REG32_W ((PCIE_BASE_ADDR + PCIE_STATUS_CMD), 0x00100146); /* ENABLE mem access */
DEVICE_REG32_W ((PCIE_BASE_ADDR + PCIE_DEV_STAT_CTRL), 0x0000281F); /* Error control */
DEVICE_REG32_W ((PCIE_BASE_ADDR + PCIE_ACCR), 0x000001E0); /* Error control */
DEVICE_REG32_W ((PCIE_BASE_ADDR + PCIE_BAR0), 0xFEA00000); /* non-prefetch, 32-bit, mem bar */

DEVICE_REG32_W ((PCIE_BASE_ADDR + PCIE_APP_CMD_STATUS), 0x0000007); /* enable LTSSM, IN, OB */
while((DEVICE_REG32_R(PCIE_BASE_ADDR + PCIE_DEBUG0) & 0x11)!=0x11); /* Wait for training to complete */
/* Wait for the Boot from Host */
for(;;){}
}