高通android display subsystem

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--时序生成器,和外部显示设备对接

高通android display subsystem_第1张图片

图:显示外设

高通android display subsystem_第2张图片

图:MIPI DSI

高通android display subsystem_第3张图片

图: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等

高通android display subsystem_第4张图片

图: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)

高通android display subsystem_第5张图片

图: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");

你可能感兴趣的:(linux)