Commit bbfc89e6 authored by Konrad Dybcio's avatar Konrad Dybcio Committed by Mauro Carvalho Chehab
Browse files

media: venus: Introduce accessors for remapped hfi_buffer_reqs members



Currently we have macros to access these, but they don't provide a
way to override the remapped fields. Replace the macros with actual
get/set pairs to fix that.

Reviewed-by: default avatarBryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: default avatarKonrad Dybcio <konrad.dybcio@linaro.org>
Signed-off-by: default avatarStanimir Varbanov <stanimir.k.varbanov@gmail.com>
Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
parent 04e3a072
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -189,7 +189,7 @@ int venus_helper_alloc_dpb_bufs(struct venus_inst *inst)
	if (ret)
	if (ret)
		return ret;
		return ret;


	count = HFI_BUFREQ_COUNT_MIN(&bufreq, ver);
	count = hfi_bufreq_get_count_min(&bufreq, ver);


	for (i = 0; i < count; i++) {
	for (i = 0; i < count; i++) {
		buf = kzalloc(sizeof(*buf), GFP_KERNEL);
		buf = kzalloc(sizeof(*buf), GFP_KERNEL);
+53 −8
Original line number Original line Diff line number Diff line
@@ -1170,14 +1170,6 @@ struct hfi_buffer_display_hold_count_actual {
	u32 hold_count;
	u32 hold_count;
};
};


/* HFI 4XX reorder the fields, use these macros */
#define HFI_BUFREQ_HOLD_COUNT(bufreq, ver)	\
	((ver) == HFI_VERSION_4XX ? 0 : (bufreq)->hold_count)
#define HFI_BUFREQ_COUNT_MIN(bufreq, ver)	\
	((ver) == HFI_VERSION_4XX ? (bufreq)->hold_count : (bufreq)->count_min)
#define HFI_BUFREQ_COUNT_MIN_HOST(bufreq, ver)	\
	((ver) == HFI_VERSION_4XX ? (bufreq)->count_min : 0)

struct hfi_buffer_requirements {
struct hfi_buffer_requirements {
	u32 type;
	u32 type;
	u32 size;
	u32 size;
@@ -1189,6 +1181,59 @@ struct hfi_buffer_requirements {
	u32 alignment;
	u32 alignment;
};
};


/* On HFI 4XX, some of the struct members have been swapped. */
static inline u32 hfi_bufreq_get_hold_count(struct hfi_buffer_requirements *req,
					    u32 ver)
{
	if (ver == HFI_VERSION_4XX)
		return 0;

	return req->hold_count;
};

static inline u32 hfi_bufreq_get_count_min(struct hfi_buffer_requirements *req,
					   u32 ver)
{
	if (ver == HFI_VERSION_4XX)
		return req->hold_count;

	return req->count_min;
};

static inline u32 hfi_bufreq_get_count_min_host(struct hfi_buffer_requirements *req,
						u32 ver)
{
	if (ver == HFI_VERSION_4XX)
		return req->count_min;

	return 0;
};

static inline void hfi_bufreq_set_hold_count(struct hfi_buffer_requirements *req,
					     u32 ver, u32 val)
{
	if (ver == HFI_VERSION_4XX)
		return;

	req->hold_count = val;
};

static inline void hfi_bufreq_set_count_min(struct hfi_buffer_requirements *req,
					    u32 ver, u32 val)
{
	if (ver == HFI_VERSION_4XX)
		req->hold_count = val;

	req->count_min = val;
};

static inline void hfi_bufreq_set_count_min_host(struct hfi_buffer_requirements *req,
						 u32 ver, u32 val)
{
	if (ver == HFI_VERSION_4XX)
		req->count_min = val;
};

struct hfi_data_payload {
struct hfi_data_payload {
	u32 size;
	u32 size;
	u8 data[1];
	u8 data[1];
+1 −1
Original line number Original line Diff line number Diff line
@@ -99,7 +99,7 @@ static void event_seq_changed(struct venus_core *core, struct venus_inst *inst,
		case HFI_PROPERTY_CONFIG_BUFFER_REQUIREMENTS:
		case HFI_PROPERTY_CONFIG_BUFFER_REQUIREMENTS:
			data_ptr += sizeof(u32);
			data_ptr += sizeof(u32);
			bufreq = (struct hfi_buffer_requirements *)data_ptr;
			bufreq = (struct hfi_buffer_requirements *)data_ptr;
			event.buf_count = HFI_BUFREQ_COUNT_MIN(bufreq, ver);
			event.buf_count = hfi_bufreq_get_count_min(bufreq, ver);
			data_ptr += sizeof(*bufreq);
			data_ptr += sizeof(*bufreq);
			break;
			break;
		case HFI_INDEX_EXTRADATA_INPUT_CROP:
		case HFI_INDEX_EXTRADATA_INPUT_CROP:
+4 −4
Original line number Original line Diff line number Diff line
@@ -899,13 +899,13 @@ static int vdec_num_buffers(struct venus_inst *inst, unsigned int *in_num,
	if (ret)
	if (ret)
		return ret;
		return ret;


	*in_num = HFI_BUFREQ_COUNT_MIN(&bufreq, ver);
	*in_num = hfi_bufreq_get_count_min(&bufreq, ver);


	ret = venus_helper_get_bufreq(inst, HFI_BUFFER_OUTPUT, &bufreq);
	ret = venus_helper_get_bufreq(inst, HFI_BUFFER_OUTPUT, &bufreq);
	if (ret)
	if (ret)
		return ret;
		return ret;


	*out_num = HFI_BUFREQ_COUNT_MIN(&bufreq, ver);
	*out_num = hfi_bufreq_get_count_min(&bufreq, ver);


	return 0;
	return 0;
}
}
@@ -1019,14 +1019,14 @@ static int vdec_verify_conf(struct venus_inst *inst)
		return ret;
		return ret;


	if (inst->num_output_bufs < bufreq.count_actual ||
	if (inst->num_output_bufs < bufreq.count_actual ||
	    inst->num_output_bufs < HFI_BUFREQ_COUNT_MIN(&bufreq, ver))
	    inst->num_output_bufs < hfi_bufreq_get_count_min(&bufreq, ver))
		return -EINVAL;
		return -EINVAL;


	ret = venus_helper_get_bufreq(inst, HFI_BUFFER_INPUT, &bufreq);
	ret = venus_helper_get_bufreq(inst, HFI_BUFFER_INPUT, &bufreq);
	if (ret)
	if (ret)
		return ret;
		return ret;


	if (inst->num_input_bufs < HFI_BUFREQ_COUNT_MIN(&bufreq, ver))
	if (inst->num_input_bufs < hfi_bufreq_get_count_min(&bufreq, ver))
		return -EINVAL;
		return -EINVAL;


	return 0;
	return 0;
+1 −1
Original line number Original line Diff line number Diff line
@@ -79,7 +79,7 @@ static int vdec_op_g_volatile_ctrl(struct v4l2_ctrl *ctrl)
	case V4L2_CID_MIN_BUFFERS_FOR_CAPTURE:
	case V4L2_CID_MIN_BUFFERS_FOR_CAPTURE:
		ret = venus_helper_get_bufreq(inst, HFI_BUFFER_OUTPUT, &bufreq);
		ret = venus_helper_get_bufreq(inst, HFI_BUFFER_OUTPUT, &bufreq);
		if (!ret)
		if (!ret)
			ctrl->val = HFI_BUFREQ_COUNT_MIN(&bufreq, ver);
			ctrl->val = hfi_bufreq_get_count_min(&bufreq, ver);
		break;
		break;
	default:
	default:
		return -EINVAL;
		return -EINVAL;
Loading