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

Commit b483b072 authored by Krishnankutty Kolathappilly's avatar Krishnankutty Kolathappilly Committed by Rajakumar Govindaram
Browse files

msm: cpp: Ad ubwc specific parameters to cpp driver



Add feature mask to frame info to check the features that are enabled.
Add ubwc specific parameters and update the parameters based on feature
mask. The parameter added is metadata pointer.

Change-Id: I9f4458f0af91daf3a25fcf64c27f53ce6af5d34e
Signed-off-by: default avatarKrishnankutty Kolathappilly <kkolatha@codeaurora.org>
parent 297c22b4
Loading
Loading
Loading
Loading
+42 −1
Original line number Diff line number Diff line
@@ -876,6 +876,10 @@ static void msm_cpp_calculate_stripe_base(struct cpp_device *cpp_dev)
		cpp_dev->wr_3_pntr = 14;
		cpp_dev->rd_ref_pntr = MSM_CPP_INVALID_OFFSET;
		cpp_dev->wr_ref_pntr = MSM_CPP_INVALID_OFFSET;
		cpp_dev->wr_0_meta_data_wr_pntr = MSM_CPP_INVALID_OFFSET;
		cpp_dev->wr_1_meta_data_wr_pntr = MSM_CPP_INVALID_OFFSET;
		cpp_dev->wr_2_meta_data_wr_pntr = MSM_CPP_INVALID_OFFSET;
		cpp_dev->wr_3_meta_data_wr_pntr = MSM_CPP_INVALID_OFFSET;
	} else if ((cpp_dev->fw_version & 0xffff0000) ==
		CPP_FW_VERSION_1_4_0) {
		cpp_dev->stripe_base = STRIPE_BASE_FW_1_4_0;
@@ -888,6 +892,10 @@ static void msm_cpp_calculate_stripe_base(struct cpp_device *cpp_dev)
		cpp_dev->wr_3_pntr = 14;
		cpp_dev->rd_ref_pntr = MSM_CPP_INVALID_OFFSET;
		cpp_dev->wr_ref_pntr = MSM_CPP_INVALID_OFFSET;
		cpp_dev->wr_0_meta_data_wr_pntr = MSM_CPP_INVALID_OFFSET;
		cpp_dev->wr_1_meta_data_wr_pntr = MSM_CPP_INVALID_OFFSET;
		cpp_dev->wr_2_meta_data_wr_pntr = MSM_CPP_INVALID_OFFSET;
		cpp_dev->wr_3_meta_data_wr_pntr = MSM_CPP_INVALID_OFFSET;
	} else if ((cpp_dev->fw_version & 0xffff0000) ==
		CPP_FW_VERSION_1_6_0) {
		cpp_dev->stripe_base = STRIPE_BASE_FW_1_6_0;
@@ -900,6 +908,10 @@ static void msm_cpp_calculate_stripe_base(struct cpp_device *cpp_dev)
		cpp_dev->wr_3_pntr = 14;
		cpp_dev->rd_ref_pntr = MSM_CPP_INVALID_OFFSET;
		cpp_dev->wr_ref_pntr = MSM_CPP_INVALID_OFFSET;
		cpp_dev->wr_0_meta_data_wr_pntr = MSM_CPP_INVALID_OFFSET;
		cpp_dev->wr_1_meta_data_wr_pntr = MSM_CPP_INVALID_OFFSET;
		cpp_dev->wr_2_meta_data_wr_pntr = MSM_CPP_INVALID_OFFSET;
		cpp_dev->wr_3_meta_data_wr_pntr = MSM_CPP_INVALID_OFFSET;
	} else if ((cpp_dev->fw_version & 0xffff0000) ==
		CPP_FW_VERSION_1_8_0) {
		cpp_dev->stripe_base = STRIPE_BASE_FW_1_8_0;
@@ -912,6 +924,10 @@ static void msm_cpp_calculate_stripe_base(struct cpp_device *cpp_dev)
		cpp_dev->wr_3_pntr = 23;
		cpp_dev->rd_ref_pntr = 14;
		cpp_dev->wr_ref_pntr = 30;
		cpp_dev->wr_0_meta_data_wr_pntr = MSM_CPP_INVALID_OFFSET;
		cpp_dev->wr_1_meta_data_wr_pntr = MSM_CPP_INVALID_OFFSET;
		cpp_dev->wr_2_meta_data_wr_pntr = MSM_CPP_INVALID_OFFSET;
		cpp_dev->wr_3_meta_data_wr_pntr = MSM_CPP_INVALID_OFFSET;
	} else if ((cpp_dev->fw_version & 0xffff0000) ==
		CPP_FW_VERSION_1_10_0) {
		cpp_dev->stripe_base = STRIPE_BASE_FW_1_10_0;
@@ -924,6 +940,10 @@ static void msm_cpp_calculate_stripe_base(struct cpp_device *cpp_dev)
		cpp_dev->wr_3_pntr = 26;
		cpp_dev->rd_ref_pntr = 17;
		cpp_dev->wr_ref_pntr = 36;
		cpp_dev->wr_0_meta_data_wr_pntr = 42;
		cpp_dev->wr_1_meta_data_wr_pntr = 43;
		cpp_dev->wr_2_meta_data_wr_pntr = 44;
		cpp_dev->wr_3_meta_data_wr_pntr = 45;
	}
	return;
}
@@ -1717,8 +1737,10 @@ static int msm_cpp_cfg_frame(struct cpp_device *cpp_dev,
	int32_t i = 0;
	int32_t stripe_base = 0;
	uint32_t rd_pntr, wr_0_pntr, wr_1_pntr, wr_2_pntr, wr_3_pntr;
	uint32_t wr_0_meta_data_wr_pntr, wr_1_meta_data_wr_pntr,
		wr_2_meta_data_wr_pntr, wr_3_meta_data_wr_pntr;
	uint32_t rd_ref_pntr, wr_ref_pntr, stripe_info_offset, stripe_size;
	uint8_t tnr_enabled;
	uint8_t tnr_enabled, ubwc_enabled;

	if (!new_frame) {
		pr_err("%s: Frame is Null\n", __func__);
@@ -1836,8 +1858,14 @@ static int msm_cpp_cfg_frame(struct cpp_device *cpp_dev,
	wr_3_pntr = cpp_dev->wr_3_pntr;
	rd_ref_pntr = cpp_dev->rd_ref_pntr;
	wr_ref_pntr = cpp_dev->wr_ref_pntr;
	wr_0_meta_data_wr_pntr = cpp_dev->wr_0_meta_data_wr_pntr;
	wr_1_meta_data_wr_pntr = cpp_dev->wr_1_meta_data_wr_pntr;
	wr_2_meta_data_wr_pntr = cpp_dev->wr_2_meta_data_wr_pntr;
	wr_3_meta_data_wr_pntr = cpp_dev->wr_3_meta_data_wr_pntr;

	tnr_enabled = msm_cpp_is_tnr_enabled(cpp_dev, cpp_frame_msg);
	pr_debug("%s: feature_mask 0x%x\n", __func__, new_frame->feature_mask);
	ubwc_enabled = ((new_frame->feature_mask & 0x20) >> 5);
	if (tnr_enabled) {
		tnr_scratch_buffer0 = msm_cpp_fetch_buffer_info(cpp_dev,
			&new_frame->tnr_scratch_buffer_info[0],
@@ -1897,6 +1925,17 @@ static int msm_cpp_cfg_frame(struct cpp_device *cpp_dev,
				i * stripe_size] +=
				(uint32_t)tnr_scratch_buffer1;
		}
		if (ubwc_enabled) {
			cpp_frame_msg[stripe_base + wr_0_meta_data_wr_pntr +
				i * stripe_size] += (uint32_t) out_phyaddr0;
			cpp_frame_msg[stripe_base + wr_1_meta_data_wr_pntr +
				i * stripe_size] += (uint32_t) out_phyaddr1;
			cpp_frame_msg[stripe_base + wr_2_meta_data_wr_pntr +
				i * stripe_size] += (uint32_t) out_phyaddr0;
			cpp_frame_msg[stripe_base + wr_3_meta_data_wr_pntr +
				i * stripe_size] += (uint32_t) out_phyaddr1;

		}
	}

	if (tnr_enabled)
@@ -2622,6 +2661,7 @@ static struct msm_cpp_frame_info_t *get_64bit_cpp_frame_from_compat(
	new_frame->duplicate_output = new_frame32->duplicate_output;
	new_frame->we_disable = new_frame32->we_disable;
	new_frame->duplicate_identity = new_frame32->duplicate_identity;
	new_frame->feature_mask = new_frame32->feature_mask;
	new_frame->reserved = new_frame32->reserved;
	new_frame->partial_frame_indicator =
		new_frame32->partial_frame_indicator;
@@ -2703,6 +2743,7 @@ static void get_compat_frame_from_64bit(struct msm_cpp_frame_info_t *frame,
	k32_frame->duplicate_output = frame->duplicate_output;
	k32_frame->we_disable = frame->we_disable;
	k32_frame->duplicate_identity = frame->duplicate_identity;
	k32_frame->feature_mask = frame->feature_mask;
	k32_frame->reserved = frame->reserved;
	k32_frame->cookie = ptr_to_compat(frame->cookie);
	k32_frame->partial_frame_indicator = frame->partial_frame_indicator;
+4 −0
Original line number Diff line number Diff line
@@ -238,6 +238,10 @@ struct cpp_device {
	uint32_t wr_3_pntr;
	uint32_t rd_ref_pntr;
	uint32_t wr_ref_pntr;
	uint32_t wr_0_meta_data_wr_pntr;
	uint32_t wr_1_meta_data_wr_pntr;
	uint32_t wr_2_meta_data_wr_pntr;
	uint32_t wr_3_meta_data_wr_pntr;
	uint32_t stripe_base;
	uint32_t stripe_size;
	uint32_t stripe_info_offset;
+2 −0
Original line number Diff line number Diff line
@@ -194,6 +194,7 @@ struct msm_cpp_frame_info_t {
	int32_t *status;
	int32_t duplicate_output;
	uint32_t duplicate_identity;
	uint32_t feature_mask;
	uint8_t we_disable;
	struct msm_cpp_buffer_info_t input_buffer_info;
	struct msm_cpp_buffer_info_t output_buffer_info[2];
@@ -387,6 +388,7 @@ struct msm_cpp_frame_info32_t {
	compat_int_t status;
	int32_t duplicate_output;
	uint32_t duplicate_identity;
	uint32_t feature_mask;
	uint8_t we_disable;
	struct msm_cpp_buffer_info_t input_buffer_info;
	struct msm_cpp_buffer_info_t output_buffer_info[2];