PCIe - PCI Express
PCI Express
,简称PCI-E
,官方简称PCIe
,是计算机总线的一个重要分支,它沿用既有的PCI编程概念及信号标准,并且构建了更加高速的串行通信系统标准。目前这一标准由PCI-SIG
组织制定和维护。
与PCI总线不同,PCIe总线使用端到端的连接方式,在一条链路上的两端只能各连接一个设备,这两个设备互为数据发送端和接收端,所以PCIe总线的物理链路的一个数据通路为一Lane,就有两组差分信号,及共4根信号线,
其高带宽就由多条lane组成,目前PCIe链路可以支持1、2、4、8、16和32个Lane,即x1、x2、x4、x8、x16、x32宽度的PCIe链路,每一个Lane上使用的总线频率与PCIe总线使用的版本相关。PCIe不断完善和发展的新版本支持的理论带宽可满足多种高带宽要求的场合。
模块配置
驱动配置
驱动位于
PCIe Drivers ->
<*> Allwinner PCIe RC controller - Host mode # PCIe HOST 模式
<*> Allwinner PCIe EP controller - Endpoint mode # PCIe EP 模式
部分平台使用 combophy,需要勾选 PHY 的驱动
PHY Drivers ->
<*> Allwinner INNO COMBO PHY Driver # PCIe PHY
设备树配置
在设备树中配置如下:
在 SoC 的 dtsi
文件中提炼了内存基地址、中断控制、时钟等共性信息,是该类芯片所有平台的模块配置
pcie: pcie@4800000 {
compatible = "allwinner,sunxi-pcie-v210-rc";
#address-cells = <3>;
#size-cells = <2>;
bus-range = <0x0 0xff>;
reg = <0 0x04800000 0 0x480000>;
reg-names = "dbi";
device_type = "pci";
ranges = <0x00000800 0 0x20000000 0x0 0x20000000 0 0x01000000
0x81000000 0 0x21000000 0x0 0x21000000 0 0x01000000
0x82000000 0 0x22000000 0x0 0x22000000 0 0x07000000>;
num-lanes = <1>;
phys = <&combophy PHY_TYPE_PCIE>;
phy-names = "pcie-phy";
interrupts = <GIC_SPI 107 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 106 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 99 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 100 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 101 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 102 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 103 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 104 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 105 IRQ_TYPE_LEVEL_HIGH>;
interrupt-names = "msi", "sii", "edma-w0", "edma-w1", "edma-w2", "edma-w3",
"edma-r0", "edma-r1", "edma-r2", "edma-r3";
#interrupt-cells = <1>;
num-edma = <4>;
max-link-speed = <2>;
num-ib-windows = <8>;
num-ob-windows = <8>;
linux,pci-domain = <0>;
resets = <&ccu RST_BUS_PCIE_USB3>;
power-domains = <&pd1 A523_PCK_PCIE>;
clocks = <&ccu CLK_USB3_REF>, <&ccu CLK_PLL_PERI0_200M>, <&dcxo24M>, <&ccu CLK_PCIE_AUX>;
clock-names = "pclk_ref", "pclk_per", "hosc", "pclk_aux";
status = "disabled";
};