RK3399 4K 带宽不足[drm:vop_isr] ERROR POST_BUF_EMPTY irq err

在RK3399平台上进行4K输出时遇到DDR带宽不足的问题,表现为[drm:vop_isr] ERROR POST_BUF_EMPTY irq err错误,导致屏幕闪烁绿条纹。通过调整硬件参数和关闭负载变频,将DDR频率提升至856M,以及修改Android.mk和device.mk文件来优化HWC合成策略,解决了4K视频在3840*2160 UI @60fps下的流畅播放问题。对于超过50000kbps码率的H265视频,可能会出现卡顿。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     4k输出分为两种,屏输出3840*2160@60,一种是1920x1080分辨率的UI(拉伸到3840*2160),一种是点对点的3840*2160的UI,两种都支持60fps,但会出现DDR带宽不足的问题,会出现[drm:vop_isr] ERROR POST_BUF_EMPTY irq err这种错误,随之屏幕就会出现绿条纹的闪烁画面。这里是讲60fps情况下,因为30fps是正常的。

    根据官方文档《RK3399_Android7.1_Software_Development_Guide》中的《9.7 DDR  带宽导致屏闪问题 Flicker issue caused by DDR bandwidth》解决,

1、先把dmc的频率调到最高,测试无效。

2、关闭负载变频,ddr频率拉到最大,测试无效。

3、vop-pn-msch-readlatency = <
      /* plane_number readlatency */
              0 0x20
              4 0x20
     >;

这个官方解释:vop-pn-msch-readlatency 这个参数指定了两列数据,第一列为 UI 的层数,第二列为 vop
获取 ddr 使用权限的延时,这个值越小,表示越容易获取访问权限,值为 0 表示默认值(默认值为
0x80),如果出现闪屏问题,建议将值改为 0x20,这个值不建议随意修改,并且这个值如果改动
可能会影响性能。目前默认的值,只会在 UI 为 4 层的场景下,将 vop 的 ddr read lantency 改为
0x20,也就是在 4 层场景下提升 v

