跳转至

MI VIF DEBUG SOP


REVISION HISTORY

Revision No.
Description
Date
1.0
  • Initial release
  • 06/19/2024
    1.1
  • 补充VIF 帧率及中断异常的排查说明
  • 07/05/2024

    1. 前言

    本文档旨在介绍遇到MI VIF和Sensor相关问题时,如何进行初步排查,快速定位问题,以及确定是Sigmastar SDK问题后,需提供哪些信息给RD分析。

    1.1 Vif Debug常用的基本操作和指令

    1.1.1 vif_ints

    • 调试信息

      #cat /proc/mi_modules/mi_vif/debug_hal/vif0/vif_ints
      

    • 调试信息分析

      记录帧周期、当前VIF Channel/Wdma/Aff的使用状况以及统计相关的中断次数。

    • 参数说明

      参数 描述
      VIF CH CH State CH当前状态
      Interval(us) 帧间隔时间
      VREF_FALLING VSYNC 中断数量,并显示最近一次发生中断时间戳
      LINE_CNT_0 Total line count hit 0 中断数量,并显示最近一次发生中断时间戳
      LINE_CNT_1 Total line count hit 1 中断数量,并显示最近一次发生中断时间戳
      TOTAL_PIX_CNT Total pixel count hit 中断数量,并显示最近一次发生中断时间戳
      VIF WDMA WDMA State Wdma当前状态
      FrameStart Wdma Frame start 中断数量,并显示最近一次发生中断时间戳
      LINE_CNT Wdma Line count hit 中断数量,并显示最近一次发生中断时间戳
      FrameDone Wdma Frame done 中断数量,并显示最近一次发生中断时间戳
      VIF FIFO Aff State Afifo当前状态
      AFF Count Fifo full 中断数量,并显示最近一次发生中断时间戳

    1.1.2 vif_info

    • 调试信息

      #cat /proc/mi_modules/mi_vif/debug_hal/vif0/vif_info
      

    • 调试信息分析

      记录从暂存器获得的VIF基本设定。

    • 参数说明

      参数 描述
      CH State CH当前状态
      vg Group号
      link 连结模式:
      E_VIF_LINK_PATH_TYPE_FRAME_WDMA
      E_VIF_LINK_PATH_TYPE_REAL_ISP
      E_VIF_LINK_PATH_TYPE_REAL_SCL
      CH_EN 当前VIF channel号使能
      SRC VIF来源选择
      INPUT_FMT 数据格式
      PIX_FMT 输出位宽
      CROP_EN 裁剪使能
      CROP_START_X 读取裁剪水平数据
      CROP_START_Y 读取裁剪垂直数据
      PIXEL_CNT VIF 裁剪像素数
      LINE_CNT VIF 裁剪行数
      TOTAL_PIXEL_CNT VIF 总像素数
      TOTAL_LINE_CNT VIF 总行数

    1.2 快速定位

    VIF由于Sensor和ISP在video pipeline物理位置相邻,经常会发生单个模块错误导致其他模块刷异常log的现象,这时候可以参考下图进行问题的快速定位:

    1. cat /proc/mi_modules/mi_vif/mi_vif0
    2. 对照图中的两个判断条件,先检查dev attr后检查outport attr, 将问题分类到对应模块
    3. 进一步debug各个模块的问题: sensorvif、isp

    2. Sensor相关问题

    2.1 I2C err

    Debug 流程如下:

    流程 确认方法 关键信息 异常解决方法
    A 交叉试验确认相关硬件是否正常 具体交叉试验步骤,确定该问题是只在特定硬件或平台出现 和客户/厂商反馈试验情况,了解硬件电路上是否需要其他配置
    B 结合padmux配置表和硬件原理图检查dts设定,确认对应的寄存器值是否正确 padmux bank: 0x103c
    gpio bank: 0x103e
    1. dts和原理图对不上请咨询cae或厂商是否有rework
    2.确认padmux是经由padmux.dtsi设置:參考Sigmastar_GPIO使用参考
    C 使用LA或示波器测量相关引脚电压和mclk 频率 1. rst pin, mclk, sensor 供电
    2. i2c sda scl 波形
    1. 请cae或厂商确认sensor 供电需要用到的引脚及工作电压和频率
    2. 请i2c owner确认波形是否正确

    2.2 Sensor不出流

    Debug 流程如下:

    IF
    流程 确认方法 流程关键信息 异常反馈和解决
    A 交叉试验确认相关硬件是否正常 具体交叉试验步骤,确定该问题是否只在特定硬件或模组出现 和客户/厂商沟通试验情况,了解可能的硬件问题
    B 结合padmux配置表和硬件原理图检查dts设定,确认对应的寄存器值是否正确 padmux bank: 0x103c
    gpio bank: 0x103e
    1. dts和原理图对不上请咨询cae或厂商是否有rework
    2.确认padmux是经由padmux.dtsi设置:參考Sigmastar_GPIO使用参考
    C 确认mipi sensor各data lane swap以及P/N swap是否配置正确,使用示波器测量每一路的p/n是否正确 data/clk lane 波形图 找客户/CAE定位data lane 波形异常原因
    D 查阅datasheet,确认power on sequence是否正确 上电时序图和实测上电时序 请找客户/厂尚协助确认power on sequence
    E 参考datasheet,确认mipi rx data lane 的差分信号正确,电压和频率在正确范围内 重点关注mipi data lane LP->HS 的波形 请找厂商/CAE协助确认
    F 读取对应sensor pad的寄存器信息,0x7e和7f 为mipi rx收到的line cnt和pixel cnt, 应该保证多次riu_r该值不变 pad0: bank 153b pad2: bank 153E 1.尝试找厂商将sensor clk lane改成non-continus mode
    2.sensor driver中关闭MIPI CSI MCG
    G 若能串到VIF可以dump图片进行确认,对于特殊data(如pdaf data)可以请厂商/客户帮忙确认 图片 请厂商/客户确认数据的有效性
    H Dump信息至VIF owner分析: 1 ./pcupid_vif_reg.sh NA NA

    2.3 Sensor画面异常

    Debug 流程如下:

    流程 确认方法 关键信息 异常解决方法
    C init table中是否设置crop flip/mirror
    init table 和datasheet 1.基于init table的初始bayer fmt和crop/mirror/flip操作推算出实际的bayerid
    2.如果上面推算的仍有问题可以尝试修改sensor driver,将其他三种bayer id都试一遍
    D 交叉试验确认相关硬件是否正常 具体交叉试验步骤,确保该问题只在特定硬件或模组导致 和客户/厂商反馈试验情况,了解sensor是否可能受到外部环境或特定寄存器影响
    E CAE分析原理图上MIPI RX是否有残段 板子原理图 请CAE帮忙去除掉可能影响到MIPI RX的所有电路残段
    F 使用sensor pattern 确认异常图像是否由vif 产生 sensor pattern图像 咨询厂商sensor pattern可能的异常原因
    H Dump信息请VIF owner进行分析 1 ./pcupid_vif_reg.sh NA NA

    2.4 多sensor异常

    这种问题通常是单sensor跑不出来,只有多sensor才可以复现。

    Debug 流程:

    1. 检查dts和sensordriver看是否存在引脚配置问题,例如dts中sensor0使用senor2的gpio
    2. 检查sensor的work mode是否为slave mode,例如sensor0 设置为slave mode依赖sensor 2的vsync
    3. 分别dump 正常和异常时的寄存器(padmux:103c gpio:103e),比对两者区别。

    3. VIF相关问题

    3.1 VIF帧率异常

    Debug 流程:

    流程 确认方法 关键信息 异常解决方法
    A 多次cat mi_vif0 观察dev attr和outport attr的 frame interval,位置如下图
    cat /proc/mi_modules/mi_vif/mi_vif0 如果这两个地方看到的帧间隔有异常情况,可以先量波形确认sensor输出的帧率是否也有波动
    B 多次cat mi_vif0 outport attr的fail 和drop cnt是否有增加 cat /proc/mi_modules/mi_vif/mi_vif0 请MI_SYS 帮忙确认为什么会fail or drop
    C 查看当前的cpu loading 和bw占用情况
    miu wiki
    1. cat /sys/devices/system/miu/miu0/bw
    2. top
    请MI_SYS 帮忙确认系统载荷是否有异常或可否降低

    mi_vif0 debug info:

    3.2 VIF图像异常

    Debug 流程:

    1. 查找datasheet或咨询厂商,开启sensor pattern查看vif出图
    2. 使用vif debug cmd 开启vif patgen,查看vif出图

      echo patgen vifGroup width height fps fmt chn fieldModeEnable enable >/proc/mi_modules/mi_vif/mi_vif0

      example: echo 0 1920 1080 30 32 0 0 1 >/proc/mi_modules/mi_vif/mi_vif0

    3. 如果上述步骤试验下来都正常就继续在后级模块打pattern,直到可以定位到导致画图的模块

    3.3 VIF fifo full

    Debug 流程:

    1. 确认当前vif-isp是framemode还是realtime bind, 如果是realtime bind 请找isp owner看
    流程 确认方法 关键信息 异常解决方法
    A 检查chip的规格,查看当前的bw是否处于临界值附近或超出
    NA 可以尝试降低sensor的分辨率或fps,看下情况是否有所缓解
    B 查看当前的VIF dma的优先级,尝试调高vif dma的优先级看下fifo full是否有所缓解 cat /sys/devices/system/miu/miu0/bw 请MIU owner 帮忙确认vif qos是否可以进一步提高