Procházet zdrojové kódy

Merge "Video: Driver: Add SSR support"

qctecmdr před 1 rokem
rodič
revize
09ce24d5ae

+ 13 - 0
driver/platform/volcano/src/msm_vidc_volcano.c

@@ -4359,6 +4359,13 @@ static struct msm_platform_inst_cap_dependency instance_cap_dependency_data_volc
 		NULL},
 };
 
+static const u32 volcano_msm_vidc_ssr_type[] = {
+	HFI_SSR_TYPE_SW_ERR_FATAL,
+	HFI_SSR_TYPE_SW_DIV_BY_ZERO,
+	HFI_SSR_TYPE_CPU_WDOG_IRQ,
+	HFI_SSR_TYPE_NOC_ERROR,
+};
+
 /* Default UBWC config for LPDDR5 */
 static struct msm_vidc_ubwc_config_data ubwc_config_volcano[] = {
 	UBWC_CONFIG(8, 32, 15, 0, 1, 1, 1),
@@ -4568,6 +4575,9 @@ static const struct msm_vidc_platform_data volcano_data_v0 = {
 	.dec_output_prop_size_hevc = ARRAY_SIZE(volcano_vdec_output_properties_hevc),
 	.dec_output_prop_size_vp9 = ARRAY_SIZE(volcano_vdec_output_properties_vp9),
 
+	.msm_vidc_ssr_type = volcano_msm_vidc_ssr_type,
+	.msm_vidc_ssr_type_size = ARRAY_SIZE(volcano_msm_vidc_ssr_type),
+
 	/* Fuse specific resources */
 	.efuse_data = efuse_data_volcano,
 	.efuse_data_size = ARRAY_SIZE(efuse_data_volcano),
@@ -4632,6 +4642,9 @@ static const struct msm_vidc_platform_data volcano_data_v1 = {
 	.dec_output_prop_size_hevc = ARRAY_SIZE(volcano_vdec_output_properties_hevc),
 	.dec_output_prop_size_vp9 = ARRAY_SIZE(volcano_vdec_output_properties_vp9),
 
+	.msm_vidc_ssr_type = volcano_msm_vidc_ssr_type,
+	.msm_vidc_ssr_type_size = ARRAY_SIZE(volcano_msm_vidc_ssr_type),
+
 	/* Fuse specific resources */
 	.efuse_data = efuse_data_volcano,
 	.efuse_data_size = ARRAY_SIZE(efuse_data_volcano),

+ 5 - 4
driver/vidc/src/msm_vidc_driver.c

@@ -4083,13 +4083,14 @@ int msm_vidc_trigger_ssr(struct msm_vidc_core *core,
 	d_vpr_e("%s: trigger ssr is called. trigger ssr val: %#llx\n",
 		__func__, trigger_ssr_val);
 
-	if (!is_ssr_type_allowed(core, trigger_ssr_val)) {
-		d_vpr_h("SSR Type %#llx is not allowed\n", trigger_ssr_val);
+	ssr->ssr_type = (trigger_ssr_val &
+			(unsigned long)SSR_TYPE) >> SSR_TYPE_SHIFT;
+
+	if (!is_ssr_type_allowed(core, ssr->ssr_type)) {
+		d_vpr_h("SSR Type %#llx is not allowed\n", ssr->ssr_type);
 		return 0;
 	}
 
-	ssr->ssr_type = (trigger_ssr_val &
-			(unsigned long)SSR_TYPE) >> SSR_TYPE_SHIFT;
 	ssr->sub_client_id = (trigger_ssr_val &
 			(unsigned long)SSR_SUB_CLIENT_ID) >> SSR_SUB_CLIENT_ID_SHIFT;
 	ssr->test_addr = (trigger_ssr_val &