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);