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.

PCIe enumeration fails/PC isn't booting with EVM assembled with adaptor-card in PC

Other Parts Discussed in Thread: TMDXEVMPCI
Hello,
I have been testing on PCIe using TMX320C6678L Rev. 1.0 evaluation Board assembled in TMDXEVMPCI adaptor-card, in a PC.
I tried the PCIe example of the PCIe LLD out of the MCSDK (2_00_05_17), in EP-Mode with the DIP-switch settings:
switch 3: off on on on
switch 4: on on on on
switch 5: on on on off
switch 6: off on on on
switch 9: off off
1) When the PC is already running link training failed (no message "link is up").
2) When the power of the PC was turned off and I assembled external power to the TMX320C6678L the message "link is up" was given through the console after hitting the Powerbutton of the PC, but the PC wasn't booting and the Screen was black. When debugging the DEBUG0 and DEBUG1 registers of the C6678 PCIe registers, I have seen, that the link wasn't there anymore (LTSSM wasn't 0x11), and LTSSM enabled.
3) I have modified the PCIe Example with a while-claus around the link training part of the program, and i get 4-6 times the message link is up, but not more.

I have tried also the DIP-switch settings:

switch 3: off on on on
switch 4: on on on on
switch 5: on on on off
switch 6: off on on on
switch 9: on off
and
switch 3: off on on on
switch 4: on on on on
switch 5: on on on on
switch 6: on on on on
switch 9: off off
with the same problem.
Have I missed something? What can I try next?
PS: I have tested also the IBL-PCIe-boot example with the same problem."
  • Johannes,

    The PCIe LLD example is for the two EVMs connection. The test case will overwrite the PCIe configuration in the PCIe boot code and try to get the link up and data transfer.

    If you are connecting the EVM to the PC, you probably want to setup the EVM in PCIe boot mode and NOT load the LLD example.

    Once the PC is powered up, it will enumerate the PCIe devices connected to it and do the link up. The PCIe boot code will also configure the PCIe in EP mode (based on DIP switch) and wait for the link up from host (PC).

    If your PC is running Linux, after the boot up, you could use "lspci" to list the PCIe devices already being detected. It could show that if the EVM has been connected to the PC via PCIe link.

    So could you please setup the EVM in PCIe EP boot mode (and also try little endian mode) without loading the LLD example to see if the PC could recognize the EVM please? You should power up the DSP first and then power up the PC.

    The switch settings could be as follows as shown in the wiki page:

    http://processors.wiki.ti.com/index.php/TMDXEVM6678L_EVM_Hardware_Setup

    switch 3: off on on off
    switch 4: on on on on
    switch 5: on on on off
    switch 6: off on on on
    switch 9: off off


  • Hello Steven,

    At first - thank you for your help.

    I have now tried to update first the ibl on the EVM (this was successful, because when I set it to NAND-Boot- the Console output was "booting from NAND").

    I have tested the PCIe-EP-Boot mode switch setting you gave me in big- and little-endian-mode. None of them works. The failure was exactly the same, like testing the LLD-Example: The Screen of the PC stays black and when you hit the "Num"-Key on the keyboard the LED doesn't toggle.

    Are there any other things I can try?

  • 1. First of all, please try the tests with EVM in little endian mode only for the current debugging since the IBL is MCSDK is compiled in little endian mode by default.

    2. Could you please check if the IBL is updated correctly on EVM?

    You can use the external power and in PCIe boot mode, WITHOUT putting the card into PC. Can you check where the Program Counter register in the CPU (should be 0x00800xxx in LL2) and DEVSTAT (address 0x02620020, value should be 0x00001809) with an emulator to make sure IBL is correct? 

    3. If IBL is updated correctly, could you please check the PCB version of the PCIe adapter card? Is it 17/18-00107-02 or 17/18-00107-03?

    If it is “02”, there is an issue with some newer PC. It will cause PC fail to boot-up. To verify this, simple put the adaptor card into the PCIe slot WITHOUT DSP card assembled, and just turn the PC on, can the PC boot-up normally?

    If PC is still not responding, could you please try another different PC please?

    4. If steps 2 and 3 are passing, could you set the EVM in PCIe boot mode and plugged into the slot WITHOUT external power? Once you turn on the PC, the DSP will be powered on as well and the PC should be able to enumerate the EVM and do the link up.

  • The Program Counter is:

    PC    0x008007CC    Core Register    

    And the DEVSTAT register is:

    0x00011809, when I set switch 9 : on off, then it is 0x00001809.

    - so this means the IBL is correctly on EVM? At my opinion, it is right, because, when i try nand boot, the output of the EVM says "booting from Nand"

    I have the PCB version 17-00107-03 on my adaptor card, and the PC is booting up without the DSP assembled.

    With the DSP assembled, the PC is booting, but I can not find the DSP as PCIe Device.

    Sincerely,

    Johanens

  • Johanens,

    Are you able to load the IBL symbol via JTAG and check if core 0 is spinning in the check MAGIC ADDRESS loop as follows?

    In the IBL code, tools\boot_loader\ibl\src\device\c66x\c66xinit.c:

        while((DEVICE_REG32_R(PCIE_BASE_ADDR + PCIE_DEBUG0) & 0x11)!=0x11);    /* Wait for training to complete */
     
        /* Wait for the Boot from Host */
        DEVICE_REG32_W(MAGIC_ADDR, 0);
        waitForBoot(MAGIC_ADDR);

    If so, it may mean that the PCIE device is enumerated and then somehow link is dropped. It looks like the PCIE card was reset by PC after enumeration.

    You mentioned you already tried to trace the status of the PCIe link and found the link was not up. Could you please add some code to your application or to the IBL code to re-enable the PCIe link training (write 1 to LTSSM_EN bit again in CMD_STATUS register) once the link is dropped (LTSSM_STATE field not equal to 0x11 in DEBUG0)?