PCIe
介绍 PCIe 的功能和使用方法。
模块介绍
PCIe(Peripheral Component Interconnect Express) 是一种高速串行计算机扩展总线标准 。采用高速串行点对点双通道高带宽传输,所连接设备独享通道带宽。
K1 平台提供 3 个 PCIe 控制器,支持连接多种 PCIe 外设,包括 NVMe SSD、SATA 控制器、Wi-Fi 模块等。
注意: PCIe0 与 USB3 控制器共享同一个 PHY 硬件资源,无法同时启用。常规应用场景中更倾向启用 USB3,因此 PCIe0 一般不使用。
功能介绍
Linux PCIe 子系统框架由三部分组成:
-
PCIe 核心
- PCIe 总线枚举、资源分配、中断处理
- PCIe 设备添加和删除
- PCIe 设备驱动注册与注销
-
PCIe 控制器驱动
- 对 PCIe 主机控制器进行操作
-
PCIe 设备驱动
- PCIe 具体设备的驱动,如 GPU、NIC 和 NVMe 等
源码结构介绍
控制器驱动代码位于 drivers/pci/controller/dwc
目录下:
|-- pcie-designware.c #dwc pcie驱 动公共代码
|-- pcie-designware-host.c #dwc pcie主机驱动代码
|-- pcie-k1x.c #k1x pcie控制器驱动
关键特性
特性
特性 | 特性说明 |
---|---|
支持模式 | 支持 RC 模式 |
支持协议和lane数 | 支持 Gen2x1, Gen2x2 |
支持设备 | 支持NVMe SSD、PCIe转STAT、PCIe 网卡和 PCIe 显卡 |
性能参数
SSD 型号 | 顺序读(MB/s) | 顺序写(MB/s) |
---|---|---|
LRC20Z500GCB | 829 | 812 |
测试方法
# 测试读
fio --name read --eta-newline=5s --filename=/dev/nvme0n1 --rw=read --size=2g --io_size=10g --blocksize=1024k --ioengine=libaio --fsync=10000 --iodepth=32 --direct=1 --numjobs=1 --runtime=60 --group_reporting
#测试写
fio --name write --eta-newline=5s --filename=/dev/nvme0n1 --rw=write --size=2g
--io_size=60g --blocksize=1024k --ioengine=libaio --fsync=10000 --iodepth=32 --
direct=1 --numjobs=1 --runtime=60 --group_reporting
配置介绍
主要包括 驱动使能配置 和 DTS 配置
CONFIG配置
CONFIG_PCI
:为 PCI 和 PCIe 总线协议提供支持,默认情况,此选项为 Y
Device Drivers
PCI support (PCI [=y])
PCI_K1X_HOST
:为 K1 PCIe 控制器驱动提供支持,默认情况下,此选型为 Y
Device Drivers
PCI support (PCI [=y])
PCI controller drivers
DesignWare-based PCIe controllers
Spacemit K1X PCIe Controller - Host Mode (PCI_K1X_HOST [=y])