PCIe
概述
产品版本
芯片名称 | 内核版本 |
---|---|
RK1808 | 4.4,4.19 |
RK3528 | 4.19,5.10,6.1 |
RK3562 | 5.10,6.1 |
RK3566/RK3568 | 4.19,5.10,6.1 |
RK3576 | 6.1 |
RK3588 | 5.4,5.10,6.1 |
说明:RK3399使用不同的PCIe控制器IP,不在本文档覆盖范围,请参考《Rockchip_RK3399_Developer_Guide_PCIe_CN》。
读者对象
本文档(本指南)主要适用于以下工程师:
- 技术支持工程师
- 软件开发工程师
1. 芯片资源介绍
1.1 RK1808
资源 | 模式 | 支持lane | 支持DMA | 支持MMU | 支持ASPM | 备注 |
---|---|---|---|---|---|---|
PCIe Gen2 | RC | x2 lane | 否 | 否 | L0s/L1 | 内部时钟 |
1.2 RK3528
资源 | 模式 | 支持lane拆分 | 支持DMA | 支持MMU | 支持ASPM | 备注 |
---|---|---|---|---|---|---|
PCIe Gen2 x1 | RC | 否 | 否 | 否 | ALL | 内部时钟 |
1.3 RK3562
资源 | 模式 | 支持lane拆分 | 支持DMA | 支持MMU | 支持ASPM | 备注 |
---|---|---|---|---|---|---|
PCIe Gen2 x1 | RC | 否 | 否 | 否 | ALL | 内部时钟 |
1.4 RK3566
资源 | 模式 | 支持lane拆分 | 支持DMA | 支持MMU | 支持ASPM | 备注 |
---|---|---|---|---|---|---|
PCIe Gen2 x1 | RC | 否 | 否 | 否 | L0s/L1 | 内部时钟 |
1.5 RK3568
1.5.1 控制器
资源 | 模式 | lane拆分 | 支持DMA | 支持MMU | 支持ASPM | 备注 |
---|---|---|---|---|---|---|
PCIe Gen2 | RC | 1 lane only | 否 | 否 | L0s/L1 | 内部时钟 |
PCIe Gen3 | RC/EP | 1 lane RC + 1 lane RC | 2个读Channel + 2个写Channel | 否 | ALL | 支持pcie30phy |
PCIe Gen3 | RC | 1 lane | 否 | 否 | ALL | 支持pcie30phy |
1.5.2 PHY
资源 | dts节点 | 参考时钟 | 拆分 | 是否combo |
---|---|---|---|---|
pcie30phy | phy@fe8c0000 | 外部 | 2Lane:默认 | PCIe专用 |
combphy2_psq | phy@fe840000 | 内部/外部 | 1Lane + 1Lane:rockchip,bifurcation | combo |
说明:pcie30phy 2Lane默认配置为PCIe Gen3 x 2 lane,拆分后“PCIe Gen3 x 2 lane”和“PCIe Gen3 x 1 lane”控制器各1Lane。
1.6 RK3576
资源 | 模式 | 支持lane拆分 | 支持DMA | 支持MMU | 支持ASPM | 备注 |
---|---|---|---|---|---|---|
PCIe Gen2 x1 | RC | 否 | 否 | 是 | ALL | 内部时钟 |
1.7 RK3588
说明: RK3588共有5个PCIe控制器,硬件IP一致,配置不同。其中一个4Lane DM模式可支持作为EP使用,另外2Lane和3个1Lane控制器仅能作为RC使用。 RK3588有两种PCIe PHY,一种为pcie3.0PHY,含2个Port共4个Lane;另一 种是pcie2.0 PHY,每个为2.0 1Lane,与SATA和USB combo使用。 pcie3.0 PHY的4Lane可根据需求拆分使用,拆分后需合理配置对应的控制器,所有配置在DTS中完成,无需修改驱动。
使用限制:
- pcie30phy拆分后,pcie30x4控制器,工作于2Lane模式时只能固定配合pcie30phy的port0,工作 于1Lane模式时,只能固定配合pcie30phy的port0lane0;
- pcie30phy拆分后,pcie30x2控制器,工作于2Lane模式时只能固定配合pcie30phy的port1,工作 于1Lane模式时,只能固定配合pcie30phy的port1lane0;
- pcie30phy拆分为4个1Lane,pcie3phy的port0lane1只能固定配合pcie2x1l0控制器,pcie3phy的 port1lane1只能固定配合pcie2x1l1控制器;
- pcie30x4控制器工作于EP模式,可以使用4Lane模式,或者2Lane模式使用pcie30phy的port0, pcie30phy的port1中2lane可以作为RC配合其他控制器使用。默认使用common clock作为 reference clock时,无法实现pcie30phy port0的lane0工作于EP模式,lane1工作于RC模式配合其 他控制器使用,因为Port0的两个lane是共用一个输入的reference clock,RC和EP同时使用clock可 能会有冲突。
- RK3588 pcie30phy 如果只使用其中一个port,另一个port也需要供电,refclk等其他信号可接地。
1.7.1 控制器
资源 | 模式 | dts节点 | 可用phy | 内部DMA | 支持ASPM | 支持MMU |
---|---|---|---|---|---|---|
PCIe Gen3 x4 | RC/EP | pcie3x4: pcie@fe150000 | pcie30phy | 2个读Channel + 2个写Channel | ALL | 是 |
PCIe Gen3 x2 | RC | pcie3x2: pcie@fe160000 | pcie30phy | 否 | ALL | 是 |
PCIe Gen3 x1 | RC | pcie2x1l0: pcie@fe170000 | pcie30phy, combphy1_ps | 否 | ALL | 是 |
PCIe Gen3 x1 | RC | pcie2x1l1: pcie@fe180000 | pcie30phy, combphy2_psu | 否 | ALL | 是 |
PCIe Gen3 x1 | RC | pcie2x1l2: pcie@fe190000 | combphy0_ps | 否 | ALL | 是 |
1.7.2 PHY
资源 | dts节点 | 参考时钟 | 拆分 | 是否combo |
---|---|---|---|---|
pcie30phy | phy@fee80000 | 外部 | 4Lane:PHY_MODE_PCIE_AGGREGATION 2Lane+2Lane:PHY_MODE_PCIE_NANBNB 2Lane+1Lane+1Lane:PHY_MODE_PCIE_NANBBI 1Lane4:PHY_MODE_PCIE_NABIBI | PCIe专用 |
combphy0_ps | phy@fee00000 | 内部/外部 | - | 与SATA combo |
combphy1_ps | phy@fee10000 | 内部/外部 | - | 与SATA combo |
combphy2_psu | phy@fee20000 | 内部/外部 | - | 与SATA/USB3 combo |
1.8 RK3588S
说明:RK3588S的PCIe较为简单,有2个1Lane控制器和2个可用于pcie 2.0的1Lane comboPHY,是一一对应关系。
1.8.1 控制器
资源 | 模式 | dts节点 | 可用phy | 内部DMA | 支持ASPM | 支持MMU |
---|---|---|---|---|---|---|
PCIe Gen3 x1 | RC | pcie2x1l1: pcie@fe180000 | combphy2_psu | 否 | ALL | 是 |
PCIe Gen3 x1 | RC | pcie2x1l2: pcie@fe190000 | combphy0_ps | 否 | ALL | 是 |
1.8.2 PHY
资源 | dts节点 | 参考时钟 | 拆分 | 是否combo |
---|---|---|---|---|
combphy0_ps | phy@fee00000 | 内部/外部 | - | 与SATA combo |
combphy2_psu | phy@fee20000 | 内部/外部 | - | 与SATA/USB3 combo |
2. DTS 配置
2.1 配置要点
pcie的配置大部分是固定的,需要在板级dts配置的变量并不多,参考以下要点进行配置即可:
- 控制器/PHY使能:根据原理图选择使能正确的控制器和PHY,注意控制器的index和phy的index不一定是顺序匹配的。
- 控制器:部分控制器(如RK3588的pcie2x1l0和pcie2x1l1)有多个phy可选,需按方案设计正确配置“phys”。
- 控制器:作为RC通常需要配置"reset-gpios",对应原理图PCIE的"PERSTn"信号。
- 控制器:作为RC可能需要配置"vpcie3v3-supply",对应PCIE的"PWREN"gpio信号控制的fixed regulator。
- 控制器:作为EP使用时,需要修改"compatible"为EP模式对应字串。
- PHY:pcie30phy共4个lane,可拆分使用,需根据方案正确配置"rockchip,pcie30-phymode"模式。
2.2 RK1808 DTS配置
RK1808的dts配置,所有的实现模式都在SDK的evb代码中有范例可以参考,可以依照下面表中的模式选 择匹配的内容拷贝到产品板级dts中使用。
资源 | 模式 | 参考配置 | 控制器节点 | PHY节点 | 备注 |
---|---|---|---|---|---|
PCIe Gen2 x2 lane | RC | rk1808-evb.dtsi | pcie0 | combphy | 需要关闭usbdrd_dwc3和usbdrd3 |
PCIe Gen2 x2 lane | EP | rk1808-evb.dtsi的pcie0节点 | |||
添加compatible = "rockchip,rk1808-pcie-ep","snps,dw-pcie"; | pcie0 | combphy | 需要关闭usbdrd_dwc3和usbdrd3 |
2.3 RK3528 DTS配置
RK3528的dts配置,所有的实现模式都在SDK的evb代码中有范例可以参考,可以依照下面表中的模式选 择匹配的内容拷贝到产品板级dts中使用
资源 | 模式 | 参考配置 | 控制器节点 | PHY节点 |
---|---|---|---|---|
PCIe Gen2 x1 lane | RC | rk3528-evb2-ddr3-v10.dtsi | pcie2x1 | combphy_pu |
2.4 RK356X DTS配置
RK356x的dts配置,所有的实现模式都在SDK的evb代码中有范例可以参考,可以依照下面表中的模式选 择匹配的内容拷贝到产品板级dts中使用
2.4.1 RK3562 dts
资源 | 模式 | 参考配置 | 控制器节点 | PHY节点 |
---|---|---|---|---|
PCIe Gen2 x1 lane | RC | rk3562-evb1-lp4x-v10.dtsi | pcie2x1 | combphy_pu |
2.4.2 RK3566 dts
资源 | 模式 | 参考配置 | 控制器节点 | PHY节点 |
---|---|---|---|---|
PCIe Gen2 x1 lane | RC | rk3566-evb1-ddr4-v10.dtsi | pcie2x1 | combphy2_psq |
2.4.3 RK3568 dts
资源 | 模式 | 参考配置 | 控制器节点 | PHY节点 |
---|---|---|---|---|
PCIe Gen2 x1 lane | RC | rk3568-evb2-lp4x-v10.dtsi | pcie2x1 | combphy2_psq |
PCIe Gen3 x2 lane | RC | rk3568-evb1-ddr4-v10.dtsi | pcie3x2 | pcie30phy |
PCIe Gen3 拆分1 lane | RC | rk3568-evb6-ddr3-v10.dtsi | pcie3x2 | pcie30phy pcie3x1 |
PCIe Gen3 x2 lane | EP | rk3568-iotest-ddr3-v10.dts | pcie3x2 | pcie30phy |
2.4.4 RK3576 dts
资源 | 模式 | 参考配置 | 控制器节点 | PHY节点 |
---|---|---|---|---|
PCIe Gen2 x1 lane | RC | rk3576-test1.dtsi | pcie0 | combphy0_ps |
PCIe Gen2 x1 lane | RC | rk3576-test1.dtsi | pcie1 | combphy1_psu |
2.5 RK3588 DTS配置
RK3588的控制器和PHY较多,无法在SDK的evb代码中进行穷举所有组合,按配置要点进行配置即可, 这里给出几个典型范例供参考。
2.5.1 示例1 pcie3.0 4Lane RC + 2个pcie 2.0(comboPHY) (RK3588 evb1)
/ {
vcc3v3_pcie30: vcc3v3-pcie30 {
compatible = "regulator-fixed";
regulator-name = "vcc3v3_pcie30";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
enable-active-high;
gpios = <&gpio3 RK_PC3 GPIO_ACTIVE_HIGH>;
startup-delay-us = <5000>;
vin-supply = <&vcc12v_dcin>;
};
};
&combphy1_ps {
status = "okay";
};
&combphy2_psu {
status = "okay";
};
&pcie2x1l0 {
phys = <&combphy1_ps PHY_TYPE_PCIE>;
reset-gpios = <&gpio4 RK_PA5 GPIO_ACTIVE_HIGH>;
status = "okay";
};
&pcie2x1l1 {
phys = <&combphy2_psu PHY_TYPE_PCIE>;
reset-gpios = <&gpio4 RK_PA2 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&rtl8111_isolate>;
status = "okay";
};
&pcie30phy {
rockchip,pcie30-phymode = <PHY_MODE_PCIE_AGGREGATION>;
status = "okay";
};
&pcie3x4 {
reset-gpios = <&gpio4 RK_PB6 GPIO_ACTIVE_HIGH>;
vpcie3v3-supply = <&vcc3v3_pcie30>;
status = "okay";
};