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

Commit b1f7ce7c authored by Rajesh Yadav's avatar Rajesh Yadav
Browse files

msm: mdss: Optimize Gamut Mapping programming sequence



Gamut mapping feature has a huge size 3D LUT table, which consumes
a lot of time to program LUT. This patch optimizes the programming of
the 3D LUT to reduce about half of the register writes.

CRs-Fixed: 1095227
Change-Id: I4a9fcee6c1cd70d9c04426c394e480c11a6f4648
Signed-off-by: default avatarPing Li <pingli@codeaurora.org>
Signed-off-by: default avatarRajesh Yadav <ryadav@codeaurora.org>
parent aee3908e
Loading
Loading
Loading
Loading
+13 −5
Original line number Original line Diff line number Diff line
@@ -833,6 +833,8 @@ static int pp_gamut_set_config(char __iomem *base_addr,
	struct mdp_gamut_cfg_data *gamut_cfg_data = NULL;
	struct mdp_gamut_cfg_data *gamut_cfg_data = NULL;
	struct mdp_gamut_data_v1_7 *gamut_data = NULL;
	struct mdp_gamut_data_v1_7 *gamut_data = NULL;
	char __iomem *base_addr_scale = base_addr;
	char __iomem *base_addr_scale = base_addr;
	uint64_t gamut_val;

	if (!base_addr || !cfg_data || !pp_sts) {
	if (!base_addr || !cfg_data || !pp_sts) {
		pr_err("invalid params base_addr %pK cfg_data %pK pp_sts_type %pK\n",
		pr_err("invalid params base_addr %pK cfg_data %pK pp_sts_type %pK\n",
		      base_addr, cfg_data, pp_sts);
		      base_addr, cfg_data, pp_sts);
@@ -900,12 +902,18 @@ static int pp_gamut_set_config(char __iomem *base_addr,
		val = index_start;
		val = index_start;
		val |= GAMUT_TABLE_SELECT(i);
		val |= GAMUT_TABLE_SELECT(i);
		writel_relaxed(val, (base_addr + GAMUT_TABLE_INDEX));
		writel_relaxed(val, (base_addr + GAMUT_TABLE_INDEX));
		for (j = 0; j < gamut_data->tbl_size[i]; j++) {

			writel_relaxed(gamut_data->c1_c2_data[i][j],
		writel_relaxed(gamut_data->c1_c2_data[i][0],
				base_addr + GAMUT_TABLE_LOWER_GB);
				base_addr + GAMUT_TABLE_LOWER_GB);
			writel_relaxed(gamut_data->c0_data[i][j],
		for (j = 0; j < gamut_data->tbl_size[i] - 1; j++) {
			gamut_val = gamut_data->c1_c2_data[i][j + 1];
			gamut_val = (gamut_val << 32) |
					gamut_data->c0_data[i][j];
			writeq_relaxed(gamut_val,
					base_addr + GAMUT_TABLE_UPPER_R);
					base_addr + GAMUT_TABLE_UPPER_R);
		}
		}
		writel_relaxed(gamut_data->c0_data[i][j],
				base_addr + GAMUT_TABLE_UPPER_R);
		if ((i >= MDP_GAMUT_SCALE_OFF_TABLE_NUM) ||
		if ((i >= MDP_GAMUT_SCALE_OFF_TABLE_NUM) ||
				(!gamut_data->map_en))
				(!gamut_data->map_en))
			continue;
			continue;