跳转至

PCIE DebugSOP 手册

修订历史

修订号
描述
日期
1.0
  • 初始发布
  • 05/14/2026

    图 1-1 PCIe 链路训练失败定位流程图
    步骤 方法 退出条件 下一步 需提供给FAE的信息 相关FAQ
    A 1. 检查 RC 和 EP 之间的物理连接。确认 PCIe 排线/转接卡安装到位,连接器引脚无损坏。
    2. 使用万用表确认 PCIe 插槽供电在规格范围内(3.3V/12V)
    3. 确认排线类型与 PCIe 端口配置匹配(双 EVB 级联时两端端口类型应一致)。
    退出条件 1:
    1. 物理连接异常(排线损坏、连接器松动或电源超出规格)
    2.> 硬件连接问题
    退出条件 2:
    物理连接正常
    > 无问题
    退出条件 1:
    > 流程结束
    退出条件 2:
    > B
    退出条件 1:
    ==> 寻求硬件协助
    B 1. 检查 chiptop SW RESET 寄存器:bank 0x101E,offset 0x1F。PCIE0: bit14,PCIE1: bit15。必须释放 reset PCIe 才能工作。
    2. 检查 AXI SLV CLK 配置:CLKGEN2 bank 0x103F,确认时钟已使能。
    3. 检查 PHY 配置:确认 PHY 寄存器按 ASIC 要求正确设置。注意 PCIE0 LAN1 的 PHY 与 USB3.0 Port2 共用。
    退出条件 1:
    1. SW RESET 未释放或 AXI SLV CLK 未使能
    2.> 时钟/复位配置错误
    退出条件 2:
    1. PHY 配置不符合规格(ASIC vs FPGA vs PZ1)
    > PHY 配置问题
    退出条件 3:
    所有基础配置正常==> 无问题
    退出条件 1:
    > 流程结束
    退出条件 2:
    > 流程结束
    退出条件 3:
    ==> C
    退出条件 1:
    > 检查软件中的复位和时钟设置
    退出条件 2:
    > 导出 PHY 寄存器进行分析
    C 1. 检查内核配置:确认 CONFIG_SGS_PCIE_HOST 已启用(RC 模式),CONFIG_SGS_PCIE_EP 已启用(EP 模式)。
    2. 双 EVB 级联测试时,根据测试场景可能需要同时启用 RC 和 EP 驱动。
    3. 确认 CONFIG_SGS_PCI_ENDPOINT_TEST 和 CONFIG_SGS_PCI_EPF_TEST 已启用以支持 pcitest 验证。
    退出条件 1:
    1. 所需内核配置未启用
    > 内核配置问题
    退出条件 2:
    内核配置正常
    > 无问题
    退出条件 1:
    > 流程结束
    退出条件 2:
    > D
    退出条件 1:
    ==> 启用缺失的内核配置并重新编译
    D 1. 检查 DTS 中 PCIe 节点(PCIE0/PCIE1)配置。compatible 属性有三个选项:
    - sgs,dw-pcie: 强制 RC 模式
    - sgs,dw-pcie-ep: 强制 EP 模式
    - sgs-dw-pcie-earlyparam: 由 U-Boot bootargs 环境变量决定模式
    2. 若使用 sgs-dw-pcie-earlyparam,确认 bootargs 中包含正确的模式设置(如双 EVB 级联时 pcie0=rc, pcie1=ep)。
    3. 双 EVB 级联:一块板子配置为 RC,另一块配置为 EP。
    4. 单 EVB 双端口级联:使用长排线连接两个 PCIe 端口,一个配置为 RC,另一个为 EP(如 pcie0=rc pcie1=ep 或 pcie0=ep pcie1=rc)。
    退出条件 1:
    1. DTS compatible 配置不正确
    > DTS 配置错误
    退出条件 2:
    1. bootargs 模式配置与物理连接不匹配
    > bootargs 配置错误
    退出条件 3:
    配置正常==> 无问题
    退出条件 1:
    > 流程结束
    退出条件 2:
    > 流程结束
    退出条件 3:
    ==> E
    退出条件 1:
    > 修正 DTS compatible 属性
    退出条件 2:
    > 修正 bootargs 环境变量设置
    E 1. 检查参考时钟架构配置:
    - Common Clock (CC): RC 和 EP 共享同一 100MHz 参考时钟源,最常用且推荐。
    - Independent Refclk (IR): RC 和 EP 使用独立时钟源。SOC 内部时钟源包括 MPLL (432MHz) 和 GMAC PLL (100MHz),也可使用板载时钟芯片。
    2. IR 模式下,确认 bootargs 的 clk 参数配置:
    - 无 clk 参数:默认使用 MPLL 432MHz
    - 有 clk 参数:可选择 GMAC 100MHz 或外部时钟芯片
    3. CC 模式下,确认时钟线连接及所需的板子 rework(如接收时钟的板子需要断开板载时钟芯片)。
    4. 注意:SSC(展频时钟)仅适用于 Common Clock 架构。
    退出条件 1:
    1. RC 和 EP 的参考时钟架构不匹配
    > 时钟架构配置错误
    退出条件 2:
    1. CC 模式下,板子未做 rework(接收端未断开时钟芯片)
    > 需要硬件 rework
    退出条件 3:
    1. 时钟配置正常但链路仍然失败
    ==> 进入下一步
    退出条件 1:
    > 流程结束
    退出条件 2:
    > 流程结束
    退出条件 3:
    ==> F
    退出条件 1:
    > 确认 bootargs 和 DTS 中的时钟配置
    退出条件 2:
    > 需要 hardware rework
    F 1. 检查 MAC 配置:
    - reg_slv_wstrb_mask 必须设置为 0xFFFF
    - reg_enable_axi_mstr_optimize: 用于优化 PCIe 访问 MIU
    - reg_pcie_msi_mask_irq: 控制 MSI 中断是否对 CPU 可见
    - reg_sup_phy_bifurcation_sel_mac: 控制 PCIE0 LAN1 切换
    2. 检查 reg_sel_pcie_axi_mstr_to_imi: 仅 PCIE1 有效,用于 PCIe boot 访问 IMI。
    3. 检查 MIU 反压配置:若未配置,DMA 数据会出错,且可能收不到 DMA 中断 done 状态。
    4. 检查 DB_RO_WR_EN: 部分只读寄存器在使能后可写。如 PCIE0 MISC_CONTROL1_OFF bit0 为 DBI_RO_WR_EN,未使能时 vendor ID 和 device ID 无法写入。
    退出条件 1:
    1. MAC 寄存器配置不正确
    > MAC 配置错误
    退出条件 2:
    1. MIU 反压未配置
    > MIU 配置缺失
    退出条件 3:
    所有配置正常==> 无问题
    退出条件 1:
    > 流程结束
    退出条件 2:
    > 流程结束
    退出条件 3:
    ==> G
    退出条件 1:
    > 导出 MAC 寄存器进行分析
    退出条件 2:
    > 使能 MIU 反压配置
    G 1. 检查启动过程中的 PCIe 日志,确认 LTSSM 状态转换。
    2. 确认 RC 和 EP 均已使能 ltssm_enable 进行链路训练。
    3. 若以上检查均通过但链路训练仍失败,使用 LA/示波器捕获 PCIe TX/RX 信号波形,检查信号完整性。
    4. 考虑交叉验证:交换 RC/EP 角色,尝试不同 PCIe 端口,或使用不同排线/板子测试。
    退出条件 1:
    1. LTSSM 无法达到 L0 状态
    > 信号完整性或 PHY 问题
    退出条件 2:
    1. LTSSM 达到 L0 但链路不稳定
    > 可能是信号质量问题
    退出条件 3:
    1. 交叉验证后链路正常
    ==> 特定硬件问题
    退出条件 1:
    > 流程结束,提供波形数据给 RD
    退出条件 2:
    > 流程结束,调整 PHY 参数
    退出条件 3:
    ==> 流程结束
    退出条件 ½:
    1. 提供包含 PCIe 初始化的串口日志
    2. 提供TX/RX 信号波形捕获
    3. 导出 PCIe bank 的 RIU 寄存器


    2. PCIe EP 枚举失败(RC 无法检测到 EP)

    图 2-1 PCIe EP 枚举失败定位流程图
    步骤 方法 退出条件 下一步 需提供给FAE的信息 相关FAQ
    A 1. 通过启动日志确认 PCIe 链路是否已建立。查找 "Link Up" 相关信息。
    2. 在 RC 端执行 lspci 查看 EP 设备是否列出。
    3. 执行 lspci -k 检查详细设备信息,包括 vendor ID、device ID 和内核驱动绑定状态。
    退出条件 1:
    1. 链路未建立,未发现 PCIe 设备
    > 参见问题 1: 链路训练失败
    退出条件 2:
    1. 链路已建立但 EP 未枚举
    > 进入下一步
    退出条件 1:
    > 转到问题 1
    退出条件 2:
    > B
    B 1. 检查 EP 端 BAR 配置。EP BAR0 可使用 Target0 或 Target1(默认 Target0)。Target0 允许 RC 访问 EP 的 DMA/ATU/ELBI 寄存器。
    2. 确认 EP BAR 大小配置。BAR0 默认为 4MB,因为 DMA(4K)+ATU(4K)+RIU(4MB)=4.8MB,覆盖 RIU 最大 bank 0x1AEF。
    3. RC init 会重置 BAR1,因为默认 BAR1 为 1GB 会耗尽 PCIe memory 空间。
    4. 检查 target 寄存器(如 bank 0x1AB4 offset 7 bit0)是否正确配置为 Target0/Target1。仅 BAR0 的 target 选择有效,其他 BAR 只能走 Target1。
    退出条件 1:
    1. BAR 配置不正确或 BAR 大小不匹配
    > BAR 配置错误
    退出条件 2:
    BAR 配置正常
    > 无问题
    退出条件 1:
    > 修正 BAR 配置
    退出条件 2:
    > C
    退出条件 1:
    ==> 检查 target 寄存器设置和 BAR 大小
    C 1. 检查 RC 端 DTSI 中的内存窗口配置。mHera 提供两个地址空间:
    - 低端 16MB: PCIE0 在 0x1A000000,PCIE1 在 0x1B000000
    - 高端 1GB: PCIE0 在 0x100000000,PCIE1 在 0x140000000
    2. 内核默认使用高端 1GB 空间。若需使用低端 16MB 空间,需修改 DTSI。
    3. 注意:16MB 可能不足以分配所有 RC 和 EP 的 BAR。RC BAR0 为 4MB,EP BAR0 为 4MB,加上其他 EP BAR 及对齐要求。
    4. 检查 PCI bridge 资源分配。有时 bridge 默认只映射 2MB。可通过 bootargs 设置更大窗口,或启用 PCIe hotplug 驱动自动根据 EP BAR 大小重新分配内存空间。
    退出条件 1:
    1. 内存窗口大小不足以分配 BAR
    > 内存空间不足
    退出条件 2:
    1. PCI bridge 资源映射太小(如仅 2MB)
    > Bridge 资源映射问题
    退出条件 3:
    内存配置正常==> 无问题
    退出条件 1:
    > 增大内存窗口或减小 BAR 大小
    退出条件 2:
    > 调整 bootargs 或启用 hotplug 驱动
    退出条件 3:
    ==> D
    退出条件 1:
    > 提供 DTSI 配置和 BAR 大小需求
    退出条件 2:
    > 提供 bootargs 和 lspci 输出
    D 1. 检查 DBI 访问配置。确认 DBI 读写功能正常。
    2. 确认 DB_RO_WR_EN 已使能以写入只读寄存器。未使能时 vendor ID 和 device ID 无法写入。
    3. 检查 PCIE0 MISC_CONTROL1_OFF bit0 (DBI_RO_WR_EN)。
    4. 确认 EP 端驱动已正确加载和初始化。通过 dmesg 查看 EP 驱动初始化日志。
    退出条件 1:
    1. DBI 访问不工作
    > DBI 配置问题
    退出条件 2:
    1. Vendor/Device ID 未正确配置
    > DB_RO_WR_EN 未使能
    退出条件 3:
    所有检查通过==> 无问题
    退出条件 1:
    > 流程结束
    退出条件 2:
    > 使能 DB_RO_WR_EN
    退出条件 3:
    ==> E
    退出条件 1:
    ==> 导出 DBI 寄存器进行分析
    E 1. 交叉验证:交换两块板子/端口的 RC/EP 角色。
    2. 尝试手动 rescan: echo 1 > /sys/bus/pci/rescan
    3. 启用 CONFIG_SGS_PCIE_HOTPLUG 实现链路建立后自动检测 EP 和 BAR 重新分配。
    退出条件 1:
    1. rescan/hotplug 后 EP 枚举成功
    > 枚举时序问题
    退出条件 2:
    1. 角色交换后 EP 枚举成功
    > 某一端配置问题
    退出条件 3:
    枚举仍然失败
    ==> 升级给 RD
    退出条件 1:
    > 流程结束
    退出条件 2:
    > 修正失败端配置
    退出条件 3:
    ==> 流程结束
    退出条件 3:
    1. 提供完整启动串口日志
    2. 提供 lspci 输出
    3. 提供 DTSI 配置


    3. PCIe DMA 数据传输失败

    图 3-1 PCIe DMA 数据传输失败定位流程图
    步骤 方法 退出条件 下一步 需提供给FAE的信息 相关FAQ
    A 1. 确认 PCIe 链路已建立且 EP 已成功枚举(如有问题参见问题 1 和问题 2)。
    2. 确认 pcitest 工具已正确编译:进入 kernel/tools/pci/ 执行 make 生成 pcitest 二进制文件。
    3. pcitest 在 RC 端运行,RC 通过 test BAR 向 EP 发送操作指令。
    4. 确认内核配置中已启用 CONFIG_SGS_PCI_ENDPOINT_TEST 和 CONFIG_SGS_PCI_EPF_TEST。
    退出条件 1:
    1. 链路未建立或 EP 未枚举
    > 参见问题 ½
    退出条件 2:
    1. pcitest 工具不可用或内核配置缺失
    > 工具/配置问题
    退出条件 3:
    前置条件满足==> 无问题
    退出条件 1:
    > 转到问题 1 或 2
    退出条件 2:
    > 编译 pcitest 并启用配置
    退出条件 3:
    ==> B
    B 1. 先测试 CPU 读写:
    - 读(EP->RC):./pcitest -r -s <size>
    - 写(RC->EP):./pcitest -w -s <size>
    - 拷贝(RC->EP->RC):./pcitest -c -s <size>(验证 PCIe 通路完整性)
    2. 若 CPU 读写正常但 DMA 失败,问题在 DMA 相关配置。若 CPU 读写也失败,检查 BAR 和 target 配置。
    退出条件 1:
    1. CPU 读写失败
    > BAR 或 target 配置问题
    退出条件 2:
    1. CPU 读写成功但 DMA 失败
    > DMA 特定问题
    退出条件 3:
    CPU 读写和 DMA 均正常==> 测试其他功能
    退出条件 1:
    > 转到问题 2(BAR/target 检查)
    退出条件 2:
    > C
    退出条件 3:
    ==> D
    退出条件 1:
    ==> 检查 BAR0 target0 配置和内存映射
    C 1. 检查 MIU 反压配置:未正确配置 MIU 反压时,DMA 数据会出错,且可能收不到 DMA 中断 done 状态。
    2. 测试不同大小和 burst 配置的 DMA:
    - DMA 读(EP->RC):./pcitest -r -s <size> -d
    - DMA 写(RC->EP):./pcitest -w -s <size> -d
    - 多 burst 读:./pcitest -r -s <size> -d -B <burst_count>
    - 多 burst 写:./pcitest -w -s <size> -d -B <burst_count>
    3. 检查 DMA 通道配置。RC 可通过 Target0 访问 EP DMA:./pcitest -R D/E,channel,offset(D=读通道,E=写通道)。
    4. 确认 reg_enable_axi_mstr_optimize 已使能以优化 PCIe MIU 访问。
    退出条件 1:
    1. MIU 反压未配置
    > MIU 配置缺失
    退出条件 2:
    1. 单 burst DMA 正常但多 burst 失败
    > Burst 配置问题
    退出条件 3:
    1. DMA 数据出现错误
    > 信号完整性或 MIU 问题
    退出条件 4:
    DMA 工作正常
    > 无问题
    退出条件 1:
    > 使能 MIU 反压
    退出条件 2:
    > 调整 burst 参数
    退出条件 3:
    > 检查 PHY 信号质量
    退出条件 4:
    > D
    退出条件 3:
    1. 提供数据对比的 DMA 测试日志
    2. 导出 MIU 和 DMA 寄存器
    D 1. 测试 MSI 中断功能:cat /proc/interrupts 查看 MSI 中断信息。
    2. 触发指定 MSI 中断:./pcitest -m <msi_number>
    3. 测试 MSI-X:./pcitest -i 2 切换到 MSI-X 模式。
    4. 检查 reg_pcie_msi_mask_irq 寄存器:控制 MSI 中断是否对 CPU 可见。
    5. 验证 EP DMA 远程中断功能(RC 通过 Target0 写 EP DMA 并触发远程中断)。注意:测试脚本中的 MSI stop address、MSI data/SAR/DAR 可能是写死的,需根据实际情况调整。
    退出条件 1:
    1. MSI/MSI-X 中断未收到
    > 中断配置问题
    退出条件 2:
    1. 中断测试通过
    > 进入下一项功能测试
    退出条件 1:
    > 检查中断 mask 和配置
    退出条件 2:
    > 流程结束
    退出条件 1:
    1. 提供 /proc/interrupts 输出
    2. 提供中断测试日志


    4. PCIe BAR 和 ELBI 访问问题

    图 4-1 PCIe BAR 和 ELBI 访问问题定位流程图
    步骤 方法 退出条件 下一步 需提供给FAE的信息 相关FAQ
    A 1. 确认 PCIe 链路已建立且 EP 已枚举。执行 lspci -k 检查设备信息。
    2. 确定要访问的 BAR 及其配置:
    - EP BAR0: 可使用 Target0(默认)或 Target1。Target0 允许 RC 访问 EP 的 DMA/ATU/ELBI。
    - EP BAR1-BAR5: 只能使用 Target1。
    - RC BAR0: 默认 4MB,RC BAR1 被 init 重置以避免耗尽内存空间。
    3. 确认 target 选择寄存器配置(EP PCIE0: bank 0x1AB4 offset 7 bit0; EP PCIE1: bank 0x1AB4 offset 7 bit0)。仅 BAR0 的 target 选择有效。
    退出条件 1:
    1. Target 选择寄存器配置错误(Target0 时 bit0 应为 0)
    > Target 配置错误
    退出条件 2:
    1. BAR 过大导致内存分配失败
    > BAR 大小问题
    退出条件 3:
    BAR 配置正常==> 无问题
    退出条件 1:
    > 修正 target 选择寄存器
    退出条件 2:
    > 减小 BAR 大小
    退出条件 3:
    ==> B
    退出条件 1:
    ==> 导出 target 选择寄存器
    B 1. 使用 pcitest 测试 BAR 访问:
    - BAR 测试:./pcitest -b(默认测试 BAR1-BAR5,因为 BAR0 使用 Target0 有特殊用途)
    2. 若特定 BAR 测试失败,检查对应的内存区域是否正确分配。
    3. 使用低端 16MB 地址空间的用户:确认 BAR 大小能容纳在可用窗口内。若 16MB 不足,考虑减小 BAR 大小。
    退出条件 1:
    1. 所有测试 BAR 均通过
    > BAR 访问正常
    退出条件 2:
    1. 特定 BAR 测试失败
    > BAR 分配或映射问题
    退出条件 1:
    > C
    退出条件 2:
    > 检查内存分配和 BAR 映射
    退出条件 2:
    1. 提供包含 BAR 信息的 lspci 输出
    2. 提供 BAR 测试日志
    C 1. 使用 pcitest 测试 ELBI(RC 访问 EP RIU)功能:
    - ./pcitest -R r/w/R/W,bank,[offset]
    - r: 16 位 RIU 读,w: 16 位 RIU 写
    - R: 32 位 RIU 读,W: 32 位 RIU 写
    - 不带 offset:r/R 表示读整个 bank
    - 注意:不支持访问 EP 的 4K DBI bank
    2. 示例命令:
    - RC 读 EP bank 0x1004:./pcitest -R r,0x1004
    - RC 读 EP bank 0x1004 offset 0:./pcitest -R r,0x1004,0
    - RC 32 位读 EP bank 0x1AB0:./pcitest -R R,0x1AB0(日志可能因 printk continuous 而交错)
    - RC 32 位读 EP bank 0x1AB0 offset 0:./pcitest -R R,0x1AB0,0
    - RC 写 EP bank 0x1004 offset 0:./pcitest -R w,0x1004,0,<value>
    3. 测试 RC 访问 EP DMA:./pcitest -R D/E,channel,offset(D=读 DMA 通道,E=写 DMA 通道)。
    4. 测试 RC 访问 EP ATU:./pcitest -R A/B,atu_index,offset(A=读 ATU index,B=写 ATU bank)。
    退出条件 1:
    1. ELBI 读写正常
    > ELBI 功能正常
    退出条件 2:
    1. ELBI 访问返回错误数据
    > Target0 配置或 RIU 映射问题
    退出条件 3:
    1. ELBI 访问完全失败
    ==> BAR0 Target0 未配置或链路问题
    退出条件 1:
    > 流程结束
    退出条件 2:
    > 确认 target0 配置和 RIU 映射
    退出条件 3:
    ==> 转到问题 1
    退出条件 ⅔:
    1. 提供 ELBI 测试命令和输出
    2. 导出 target 寄存器配置


    5. PCIe 热插拔与链路稳定性问题

    图 5-1 PCIe 热插拔与链路稳定性定位流程图
    步骤 方法 退出条件 下一步 需提供给FAE的信息 相关FAQ
    A 1. 检查内核配置中 CONFIG_SGS_PCIE_HOTPLUG 是否已启用。
    2. 启用 hotplug 后,RC 在链路建立后会自动检测 EP 并重新分配 BAR 内存空间,无需手动 rescan。
    3. 通过 disable EP 的 ltssm_enable 来模拟 EP 断开场景:检查中断计数是否增加并检测到 "Link Down"。
    4. 重新 enable EP ltssm_enable,确认检测到 "Link Up"。
    退出条件 1:
    1. Hotplug 未启用
    > 启用内核配置
    退出条件 2:
    1. Hotplug 已启用但 Link Down/Up 未检测到
    > 中断或 ltssm 配置问题
    退出条件 3:
    1. Hotplug 工作正常
    ==> 功能正常
    退出条件 1:
    > 启用 hotplug 配置
    退出条件 2:
    > B
    退出条件 3:
    ==> 流程结束
    退出条件 2:
    1. 提供中断状态
    2. 检查 ltssm_enable 寄存器
    B 1. 检查链路是否频繁断开/恢复。通过 dmesg 监控重复的 "Link Down" / "Link Up" 消息。
    2. 确认参考时钟稳定性。Common Clock 架构下使用示波器检查时钟信号质量。
    3. Independent Refclk 架构下,确认两端时钟源稳定。SRIS 模式允许最大 5600ppm 频率差,需要频繁 SKP Ordered Set 补偿,可能影响稳定性。
    4. 检查 PCIe 排线质量和连接稳定性。
    5. 确认 PHY 信号完整性。检查 TX/RX 信号是否存在过大抖动、眼图宽/高不足等问题。
    退出条件 1:
    1. 链路不稳定由时钟信号质量引起
    > 时钟质量问题
    退出条件 2:
    1. 链路不稳定由排线/连接引起
    > 物理连接问题
    退出条件 3:
    1. 链路不稳定由 PHY 信号质量引起
    > 信号完整性问题
    退出条件 4:
    1. 修复后链路稳定
    > 问题解决
    退出条件 1:
    > 改善时钟信号质量或切换时钟架构
    退出条件 2:
    > 更换排线或修复连接
    退出条件 3:
    > 调整 PHY 参数或检查 PCB layout
    退出条件 4:
    > 流程结束
    退出条件 ⅓:
    1. 提供链路不稳定模式的 dmesg 日志
    2. 提供时钟/信号波形捕获
    3. 提供 PHY 寄存器导出


    6. 附录

    6.1 mHera PCIe 地址空间

    mHera 提供两个 PCIe CPU 可访问的地址空间:

    地址空间 PCIE0 PCIE1 大小
    低端地址 0x1A000000 0x1B000000 16MB
    高端地址 0x100000000 0x140000000 1GB

    内核默认使用高端 1GB 地址空间。低端 16MB 空间可能因对齐要求不足以分配 BAR。

    6.2 DTSI Compatible 配置

    PCIe 节点 compatible 属性支持三个选项:

    Compatible 描述 用途
    sgs,dw-pcie 强制 RC 模式 固定 RC 设备
    sgs,dw-pcie-ep 强制 EP 模式 固定 EP 设备
    sgs-dw-pcie-earlyparam 由 bootargs 决定模式 灵活,调试时推荐使用

    使用 sgs-dw-pcie-earlyparam 时,通过 bootargs 环境变量设置模式:

    • 双 EVB 级联:一块板 pcie0=rc pcie1=ep,另一块板 pcie0=ep pcie1=rc
    • 单 EVB 双端口:pcie0=rc pcie1=eppcie0=ep pcie1=rc

    6.3 参考时钟架构

    架构 描述 SSC 支持 说明
    Common Clock (CC) RC 和 EP 共享同一 100MHz 参考时钟 支持 最常用,设计简单,信号质量好
    Independent Refclk (IR) - SRNS 独立时钟,无 SSC 不支持 使用 SKP Ordered Sets 补偿
    Independent Refclk (IR) - SRIS 独立时钟,带 SSC 支持 最大 5600ppm 差值,延迟较高
    Data Clocked 从数据流恢复时钟 不支持 mHera 不支持,不推荐

    IR 模式 SOC 内部时钟源:

    • MPLL:432MHz(默认,bootargs 无 clk 参数)
    • GMAC PLL:100MHz(通过 bootargs clk 参数设置)
    • 外部:板载时钟芯片(通过 bootargs clk 参数设置)

    6.4 关键寄存器参考

    寄存器 Bank Offset 描述
    SW RESET 0x101E 0x1F bit14 (PCIE0), bit15 (PCIE1) 释放 reset 使 PCIe 工作
    AXI SLV CLK CLKGEN2 (0x103F) - - AXI slave 时钟使能
    MISC_CONTROL1_OFF (DBI_RO_WR_EN) PCIE0 DBI - bit0 使能写入只读寄存器
    reg_slv_wstrb_mask MAC - - 必须设置为 0xFFFF
    Target 选择 0x1AB4 0x7 bit0 BAR0 target: 0=Target0, 1=Target1

    6.5 pcitest 命令参考

    pcitest 工具位于 kernel/tools/pci/,在该目录下执行 make 编译。pcitest 在 RC 端运行。

    命令 描述
    ./pcitest -r -s \<size> CPU 读(EP->RC)
    ./pcitest -w -s \<size> CPU 写(RC->EP)
    ./pcitest -c -s \<size> CPU 拷贝(RC->EP->RC)
    ./pcitest -r -s \<size> -d DMA 读(EP->RC)
    ./pcitest -w -s \<size> -d DMA 写(RC->EP)
    ./pcitest -r -s \<size> -d -B \<n> DMA 多 burst 读
    ./pcitest -w -s \<size> -d -B \<n> DMA 多 burst 写
    ./pcitest -m \<n> 触发 MSI 中断 n
    ./pcitest -i 2 切换到 MSI-X 模式
    ./pcitest -b BAR 测试(BAR1-BAR5)
    ./pcitest -R r/w/R/W,bank,[offset] ELBI:RIU 读/写(r=16位读,w=16位写,R=32位读,W=32位写)
    ./pcitest -R D/E,channel,offset RC 访问 EP DMA(D=读,E=写)
    ./pcitest -R A/B,atu_index,offset RC 访问 EP ATU(A=读,B=写)