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

Commit 6d3fd1e8 authored by Maheshwar Ajja's avatar Maheshwar Ajja
Browse files

msm: vidc: Set QDSS memory based on debug flag



Allocate and map QDSS memory to video hardware based on
debug flag "msm_fw_debug_mode". There is no need to
allocate QDSS memory if QDSS debug mode is not enabled.

To enable QUEUE debug mode -
adb shell "echo 0x1 > /d/msm_vidc/fw_debug_mode"
To enable QDSS debug mode -
adb shell "echo 0x2 > /d/msm_vidc/fw_debug_mode"
To enable both debug modes -
adb shell "echo 0x3 > /d/msm_vidc/fw_debug_mode"

By default QUEUE debug mode is enabled.

Change-Id: I31d6c30d312fac790abec851fad4df8fe5355e01
Signed-off-by: default avatarMaheshwar Ajja <majja@codeaurora.org>
parent 500bff85
Loading
Loading
Loading
Loading
+42 −32
Original line number Diff line number Diff line
@@ -1429,15 +1429,19 @@ static void venus_hfi_interface_queues_release(struct venus_hfi_device *device)
		device->iface_queues[i].q_array.align_virtual_addr = NULL;
		device->iface_queues[i].q_array.align_device_addr = NULL;
	}
	device->iface_q_table.mem_data = NULL;
	device->iface_q_table.align_virtual_addr = NULL;
	device->iface_q_table.align_device_addr = NULL;

	device->qdss.mem_data = NULL;
	device->qdss.align_virtual_addr = NULL;
	device->qdss.align_device_addr = NULL;

	device->sfr.mem_data = NULL;
	device->sfr.align_virtual_addr = NULL;
	device->sfr.align_device_addr = NULL;

	device->mem_addr.mem_data = NULL;
	device->mem_addr.align_virtual_addr = NULL;
	device->mem_addr.align_device_addr = NULL;

@@ -1523,7 +1527,7 @@ static int venus_hfi_interface_queues_init(struct venus_hfi_device *dev)
				dev->iface_q_table.align_virtual_addr, i);
		venus_hfi_set_queue_hdr_defaults(iface_q->q_hdr);
	}

	if (msm_fw_debug_mode & HFI_DEBUG_MODE_QDSS) {
		rc = venus_hfi_alloc(dev, (void *) mem_addr,
				QDSS_SIZE, 1, 0,
				HAL_BUFFER_INTERNAL_CMD_QUEUE);
@@ -1532,11 +1536,14 @@ static int venus_hfi_interface_queues_init(struct venus_hfi_device *dev)
				"qdss_alloc_fail: QDSS messages logging will not work\n");
			dev->qdss.align_device_addr = NULL;
		} else {
		dev->qdss.align_device_addr = mem_addr->align_device_addr;
		dev->qdss.align_virtual_addr = mem_addr->align_virtual_addr;
			dev->qdss.align_device_addr =
				mem_addr->align_device_addr;
			dev->qdss.align_virtual_addr =
				mem_addr->align_virtual_addr;
			dev->qdss.mem_size = QDSS_SIZE;
			dev->qdss.mem_data = mem_addr->mem_data;
		}
	}
	rc = venus_hfi_alloc(dev, (void *) mem_addr,
			SFR_SIZE, 1, 0,
			HAL_BUFFER_INTERNAL_CMD_QUEUE);
@@ -1591,7 +1598,9 @@ static int venus_hfi_interface_queues_init(struct venus_hfi_device *dev)
		VIDC_CPU_CS_SCIACMDARG1, 0x01,
		dev->iface_q_table.align_virtual_addr);

	qdss = (struct hfi_mem_map_table *) dev->qdss.align_virtual_addr;
	if (dev->qdss.mem_data) {
		qdss = (struct hfi_mem_map_table *)
			dev->qdss.align_virtual_addr;
		qdss->mem_map_num_entries = num_entries;
		qdss->mem_map_table_base_addr =
			(u32 *)	((u32)dev->qdss.align_device_addr +
@@ -1599,7 +1608,8 @@ static int venus_hfi_interface_queues_init(struct venus_hfi_device *dev)
		mem_map = (struct hfi_mem_map *)(qdss + 1);
		msm_smem_get_domain_partition(dev->hal_client, 0,
			HAL_BUFFER_INTERNAL_CMD_QUEUE, &domain, &partition);
	rc = venus_hfi_get_qdss_iommu_virtual_addr(mem_map, domain, partition);
		rc = venus_hfi_get_qdss_iommu_virtual_addr(mem_map,
			domain, partition);
		if (rc) {
			dprintk(VIDC_ERR,
				"IOMMU mapping failed, Freeing qdss memdata\n");
@@ -1610,7 +1620,7 @@ static int venus_hfi_interface_queues_init(struct venus_hfi_device *dev)
			venus_hfi_write_register(dev,
				VIDC_MMAP_ADDR,
				(u32) dev->qdss.align_device_addr, 0);

	}
	vsfr = (struct hfi_sfr_struct *) dev->sfr.align_virtual_addr;
	vsfr->bufSize = SFR_SIZE;
	if (!IS_ERR_OR_NULL(dev->sfr.align_device_addr))