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寄存器基地址的映射地址

返回值

注意事项