浏览代码

video: driver: diwali: Configure hbb value

Configure hbb value as '14' for lp4
ddr variant.

Change-Id: Id3fa3028f38dabb81d1b1fc5b117c6d10e4d45b5
Signed-off-by: Priyanka Gujjula <[email protected]>
Priyanka Gujjula 3 年之前
父节点
当前提交
e710c6f974
共有 2 个文件被更改,包括 40 次插入6 次删除
  1. 28 0
      driver/platform/diwali/src/msm_vidc_diwali.c
  2. 12 6
      driver/vidc/src/msm_vidc_platform.c

+ 28 - 0
driver/platform/diwali/src/msm_vidc_diwali.c

@@ -45,6 +45,11 @@
 	.bank_spreading = bsp,	\
 }
 
+#define DDR_TYPE_LPDDR4 0x6
+#define DDR_TYPE_LPDDR4X 0x7
+#define DDR_TYPE_LPDDR5 0x8
+#define DDR_TYPE_LPDDR5X 0x9
+
 #define ENC     MSM_VIDC_ENCODER
 #define DEC     MSM_VIDC_DECODER
 #define H264    MSM_VIDC_H264
@@ -1639,6 +1644,26 @@ static struct msm_vidc_platform_data diwali_data = {
 	.bus_bw_nrt = bus_bw_nrt,
 };
 
+static void msm_vidc_ddr_ubwc_config(
+	struct msm_vidc_platform_data *platform_data, u32 hbb_override_val)
+{
+	uint32_t ddr_type = DDR_TYPE_LPDDR5;
+
+	ddr_type = of_fdt_get_ddrtype();
+	if (ddr_type == -ENOENT) {
+		d_vpr_e("Failed to get ddr type, use LPDDR5\n");
+	}
+
+	if (platform_data->ubwc_config &&
+		(ddr_type == DDR_TYPE_LPDDR4 ||
+		 ddr_type == DDR_TYPE_LPDDR4X))
+		platform_data->ubwc_config->highest_bank_bit = hbb_override_val;
+
+	d_vpr_h("DDR Type 0x%x hbb 0x%x\n",
+		ddr_type, platform_data->ubwc_config ?
+		platform_data->ubwc_config->highest_bank_bit : -1);
+}
+
 static int msm_vidc_init_data(struct msm_vidc_core *core)
 {
 	int rc = 0;
@@ -1651,6 +1676,9 @@ static int msm_vidc_init_data(struct msm_vidc_core *core)
 
 	core->platform->data = diwali_data;
 
+	/* Check for DDR variant */
+	msm_vidc_ddr_ubwc_config(&core->platform->data, 0xe);
+
 	return rc;
 }
 

+ 12 - 6
driver/vidc/src/msm_vidc_platform.c

@@ -157,7 +157,8 @@ static int msm_vidc_deinit_platform_variant(struct msm_vidc_core *core, struct d
 	if (of_device_is_compatible(dev->of_node, "qcom,msm-vidc-waipio")) {
 		rc = msm_vidc_deinit_platform_waipio(core, dev);
 		if (rc)
-			d_vpr_e("%s: failed with %d\n", __func__, rc);
+			d_vpr_e("%s: failed msm-vidc-waipio with %d\n",
+				__func__, rc);
 		goto end_target_config;
 	}
 #endif
@@ -165,7 +166,8 @@ static int msm_vidc_deinit_platform_variant(struct msm_vidc_core *core, struct d
 	if (of_device_is_compatible(dev->of_node, "qcom,msm-vidc-diwali")) {
 		rc = msm_vidc_deinit_platform_diwali(core, dev);
 		if (rc)
-			d_vpr_e("%s: failed with %d\n", __func__, rc);
+			d_vpr_e("%s: failed msm-vidc-diwali with %d\n",
+				__func__, rc);
 		goto end_target_config;
 	}
 #endif
@@ -189,7 +191,8 @@ static int msm_vidc_init_platform_variant(struct msm_vidc_core *core, struct dev
 	if (of_device_is_compatible(dev->of_node, "qcom,msm-vidc-waipio")) {
 		rc = msm_vidc_init_platform_waipio(core, dev);
 		if (rc)
-			d_vpr_e("%s: failed with %d\n", __func__, rc);
+			d_vpr_e("%s: failed msm-vidc-waipio with %d\n",
+				__func__, rc);
 		goto end_target_config;
 	}
 #endif
@@ -197,7 +200,8 @@ static int msm_vidc_init_platform_variant(struct msm_vidc_core *core, struct dev
 	if (of_device_is_compatible(dev->of_node, "qcom,msm-vidc-diwali")) {
 		rc = msm_vidc_init_platform_diwali(core, dev);
 		if (rc)
-			d_vpr_e("%s: failed with %d\n", __func__, rc);
+			d_vpr_e("%s: failed msm-vidc-diwali with %d\n",
+				__func__, rc);
 		goto end_target_config;
 	}
 #endif
@@ -221,7 +225,8 @@ static int msm_vidc_deinit_vpu(struct msm_vidc_core *core, struct device *dev)
 	if (of_device_is_compatible(dev->of_node, "qcom,msm-vidc-iris2")) {
 		rc = msm_vidc_deinit_iris2(core);
 		if (rc)
-			d_vpr_e("%s: failed with %d\n", __func__, rc);
+			d_vpr_e("%s: failed msm-vidc-iris2 with %d\n",
+				__func__, rc);
 	}
 #endif
 	return rc;
@@ -240,7 +245,8 @@ static int msm_vidc_init_vpu(struct msm_vidc_core *core, struct device *dev)
 	if (of_device_is_compatible(dev->of_node, "qcom,msm-vidc-iris2")) {
 		rc = msm_vidc_init_iris2(core);
 		if (rc)
-			d_vpr_e("%s: failed with %d\n", __func__, rc);
+			d_vpr_e("%s: failed msm-vidc-iris2 with %d\n",
+				__func__, rc);
 	}
 #endif
 	return rc;