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: problem enumerating pcie peripheral

Part Number: TMS320C6678


hello

we have an evmc6678 which got enumerate using PC. now we want to enumerate this board using Xilinx ZCU102 board. Xilinx ZCU102 can enumerate SAMSUNG SSD hard but it can't enumerate evmc6678. evmc6678 is in EP mode.

our FPGA team said that enumeration is done during "first stage bootloader" which by my understanding is something similar to our IBL.

what is the difference between PC and Xilinx ZCU102?

it seems problem isn't lie in PC, Xilinx board (cause it can enumerate SAMSUNG SSD HARD) and evmc6678 (cause it got enumerated by PC), so what the problem?

thank in advance.

  • Hello!
    Would you mind to elaborate a little what is "can't enumerate"? Initial portion of configuration header should be accessed without troubles assuming link was up. There is minor issue, when LLD returns DevId/VenId swapped, but at least you should see them.
  • hello
    thanks for reply. by "can't enumerate" i mean that output of "lspci -n" won't show our device and dsp stay idle for training process to end. also link-up flag in FPGA in not set.
    here is what happens in detail:
    1. Xilinx ZCU102 can't enumerate SAMSUNG SSD DISK in first time. we need to restart Xilinx board once for SAMSUNG SSD to get enumerated (view it using lspci -n)
    2. PC can enumerate evmc6678 for first time, but after PC restart it won't get enumerate anymore.
    3. Xilinx can't enumerate evmc6678 at all.

    in this stage we reach to this conclusion:
    Xilinx first stage bootloader finish it's enumeration process too fast so neither SAMSUNG SSD nor evmc6678 can't get enumerated. but SAMSUNG SSD has the ability to re-enumearte after Xilinx board reset while evmc6678 can't do that (we conclude this from the fact that PC can't enumerate evmc6678 after restart.)

    in all of TI code for PCIE initialization, there was always this pattern (both in IBL code and example in sprabk8.pdf)

    (a) lock pll
    (b) disable training
    (c) write some settings
    (d) enable training and wait for training to end.

    it seems that whole problem originate from stage (d). in other word, once DSP reach stage (d) if training process was not successful, it will get blocked in a while loop and host reset have no effect in breaking this loop.

    now the question is, can't we change initialization process so that dsp remain active and responsible to training process of host?
  • Hello,
    In my imagination, link training is quite low level procedure, ensuring data integrity. If we have no that, other steps are hardly relevant.
    The only thing I could suggest is to look at debug registers and try to understand, what state does machinery stall at.
  • Hi,

    Same topic discussed here: e2e.ti.com/.../716864

    Regards, Eric