This patchset enables dynamic assignment of Layer Mixer blocks to CRTCs in order to support wide resolution modes and planes. The approach is similar to what was done for decoupling MDP5 planes from the hwpipes (SSPPs). We go further by letting a CRTC comprise of 2 Layer Mixers, one to scanout the left half of the image, and other the right half. The same thing is then done for drm_planes. I.e, a plane can be tied to 2 hwpipes. Doing this enables us to support wide planes, and support wider modes (like HDMI 4K modes). Here's a quick description of what the patches do: Patches #1 to #7 do mostly preparation/clean-ups to decouple CRTCs and Layer Mixers. Patch #8 subclasses CRTC state so that we can add our custom state to our CRTCs. Patch #9 adds the method to assign a mixer to a CRTC. We add a global atomic state object that tracks which mixers are assigned to which CRTCs. Patches #10 to #13 moves more things to CRTC state rather than being assigned to mdp5_crtc. Patches #14 and #15 update the mdp5_crtc.c and mdp5_ctl.c code to work with 2 Layer Mixers, but without the support of wide planes. Patches #16 to #18 updates mdp5_plane so that a drm_plane can comprise comprise of 2 hwpipes. Patches #19 to #21 complete the CRTC code to let 2 LMs stage 2 hwpipes. Patch #22 updates the mixer assignment code so that a CRTC can be assigned 2 LMs. Patches #23 and #24 make some updates in mdp5_ctl to let a display pipeline comprise of 2 LMs. A 4.11 branch on which we can try out the changes on a DB820c: https://github.com/boddob/linux/tree/mixer_virt_v1_4.11 Archit Taneja (24): drm/msm/mdp5: Bring back pipe_lock to mdp5_plane struct drm/msm/mdp5: describe LM instances in mdp5_cfg drm/msm/mdp5: Add structs for hw Layer Mixers drm/msm/mdp5: Start using mdp5_hw_mixer drm/msm/mdp5: Simplify LM <-> PP mapping drm/msm/mdp5: Clean up interface assignment drm/msm/mdp5: Remove the pipeline stuff in mdp5_ctl drm/msm/mdp5: subclass CRTC state drm/msm/mdp5: Prepare for dynamic assignment of mixers drm/msm/mdp5: Assign INTF and CTL in encoder's atomic_check() drm/msm/mdp5: Add more stuff to CRTC state drm/msm/mdp5: Start using parameters from CRTC state drm/msm/mdp5: Remove mixer/intf pointers from mdp5_ctl drm/msm/mdp5: Add a CAP for Source Split drm/msm/mdp5: Add optional 'right' Layer Mixer in CRTC state drm/msm/mdp5: Create mdp5_hwpipe_mode_set drm/msm/mdp5: Assign a 'right hwpipe' to plane state drm/msm/mdp5: Configure 'right' hwpipe drm/msm/mdp5: Prepare Layer Mixers for source split drm/msm/mdp5: Stage right side hwpipes on Right-side Layer Mixer drm/msm/mdp5: Stage border out on base stage if CRTC has 2 LMs drm/msm/mdp5: Assign 'right' mixer to CRTC state drm/msm/mdp5: Reset CTL blend registers before configuring them drm/msm/mdp5: Enable 3D mux in mdp5_ctl drivers/gpu/drm/msm/Makefile | 1 + drivers/gpu/drm/msm/mdp/mdp5/mdp5_cfg.c | 81 +++++ drivers/gpu/drm/msm/mdp/mdp5/mdp5_cfg.h | 8 + drivers/gpu/drm/msm/mdp/mdp5/mdp5_cmd_encoder.c | 30 +- drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c | 454 +++++++++++++++++++----- drivers/gpu/drm/msm/mdp/mdp5/mdp5_ctl.c | 192 ++++++---- drivers/gpu/drm/msm/mdp/mdp5/mdp5_ctl.h | 21 +- drivers/gpu/drm/msm/mdp/mdp5/mdp5_encoder.c | 66 ++-- drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c | 121 +++++-- drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.h | 53 ++- drivers/gpu/drm/msm/mdp/mdp5/mdp5_mixer.c | 172 +++++++++ drivers/gpu/drm/msm/mdp/mdp5/mdp5_mixer.h | 47 +++ drivers/gpu/drm/msm/mdp/mdp5/mdp5_pipe.c | 2 - drivers/gpu/drm/msm/mdp/mdp5/mdp5_pipe.h | 1 - drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c | 340 ++++++++++++------ drivers/gpu/drm/msm/mdp/mdp_kms.h | 6 + 16 files changed, 1256 insertions(+), 339 deletions(-) create mode 100644 drivers/gpu/drm/msm/mdp/mdp5/mdp5_mixer.c create mode 100644 drivers/gpu/drm/msm/mdp/mdp5/mdp5_mixer.h -- The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, hosted by The Linux Foundation -- To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html