MIU 使用参考¶
REVISION HISTORY¶
| Revision No. | Description |
Date |
|---|---|---|
| 1.0 | 05/06/2025 |
1. 概述¶
Memory Interface Unit 即内存接口单元,简称MIU,其主要的作用是驱动DRAM硬件,由此衍生提供了诸如初始化dram、提供连续的内存区间管理(MMU)以及调控直连硬件IP读写操作优先级等功能。

2. 关键字说明¶
IP:Intellectual Property,连接MIU模块的各个模块组件。
ARBITER:仲裁器,用于接收并且管理各个模块访问内存的请求。
DDRC:管理器,用于处理DDR内存的访问协议和逻辑管理。
DDRPHY:物理通道,用于将DDRC发出的数字逻辑信号转换为符合DRAM电气特性的模拟信号。
3. 功能描述¶
-
Memory Management Unit 即内存管理单元(MMU),负责处理和响应来自中央处理器(CPU)的内存访问请求。
-
Address Protection, 地址保护,可以通过设置地址保护功能来限制IP只能进行固定形式的内存访问行为,并且在出现非预期行为时提供告警。
-
Multistage Arbitration, 多级仲裁,一般通过多级仲裁处理器来管理理来自IP的内存访问请求。
-
Bandwidth Report,带宽报告,支持统计ddr的实时带宽使用情况。
-
支持DDR3/LPDDR3/DDR4/LPDDR4/LPDDR4x等ddr颗粒。
-
支持低功耗设计,可以通过控制ddr进自刷新来达到省电效果。
4. Kernel用法介绍¶
4.1. Kernel Config配置¶
Linux使用MIU,需要配置(默认启用):
CONFIG_SGS_MIU=y
menuconfig选择的配置如下:
Device drivers->
<*> Sgs SoC platform drivers->
<*> Sgs MIU
4.2. 模块使用介绍¶
4.2.1 SYSFS 使用方法¶
-
/sys/devices/system/miu/miu0/bist
支持配置模拟IP访问ddr进行测试。
命令格式:echo [mode] [rwmode] [bist-x] > /sys/devices/system/miu/miu0/bist
参数 说明备注 mode 可配置oneshot(仅一次访问)或者LOOP(循环访问)两种模式 rwmode 可配置rw(读写)wo(只写)rw(只读) bist-x 可配置启动几管bist,all代表全部启动,配置0/ 1/ 2是启动单管的 可通过cat bist节点查看每管bist的配置 示例:启动全部bist单次访问ddr
echo oneshot rw all > /sys/devices/system/miu/miu0/bist
示例:启动全部bist循环访问ddr
启动:echo loop rw all > /sys/devices/system/miu/miu0/bist
停止:echo stop all > /sys/devices/system/miu/miu0/bist
-
/sys/devices/system/miu/miu0/bw
支持统计带宽使用情况。
示例:查看带宽使用情况
配置采样128轮(默认32轮):echo 128 > /sys/devices/system/miu/miu0/bw
查看统计到的带宽数据:cat /sys/devices/system/miu/miu0/bw
-
/sys/devices/system/miu/miu0/client
支持配置和查看每个client的优先级参数。
配置优先级的命令格式:echo qos [rwmode] [clientid] [level] > /sys/devices/system/miu/miu0/client
参数 说明备注 rwmode 可配置r(读)或者w(写) clientid 配置需要配置ip的id level 可配置0-7等级,0级优先级最低,7级优先级最高 示例:设定bist0的写请求优先级配置到最高
echo qos w 0xf 7 > /sys/devices/system/miu/miu0/client
配置阻止IP访问的命令格式:echo mask [rwmode] [clientid] [enable] > /sys/devices/system/miu/miu0/client
参数 说明备注 rwmode 可配置r(读)或者w(写) clientid 配置需要配置ip的id enable 可配置0或者1,0代表关闭,1代表打开 示例:设定阻止bist0的写操作访问
echo mask w 0xf 1 > /sys/devices/system/miu/miu0/client
配置限制IP访问命令格式:echo flowctrl [rwmode] [clientid] [enable] [maskperiod] [passperiod] > /sys/devices/ system/miu/miu0/client
参数 说明备注 rwmode 可配置r(读)或者w(写) clientid 配置需要配置ip的id enable 可配置0或者1,0代表关闭,1代表打开 maskperiod 可配置阻挡周期,取值0-ff 取值越高限制越强 passperiod 可配置通行周期,取值0-3 取值越低限制越强 示例:设定给bist0的写请求加强限制
开启:echo flowctrl w 0xf 1 0xff 1 > /sys/devices/system/miu/miu0/client
关闭:echo flowctrl w 0xf 0 > /sys/devices/system/miu/miu0/client
-
/sys/devices/system/miu/miu0/dram_info
支持查看当前的ddr的相关信息
示例:查看当前ddr的信息
cat /sys/devices/system/miu/miu0/dram_info

