浏览代码

video: driver: Set lx arch to fw before fw boot

To simplify the boot process, firmware needs to know the type of architecture
before it boots up.

Change-Id: I42ff87094b816f9783d18fa67126e9b7a4dab320
Signed-off-by: Chinmay Sawarkar <[email protected]>
Chinmay Sawarkar 4 年之前
父节点
当前提交
8cd787ac52

+ 6 - 0
driver/variant/iris2/src/msm_vidc_iris2.c

@@ -17,6 +17,8 @@
 #include "msm_vidc_buffer.h"
 #include "msm_vidc_debug.h"
 
+#define VIDEO_ARCH_LX 1
+
 #define VBIF_BASE_OFFS_IRIS2                   0x00080000
 #define CPU_BASE_OFFS_IRIS2                    0x000A0000
 #define AON_BASE_OFFS			               0x000E0000
@@ -190,6 +192,10 @@ static int __setup_ucregion_memory_map_iris2(struct msm_vidc_core *vidc_core)
 	__write_register(core, CPU_CS_VCICMDARG1_IRIS2,
 		(u32)((u64)core->iface_q_table.align_virtual_addr >> 32));
 
+	if(core->sfr.align_device_addr)
+		__write_register(core, SFR_ADDR_IRIS2,
+			(u32)core->sfr.align_device_addr + VIDEO_ARCH_LX);
+
 	return 0;
 }
 

+ 0 - 1
driver/vidc/inc/hfi_command.h

@@ -92,7 +92,6 @@ enum hfi_buffer_type {
 	HFI_BUFFER_RAW        = 0x00000002,
 	HFI_BUFFER_METADATA   = 0x00000003,
 	HFI_BUFFER_SUBCACHE   = 0x00000004,
-	HFI_BUFFER_SFR        = 0x00000005,
 	HFI_BUFFER_DPB        = 0x00000006,
 	HFI_BUFFER_BIN        = 0x00000007,
 	HFI_BUFFER_LINE       = 0x00000008,

+ 1 - 1
driver/vidc/src/msm_vidc_driver.c

@@ -2580,7 +2580,7 @@ int msm_vidc_core_init(struct msm_vidc_core *core)
 		goto unlock;
 	}
 
-	d_vpr_h("%s(): waiting for sys init done, %d ms\n", __func__,
+	d_vpr_h("%s(): waiting for sys_init_done, %d ms\n", __func__,
 		core->capabilities[HW_RESPONSE_TIMEOUT].value);
 	core_unlock(core, __func__);
 	rc = wait_for_completion_timeout(&core->init_done, msecs_to_jiffies(

+ 0 - 46
driver/vidc/src/venus_hfi.c

@@ -2605,48 +2605,6 @@ static int __sys_init(struct msm_vidc_core *core)
 	return 0;
 }
 
-static int __queue_sfr_buffer(struct msm_vidc_core *core)
-{
-	int rc = 0;
-	struct hfi_buffer buf;
-
-	memset(&buf, 0, sizeof(struct hfi_buffer));
-	buf.type = HFI_BUFFER_SFR;
-	buf.index = 0;
-	buf.base_address = core->sfr.align_device_addr;
-	buf.addr_offset = 0;
-	buf.buffer_size = core->sfr.mem_size;
-	buf.data_offset = 0;
-	buf.data_size = 0;
-	buf.timestamp = 0;
-	buf.flags = 0;
-
-	rc = hfi_create_header(core->packet, core->packet_size,
-			0, core->header_id++);
-	if (rc)
-		return rc;
-
-	rc = hfi_create_packet(core->packet,
-			core->packet_size,
-			HFI_CMD_BUFFER,
-			HFI_BUF_HOST_FLAG_NONE,
-			HFI_PAYLOAD_STRUCTURE,
-			HFI_PORT_NONE,
-			core->packet_id++,
-			&buf,
-			sizeof(buf));
-	if (rc)
-		return rc;
-
-	rc = __iface_cmdq_write(core, core->packet);
-	if (rc)
-		return rc;
-
-	d_vpr_h("SFR buffer packet queued\n");
-
-	return rc;
-}
-
 static int __sys_image_version(struct msm_vidc_core *core)
 {
 	int rc = 0;
@@ -2709,10 +2667,6 @@ int venus_hfi_core_init(struct msm_vidc_core *core)
 	if (rc)
 		goto error;
 
-	rc = __queue_sfr_buffer(core);
-	if (rc)
-		goto error;
-
 	rc = __sys_image_version(core);
 	if (rc)
 		goto error;

+ 2 - 0
driver/vidc/src/venus_hfi_response.c

@@ -278,6 +278,8 @@ static int handle_system_init(struct msm_vidc_core *core,
 	if (pkt->flags & HFI_FW_FLAGS_SUCCESS) {
 		d_vpr_h("%s: successful\n", __func__);
 		complete(&core->init_done);
+	} else {
+		d_vpr_h("%s: unhandled. flags=%d\n", __func__, pkt->flags);
 	}
 
 	return 0;