专栏感知J6E GDC异常分析

J6E GDC异常分析

新手村2025-04-11
101
0

GDC基本原理

GDC硬件是根据配置的map表对图像进行处理,map表存储的是畸变矫正信息,GDC硬件处理时,不是按行处理,是有一个tile的概念,会把输入图像按照map表进行tile划分,然后以tile为单位,读取输入图像区域,进行矫正处理,完成所有tile处理之后,一帧图像也就处理完成;

场景

GDC回灌场景,作为算子加速模块,GDC每一帧配置都可以重置,在图像处理过程中,出现某一帧处理失败的场景,错误日志如下:

分析过程

dmesg日志分析

出现SMMU read溢出报错,说明GDC硬件读数据越界了,需要检测配置和buffer大小的正确性;

配置检查:

  • 输入分辨率 width = 0x1e0, height =0x10e,wstride = 0x790,从寄存器上看配置是正确的;

  • input buffer address是0xF4700000, 通过smmu出错日志可知,溢出地址是0xf47802e0,访问的Y 地址偏移是0x802e0;

  • 请求的buffer size = 0x790 * 0x10e = 0x7f9e0 < 0x802e0, GDC硬件访问的地址偏移超过了分配范围,需要检查map信息;

 

tile日志分析

GDC input tile的边界范围是height = 272,但是source height = 270,说明是tile范围计算有误,从而导致GDC硬件实际访问地址溢出;

结论

通过以上分析得知,tile范围计算异常了,分析tile计算代码发现,tile划分时会对source height进行向上4对齐,这就是问题的根本原因;

感知
社区征文技术深度解析征程6
评论0
0/1000