disp: msm: sde: avoid wb done wait for cwb in wait_for_commit

Existing cwb implementation waits for WB done interrupt in
wait_for_commit_done API call. This serializes the cwb commit
and causes frame trigger delay on primary display. MDSS hw allows
to trigger the cwb frame when previous frame is in-progress. This
change updates driver to allow parallel frame trigger for cwb
enabled display. It releases frame N cwb output buffer in frame
N+1 wait_for_commit done call.

Change-Id: Id4f2a0cc78a3f24a1b5ce96dc907780246768dbf
Signed-off-by: Raviteja Tamatam <travitej@codeaurora.org>
This commit is contained in:
Dhaval Patel
2019-05-23 12:33:15 -07:00
parent 5af1fe1891
commit df2fbca4b8
3 changed files with 114 additions and 93 deletions

View File

@@ -388,13 +388,14 @@ struct sde_encoder_phys_cmd {
* @hw_wb: Hardware interface to the wb registers
* @wbdone_timeout: Timeout value for writeback done in msec
* @bypass_irqreg: Bypass irq register/unregister if non-zero
* @wbdone_complete: for wbdone irq synchronization
* @wb_cfg: Writeback hardware configuration
* @cdp_cfg: Writeback CDP configuration
* @wb_roi: Writeback region-of-interest
* @wb_fmt: Writeback pixel format
* @wb_fb: Pointer to current writeback framebuffer
* @wb_aspace: Pointer to current writeback address space
* @cwb_old_fb: Pointer to old writeback framebuffer
* @cwb_old_aspace: Pointer to old writeback address space
* @frame_count: Counter of completed writeback operations
* @kickoff_count: Counter of issued writeback operations
* @aspace: address space identifier for non-secure/secure domain
@@ -410,13 +411,14 @@ struct sde_encoder_phys_wb {
struct sde_hw_wb *hw_wb;
u32 wbdone_timeout;
u32 bypass_irqreg;
struct completion wbdone_complete;
struct sde_hw_wb_cfg wb_cfg;
struct sde_hw_wb_cdp_cfg cdp_cfg;
struct sde_rect wb_roi;
const struct sde_format *wb_fmt;
struct drm_framebuffer *wb_fb;
struct msm_gem_address_space *wb_aspace;
struct drm_framebuffer *cwb_old_fb;
struct msm_gem_address_space *cwb_old_aspace;
u32 frame_count;
u32 kickoff_count;
struct msm_gem_address_space *aspace[SDE_IOMMU_DOMAIN_MAX];