[ 1.954977] Video Port0: ACTIVE [ 1.955014] Connector: HDMI-A-1 [ 1.955051] bus_format[100a]: RGB888_1X24 [ 1.955084] overlay_mode[0] output_mode[f] [ 1.955090] color_space[0], eotf:0 [ 1.955137] Display mode: 1920x1080p60 [ 1.955157] clk[148500] real_clk[148500] type[40] flag[5] [ 1.955179] H: 1920 2008 2052 2200 [ 1.955213] V: 1080 1084 1089 1125 [ 1.955250] Smart1-win0: ACTIVE [ 1.955284] win_id: 1 [ 1.955330] format: RG24 little-endian (0x34324752) SDR[0] color_space[0] glb_alpha[0xff] [ 1.955367] rotate: xmirror: 0 ymirror: 0 rotate_90: 0 rotate_270: 0 [ 1.955401] csc: y2r[0] r2y[0] csc mode[0] [ 1.955419] zpos: 0 [ 1.955437] src: pos[0, 0] rect[400 x 130] [ 1.955455] dst: pos[760, 475] rect[400 x 130] [ 1.955477] buf[0]: addr: 0x00000000edf00000 pitch: 1200 offset: 479232 [ 1.963395] Video Port1: ACTIVE [ 1.963416] Connector: LVDS-1 [ 1.963435] bus_format[1009]: RGB666_1X18 [ 1.963471] overlay_mode[0] output_mode[0] [ 1.963478] color_space[0], eotf:0 [ 1.963529] Display mode: 1280x800p61 [ 1.963563] clk[72000] real_clk[72000] type[48] flag[a] [ 1.963598] H: 1280 1320 1340 1420 [ 1.963633] V: 800 806 814 838 [ 1.963667] Smart0-win0: ACTIVE [ 1.963685] win_id: 0 [ 1.963711] format: RG24 little-endian (0x34324752) SDR[0] color_space[0] glb_alpha[0xff] [ 1.963749] rotate: xmirror: 0 ymirror: 0 rotate_90: 0 rotate_270: 0 [ 1.963783] csc: y2r[0] r2y[0] csc mode[0] [ 1.963816] zpos: 1 [ 1.963856] src: pos[0, 0] rect[400 x 130] [ 1.963890] dst: pos[440, 335] rect[400 x 130] [ 1.963927] buf[0]: addr: 0x00000000edf00000 pitch: 1200 offset: 479232 [ 1.963994] rockchip-vop2 fe040000.vop: [drm:vop2_isr] *ERROR* POST_BUF_EMPTY irq err at vp0 [ 1.964085] rockchip-vop2 fe040000.vop: [drm:vop2_isr] *ERROR* POST_BUF_EMPTY irq err at vp0 [ 1.977521] rockchip-vop2 fe040000.vop: [drm:vop2_isr] *ERROR* POST_BUF_EMPTY irq err at vp0 [ 1.977651] rockchip-vop2 fe040000.vop: [drm:vop2_isr] *ERROR* POST_BUF_EMPTY irq err at vp0 [ 1.977732] rockchip-vop2 fe040000.vop: [drm:vop2_isr] *ERROR* POST_BUF_EMPTY irq err at vp0 [ 1.977787] rockchip-vop2 fe040000.vop: [drm:vop2_isr] *ERROR* POST_BUF_EMPTY irq err at vp0 [ 1.977815] rockchip-vop2 fe040000.vop: [drm:vop2_isr] *ERROR* POST_BUF_EMPTY irq err at vp0 [ 1.977848] rockchip-vop2 fe040000.vop: [drm:vop2_isr] *ERROR* POST_BUF_EMPTY irq err at vp0 [ 1.977877] rockchip-vop2 fe040000.vop: [drm:vop2_isr] *ERROR* POST_BUF_EMPTY irq err at vp0 [ 1.977905] rockchip-vop2 fe040000.vop: [drm:vop2_isr] *ERROR* POST_BUF_EMPTY irq err at vp0 [ 2.122726] rockchip-drm display-subsystem: fb0: frame buffer device RK3566Android12 问题现象是烧录完固件平板HDMI连接显示器显示是正常的,但是重启后上下滑动平板,显示器就是闪屏,是什么原因,应该怎么改驱动
07-14
### 关于POST_BUF_EMPTY中断错误的原因和解决方案 #### 错误原因分析 POST_BUF_EMPTY中断错误通常发生在视频输出处理器(VOP)未能及时获取到缓冲区数据的情况下。具体来说,在Rockchip系列芯片中,当显示器刷新帧率超过系统能够提供新图像的速度时,就会触发此错误。 对于RK356X设备上运行Debian操作系统遇到的`rockchip-vop2 fe040000.vop: [drm:vop2_isr] ERROR POST_BUF_EMPTY irq err at vp1 dsi`问题[^1],以及类似的RK3399平台上的带宽不足引发的问题[^3],根本原因在于: - **硬件资源分配不当**:如果DTSI配置文件中的虚拟输出端口(VOP)设置与实际连接的显示屏不符,则可能导致性能瓶颈或者无法正常工作。 - **DDR内存带宽限制**:特别是在高分辨率或高速度传输场景下,如4K显示模式,可能会超出可用的数据传输速率,从而影响到图形渲染过程中的缓存管理机制。 #### 解决策略建议 针对上述提到的不同情况下的POST_BUF_EMPTY错误,可以采取以下措施来尝试解决问题: ##### 修改设备树源(DTS) 通过调整设备树描述符(.dts/.dtsi),确保所使用的VOP实例与其对应的物理接口相匹配。例如,在涉及DSI屏幕时不启用不必要的VOP通道,并且正确指定状态属性为“okay”或“disabled”。以下是具体的修改示例: ```diff &dsi1 { status = "okay"; }; &dsi1_in_vp0 { status = "okay"; }; &dsi1_in_vp1 { status = "disabled"; }; &video_phy1 { status = "okay"; }; &route_dsi1 { status = "okay"; connect = <&vp0_out_dsi1>; }; ``` ##### 调整显示参数以适应带宽需求 考虑到DDR带宽可能是造成该类错误的一个重要因素之一,应当优化系统的显示配置选项,降低对存储子系统的压力。这包括但不限于减少色彩深度、关闭某些特效功能或是适当调低分辨率/刷新频率等操作。 另外,还可以考虑升级固件版本至最新稳定版,以便利用制造商提供的改进后的驱动程序和支持特性;同时查阅官方文档和技术支持渠道获得更详细的指导说明。 #### VP系统概述 VP (Virtual Output Port) 是指负责处理并发送图像信号给外部显示器或其他视觉终端的一组逻辑单元。不同的VP可能支持不同类型的接口标准,比如MIPIDSI、LVDS、EDP等。在设计产品时需注意合理规划各个VP之间的分工协作关系,避免冲突发生。例如,若要在一个项目里同时接入MIPI屏和HDMI输出,则应让VP0负责前者而由VP1承担后者的工作任务[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值