[Freedreno] [PATCH v3 19/19] drm/msm: Add SDM845 DPU support
Sean Paul
seanpaul at chromium.org
Fri Jul 20 20:43:10 UTC 2018
From: Jeykumar Sankaran <jsanka at codeaurora.org>
SDM845 SoC includes the Mobile Display Sub System (MDSS) which is a
top level wrapper consisting of Display Processing Unit (DPU) and
display peripheral modules such as Display Serial Interface (DSI)
and DisplayPort (DP).
MDSS functions essentially as a back-end composition engine. It blends
video and graphic images stored in the frame buffers and scans out the
composed image to a display sink (over DSI/DP).
The following diagram represents hardware blocks for a simple pipeline
(two planes are present on a given crtc which is connected to a DSI
connector):
MDSS
+---------------------------------+
| +-----------------------------+ |
| | DPU | |
| | +--------+ +--------+ | |
| | | SSPP | | SSPP | | |
| | +----+---+ +----+---+ | |
| | | | | |
| | +----v-----------v---+ | |
| | | Layer Mixer (LM) | | |
| | +--------------------+ | |
| | +--------------------+ | |
| | | PingPong (PP) | | |
| | +--------------------+ | |
| | +--------------------+ | |
| | | INTERFACE (VIDEO) | | |
| | +---+----------------+ | |
| +------|----------------------+ |
| | |
| +------|---------------------+ |
| | | DISPLAY PERIPHERALS | |
| | +---v-+ +-----+ | |
| | | DSI | | DP | | |
| | +-----+ +-----+ | |
| +----------------------------+ |
+---------------------------------+
The number of DPU sub-blocks (i.e. SSPPs, LMs, PP blocks and INTFs)
depends on SoC capabilities.
Overview of DPU sub-blocks:
---------------------------
* Source Surface Processor (SSPP):
Refers to any of hardware pipes like ViG, DMA etc. Only ViG pipes are
capable of performing format conversion, scaling and quality improvement
for source surfaces.
* Layer Mixer (LM):
Blend source surfaces together (in requested zorder)
* PingPong (PP):
This block controls frame done interrupt output, EOL and EOF generation,
overflow/underflow control.
* Display interface (INTF):
Timing generator and interface connecting the display peripherals.
DRM components mapping to DPU architecture:
------------------------------------------
PLANEs maps to SSPPs
CRTC maps to LMs
Encoder maps to PPs, INTFs
Data flow setup:
---------------
MDSS hardware can support various data flows (e.g.):
- Dual pipe: Output from two LMs combined to single display.
- Split display: Output from two LMs connected to two separate
interfaces.
The hardware capabilities determine the number of concurrent data paths
possible. Any control path (i.e. pipeline w/i DPU) can be routed to any
of the hardware data paths. A given control path can be triggered,
flushed and controlled independently.
Changes in v3:
- Move msm_media_info.h from uapi to dpu/ subdir
- Remove preclose callback dpu (it's handled in core)
- Fix kbuild warnings with parent_ops
- Remove unused functions from dpu_core_irq
- Rename mdss_phys to mdss
- Rename mdp_phys address space to mdp
- Drop _phys from vbif and regdma binding names
Signed-off-by: Abhinav Kumar <abhinavk at codeaurora.org>
Signed-off-by: Archit Taneja <architt at codeaurora.org>
Signed-off-by: Chandan Uddaraju <chandanu at codeaurora.org>
Signed-off-by: Jeykumar Sankaran <jsanka at codeaurora.org>
Signed-off-by: Jordan Crouse <jcrouse at codeaurora.org>
Signed-off-by: Rajesh Yadav <ryadav at codeaurora.org>
Signed-off-by: Sravanthi Kollukuduru <skolluku at codeaurora.org>
Signed-off-by: Sean Paul <seanpaul at chromium.org>
---
drivers/gpu/drm/msm/Makefile | 32 +-
drivers/gpu/drm/msm/disp/dpu1/dpu_core_irq.c | 479 +++
drivers/gpu/drm/msm/disp/dpu1/dpu_core_irq.h | 153 +
drivers/gpu/drm/msm/disp/dpu1/dpu_core_perf.c | 637 ++++
drivers/gpu/drm/msm/disp/dpu1/dpu_core_perf.h | 133 +
drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c | 2504 ++++++++++++++++
drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.h | 484 ++++
drivers/gpu/drm/msm/disp/dpu1/dpu_dbg.c | 2393 +++++++++++++++
drivers/gpu/drm/msm/disp/dpu1/dpu_dbg.h | 103 +
drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 2575 +++++++++++++++++
drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.h | 191 ++
.../gpu/drm/msm/disp/dpu1/dpu_encoder_phys.h | 453 +++
.../drm/msm/disp/dpu1/dpu_encoder_phys_cmd.c | 905 ++++++
.../drm/msm/disp/dpu1/dpu_encoder_phys_vid.c | 922 ++++++
drivers/gpu/drm/msm/disp/dpu1/dpu_formats.c | 1276 ++++++++
drivers/gpu/drm/msm/disp/dpu1/dpu_formats.h | 136 +
drivers/gpu/drm/msm/disp/dpu1/dpu_hw_blk.c | 155 +
drivers/gpu/drm/msm/disp/dpu1/dpu_hw_blk.h | 53 +
.../gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c | 511 ++++
.../gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h | 804 +++++
.../drm/msm/disp/dpu1/dpu_hw_catalog_format.h | 182 ++
drivers/gpu/drm/msm/disp/dpu1/dpu_hw_cdm.c | 323 +++
drivers/gpu/drm/msm/disp/dpu1/dpu_hw_cdm.h | 139 +
drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.c | 540 ++++
drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.h | 218 ++
.../gpu/drm/msm/disp/dpu1/dpu_hw_interrupts.c | 1183 ++++++++
.../gpu/drm/msm/disp/dpu1/dpu_hw_interrupts.h | 257 ++
drivers/gpu/drm/msm/disp/dpu1/dpu_hw_intf.c | 349 +++
drivers/gpu/drm/msm/disp/dpu1/dpu_hw_intf.h | 128 +
drivers/gpu/drm/msm/disp/dpu1/dpu_hw_lm.c | 261 ++
drivers/gpu/drm/msm/disp/dpu1/dpu_hw_lm.h | 122 +
drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h | 465 +++
.../gpu/drm/msm/disp/dpu1/dpu_hw_pingpong.c | 250 ++
.../gpu/drm/msm/disp/dpu1/dpu_hw_pingpong.h | 136 +
drivers/gpu/drm/msm/disp/dpu1/dpu_hw_sspp.c | 753 +++++
drivers/gpu/drm/msm/disp/dpu1/dpu_hw_sspp.h | 424 +++
drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c | 398 +++
drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.h | 202 ++
drivers/gpu/drm/msm/disp/dpu1/dpu_hw_util.c | 452 +++
drivers/gpu/drm/msm/disp/dpu1/dpu_hw_util.h | 358 +++
drivers/gpu/drm/msm/disp/dpu1/dpu_hw_vbif.c | 275 ++
drivers/gpu/drm/msm/disp/dpu1/dpu_hw_vbif.h | 128 +
drivers/gpu/drm/msm/disp/dpu1/dpu_hwio.h | 56 +
drivers/gpu/drm/msm/disp/dpu1/dpu_io_util.c | 204 ++
drivers/gpu/drm/msm/disp/dpu1/dpu_io_util.h | 57 +
drivers/gpu/drm/msm/disp/dpu1/dpu_irq.c | 66 +
drivers/gpu/drm/msm/disp/dpu1/dpu_irq.h | 59 +
drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 1345 +++++++++
drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h | 402 +++
drivers/gpu/drm/msm/disp/dpu1/dpu_kms_utils.c | 153 +
drivers/gpu/drm/msm/disp/dpu1/dpu_mdss.c | 245 ++
drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c | 1963 +++++++++++++
drivers/gpu/drm/msm/disp/dpu1/dpu_plane.h | 175 ++
.../gpu/drm/msm/disp/dpu1/dpu_power_handle.c | 249 ++
.../gpu/drm/msm/disp/dpu1/dpu_power_handle.h | 225 ++
drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c | 1079 +++++++
drivers/gpu/drm/msm/disp/dpu1/dpu_rm.h | 199 ++
drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h | 1007 +++++++
drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c | 384 +++
drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.h | 94 +
.../gpu/drm/msm/disp/dpu1/msm_media_info.h | 1376 +++++++++
drivers/gpu/drm/msm/msm_drv.c | 135 +-
drivers/gpu/drm/msm/msm_drv.h | 81 +-
drivers/gpu/drm/msm/msm_kms.h | 8 +
64 files changed, 31989 insertions(+), 15 deletions(-)
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_core_irq.c
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_core_irq.h
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_core_perf.c
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_core_perf.h
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.h
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_dbg.c
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_dbg.h
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.h
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys.h
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_cmd.c
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_vid.c
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_formats.c
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_formats.h
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_hw_blk.c
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_hw_blk.h
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog_format.h
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_hw_cdm.c
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_hw_cdm.h
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.c
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.h
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_hw_interrupts.c
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_hw_interrupts.h
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_hw_intf.c
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_hw_intf.h
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_hw_lm.c
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_hw_lm.h
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_hw_pingpong.c
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_hw_pingpong.h
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_hw_sspp.c
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_hw_sspp.h
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.h
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_hw_util.c
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_hw_util.h
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_hw_vbif.c
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_hw_vbif.h
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_hwio.h
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_io_util.c
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_io_util.h
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_irq.c
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_irq.h
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_kms_utils.c
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_mdss.c
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_plane.h
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_power_handle.c
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_power_handle.h
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_rm.h
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.h
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/msm_media_info.h
The patch is too large for dri-devel, please refer to:
https://gitlab.freedesktop.org/seanpaul/dpu-staging/commit/00601828c2959f91397e938a9632741f42e994c5
--
Sean Paul, Software Engineer, Google / Chromium OS
More information about the Freedreno
mailing list