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.

[参考译文] RTOS:从 RC 器件访问仅一个 EP 器件的 BAR0和 BAR1

Guru**** 2614265 points
Other Parts Discussed in Thread: TMS320C6657

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/656761/rtos-accessing-both-bar0-and-bar1-of-only-one-ep-device-from-rc-device

主题中讨论的其他器件:TMS320C6657

工具/软件:TI-RTOS

各位专家:

关于 PCIe 多器件设置、如果我们将 DSP 作为 RC、将 FPGA 作为 EP、那么我们能否为 BAR0和 BAR1仅连接一个 EP 器件。 即、我为 RC 配置 OB 区域0和 OB 区域1。

在我的案例中、我只想为 BAR0和 BAR1连接一个 EP 器件。 OB 区域0至 BAR0 、OB 区域1至 BAR1?  此外、还可以同时从 RC 访问 EP BAR0和 BAR1吗?

谢谢、

Ramana。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    我假设您正在使用 Keystone I/II SOC 进行检查。 这个问题有一些混淆。 如果两者之间有 PCIe 开关、则可以连接一个具有多个 EPS 的 RC。 如果没有开关、则只能将一个 EP 连接到 RC。

    RC 中的 OB 用于设置出站转换、即访问 FPGA 中的地址。 RC 侧有2 bar、用于设置接受/拒绝传入数据包。 条形图与 OB 之间没有直接关系。

    有关详细信息、请查看 PCIe 用户指南。 此外、RTOS wiki: processors.wiki.ti.com/.../Processor_SDK_RTOS_PCIe

    此致、Eric
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    感谢您提供信息。
    我仅使用一个连接到我的 RC 的 EP。
    我知道 OB 与 bar 的关系。
    我的问题是,是否可以与 RC 通过两个条形码(如您所说)与一个 EP 设备和两个条形码进行通信。
    我的目标是、我希望同时在两个不同的地址位置从 RC 写入 EP。 也就是说、我想在 RC 上配置 BAR0和 BAR1、并同时与 EP 上的两个地址范围 BAR0和 BAR1进行通信。

    谢谢、
    RAM。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    是的、您可以这么做。 例如、在 RC 侧、您写入 OB 区域0 (例如 C6678上的0x6000_0000)和 OB 区域1 (例如0x6010_0000假设 OB 大小为1MB)。 在 EP 大小下、您可以设置两个条形、BAR0接受来自 RC OB 区域0的地址、而 BAR1接受来自 RC OB 区域1的地址。

    此致、Eric
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    如果是、我们能否同时从 RC 与 EP 上的 BAR0和 BAR1进行通信?

    谢谢、
    RAM。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、您可以。

    此致、Eric
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Eric:

    在我 的同事 Ramana 就 BAR0和 BAR1 同时访问打开的同一主题进行后续操作时、我想简要介绍一下我们在 PCIe 接口方面遇到的问题;如果您能提供任何指导、那将会很棒。

    该配置包含一个 C6657 DSP 作为连接到 Altera FPGA (EP)的 RC。 RC 可远程将 FPGA 配置为 EP。

    FPGA 具有带配置空间的自定义 DMA 模块、 目标是远程配置 BAR0和 BAR1、以便将 BAR0用于 DSP 和 BAR1之间的 DMA 入站数据传输、并将其用作 FPGA 与 FPGA 之间的出站数据传输。

    目前仅配置了 BAR1、可用于从 FPGA 传输和接收数据。

    现在只配置 BAR0而不是 BAR1、并且尝试访问 DMA 配置空间会导致读取的数据损坏。

    为了尝试找出 BAR0的问题、我在两个评估板(TMS320C6657)上使用了 PCI_sample 示例、一个用作 RC、另一个用作 EP、通过 TI 的双 EVM 分线卡进行连接。

    该示例按预期运行。

    现在、将两个 EVM 上的 PCIe_bar_IDX_M 和 PCIe_bar_IDX_S 从1更改为0会导致测试失败(数据从 RC 传输、 但 EP 从未接收)。

    这是否可以解释为什么  我在本例中不能使用 BAR0? 如果不是、需要在 PCI_sample 中进行哪些修改才能使用 BAR0 成功运行两个板之间的环路测试。

    提前感谢,

    Hisham  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    从寄存器转储中、RC 侧0x21800200设置为进行出站转换、大小可以是1MB 到8MB、涵盖0x6000_0000 + 1~8MB。 在 PCIe 远程配置空间0x21802010中、这是 FPGA 侧的 BAR0、它具有0x6000_0000、看起来是正确的。 BAR0和 BAR_MASK 共用相同的寄存器地址、BAR0的 BAR_MASK 有多大? BAR_MASK 是否可能太小、只接受0x6000_0480、但0x60000e80超出范围? FPGA 是否具有入站转换? 还是0x6000_xxxx 是实际存储器地址?

    在 C6657中、通过硬接线 BAR0来访问 PCIe 应用寄存器。 请参阅 PCIe 用户指南、关于入站地址转换、请参阅2.7.2.2 BAR0例外
    入站方向上由 BAR0覆盖的存储器空间完全专用于
    在 RC 和 EP 模式下访问应用寄存器地址空间0。 它
    表示不能将 BAR0重新映射到任何其他位置、而不能映射到应用程序
    寄存器。 任何与 BAR0区域匹配的远程入站访问都将自动进行
    路由到这些寄存器。

    因此、在 C6657至 C6657测试中、不能将 BAR1更改为 BAR0。

    此致、Eric
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Eric:

    感谢你的答复。

    现在、我可以在出站方向访问两个条形图。 问题不是来自 PCIe 配置、而是来自 FPGA 的地址。

    我仍然需要正确设置入站配置、以允许 FPGA (EP)使用 BAR1访问 DSP (RC)、我对此有一些问题。

    目前、在 EP 的远程配置期间、我只需按 如下方式配置远程器件的条形寄存器、以便按照您在该线程中的建议过滤 BAR0和 BAR1之间的数据包。

    RC 的入站配置如下:

    EP 没有任何入站或出站转换、而是实际的存储器地址、并且 DMA 寄存器可配置为获取基址和块大小、可用于入站 DSP 访问。

    如果我在 DSP 端初始化了存储器地址0x90000000。  从 FPGA 侧设置的 PCIe 入站地址0x90000000是否会访问 DSP 中的实际存储器位置?

    入站 DSP 访问是否需要任何其他入站配置、我缺少这些配置?

    谢谢、

    Hisham

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    对于 DSP (RC)、它具有入站转换和出站转换。 根据您的信息、FPGA (EP)端不存在此类入站和出站。

    因此、当您使用0x6000_0000和0x6010_0000对 EP (来自 RC)端的远程条进行编程时、具有该地址范围的任何进入 EP 的地址都将被 EP 接受、看起来您已经将从 RC 到 EP 的方向(读取和写入)进行了解析。

    现在、对于 EP 到 RC 方向、假设 EP 可以生成像0x9000_0000这样的地址、您在 RC 侧有一个条形设置来接受0x9000_0000、这是可以的。 对于入站转换、RC 内的地址=传入地址(0x9000_0000)- ibStartLo (0x9000_0000)+ iboffsetaddr (0)= 0x0。 这不是 RC 中的有效地址。

    例如、如果您希望这种情况到达 MSMC、那么 iboffseraddr 将类似于0x0c00_0000、如果您希望这种情况发生在 DDR 中、那么 iboffsetaddr 将类似于0x8000_0000。 然后、从 EP 侧、您应该能够在 RC 中访问该地址。

    此致、Eric