Rockchip RK3588 kernel dts解析之PCIe

Rockchip RK3588 kernel dts解析之PCIe

RK3588控制器

RK3588共有5个PCIe控制器:

  • 1个4Lane控制器,DM模式可以支持作为EP使用
  • 1个2Lane控制器,只能作为RC使用
  • 3个1Lane控制器,只能作为RC使用

控制器在DTS对应节点名称
RK3588

控制器DTS节点名称配对的PHY
PCIe Gen3 x 4Lanepcie3x4:pcie@fe150000pcie30phy
PCIe Gen3 x 2Lanepcie3x2:pcie@fe160000pcie30phy
PCIe Gen3 x 1Lanepcie2x1l0:pcie@fe170000pcie30phy
combphy1_ps
PCIe Gen3 x 1Lanepcie2x1l1:pcie@fe180000pcie30phy
combphy2_psu
PCIe Gen3 x 1Lanepcie2x1l2:pcie@fe190000combphy0_ps

RK3588S

控制器DTS节点名称配对的PHY
PCIe Gen3 x 1Lanepcie2x1l1:pcie@fe180000pcie30phy
combphy2_psu
PCIe Gen3 x 1Lanepcie2x1l2:pcie@fe190000combphy0_ps

RK3588 PHY

RK3588有两种PCIe PHY:

  • 一种为pcie3.0PHY,含2个Port共4个Lane,可以根据实际需求拆分使用
  • 一种是pcie2.0的PHY有3个,每个都是2.0 1Lane,跟SATA和USB combo使用

PHY在DTS中对应的节点名称
RK3588

PHY名称DTS节点名称是否复用
pcie30phyphy@fee80000pcie专用
combphy0_psphy@fee00000与SATA复用
combphy1_psphy@fee10000与SATA复用
combphy2_psuphy@fee20000与SATA/USB3复用

RK3588S

PHY名称DTS节点名称是否复用
combphy0_psphy@fee00000与SATA复用
combphy2_psuphy@fee20000与SATA/USB3复用

使用限制

  • 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等其他信号可接地。

DTS配置解析

pcie的配置大部分是固定的,需要在板级dts配置的变量并不多参考以下要点进行配置即可:

  • 控制器/PHY使能:确定方案后,根据原理图选择使能正确的控制器和PHY,注意控制器的index和phy的index不一定是顺序匹配的,如RK3588的pcie2x1l0不是对应combphy0_ps;
  • 控制器:部分控制器(如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"模式;

参考设计硬件RK3588-EVB1 对应DTS:rk3588-evb1-lp4-v10.dts

硬件设计

pcie3.0 4Lane RC + 2个pcie 2.0(复用的PHY分别对应 MUX1:combphy1_ps 和MUX2:combphy2_psu )
在这里插入图片描述

软件DTS配置

PCIe的具体DTS配置在arch/arm64/boot/dts/rockchip/rk3588-evb1-lp4.dtsi

电源部分的配置:

    pcie20_avdd0v85: pcie20-avdd0v85 {
            compatible = "regulator-fixed";
            regulator-name = "pcie20_avdd0v85";
            regulator-boot-on;
            regulator-always-on;
            regulator-min-microvolt = <850000>;
            regulator-max-microvolt = <850000>;
            vin-supply = <&avdd_0v85_s0>;
    };

    pcie20_avdd1v8: pcie20-avdd1v8 {
            compatible = "regulator-fixed";
            regulator-name = "pcie20_avdd1v8";
            regulator-boot-on;
            regulator-always-on;
            regulator-min-microvolt = <1800000>;
            regulator-max-microvolt = <1800000>;
            vin-supply = <&avcc_1v8_s0>;
    };

    pcie30_avdd0v75: pcie30-avdd0v75 {
            compatible = "regulator-fixed";
            regulator-name = "pcie30_avdd0v75";
            regulator-boot-on;
            regulator-always-on;
            regulator-min-microvolt = <750000>;
            regulator-max-microvolt = <750000>;
            vin-supply = <&avdd_0v75_s0>;
    };

    pcie30_avdd1v8: pcie30-avdd1v8 {
            compatible = "regulator-fixed";
            regulator-name = "pcie30_avdd1v8";
            regulator-boot-on;
            regulator-always-on;
            regulator-min-microvolt = <1800000>;
            regulator-max-microvolt = <1800000>;
            vin-supply = <&avcc_1v8_s0>;
    };
# PCIe3.0的GPIO控制电源的配置
      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>;
        };

PCIE控制器的配置
控制的详细配置在rk3588.dtsi中 ,对应的phy的指定也已经默认配置好,如需要重新配置phy可以修改

phys = <&pcie30phy>;
phys = <&combphy1_ps PHY_TYPE_PCIE>;

RK3588的pcie2x1l0和pcie2x1l1控制器可以路由到多个phy,需要注意的是不同的phy引用方式可能有差异,comboPHY需要同时指定phy的工作模式

用于WIFI模块
&pcie2x1l0 {
        reset-gpios = <&gpio4 RK_PA5 GPIO_ACTIVE_HIGH>;
        rockchip,skip-scan-in-resume;
        status = "okay";
};
用于以太网模块
&pcie2x1l1 {
        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>;  //配置PCIE3.0的reset脚
        vpcie3v3-supply = <&vcc3v3_pcie30>;   //配置对应的电源
        status = "okay";
};

PHY的配置

硬件原图上面对应的是MUX1
&combphy1_ps {
        status = "okay";
};
硬件原图上面对应的是MUX2
&combphy2_psu {
        status = "okay";
};

其他常见的PCIE配置对应的DTS配置实例

