PCIE DebugSOP 手册¶
修订历史¶
| 修订号 | 描述 |
日期 |
|---|---|---|
| 1.0 | 05/14/2026 |
1. PCIe 链路训练失败(Link 未建立)¶
| 步骤 | 方法 | 退出条件 | 下一步 | 需提供给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)¶
| 步骤 | 方法 | 退出条件 | 下一步 | 需提供给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/rescan3. 启用 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 数据传输失败¶
| 步骤 | 方法 | 退出条件 | 下一步 | 需提供给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 访问问题¶
| 步骤 | 方法 | 退出条件 | 下一步 | 需提供给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 热插拔与链路稳定性问题¶
| 步骤 | 方法 | 退出条件 | 下一步 | 需提供给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=ep或pcie0=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=写) |