PCIe总线-RK3588 PCIe平台驱动分析(十)

1.简介

RK3588 PCIe RC和EP使用同一个平台驱动,其主要的作用是解析设备树中的资源、初始化中断、使能电源、初始化PHY、使能时钟和释放复位,然后根据compatible属性初始化RC或者EP驱动。

2.入口

平台驱动的定义如下,当compatible属性为"rockchip,rk3588-pcie",则初始化RC驱动,当compatible属性为"rockchip,rk3588-pcie-ep",则初始化EP驱动。入口函数为rk_pcie_probe

[drivers/pci/controller/dwc/pcie-dw-rockchip.c]
static const struct rk_pcie_of_data rk_pcie_rc_of_data = {
	.mode = RK_PCIE_RC_TYPE,
};

static const struct rk_pcie_of_data rk_pcie_ep_of_data = {
	.mode = RK_PCIE_EP_TYPE,
};

static const struct of_device_id rk_pcie_of_match[] = {
	{
		.compatible = "rockchip,rk1808-pcie",
		.data = &rk_pcie_rc_of_data,
	},
	{
		.compatible = "rockchip,rk1808-pcie-ep",
		.data = &rk_pcie_ep_of_data,
	},
	{
		.compatible = "rockchip,rk3568-pcie",
		.data = &rk_pcie_rc_of_data,
	},
	{
		.compatible = "rockchip,rk3568-pcie-ep",
		.data = &rk_pcie_ep_of_data,
	},
	{
		.compatible = "rockchip,rk3588-pcie",
		.data = &rk_pcie_rc_of_data,
	},
	{
		.compatible = "rockchip,rk3588-pcie-ep",
		.data = &rk_pcie_ep_of_data,
	},
	{},
};

MODULE_DEVICE_TABLE(of, rk_pcie_of_match);
static struct platform_driver rk_plat_pcie_driver = {
	.driver = {
		.name	= "rk-pcie",
		.of_match_table = rk_pcie_of_match,
		.suppress_bind_attrs = true,
		.pm = &rockchip_dw_pcie_pm_ops,
	},
	.probe = rk_pcie_probe,
};

module_platform_driver(rk_plat_pcie_driver);

3.初始化流程

驱动的初始化函数rk_pcie_probe可以直接调用,也可以放在内核线程执行(配置CONFIG_PCIE_RK_THREADED_INIT选项)。rk_pcie_probe函数的执行流程如下图所示,主要的工作有:

  1. 设置dw_pcie_ops回调函数,主要用于开始链路循环和查询链路训练是否成功
  2. 从设备树中解析并处理资源,如解析并映射"pcie-dbi"、"pcie-apb"地址,获取PERST#的GPIO和延时时间,延时时间默认为200毫秒。
  3. 获取sys中断编号,注册sys中断处理函数。sys中断的处理函数为rk_pcie_sys_irq_handler
  4. 创建处理INTx中断的irq_domain,将INTx中断映射为虚拟中断。
  5. 获取legacy中断(INTx)编号,注册legacy中断处理函数。同时屏蔽所有INTx中断。legacy中断的处理函数为rk_pcie_legacy_int_handler
  6. 根据设备树配置的模式,设置PCIe模式(通过PCIE_CLIENT_GENERAL_CON寄存器设置)。RC模式,还需要配置CLKREQ#,disable L1 PM Substates。
  7. RC模式,调用rk_add_pcie_port函数初始化。
  8. EP模式,调用rk_pcie_add_ep函数初始化。
  9. 配置DMA功能。

平台驱动初始化流程

参考资料

  1. PCIEXPRESS体系结构导读
  2. PCI Express technology 3.0
  3. PCI Express® Base Specification Revision 5.0 Version 1.0
  4. Rockchip RK3588 TRM
  5. PCI Express® Base Specification Revision 5.0 Version 1.0
  6. Rockchip RK3588 TRM
  7. Linux kernel 5.10
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
移远4G驱动配置需根据RK3588平台的具体情况进行操作。首先,我们需要准备好相应的设备驱动程序,该驱动程序可能包括:PCIE驱动、网络接口驱动、USB驱动等。 1. PCIE驱动配置:首先,我们需要检测RK3588平台上是否有PCIE接口。如果有,可以根据PCIE驱动程序的要求选择相应版本的驱动,并将其加载到RK3588平台上。驱动加载后,我们需要对驱动进行配置,包括设定驱动的参数、查看驱动的状态等。 2. 网络接口驱动配置:移远4G驱动中最重要的部分就是网络接口驱动。首先,我们需要确定RK3588平台上的网络接口类型。根据网络接口的类型,我们可以选择相应的驱动,并将其加载到RK3588平台上。驱动加载后,我们需要对其进行配置,包括设定网络接口的参数、配置网络接口的IP地址、添加网络路由规则等。 3. USB驱动配置:如果RK3588平台上有USB接口,我们可以选择USB驱动的版本,并将其加载到RK3588平台上。驱动加载后,我们需要对其进行配置,包括设定USB接口的参数、配置USB设备的权限等。 在进行驱动配置的过程中,我们需要注意一些细节,如驱动的版本兼容性、驱动的依赖关系等。此外,我们还需要确保所加载的驱动RK3588平台的硬件设备匹配,以确保驱动的稳定性和正常工作。 总之,移远4G驱动配置是一个复杂且需要耐心和经验的过程。根据RK3588平台的具体情况选择相应的驱动程序,并进行正确的配置,可以使4G网络在该平台正常工作和稳定运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值