pcie3.0phy拆分2个2Lane RC, 3个PCIe 2.0 1Lane(comboPHY)

注意:如果pcie3.0phy拆分2个2Lane,但是只用一组的话,需要把另一组disabled,但是关掉的那组的pcie的电源还是要供着,否则会导致pcie异常无法使用。

/ {
	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>;
	};
};
&combphy0_ps {
	status = "okay";
};
&combphy1_ps {
	status = "okay";
};
&combphy2_psu {
	status = "okay";
};
&pcie2x1l0 {
	phys = <&combphy1_ps PHY_TYPE_PCIE>;
	reset-gpios = <&gpio4 RK_PA5 GPIO_ACTIVE_HIGH>;
	vpcie3v3-supply = <&vcc3v3_pcie30>;
	status = "okay";
};
&pcie2x1l1 {
	phys = <&combphy2_psu PHY_TYPE_PCIE>;
	reset-gpios = <&gpio4 RK_PA2 GPIO_ACTIVE_HIGH>;
	vpcie3v3-supply = <&vcc3v3_pcie30>;
	status = "okay";
};
&pcie2x1l2 {
	reset-gpios = <&gpio4 RK_PC1 GPIO_ACTIVE_HIGH>;
	vpcie3v3-supply = <&vcc3v3_pcie30>;
	status = "okay";
};
&pcie30phy {
	rockchip,pcie30-phymode = <PHY_MODE_PCIE_NANBNB>;
	status = "okay";
};
//表示lane2/3
&pcie3x2 {
	reset-gpios = <&gpio4 RK_PB0 GPIO_ACTIVE_HIGH>;
	vpcie3v3-supply = <&vcc3v3_pcie30>;
	status = "okay";
};
//表示lane0/1
&pcie3x4 {
	num-lanes = <2>;
	reset-gpios = <&gpio4 RK_PB6 GPIO_ACTIVE_HIGH>;
	vpcie3v3-supply = <&vcc3v3_pcie30>;
	status = "okay";
};
pcie3.0phy拆分为4个1Lane, 1个使用PCIe 2.0 1 Lane(comboPHY)
/ {
	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>;
	};
}&combphy0_ps {
	status = "okay";
};
&pcie2x1l0 {
	phys = <&pcie30phy>;
	reset-gpios = <&gpio4 RK_PA5 GPIO_ACTIVE_HIGH>;
	vpcie3v3-supply = <&vcc3v3_pcie30>;
	status = "okay";
};
&pcie2x1l1 {
	phys = <&pcie30phy>;
	reset-gpios = <&gpio4 RK_PA2 GPIO_ACTIVE_HIGH>;
	vpcie3v3-supply = <&vcc3v3_pcie30>;
	status = "okay";
};
&pcie2x1l2 {
	reset-gpios = <&gpio4 RK_PC1 GPIO_ACTIVE_HIGH>;
	vpcie3v3-supply = <&vcc3v3_pcie30>;
	status = "okay";
};
&pcie30phy {
	rockchip,pcie30-phymode = <PHY_MODE_PCIE_NABIBI>;
	status = "okay";
};
&pcie3x2 {
	num-lanes = <1>;
	reset-gpios = <&gpio4 RK_PB0 GPIO_ACTIVE_HIGH>;
	vpcie3v3-supply = <&vcc3v3_pcie30>;
	status = "okay";
};
&pcie3x4 {
	num-lanes = <1>;
	reset-gpios = <&gpio4 RK_PB6 GPIO_ACTIVE_HIGH>;
	vpcie3v3-supply = <&vcc3v3_pcie30>;
	status = "okay";
};

PCIE的详细说明文档可以参考Rockchip RK3588 Android SDK的如下文档

RKDocs/common/PCie/Rockchip_Developer_Guide_PCIe_CN.pdf 

返回 RK3588 Kernel DTS解析 专栏

  • 15
    点赞
  • 106
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 17
    评论
Rockchip RK3588是一款高性能的芯片,主要用于移动设备和嵌入式系统。它支持USB接口,可以用于连接外部设备,并进行数据传输和通信。 关于Rockchip RK3588 USB开发指南,以下是一些建议和指导: 1. 创建USB连接:首先,需要在嵌入式系统中创建一个USB连接。这可以通过配置硬件和软件来完成。硬件方面,需要确保RK3588芯片和USB接口的正确连接。软件方面,可以使用相应的驱动程序和库来管理和控制USB连接。 2. USB驱动程序开发:为了实现与外部设备的数据交换,需要编写USB驱动程序。这些驱动程序可以通过使用底层的USB协议和API来完成。可以选择使用已有的USB驱动程序框架,如libusb等,也可以根据具体需求自行编写驱动程序。 3. 数据传输和通信:一旦USB连接建立并配置完毕,就可以通过USB接口进行数据传输和通信。可以使用USB的各种传输模式,如批量传输、中断传输或等时传输,根据实际需求选择合适的模式。 4. USB设备接口开发:如果需要将RK3588芯片作为USB设备使用,还需要进行USB设备接口开发。可以根据设备规范和需求,设计并实现相应的USB接口。 5. 软件开发工具:为了更便捷地进行Rockchip RK3588 USB开发,可以使用相应的软件开发工具。Rockchip提供了开发工具包(SDK)和调试工具,可以加快开发过程,并提供调试和优化的功能。 总之,Rockchip RK3588 USB开发指南涵盖了创建USB连接、USB驱动程序开发、数据传输和通信、USB设备接口开发等内容。通过合理的设计和开发,可以充分利用RK3588的强大性能和USB接口的灵活性,实现丰富的移动设备和嵌入式系统功能。
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

loitawu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值