MDSS:Multimedia Display Sub-system
Display driver包括:
- SurfaceFlinger,Hardware Composer(HWC),以及overlay
- Framebuffer
- MIPI DSI驱动
系统架构
MDSS 1.0显示子系统
- Soure Surface Processor(ViG, RGB,DMA-SSPA)---格式转换和质量提升(video, graphics 等)
- Layer Mixer(LM)--混合外表面
- Destination Surface Processor(DSPP)---根据面板特性进行转换,校正和调整
- Write-Back/Rotation(WB)---回写到内存,如果需要还可以旋转
- Display interface--时序生成器,和外部显示设备对接
图:显示外设
图:MIPI DSI
图:DSI接口
- DSI控制器支持MIPI联盟DSI规范
- DSI控制器包括一个高速时钟lane,一或者多个数据lane,每lane使用低压差分信号线实现。
- 两种模式控制DSI外设:command和video模式
软件架构
android显示子系统
- android framework--表面纹理和SurfaceFlinger
- HALs--overlay,graphic alloction,以及hardware composer
- Primary panel interface--MIPI DSI
- External display--WFD
- MDP core--MDP drivers,overlay pipe management,clocks/power/performance
- Post processing和color management--CABL, color conversion等
图:3D和2D显示引擎
MDSS软件驱动
- mdss_fb.c 顶层IOCTL/native framebuffer接口
- mdss_mdp.c --MDP(Mobile Development Platforms)资源,包括时钟/中断/bus-bw/power
- mdss_mdp_overlay.c--Overlay/DMA 顶层API
- mdss_mdp_ctl.c--将(LM,DSPP,Ping-pong,interface)硬件集群
- mdss_mdp_pipe.c--SRC pipe相关处理
- mdss_mdp_intf_cmd.c/mdss_mdp_intf_video.c/mdss_mdp_intf_writeback.c--MDP面板接口处理
- mdss_mdp_pp.c--后处理相关实现
- mdss_mdp_rotator.c--旋转API(overlay_set, overlay_playinterface)
图:MDSS驱动架构
源码布局
软件目录架构--用户空间
- SurfaceTexture--frameworks/native/libs/gui
- SurfaceFlinger--frameworks/native/services/surfaceflinger
- Overlay HAL--hardware/qcom/display/liboverlay
- Graphics alloc--hardware/qcom/display/libgralloc
- Hardware composer--hardware/qcom/display/libwcomposer
软件目录架构--驱动
- MDSS驱动--kernel/drivers/video/msm/mdss
源表面处理,mdss_mdp_overlay.c,mdss_mdp_pipe.c。
- Layer Mixer--mdss_mdp_ctl.c
- Destination 表面处理(DSP)
mdss_mdp_intf_cmd.c,mdss_mdp_intf_video.c,mdss_mdp_intf_writeback.c,mdss_mdp_rotator.c
- 显示外设接口
mdss_dsi.c,mdss_dsi_host.c,
软件接口架构-驱动和用户空间
标准安卓架构
- FBIOGET_VSCREENINFO-获取framebuffer设备信息
- FBIOPUT_VSCREENINFO-写入framebuffer设备信息
- FBIOBLANK-打开关闭framebuffer(对应显示on/of)
- FBIOPAN_DISPLAY--用新图片跟新framebuffer
高通增加的命令
- MSMFB_OVERLAY_GET--获得overlay pipe/rotator信息
- MSMFB_OVERLAY_SET--设置overlay pipe/rotator参数
- MSMFB_OVERLAY_UNSET--关闭pipe/rotator
- MSMFB_OVERLAY_PLAY_ENABLE--使能overlay跟新
- MSMFB_OVERLAY_PLAY--将buffer排队到pipe上
- MSMFB_OVERLAY_PLAY_WAIT--等待vsync信号
- MSMFB_CURSOR--硬件cursor支持
- MSMFB_SET_LUT--CABL的伽马表设置
- MSMFB_HISTOGRAM--获取直方图
- MSMFB_HISTOGRAM_START--开始直方图
- MSMFB_HISTOGRAM_STOP--停止直方图
一个bug
kgsl workqueue of WQ_UNBOUND,surface flinger等待超时,进入dump
+++ b/drivers/gpu/msm/kgsl.c
@@ -4394,7 +4394,9 @@ int kgsl_device_platform_probe(struct kgsl_device *device)
PM_QOS_DEFAULT_VALUE);
- device->events_wq = create_workqueue("kgsl-events");
+ device->events_wq = alloc_workqueue("kgsl-events",
+ WQ_UNBOUND | WQ_MEM_RECLAIM, 1);
+ //device->events_wq = create_workqueue("kgsl-events");