drm/msm/sde: add writeback ROI support for msmskunk
For HW directly supporting writeback ROI x,y offsets
bypass writeback planes offset recalculation.
Change-Id: I8b38b6026482a4f72607ad74bbec2d3f741b94f8
Signed-off-by: abeykun <abeykun@codeaurora.org>
diff --git a/drivers/gpu/drm/msm/sde/sde_encoder_phys_wb.c b/drivers/gpu/drm/msm/sde/sde_encoder_phys_wb.c
index ca7a711..940a5f6 100644
--- a/drivers/gpu/drm/msm/sde/sde_encoder_phys_wb.c
+++ b/drivers/gpu/drm/msm/sde/sde_encoder_phys_wb.c
@@ -217,13 +217,25 @@
SDE_ERROR("failed to get format %x\n", format->pixel_format);
return;
}
+ wb_cfg->roi = *wb_roi;
- ret = sde_format_populate_layout_with_roi(mmu_id, fb, wb_roi,
+ if (hw_wb->caps->features & BIT(SDE_WB_XY_ROI_OFFSET)) {
+ ret = sde_format_populate_layout(mmu_id, fb, &wb_cfg->dest);
+ if (ret) {
+ SDE_DEBUG("failed to populate layout %d\n", ret);
+ return;
+ }
+ wb_cfg->dest.width = fb->width;
+ wb_cfg->dest.height = fb->height;
+ wb_cfg->dest.num_planes = wb_cfg->dest.format->num_planes;
+ } else {
+ ret = sde_format_populate_layout_with_roi(mmu_id, fb, wb_roi,
&wb_cfg->dest);
- if (ret) {
- /* this error should be detected during atomic_check */
- SDE_DEBUG("failed to populate layout %d\n", ret);
- return;
+ if (ret) {
+ /* this error should be detected during atomic_check */
+ SDE_DEBUG("failed to populate layout %d\n", ret);
+ return;
+ }
}
if ((wb_cfg->dest.format->fetch_planes == SDE_PLANE_PLANAR) &&
@@ -241,6 +253,9 @@
wb_cfg->dest.plane_pitch[2],
wb_cfg->dest.plane_pitch[3]);
+ if (hw_wb->ops.setup_roi)
+ hw_wb->ops.setup_roi(hw_wb, wb_cfg);
+
if (hw_wb->ops.setup_outformat)
hw_wb->ops.setup_outformat(hw_wb, wb_cfg);