فهرست منبع

disp: msm: sde: add drm properties required for wb rotation

This change installs required drm properties for writeback
connector to implement rotation with writeback hw in mdss.

Change-Id: I85ed359d06ff4bafee85a4bfa5b8a99774311e60
Signed-off-by: Prabhanjan Kandula <[email protected]>
Prabhanjan Kandula 3 سال پیش
والد
کامیت
4cca89d615
5فایلهای تغییر یافته به همراه37 افزوده شده و 1 حذف شده
  1. 1 0
      msm/msm_drv.h
  2. 3 0
      msm/sde/sde_hw_catalog.c
  3. 4 1
      msm/sde/sde_hw_catalog.h
  4. 16 0
      msm/sde/sde_hw_mdss.h
  5. 13 0
      msm/sde/sde_wb.c

+ 1 - 0
msm/msm_drv.h

@@ -243,6 +243,7 @@ enum msm_mdp_conn_property {
 	CONNECTOR_PROP_CACHE_STATE,
 	CONNECTOR_PROP_DSC_MODE,
 	CONNECTOR_PROP_WB_USAGE_TYPE,
+	CONNECTOR_PROP_WB_ROT_TYPE,
 
 	/* total # of properties */
 	CONNECTOR_PROP_COUNT

+ 3 - 0
msm/sde/sde_hw_catalog.c

@@ -2550,6 +2550,9 @@ static int sde_wb_parse_dt(struct device_node *np, struct sde_mdss_cfg *sde_cfg)
 					sde_cfg->mdp[0].clk_ctrls[wb->clk_ctrl].bit_off);
 		}
 
+		if (test_bit(SDE_FEATURE_WB_ROTATION, sde_cfg->features))
+			set_bit(SDE_WB_LINEAR_ROTATION, &wb->features);
+
 		wb->format_list = sde_cfg->wb_formats;
 	}
 

+ 4 - 1
msm/sde/sde_hw_catalog.h

@@ -637,6 +637,7 @@ enum {
  * @SDE_WB_DCWB_CTRL        Separate DCWB control is available for configuring
  * @SDE_WB_CWB_DITHER_CTRL  CWB dither is available for configuring
  * @SDE_WB_PROG_LINE        Writeback block supports programmable line ptr
+ * @SDE_WB_LINEAR_ROTATION  Writeback block supports line mode image rotation
  * @SDE_WB_MAX              maximum value
  */
 enum {
@@ -661,6 +662,7 @@ enum {
 	SDE_WB_DCWB_CTRL,
 	SDE_WB_CWB_DITHER_CTRL,
 	SDE_WB_PROG_LINE,
+	SDE_WB_LINEAR_ROTATION,
 	SDE_WB_MAX
 };
 
@@ -708,7 +710,7 @@ enum {
  * @SDE_FEATURE_CWB_DITHER     CWB dither is supported
  * @SDE_FEATURE_DEDICATED_CWB  Dedicated-CWB supported
  * @SDE_FEATURE_DUAL_DEDICATED_CWB   Dual Dedicated-CWB supported
- * @SDE_FEATURE_IDLE_PC        Idle Power Collapse supported
+ * @SDE_FEATURE_WB_ROTATION    Support for image rotation through WB block
  * @SDE_FEATURE_3D_MERGE_RESET 3D merge reset supported
  * @SDE_FEATURE_DECIMATION     Decimation supported
  * @SDE_FEATURE_COMBINED_ALPHA Combined Alpha supported
@@ -751,6 +753,7 @@ enum sde_mdss_features {
 	SDE_FEATURE_CWB_DITHER,
 	SDE_FEATURE_DEDICATED_CWB,
 	SDE_FEATURE_DUAL_DEDICATED_CWB,
+	SDE_FEATURE_WB_ROTATION,
 	SDE_FEATURE_IDLE_PC,
 	SDE_FEATURE_3D_MERGE_RESET,
 	SDE_FEATURE_DECIMATION,

+ 16 - 0
msm/sde/sde_hw_mdss.h

@@ -502,11 +502,27 @@ enum sde_sys_cache_state {
  * WB_USAGE_WFD: WB connector used for WFD
  * WB_USAGE_CWB: WB connector used for concurrent writeback
  * WB_USAGE_OFFLINE_WB: WB connector used for 2-pass composition
+ * WB_USAGE_ROT: WB connector used for image rotation for 2 pass composition
  */
 enum sde_wb_usage_type {
 	WB_USAGE_WFD,
 	WB_USAGE_CWB,
 	WB_USAGE_OFFLINE_WB,
+	WB_USAGE_ROT,
+};
+
+/**
+ * enum sde_wb_rot_type: Type of rotation use case of the WB connector
+ * WB_ROT_NONE : WB Rotation not in use
+ * WB_ROT_SINGLE: WB Rotation used in single job mode for full image rotation
+ * WB_ROT_JOB1: WB Rotation used for rotating half image as first-job
+ * WB_ROT_JOB2: WB Rotation used for rotating half image as second-job
+ */
+enum sde_wb_rot_type {
+	WB_ROT_NONE,
+	WB_ROT_SINGLE,
+	WB_ROT_JOB1,
+	WB_ROT_JOB2,
 };
 
 /** struct sde_format - defines the format configuration which

+ 13 - 0
msm/sde/sde_wb.c

@@ -609,6 +609,14 @@ int sde_wb_connector_post_init(struct drm_connector *connector, void *display)
 		{WB_USAGE_WFD, "wb_usage_wfd"},
 		{WB_USAGE_CWB, "wb_usage_cwb"},
 		{WB_USAGE_OFFLINE_WB, "wb_usage_offline_wb"},
+		{WB_USAGE_ROT, "wb_usage_rot"},
+	};
+
+	static const struct drm_prop_enum_list e_wb_rotate_type[] = {
+		{WB_ROT_NONE, "wb_rot_none"},
+		{WB_ROT_SINGLE, "wb_rot_single"},
+		{WB_ROT_JOB1, "wb_rot_job1"},
+		{WB_ROT_JOB2, "wb_rot_job2"},
 	};
 
 	if (!connector || !display || !wb_dev->wb_cfg || !wb_dev->drm_dev->dev_private) {
@@ -662,6 +670,11 @@ int sde_wb_connector_post_init(struct drm_connector *connector, void *display)
 		msm_property_install_range(&c_conn->property_info, "dnsc_blur",
 			0x0, 0, ~0, 0, CONNECTOR_PROP_DNSC_BLUR);
 
+	if (wb_dev->wb_cfg->features & BIT(SDE_WB_LINEAR_ROTATION))
+		msm_property_install_enum(&c_conn->property_info, "wb_rotate_type",
+			0x0, 0, e_wb_rotate_type, ARRAY_SIZE(e_wb_rotate_type),
+			0, CONNECTOR_PROP_WB_ROT_TYPE);
+
 	msm_property_install_enum(&c_conn->property_info, "wb_usage_type",
 			0x0, 0, e_wb_usage_type, ARRAY_SIZE(e_wb_usage_type),
 			0, CONNECTOR_PROP_WB_USAGE_TYPE);