-
/sys/devices/system/miu/miu0/ip_table
支持查看IP与client对应关系
示例:查看IP与client的对应关系
cat /sys/devices/system/miu/miu0/ip_table

5. API参考¶
该部分功能模块提供以下接口:
5.1 Client Function 部分¶
5.1.1 drv_miu_module_reset¶
-
功能
根据IP name 进行reset。
-
语法
s32 drv_miu_module_reset(char* ClientName, DRV_MIU_OP_MODE Op); -
形参
参数名称 描述 输入/输出 ClientName IP对应的client name 输入 Op 操作enum 输入 Op说明如下所示:
typedef enum { DRV_MIU_OP_MODE_RD = 0, //read command DRV_MIU_OP_MODE_WR, //write command DRV_MIU_OP_MODE_MAX, //invalid } DRV_MIU_OP_MODE; -
返回值
-
0:成功
-
非0:失败
-
-
依赖
- 头文件:drv_miu.h
5.1.2 drv_miu_module_reset_byid¶
-
功能
根据IP 对应的client id 进行reset。
-
语法
s32 drv_miu_module_reset_byid(miu_client_id ClientID, DRV_MIU_OP_MODE Op); -
形参
参数名称 描述 输入/输出 ClientID IP对应的client ID 输入 Op 操作enum 输入 -
返回值
-
0:成功
-
非0:失败
-
-
依赖
- 头文件:drv_miu.h
5.1.3 drv_miu_module_reset_bymultipleid¶
-
功能
根据同一个group的IP client id list进行reset。
-
语法
s32 drv_miu_module_reset_bymultipleid(u32 *ClientIDList, u32 ClientIDListLen, DRV_MIU_OP_MODE Op); -
形参
参数名称 描述 输入/输出 ClientIDList 同一个group的IP client id 数组 输入 ClientIDListLen IP client id 数组长度 输入 Op 操作enum 输入 -
返回值
-
0:成功
-
非0:失败
-
-
依赖
- 头文件:drv_miu.h
5.1.4 drv_miu_module_mask¶
-
功能
根据IP name 进行mask。
-
语法
s32 drv_miu_module_mask(char *ClientName, DRV_MIU_OP_MODE Op, u8 mask); -
形参
参数名称 描述 输入/输出 ClientName IP对应的client name 输入 Op 操作enum 输入 mask 开启或关闭mask 输入 -
返回值
-
0:成功
-
非0:失败
-
-
依赖
- 头文件:drv_miu.h
5.1.5 drv_miu_module_mask_byid¶
-
功能
根据IP 对应的client id 进行mask。
-
语法
s32 drv_miu_module_mask_byid(miu_client_id ClientID, DRV_MIU_OP_MODE Op, u8 mask); -
形参
参数名称 描述 输入/输出 ClientID IP对应的client ID 输入 Op 操作enum 输入 mask 开启或关闭mask 输入 -
返回值
-
0:成功
-
非0:失败
-
-
依赖
- 头文件:drv_miu.h
5.1.6 drv_miu_module_mask_bymultipleid¶
-
功能
根据同一个group的IP client id list进行mask。
-
语法
s32 drv_miu_module_mask_bymultipleid(u32 *ClientIDList, u32 ClientIDListLen, DRV_MIU_OP_MODE Op, u8 mask); -
形参
参数名称 描述 输入/输出 ClientIDList 同一个group的IP client id 数组 输入 ClientIDListLen IP client id 数组长度 输入 Op 操作enum 输入 mask 开启或关闭mask 输入 -
返回值
-
0:成功
-
非0:失败
-
-
依赖
- 头文件:drv_miu.h
5.1.7 drv_miu_client_id_to_name¶
-
功能
根据IP的 client id 获取IP的 client name。
-
语法
char* drv_miu_client_id_to_name(u16 id, DRV_MIU_OP_MODE Op); -
形参
参数名称 描述 输入/输出 id IP对应的client ID 输入 Op 操作enum 输入 -
返回值
-
成功: 返回对应的client name
-
失败: NULL
-
-
依赖
- 头文件:drv_miu.h
5.2 Protect Function 部分¶
5.2.1 drv_miu_protect_query¶
-
功能
获取当前空闲的protect id。
-
语法
u8 drv_miu_protect_query(u8 mmu); -
形参
参数名称 描述 输入/输出 mmu 控制是miu protect还是mmu protect 输入 -
返回值
- 返回可用的protect id
-
依赖
- 头文件:drv_miu.h
5.2.2 drv_miu_protect_enable¶
-
功能
开启设置地址段的地址保护。
-
语法
s32 drv_miu_protect_enable(u8 index, u16* list, u8 invert, ss_phys_addr_t start, ss_phys_addr_t end); -
形参
参数名称 描述 输入/输出 index 对应protect的序号 输入 list 需要设置的保护IP的ID名单 输入 invert 控制白名单还是黑名单 输入 start 起始地址 输入 end 结束地址 输入 -
返回值
-
0:成功
-
非0:失败
-
-
依赖
- 头文件:drv_miu.h
5.2.3 drv_miu_protect_disable¶
-
功能
关闭对应 protect id 所属的地址保护。
-
语法
s32 drv_miu_protect_disable(u8 index); -
形参
参数名称 描述 输入/输出 index protect的序号 输入 -
返回值
-
0:成功
-
非0:失败
-
-
依赖
- 头文件:drv_miu.h
5.2.4 drv_miu_protect_append_id¶
-
功能
将对应IP加入保护名单。
-
语法
s32 drv_miu_protect_append_id(u8 index, u16 id); -
形参
参数名称 描述 输入/输出 index protect的序号 输入 id IP的 client id 输入 -
返回值
-
0:成功
-
非0:失败
-
-
依赖
- 头文件:drv_miu.h
5.2.5 drv_miu_protect_remove_id¶
-
功能
将对应IP移出保护名单。
-
语法
s32 drv_miu_protect_remove_id(u8 index, u16 id); -
形参
参数名称 描述 输入/输出 index protect的序号 输入 id IP的 client id 输入 -
返回值
-
0:成功
-
非0:失败
-
-
依赖
- 头文件:drv_miu.h
5.2.6 drv_miu_protect_default_kernel_whitelist¶
-
功能
获取当前默认的白名单。
-
语法
u16* drv_miu_protect_default_kernel_whitelist(void); -
形参
- void
-
返回值
- 返回默认白名单的id 数组
-
依赖
- 头文件:drv_miu.h
5.2.7 drv_miu_protect_default_kernel_blacklist¶
-
功能
获取当前默认的黑名单。
-
语法
u16* drv_miu_protect_default_kernel_blacklist(void); -
形参
- void
-
返回值
- 返回默认黑名单的id 数组
-
依赖
- 头文件:drv_miu.h
5.2.8 drv_miu_protect_list¶
-
功能
根据protect id获取设置的保护名单信息。
-
语法
u16* drv_miu_protect_list(u8 index, u8* invert); -
形参
参数名称 描述 输入/输出 index 对应protect的序号 输入 invert 控制白名单还是黑名单 输入 -
返回值
- 成功:返回对应序号的保护名单的id 数组
- 失败:返回NULL
-
依赖
- 头文件:drv_miu.h
5.2.9 drv_miu_protect_status¶
-
功能
获取当前protect id的状态。
-
语法
s32 drv_miu_protect_status(u8 index); -
形参
参数名称 描述 输入/输出 index 对应protect的序号 输入 -
返回值
-
0:成功
-
非0:失败
-
-
依赖
- 头文件:drv_miu.h
5.2.10 drv_miu_protect_address¶
-
功能
根据protect id获取设置的保护地址信息。
-
语法
u16* drv_miu_protect_address(u8 index, ss_phys_addr_t *start, ss_phys_addr_t *end); -
形参
参数名称 描述 输入/输出 index 对应protect的序号 输入 start 起始地址 输出 end 结束地址 输出 -
返回值
-
0:获取地址成功
-
非0:获取地址失败
-
-
依赖
- 头文件:drv_miu.h
5.2.11 drv_miu_protect_set_panic¶
-
功能
当 protect hit 发生的时候,设置是否打开kernel panic
-
语法
void drv_miu_protect_set_panic(u8 enable); -
形参
参数名称 描述 输入/输出 enable panic的使能控制 输入 -
返回值
- void
-
依赖
- 头文件:drv_miu.h
5.3 MMU Function 部分¶
5.3.1 drv_miu_mmu_set_page_size¶
-
功能
设置mmu的页大小。
-
语法
s32 drv_miu_mmu_set_page_size(u8 page_mode); -
形参
参数名称 描述 输入/输出 page_mode 页大小 输入 page_mode可取值:MMU_PAGE_SIZE_32K/MMU_PAGE_SIZE_64K/MMU_PAGE_SIZE_128K
-
返回值
-
0:成功
-
非0:失败
-
-
依赖
- 头文件:drv_miu.h
5.3.2 drv_miu_mmu_get_page_size¶
-
功能
获取mmu的页大小。
-
语法
u32 drv_miu_mmu_get_page_size(void); -
形参
- void
-
返回值
-
失败:0
-
成功:返回当前设置的page size
-
-
依赖
- 头文件:drv_miu.h
5.3.3 drv_miu_mmu_set_region¶
-
功能
建立vpa region到pa region间的映射关系。
-
语法
s32 drv_miu_mmu_set_region(u16 vpa_region, u16 pa_region); -
形参
参数名称 描述 输入/输出 vpa_region vpa对应的region id 输入 pa_region pa对应的region id 输入 -
返回值
-
0:成功
-
非0:失败
-
-
依赖
- 头文件:drv_miu.h
5.3.4 drv_miu_mmu_map_entry¶
-
功能
建立vpa entry到pa entry间的映射关系。
-
语法
s32 drv_miu_mmu_map_entry(u16 vpa_entry, u16 pa_entry); -
形参
参数名称 描述 输入/输出 vpa_entry vpa对应的entry id 输入 pa_entry pa对应的entry id 输入 -
返回值
-
0:成功
-
非0:失败
-
-
依赖
- 头文件:drv_miu.h
5.3.5 drv_miu_mmu_unmap_entry¶
-
功能
解除vpa entry 到对应pa entry间的映射关系。
-
语法
s32 drv_miu_mmu_unmap_entry(u16 vpa_entry); -
形参
参数名称 描述 输入/输出 vpa_entry vpa对应的entry id 输入 -
返回值
-
0:成功
-
非0:失败
-
-
依赖
- 头文件:drv_miu.h
5.3.6 drv_miu_mmu_query_entry¶
-
功能
获取当前vpa entry对应的pa entry id。
-
语法
u16 drv_miu_mmu_query_entry(u16 vpa_entry); -
形参
参数名称 描述 输入/输出 vpa_entry vpa对应的entry id 输入 -
返回值
- 成功:返回对应的pa entry id
-
依赖
- 头文件:drv_miu.h
5.3.7 drv_miu_mmu_enable¶
-
功能
开启或关闭mmu功能。
-
语法
s32 drv_miu_mmu_enable(u8 enable); -
形参
参数名称 描述 输入/输出 enable 使能控制 输入 -
返回值
-
0:成功
-
非0:失败
-
-
依赖
- 头文件:drv_miu.h
5.3.8 drv_miu_mmu_reset¶
-
功能
MMU 复位功能。
-
语法
s32 drv_miu_mmu_reset(void); -
形参
- void
-
返回值
-
0:成功
-
非0:失败
-
-
依赖
- 头文件:drv_miu.h
5.3.9 drv_mmu_callback_func¶
-
功能
提供一个mmu回调函数
-
语法
void drv_mmu_callback_func(drv_mmu_irq_callback func); -
形参
参数名称 描述 输入/输出 fun 用于描述回调函数 输入 -
返回值
- void
-
依赖
- 头文件:drv_miu.h
5.4 Misc Function 部分¶
5.4.1 drv_miu_dram_info¶
-
功能
获取当前使用的dram的参数信息。
-
语法
s32 drv_miu_dram_info(struct miu_dram_info* dram); -
形参
参数名称 描述 输入/输出 dram dram参数信息 输出 -
返回值
-
0:成功
-
非0:失败
-
-
依赖
- 头文件:drv_miu.h
5.4.2 drv_miu_init¶
-
功能
初始化MIU相关的protect 中断、优先级等默认设定。
-
语法
s32 drv_miu_init(void); -
形参
- void
-
返回值
-
0:成功
-
非0:失败
-
-
依赖
- 头文件:drv_miu.h
5.4.3 drv_miu_phy_to_miu¶
-
功能
将物理地址转为MIU地址。
-
语法
ss_miu_addr_t drv_miu_phy_to_miu(ss_phys_addr_t phy_addr); -
形参
参数名称 描述 输入/输出 phy_addr 物理地址 输入 -
返回值
- miu 地址
-
依赖
- 头文件:drv_miu.h
5.4.4 drv_miu_addr_to_phy¶
-
功能
将MIU地址转为物理地址。
-
语法
ss_phys_addr_t drv_miu_addr_to_phy(ss_miu_addr_t miu_addr); -
形参
参数名称 描述 输入/输出 miu_addr miu 地址 输入 -
返回值
- 物理地址
-
依赖
- 头文件:drv_miu.h
5.5 数据结构说明¶
-
说明
定义dram相关参数信息。
-
定义
struct miu_dram_info { u64 size; u32 dram_freq; u32 miupll_freq; u8 type; u8 data_rate; u8 bus_width; u8 ssc; }; -
成员
成员名称 描述 size DRAM的大小,以MB为单位 dram_freq DRAM的频率,以MHz为单位 miupll_freq miupll的频率,以MHz为单位 type DRAM的类型,如DDR3/DDR4等 data_rate 传输模式,是4x mode还是8x mode bus_width 传输位宽,是16 bit/32 bit/64 bit ssc 展频是否开启
6. FAQ¶
6.1 查看当前带宽使用情况¶
-
通过cat /sys/devices/system/miu/miu0/dram_info查看使用DDR颗粒的相关信息
-
通过cat /sys/devices/system/miu/miu0/bw来查看对应的使用情况
6.2 查看当前保护配置信息¶
可以通过cat /proc/mi_modules/mi_sys_mma/miu_protect查看相关配置