Edit online

设计说明

3 Mar 2025
Read time: 2 minute(s)

BWM 模块的源代码位于 linux-5.10/drivers/misc/artinchip-bwm.c

BWM 模块主要是监测 DDR 的带宽,所以 BWM 模块的驱动,主要可以分为两部分:

  1. 初始化 BWM,使 BWM 模块可以正常工作,这部分主要在 probe 函数中实现。

  2. 向用户层提供接口,方便用户可以实时查看 DDR 的带宽数据。这部分是通过 sysfs 向用户提供结点,方便用户调用。

关键流程设计

初始化流程
  1. 释放 clock 和 reset 信号

  2. 设置中断触发周期

  3. 申请中断

  4. 创建 sysfs 结点

数据结构设计

管理 BWM 资源数据的结构体
struct bwm_dev {
    struct attribute_group attrs;
    void __iomem    *base;
    struct clk *clk;
    struct reset_control *rst;
    u32 axi_cpu;
    u32 axi_dma;
    u32 axi_de;
    u32 axi_ve;
    u32 ahb_dma;
};

接口设计

1. axi_cpu_show

函数原型

static ssize_t axi_cpu_show(struct device *dev, struct device_attribute *attr, char *buf)

功能说明

显示 CPU 所占带宽

参数定义

  • dev:设备指针
  • attr:unused
  • buf:指向存储结果的指针

返回值

返回写入的字符数

注意事项

-

2. axi_dma_show

函数原型

static ssize_t axi_dma_show(struct device *dev, struct device_attribute *attr, char *buf)

功能说明

显示 DMA 所占带宽

参数定义

  • dev:设备指针
  • attr:unused
  • buf:指向存储结果的指针

返回值

返回写入的字符数

注意事项

-

3. axi_de_show

函数原型

static ssize_t axi_de_show(struct device *dev, struct device_attribute *attr, char *buf)

功能说明

显示 DE 所占带宽

参数定义

  • dev:设备指针
  • attr:unused
  • buf:指向存储结果的指针

返回值

返回写入的字符数

注意事项

-

4. axi_ve_show

函数原型

static ssize_t axi_ve_show(struct device *dev, struct device_attribute *attr, char *buf)

功能说明

显示 ve 所占带宽

参数定义

  • dev:设备指针
  • attr:unused
  • buf:指向存储结果的指针

返回值

返回写入的字符数

注意事项

-

5. ahb_dma_show

函数原型

static ssize_t ahb_dma_show(struct device *dev, struct device_attribute *attr, char *buf)

功能说明

显示 ahb dma 所占带宽

参数定义

  • dev:设备指针
  • attr:unused
  • buf:指向存储结果的指针

返回值

返回写入的字符数

注意事项

-

6. enable_store

函数原型

static ssize_t enable_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t size)

功能说明

打开或关闭 BWM 模块

参数定义

  • dev:设备指针
  • attr:unused
  • buf:指向操作字符串的指针
  • size:字符串长度

返回值

返回写入的字符数

注意事项

7. set_period_store

函数原型

static ssize_t set_period_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t size)

功能说明

显示 dma 所占带宽

参数定义

  • dev:设备指针
  • attr:unused
  • buf:指向操作字符串的指针
  • size:字符串长度

返回值

返回写入的字符数

注意事项

-