Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 85ba1983 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: vidc: Disable NOC error recovery"

parents 0c44b2d6 86ab4a5a
Loading
Loading
Loading
Loading
+62 −0
Original line number Diff line number Diff line
@@ -121,6 +121,26 @@
#define VIDC_UC_REGION_ADDR_AR50_LT		VIDC_CPU_CS_SCIBARG1_AR50_LT
#define VIDC_UC_REGION_SIZE_AR50_LT		VIDC_CPU_CS_SCIBARG2_AR50_LT

/*
 * --------------------------------------------------------------------------
 * MODULE: vcodec noc error log registers
 * --------------------------------------------------------------------------
 */
#define VCODEC_CORE0_VIDEO_NOC_BASE_OFFS		0x00004000
#define VCODEC_COREX_VIDEO_NOC_ERR_SWID_LOW_OFFS	0x0500
#define VCODEC_COREX_VIDEO_NOC_ERR_SWID_HIGH_OFFS	0x0504
#define VCODEC_COREX_VIDEO_NOC_ERR_MAINCTL_LOW_OFFS	0x0508
#define VCODEC_COREX_VIDEO_NOC_ERR_ERRVLD_LOW_OFFS	0x0510
#define VCODEC_COREX_VIDEO_NOC_ERR_ERRCLR_LOW_OFFS	0x0518
#define VCODEC_COREX_VIDEO_NOC_ERR_ERRLOG0_LOW_OFFS	0x0520
#define VCODEC_COREX_VIDEO_NOC_ERR_ERRLOG0_HIGH_OFFS	0x0524
#define VCODEC_COREX_VIDEO_NOC_ERR_ERRLOG1_LOW_OFFS	0x0528
#define VCODEC_COREX_VIDEO_NOC_ERR_ERRLOG1_HIGH_OFFS	0x052C
#define VCODEC_COREX_VIDEO_NOC_ERR_ERRLOG2_LOW_OFFS	0x0530
#define VCODEC_COREX_VIDEO_NOC_ERR_ERRLOG2_HIGH_OFFS	0x0534
#define VCODEC_COREX_VIDEO_NOC_ERR_ERRLOG3_LOW_OFFS	0x0538
#define VCODEC_COREX_VIDEO_NOC_ERR_ERRLOG3_HIGH_OFFS	0x053C

