RK3588 PCIe 配置、DTS 与故障排查
1. 内核配置
本树rockchip_linux_defconfig主要启用:
1 | CONFIG_PCI=y |
不同产品 defconfig 有差异。rockchip_electric_defconfig未启用全部热插拔/EP 测试,rockchip_cpcem_linux_defconfig还启用厂商 Endpoint Function。最终判断必须查看构建生成的.config。
2. DTS 控制器
RK3588 SoC DTS包含:
| 节点 | 典型能力 |
|---|---|
pcie3x4@fe150000 |
Gen3 x4 |
pcie3x2@fe160000 |
Gen3 x2 |
pcie2x1l0@fe170000 |
Gen2 x1 |
pcie2x1l1@fe180000 |
Gen2 x1 |
pcie2x1l2@fe190000 |
Gen2 x1 |
节点 compatible 为rockchip,rk3588-pcie和snps,dw-pcie。板级 DTS 通过&pcie...选择实际端口并补充供电、GPIO、pinctrl 和 PHY。
3. 关键 DTS 属性
应结合 binding 核对:
reg与reg-names:DBI/APB/config 等窗口;ranges:CPU→PCI I/O/MEM 地址;bus-range;interrupts与interrupt-names;interrupt-map:legacy INTA~INTD;msi-map或msi-parent;clocks、clock-names;resets、reset-names;phys、phy-names;num-lanes、最大链路速率;reset-gpios;- vpcie regulator/supply;
status = "okay"。
属性名称应以本树 binding 和驱动实际devm_*_get()为准,不能直接照搬其它 BSP。
4. PHY 与 Lane 复用
RK3588 PCIe 3.0 lane 由共享 PHY 和 GRF 控制,x4/x2/多个 x1 组合受硬件 mode、板级走线和 DTS 约束。若 lane mode 错误:
- PHY 可能 probe 成功;
- 控制器寄存器可读;
- 但 LTSSM 无法稳定进入 L0。
还应检查 refclk 方向、100 MHz 时钟质量、SSC、AC coupling 和 lane polarity。
5. 上电时序
推荐观测顺序:
1 | Endpoint 电源稳定 |
NVMe、Wi-Fi、PCIe Switch 的稳定时间不同。GPIO 极性或 regulator enable 错误会表现为永久 Detect/Polling。
6. 分层故障树
A. 控制器不 probe
检查:
- DTS status/compatible;
- 驱动是否编入;
- clock/reset/regulator/PHY 获取错误;
- deferred probe 依赖;
- threaded init 是否延后日志。
B. 控制器 probe 但 Link Down
检查:
- Endpoint 电源;
- PERST#极性和时序;
- refclk;
- PHY lane mode;
- LTSSM 状态;
- Gen1 强制降速能否建立链路;
- SI、连接器和走线。
C. Link Up 但无 Endpoint
检查:
- CFG0 outbound iATU;
- bus-range;
- 首次 VID/DID 读结果;
- Endpoint 是否仍返回 CRS;
- Device 0/Function 0 路由;
- 控制器系统错误状态。
D. 能枚举但 BAR 分配失败
检查:
- DTS
ranges容量; - bridge MEM/prefetch window;
- 32/64 位 BAR;
- 资源冲突;
- SR-IOV VF BAR;
- 是否需要
pci=realloc=on进行验证。
E. BAR 可访问但业务中断失败
检查:
- MSI/MSI-X Enable;
- IRQ domain 与 parent;
- DWC MSI status/mask;
/proc/interrupts计数;- handler 是否清设备状态;
- INTx
interrupt-map。
F. 中断正常但 DMA 失败
检查:
pci_set_master();- DMA mask;
- IOMMU/SMMU stream ID;
- cache coherency;
- descriptor 地址和 endian;
- 设备是否报告 Completion Timeout/AER。
7. 常用证据
1 | dmesg | 关注 rockchip-dw-pcie、link、AER、BAR、MSI |
厂商树的pcie-dw-rockchip.c已包含额外[PCIe DEBUG]日志;量产前应控制日志级别,避免在热路径持续打印。
8. 内核参数的定位用途
pci=nomsi:验证 MSI 路径;pcie_aspm=off:验证 ASPM/CLKREQ#;pci=realloc=on:验证资源窗口;pci=pcie_bus_safe等:验证 MPS/MRRS;pcie_port_pm=off:部分版本用于端口 PM 隔离。
参数能改变现象不等于根因已修复,应回到 DTS、电气、资源或驱动状态机。
9. 安全注意
- 不对正在 DMA 的设备执行 sysfs remove/reset;
- 不用
devmem修改 DWC/GRF 寄存器作为长期方案; - IOMMU 未隔离前不把 Endpoint 交给不可信用户;
- 热拔前停止业务、解绑驱动并确认供电控制;
- 自动恢复应限制重试次数,防止坏链路造成无限 reset 风暴。
正在加载留言…