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.

TMS320C6678: The problem of mutiple C6678 as PCIE EP device

Part Number: TMS320C6678

Hi,everyone,

     I have to use two C6678 as PCIE EP device to communicate with one HOST(Windows OS,as RC). I can already make one c6678 commuticate with host(include driver) through PCIe.

    But when i pulg two c6678 board(two c6678 programmed same code ) to host., in windows OS i can not enumerate any devices!

    Now, i have the list infomation:

1. I use the pdk example code

1. Modifde one c6678's BAR address, no effect

2. Modifde one c6678's vendor and device ID, no effect

3. The code 

/* Wait for link to be up */
 pcieWaitLinkUp(handle);

can pass; so that Link have been up, Debug 0 LTSSM state is 0x11. But  when the HOST  power up , i find LTSSM state is 0x00, the link have been down.

What's wrong with the Link? Why i can not pulg mutiple c6678?

  • Which SDK version are you using?

    I've notified the RTOS team. In the mean time check the following wiki:
    processors.wiki.ti.com/.../Processor_SDK_RTOS_PCIe

    Best Regards,
    Yordan
  • Hi,

    There is no PCIE Windows driver for C6678, so you have to write your own. If you simply use the Processor SDK RTOS PCIE example code to intialize the C6678 in EP mode, it may work.

    Be aware that:

    1) PC host uses spread spectrum clock, you have to source this clock to C6678. You can refer to IBL PCIE workaround code iblPCIeWorkaround() in \pdk_c667x_2_0_5\packages\ti\boot\ibl\src\device\c66x

    2) Do you use TI 6678 EVM? If so, you also need PCIE to AMC adapator card?

    3) The C6678 PCIE doesn't support hot plug, when you have two cards, you need to power cycle the PC host.

    Please refer to the Wiki link pointed by Yordan for more info.

    Regards, Eric

     

  • Hi, Eric
    Thanks for replay!

    I have my own PCIE windows driver and it's worked when pulg one c6678 board.
    for 2) and 3) ,I am sure i have no problem.
    for 1) , i dont source host clock to C6678 , Is it so import to impact on enumerating ? Because host can enumerate C6678 when pulg one board.

    Regards, Leo
  • Hi,

    Yes, it is important to source PCIE clock from host PC to C6678. It is still unclear you are using TI 6678 EVM or your own hardware.

    Do I understand correctly:
    1) if only one 6678 card plugged, it can be enumerated? LTSSM = 0x11
    2) if two 6678 cards plugged, none of them can be enumerated? LTSSM = 0x00? Are you able to see 0x2180_0004 by JTAG to check bit 0 (LTSSM_EN) is 0 or 1 for both card?

    Regards, Eric
  • lding said:
    Hi,

    Yes, it is important to source PCIE clock from host PC to C6678. It is still unclear you are using TI 6678 EVM or your own hardware.

    Do I understand correctly:
    1) if only one 6678 card plugged, it can be enumerated? LTSSM = 0x11
    2) if two 6678 cards plugged, none of them can be enumerated? LTSSM = 0x00? Are you able to see 0x2180_0004 by JTAG to check bit 0 (LTSSM_EN) is 0 or 1 for both card?

    Regards, Eric

    Hi,

    You are correcrt , plug single LTSSM=0x11,and plug double both LTSSM = 0x00 and LTSSM_EN=0

    Regards,leo

  • Hi,

    I assume in your Windows PCIE driver, you must have the code to enable LTSSM_EN = 1. There is a PCIE hot reset issue, see www.ti.com/.../sprz435b.pdf KeyStoneII.BTS_errata_advisory.44.

    The same situation also appies to you when you use C6678 and there is a hot reset come from host side. Even you don't use ROM bootloader, your driver need to be able to handle the reset case.

    When you plug in only one card, the host reset was missed by your C6678 so the LTSSM_EN is enabled and you have the PCIE link coming up. When you have two cards, for some reason, the timing is different, and the cards were reset by host so you found LTSSM_EN = 0.

    You may need to find another PC host to try. Or add error handle code in your driver to re-initialize PCIE when you find LTSSM_EN is disabled.

    Regards, Eric
  • lding said:
    Hi,

    I assume in your Windows PCIE driver, you must have the code to enable LTSSM_EN = 1. There is a PCIE hot reset issue, see www.ti.com/.../sprz435b.pdf KeyStoneII.BTS_errata_advisory.44.

    The same situation also appies to you when you use C6678 and there is a hot reset come from host side. Even you don't use ROM bootloader, your driver need to be able to handle the reset case.

    When you plug in only one card, the host reset was missed by your C6678 so the LTSSM_EN is enabled and you have the PCIE link coming up. When you have two cards, for some reason, the timing is different, and the cards were reset by host so you found LTSSM_EN = 0.

    You may need to find another PC host to try. Or add error handle code in your driver to re-initialize PCIE when you find LTSSM_EN is disabled.

    Regards, Eric

    Hi,

    Thanks a lot ! I will try.

    Regards