7.6.5. 设计说明
7.6.5.1. 源码说明
源代码位于:drivers/misc/zx-pbus.c
7.6.5.2. 模块架构
PBus对用户来说,只需要能够设置一些信号参数即可,所以将其归入Linux内核中的Misc设备。
不需要运行时修改参数,所以也不需要单独创建设备节点,PBus驱动会用DTS方式来解析和设置信号参数。
7.6.5.3. 关键流程设计
7.6.5.3.1. 初始化流程
PBus 模块遵循platform_driver的通用初始化流程,申请regs资源、clk、reset,然后从DTS中解析参数并写入PBus控制器。
在probe()接口的最后面,会顺次调用三个接口来设置PBus的三个CFG寄存器:
pbus_set_cfg0(&pdev->dev, pbus->base);
pbus_set_cfg1(&pdev->dev, pbus->base);
pbus_set_cfg2(&pdev->dev, pbus->base);
7.6.5.4. 数据结构设计
7.6.5.4.1. pbus_dev
管理 PBus 控制器的设备资源:
struct pbus_dev {
void __iomem *base;
struct platform_device *pdev;
struct attribute_group attrs;
struct clk *clk;
struct reset_control *rst;
};
7.6.5.5. 接口设计
以下是提供给 probe() 调用的三个内部接口:
7.6.5.5.1. pbus_set_cfg0
函数原型 |
static void pbus_set_cfg0(struct device *dev, void __iomem *base) |
---|---|
功能说明 |
从DTS中解析参数,并设置PBus的寄存器 PBUS_CFG0 |
参数定义 |
dev - 指向PBus设备
base - PBus寄存器基地址的映射地址
|
返回值 |
无 |
注意事项 |
7.6.5.5.2. pbus_set_cfg1
函数原型 |
static void pbus_set_cfg1(struct device *dev, void __iomem *base) |
---|---|
功能说明 |
从DTS中解析参数,并设置PBus的寄存器 PBUS_CFG1 |
参数定义 |
dev - 指向PBus设备
base - PBus寄存器基地址的映射地址
|
返回值 |
无 |
注意事项 |
7.6.5.5.3. pbus_set_cfg2
函数原型 |
static void pbus_set_cfg2(struct device *dev, void __iomem *base) |
---|---|
功能说明 |
从DTS中解析参数,并设置PBus的寄存器 PBUS_CFG2 |
参数定义 |
dev - 指向PBus设备
base - PBus寄存器基地址的映射地址
|
返回值 |
无 |
注意事项 |