跳转至

MIU 使用参考


REVISION HISTORY

Revision No.
Description
Date
1.0
  • Initial release
  • 05/06/2025

    1. 概述

    Memory Interface Unit 即内存接口单元,简称MIU,其主要的作用是驱动DRAM硬件,由此衍生提供了诸如初始化dram、提供连续的内存区间管理(MMU)以及调控直连硬件IP读写操作优先级等功能。

    图1-1 MIU框架

    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 使用方法

    1. /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

    2. /sys/devices/system/miu/miu0/bw

      支持统计带宽使用情况。

      示例:查看带宽使用情况

      配置采样128轮(默认32轮):echo 128 > /sys/devices/system/miu/miu0/bw

      查看统计到的带宽数据:cat /sys/devices/system/miu/miu0/bw

    3. /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

    4. /sys/devices/system/miu/miu0/dram_info

      支持查看当前的ddr的相关信息

      示例:查看当前ddr的信息

      cat /sys/devices/system/miu/miu0/dram_info

    5. /sys/devices/system/miu/miu0/ip_table

      支持查看IP与client对应关系

      示例:查看IP与client的对应关系

      cat /sys/devices/system/miu/miu0/ip_table

    5. API参考

    该部分功能模块提供以下接口:

    API名 功能
    drv_miu_module_reset 根据 IP client name 进行reset
    drv_miu_module_reset_byid 根据 IP client id 进行reset
    drv_miu_module_reset_bymultipleid 根据 IP client id_list 进行reset
    drv_miu_module_mask 根据 IP client name 进行mask
    drv_miu_module_mask_byid 根据 IP client id 进行mask
    drv_miu_module_mask_bymultipleid 根据 IP client id_list 进行mask
    drv_miu_client_id_to_name 根据 IP client id 获取IP client name
    drv_miu_protect_query 获取当前空闲的 protect id
    drv_miu_protect_enable 开启设置地址段的地址保护
    drv_miu_protect_disable 关闭对应 protect id 所属的地址保护
    drv_miu_protect_append_id 将对应 IP 加入保护名单
    drv_miu_protect_remove_id 将对应 IP 移出保护名单
    drv_miu_protect_default_kernel_whitelist 获取当前默认的白名单
    drv_miu_protect_default_kernel_blacklist 获取当前默认的黑名单
    drv_miu_protect_list 根据 protect id 获取设置的保护名单信息
    drv_miu_protect_status 获取 protect id 的状态
    drv_miu_protect_address 根据 protect id 获取设置的保护地址信息
    drv_miu_protect_set_panic 开启或者关闭触发保护时 panic
    drv_miu_mmu_set_page_size 设置 mmu 的页大小
    drv_miu_mmu_get_page_size 获取 mmu 的页大小
    drv_miu_mmu_set_region 建立 vpa region 到 pa region 间的映射关系
    drv_miu_mmu_map_entry 建立 vpa entry 到 pa entry 间的映射关系
    drv_miu_mmu_unmap_entry 解除 vpa entry 到对应 pa entry 间的映射关系
    drv_miu_mmu_query_entry 获取当前vpa entry对应的pa entry ID
    drv_miu_mmu_enable 开启或者关闭 mmu 功能
    drv_miu_mmu_reset 进行 mmu 复位
    drv_mmu_callback_func mmu 中断呼叫功能
    drv_miu_dram_info 获取当前使用的dram的参数信息
    drv_miu_init 初始化 MIU
    drv_miu_phy_to_miu 物理地址到 MIU 地址的转换
    drv_miu_addr_to_phy MIU 地址到物理地址的转换

    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 查看当前带宽使用情况

    1. 通过cat /sys/devices/system/miu/miu0/dram_info查看使用DDR颗粒的相关信息

    2. 通过cat /sys/devices/system/miu/miu0/bw来查看对应的使用情况

    6.2 查看当前保护配置信息

    可以通过cat /proc/mi_modules/mi_sys_mma/miu_protect查看相关配置