void __interrupt_init_ar50_lt(struct venus_hfi_device *device, u32 sid)
{
	__write_register(device, VIDC_WRAPPER_INTR_MASK_AR50_LT,
@@ -143,6 +163,48 @@ void __setup_ucregion_memory_map_ar50_lt(struct venus_hfi_device *device, u32 si
				(u32)device->qdss.align_device_addr, sid);
}

void __noc_error_info_ar50_lt(struct venus_hfi_device *device)
{
	u32 val;
	u32 vcodec_core_video_noc_base_offs =
			VCODEC_CORE0_VIDEO_NOC_BASE_OFFS;
	u32 sid = DEFAULT_SID;

	val = __read_register(device, vcodec_core_video_noc_base_offs +
			VCODEC_COREX_VIDEO_NOC_ERR_SWID_LOW_OFFS, sid);
	d_vpr_e("NOC_ERR_SWID_LOW:     %#x\n", val);
	val = __read_register(device, vcodec_core_video_noc_base_offs +
			VCODEC_COREX_VIDEO_NOC_ERR_SWID_HIGH_OFFS, sid);
	d_vpr_e("NOC_ERR_SWID_HIGH:    %#x\n", val);
	val = __read_register(device, vcodec_core_video_noc_base_offs +
			VCODEC_COREX_VIDEO_NOC_ERR_MAINCTL_LOW_OFFS, sid);
	d_vpr_e("NOC_ERR_MAINCTL_LOW:  %#x\n", val);
	val = __read_register(device, vcodec_core_video_noc_base_offs +
			VCODEC_COREX_VIDEO_NOC_ERR_ERRLOG0_LOW_OFFS, sid);
	d_vpr_e("NOC_ERR_ERRLOG0_LOW:  %#x\n", val);
	val = __read_register(device, vcodec_core_video_noc_base_offs +
			VCODEC_COREX_VIDEO_NOC_ERR_ERRLOG0_HIGH_OFFS, sid);
	d_vpr_e("NOC_ERR_ERRLOG0_HIGH: %#x\n", val);
	val = __read_register(device, vcodec_core_video_noc_base_offs +
			VCODEC_COREX_VIDEO_NOC_ERR_ERRLOG1_LOW_OFFS, sid);
	d_vpr_e("NOC_ERR_ERRLOG1_LOW:  %#x\n", val);
	val = __read_register(device, vcodec_core_video_noc_base_offs +
			VCODEC_COREX_VIDEO_NOC_ERR_ERRLOG1_HIGH_OFFS, sid);
	d_vpr_e("NOC_ERR_ERRLOG1_HIGH: %#x\n", val);
	val = __read_register(device, vcodec_core_video_noc_base_offs +
			VCODEC_COREX_VIDEO_NOC_ERR_ERRLOG2_LOW_OFFS, sid);
	d_vpr_e("NOC_ERR_ERRLOG2_LOW:  %#x\n", val);
	val = __read_register(device, vcodec_core_video_noc_base_offs +
			VCODEC_COREX_VIDEO_NOC_ERR_ERRLOG2_HIGH_OFFS, sid);
	d_vpr_e("NOC_ERR_ERRLOG2_HIGH: %#x\n", val);
	val = __read_register(device, vcodec_core_video_noc_base_offs +
			VCODEC_COREX_VIDEO_NOC_ERR_ERRLOG3_LOW_OFFS, sid);
	d_vpr_e("NOC_ERR_ERRLOG3_LOW:  %#x\n", val);
	val = __read_register(device, vcodec_core_video_noc_base_offs +
			VCODEC_COREX_VIDEO_NOC_ERR_ERRLOG3_HIGH_OFFS, sid);
	d_vpr_e("NOC_ERR_ERRLOG3_HIGH: %#x\n", val);
}

void __power_off_ar50_lt(struct venus_hfi_device *device)
{
	if (!device->power_enabled)
+11 −11
Original line number Diff line number Diff line
@@ -142,7 +142,7 @@ struct venus_hfi_vpu_ops ar50_lite_ops = {
	.prepare_pc = __prepare_pc_ar50_lt,
	.raise_interrupt = __raise_interrupt_ar50_lt,
	.watchdog = __watchdog_common,
        .noc_error_info = __noc_error_info_common,
	.noc_error_info = __noc_error_info_ar50_lt,
	.core_clear_interrupt = __core_clear_interrupt_ar50_lt,
	.boot_firmware = __boot_firmware_ar50_lt,
};
+1 −0
Original line number Diff line number Diff line
@@ -329,5 +329,6 @@ int __prepare_pc_ar50_lt(struct venus_hfi_device *device);
void __raise_interrupt_ar50_lt(struct venus_hfi_device *device, u32 sid);
void __core_clear_interrupt_ar50_lt(struct venus_hfi_device *device);
int __boot_firmware_ar50_lt(struct venus_hfi_device *device, u32 sid);
void __noc_error_info_ar50_lt(struct venus_hfi_device *device);

#endif
+3 −0
Original line number Diff line number Diff line
@@ -1558,6 +1558,9 @@ void *vidc_get_drv_data(struct device *dev)
			ddr_type, driver_data->ubwc_config ?
			driver_data->ubwc_config->highest_bank_bit : -1);
	} else if (!strcmp(match->compatible, "qcom,bengal-vidc")) {
		d_vpr_h("Disable NOC error recovery");
		msm_vidc_err_recovery_disable =
				VIDC_DISABLE_NOC_ERR_RECOV;
		rc = msm_vidc_read_rank(driver_data, dev);
		if (rc) {
			d_vpr_e("Failed to get ddr rank, use Dual Rank DDR\n");