Browse Source

video: driver: Add new hfi buffer flags

New hfi buffer flags to send memory region information to firmware.

Change-Id: I3a320622d0ed01a5e583dbeceb2648a57f618a66
Signed-off-by: Chinmay Sawarkar <[email protected]>
Chinmay Sawarkar 2 years ago
parent
commit
ed46ad9aec

+ 5 - 5
driver/vidc/inc/hfi_command.h

@@ -51,11 +51,6 @@ enum hfi_packet_host_flags {
 	HFI_HOST_FLAGS_RESPONSE_REQUIRED   = 0x00000002,
 	HFI_HOST_FLAGS_NON_DISCARDABLE     = 0x00000004,
 	HFI_HOST_FLAGS_GET_PROPERTY        = 0x00000008,
-	HFI_HOST_FLAGS_CB_NON_SECURE       = 0x00000010,
-	HFI_HOST_FLAGS_CB_SECURE_PIXEL     = 0x00000020,
-	HFI_HOST_FLAGS_CB_SECURE_BITSTREAM = 0x00000040,
-	HFI_HOST_FLAGS_CB_SECURE_NON_PIXEL = 0x00000080,
-	HFI_HOST_FLAGS_CB_NON_SECURE_PIXEL = 0x00000100,
 };
 
 enum hfi_packet_firmware_flags {
@@ -110,6 +105,11 @@ enum hfi_buffer_host_flags {
 	HFI_BUF_HOST_FLAG_RELEASE            = 0x00000001,
 	HFI_BUF_HOST_FLAG_READONLY           = 0x00000010,
 	HFI_BUF_HOST_FLAG_CODEC_CONFIG       = 0x00000100,
+	HFI_BUF_HOST_FLAGS_CB_NON_SECURE       = 0x00000200,
+	HFI_BUF_HOST_FLAGS_CB_SECURE_PIXEL     = 0x00000400,
+	HFI_BUF_HOST_FLAGS_CB_SECURE_BITSTREAM = 0x00000800,
+	HFI_BUF_HOST_FLAGS_CB_SECURE_NON_PIXEL = 0x00001000,
+	HFI_BUF_HOST_FLAGS_CB_NON_SECURE_PIXEL = 0x00002000,
 };
 
 enum hfi_buffer_firmware_flags {

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

@@ -891,6 +891,7 @@ struct msm_vidc_buffer {
 	struct list_head                   list;
 	struct msm_vidc_inst              *inst;
 	enum msm_vidc_buffer_type          type;
+	enum msm_vidc_buffer_region        region;
 	u32                                index;
 	int                                fd;
 	u32                                buffer_size;

+ 22 - 0
driver/vidc/src/hfi_packet.c

@@ -288,6 +288,27 @@ u32 get_hfi_colorformat(struct msm_vidc_inst *inst,
 	return hfi_colorformat;
 }
 
+static u32 get_hfi_region_flag(enum msm_vidc_buffer_region region)
+{
+
+	switch (region) {
+	case MSM_VIDC_NON_SECURE:
+		return HFI_BUF_HOST_FLAGS_CB_NON_SECURE;
+	case MSM_VIDC_NON_SECURE_PIXEL:
+		return HFI_BUF_HOST_FLAGS_CB_NON_SECURE_PIXEL;
+	case MSM_VIDC_SECURE_PIXEL:
+		return HFI_BUF_HOST_FLAGS_CB_SECURE_PIXEL;
+	case MSM_VIDC_SECURE_NONPIXEL:
+		return HFI_BUF_HOST_FLAGS_CB_SECURE_NON_PIXEL;
+	case MSM_VIDC_SECURE_BITSTREAM:
+		return HFI_BUF_HOST_FLAGS_CB_SECURE_BITSTREAM;
+	case MSM_VIDC_REGION_MAX:
+	case MSM_VIDC_REGION_NONE:
+	default:
+		return HFI_BUF_HOST_FLAG_NONE;
+	}
+}
+
 int get_hfi_buffer(struct msm_vidc_inst *inst,
 	struct msm_vidc_buffer *buffer, struct hfi_buffer *buf)
 {
@@ -310,6 +331,7 @@ int get_hfi_buffer(struct msm_vidc_inst *inst,
 		buf->flags |= HFI_BUF_HOST_FLAG_RELEASE;
 	if (buffer->flags & MSM_VIDC_BUF_FLAG_CODECCONFIG)
 		buf->flags |= HFI_BUF_HOST_FLAG_CODEC_CONFIG;
+	buf->flags |= get_hfi_region_flag(buffer->region);
 	buf->timestamp = buffer->timestamp;
 
 	return 0;

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

@@ -2524,6 +2524,7 @@ int msm_vidc_allocate_buffers(struct msm_vidc_inst *inst,
 		list_add_tail(&buf->list, &buffers->list);
 		buf->type = buf_type;
 		buf->index = idx;
+		buf->region = call_mem_op(core, buffer_region, inst, buf_type);
 	}
 	i_vpr_h(inst, "%s: allocated %d buffers for type %s\n",
 		__func__, num_buffers, buf_name(buf_type));
@@ -3295,6 +3296,7 @@ int msm_vidc_create_internal_buffer(struct msm_vidc_inst *inst,
 
 	buffer->dmabuf = mem->dmabuf;
 	buffer->device_addr = mem->device_addr;
+	buffer->region = mem->region;
 	i_vpr_h(inst, "%s: create: type: %8s, size: %9u, device_addr %#llx\n", __func__,
 		buf_name(buffer_type), buffers->size, buffer->device_addr);